본문 바로가기
유니티/서버

자손 대대로 물려주고 싶은 UDP/TCP 개념 강의

by 유니티세상 2025. 1. 16.

UDP 는 빠르고 TCP는 느리다라고 외웠던 당신..!에게 추천하는 강의

wait~

 

네트워크 통신 (TCP 수준의 데이터 통신)

https://www.youtube.com/watch?v=K9L9YZhEjC0

 

 

 



아래는  강의 내용을 정리한 부분입니다

 

TCP연결 

서버와 클라이언트의 파일 다운로드하는 과정을 예시로 함

서버

1.

 

서버 프로그램이 작동함 (웹서버라고 가정)

 

서버의 소켓이 열려있음(soket) -> 클라이언트랑 연결

 

소켓의 본질을 파일이다

서버는 본질을 프로세스

 

operation = 명령어

 

서버-> 파일

(소켓에는 실행이라는 개념이 없다)

Rwx 명령을 함

읽고 쓴다 

읽다 -> receive

쓴다 -> send

 

2.

 

hdd 안에 파일이 있음

file이라고 하는게 a.bmp(비트맵파일)이라고 가정해보자



파일은 파일 시스템으로 관리됨

하드디스크에는 디바이스 드라이버가 존재해서 데이터를 주고 받음

 

그렇다면 서버는 어떤 구조로 만드느냐?

메모리를 할당하게 되어있음 / memory

 

3.

파일이 엄청 크다고 가정을 해보자

1.4mb

-> 메모리를 어케할까? == 개발자가 결정

 

근데 이 메모리는 과연 1.4보다 클까?

아님 보통 작음!

예를들어 64kb로 잡았다고 가정해보자

ex)64kb

 

1.4mb 데이터를 한번에 읽는게 아니라 64kb로 잘라서 읽음

그 후 메모리에 적재함

 

파일을 

read!

 




4.



소켓은 기본적으로 tcp, ip를 최상화함

 

네트워크 -> nic?

 

(계층)

서버

소켓 

tcp

ip

driver

nic




5.

 

소켓과 tcp가 맞닿은 지점에서 분해가 일어남

분해도 버퍼가 있음/메모리를 버퍼라고 개념적으로 이야기함

 

버퍼를 1번, 버퍼 2번이라고 가정

버퍼 1-> 2로 버퍼 카피가 일어남

 

tpc에서 이런 버퍼를 가지고 있음

그래서 버퍼에서 읽어와서 다른 버퍼로 넘어감

(꼭 이런 방법만 있는건 아님 근데 주로 이와 같은 방식으로 함)

-> 왜 버퍼에서 버퍼로 읽지

 

이런식의 입출력을 Buffered I/O라고 함

1.왜 이러케 할까라고 하면 할말이 많다고함

2. 이거의 크기는 얼마냐라고 하면 또 할말이 많다고함

 

6.

TCP에서 IP로 내려가면?

버퍼를 잘개 쪼갬(Segment 세그먼트라고함)

이렇게 말하면 이해하기 어려우니 

 

직소퍼즐로 설명

이 직소퍼즐이 1.4mb 파일이다 라고 가정

64kb로 끊어 읽었다 라고 하면?

 



7.

분해를 하면 어떤 일이 벌어지나

 

패킷이란 무엇이냐?

PACKET -> 택배임

 

택배박스에 1번 넣은 거임 이것이 패킷이다

이게 PC 로 감

 

택배를 아저씨한테 전달 == 배송만함

트럭을 타고 올텐데 그것을 넣고 전달하겠지?

얘는 무거운지만 관심이 있지 얘가 무슨 물건인지 관심 없음



패킷이 -> NIC(L2)로 내려올땐 FRAME 이라고 부름

트럭이 FRAME이라고 생각하고 

택배 박스가 들어감(패킷)



8.

이 트럭의 목적지는?

택배는 바로 갈까? 아니 여러번 갈아탐

택배는 트럭을 여러번 갈아탐

어떤 패킷이라는건 끝에서끝으로 가지만

FRAME으로 갈때에는 생겼다 사라졌다함

9.

이제 FRAME이 도착했다 PC에!

PC 네트워크 연결되어있다고 하면

네트워크 인터페이스가 있겠지

 

트럭(FRMAE)이 도착했겠지

 

트럭이 다름



PC에도 NIC가 있을꺼고 

얘들을 움직이는 드라이버가 있고 TCP,IP가 있을꺼임

 

프로세스 프로그래밍이 있을텐데

-> SOKET 타고 통신할꺼임





10. 

 

소켓의 본질은 파일

 

PC버퍼는 파일에 연결된 버퍼가 있음

파일의 I/0버퍼

 

TCP도 버퍼가 있음

도착하면

트럭(FRAME)에서 택배를 끄집어 냄

 

FARME 타고 가다가 박스가 뜯어짐 

-> 세그먼트가 나옴

 

IP에서는 패킷

TCP는 SEGMENT

그렇기 때문에 TCP버퍼에 붙게됨, 쭉쭉 세그먼트가 옴




11.

대략 세그먼트가 두개정도 오면

TCP가 어떤행동을 하느냐?



받은쪽이 PC면 잘 수신했다를 서버에 알려야함

그게 ACK(에크나일즈먼트)임 !

나 잘 받았어 라고 번호를 알려줌

 

3이라고함 

1,2 잘 받았으니 3 보내!라는 뜻

 

12.

1,2이 갔어 

그러면 바로 3을 안보내고

갑자기 WAIT를 함

 

ACK를 기다림 -> ACK3을 기다림

ACK3이 오면 1,2가 잘 갔구나~

그러면 3을 보냄

 

-> 기다림 때문에 속도 지연이 남

 

UDP가 빠른 이유는 기다리지 않기 때문임

그래서 UDP보다 느리다는 거임~~~!!!!!!!!!!!!!!!!!!!!!!!

 

13. 이부분 매우 종요

TCP BUFFER에 여유가 있음(1,2를 제외한)

-> 여유가 뭐냐면 WINDOW SIZE

TCP BUFFER의 크기가 WINDOW SIZE임!!

WINDOW SIZE = 수신측(보내는얘)에서 세그먼트 조립해서 넣을 수 있는 공간.( 그 윈도우가 아님)

 

WINDOW SIZE는 크기가 정해져있는데 

ACK를 보낼때 ACK 안에 INCLUDE WINDOW SIZE를 포함함

 

(인생이 바뀌는 구간 - 25:37)

잘 기다렸으면 3번 전송해야함

근데 전송 할까? 말까를 결정해야함

ACK가 왔는데 사이즈 여유공간이 없다면 안보냄!!!!!!

 

전송할때는 수신측의 WINDOW SIZE가 내가 보내려는 맥시멈 사이즈의 세그먼트보다 큰지봄

 

YES면 보냄

 

NO라면?

WAIT가 걸린다 



14. 왜 느리니 ? 서버가 느린게 아님

TCP 버퍼에 뭔가 오면 계속해서 채워짐(누가? TCP가 OS가 채움)

 

빨리 퍼 올려서 위쪽으로 보내야하는데 (SOKET)

 

프로세싱입장에서 소켓에 하는건 RW(쓰고 읽고)임

읽다 RECEIVE 

쓴다 SEND

 

이때 RECEIVE 속도를따져야함!

 

(TCP->소켓)으로 퍼올릴때 속도를 READ 속도라고 한다면

 

TCP버퍼가 계속 채워지고 있기 때문에



무조건!!

READ속도>네트워크 수신하는 속도              무조건!!!!!!

 

READ속도가 느리면 <네트워크 수신하는 속도

여기 공간이 쪼그라듬, 여유가 사라짐

 

어떤일이 생기는가?

서버가 못보냄!!!!!!

 

윈도우 사이즈를 잘 체킹하면

네트워크에서 어플리케이션의 문제를 파악할 수 있음




읽어드리는 속도가 너무 느리다~~

 

네트워크 장애X

프로그램에서 찾아야함

 

15.

소켓프로그래밍은 네트워크 데이터가 왔다면?

 

PC쪽에서 

TCP버퍼에서 FILDE I/O BUFFER로 빨리 올려봐야함

 FILDE I/O BUFFER가  READ니까 그 스피드를 올려야함

 

읽은 다음 처리해야함

 

이 속도가 지연이 나면 처리지연 문제가 생긴다~

구별할 수 있어야함