본문 바로가기

개인공부/네트워크

TCP/IP 의 송수신 원리 한눈에

공부를 하다가 TCP/IP 송수신 원리를 너무나 잘 설명해준 자료가 있어서 작성한다. 

 

 

서버에서 벌어지는일

서버에서 벌어지는일

 

그림을 설명하자면 HDD (2차메모리) 에 있는 파일을 클라이언트한테 보낸다고 가정할때, 

파일의 크기가 1.4mb 버퍼의 크기가 64 kb 라고가정하는 그림이다. 

그림에서 처럼 HDD  드라이버 -> 커널 파일시스템 -> 유저스페이스 버퍼 흐름으로 데이터를 보내고 

TCP 에서 유저스페이스 버퍼에 있는 자료를 TCP 버퍼로 복붙해온다 (Buffered I/O) 그리고 거기서 분해가 일어난다.

버퍼에서 하나하나 조각낸 것을 세그먼트라고 부르는데 이 일은 IP 에서 일어난다. 이후 NIC 드라이버를 만나

패킷안에 세그먼트 한두조각을 넣고 프레임이라는 택배기사가 클라이언트에게 가져간다.

 

(물론 이 프레임이란것은 생겼다 사라지고 생겼다 사라지고 엔드포인트를 만날떄마다 프레임이 교체가일어남)

 

 

 

이런식으로

 

 

 

 

클라이언트에서 벌어지는일 

 

 

프레임이 클라이언트에 어찌저찌 도착했다. 

그럼 클라이언트의 NIC 에 도착하고 Driver 를 따라 IP 에선 프레임이 사라진다. 이후 패킷이나오고

TCP 에선 패킷을 열어 세그먼트를 확인한다. 그렇게 TCP 버퍼에 하나하나 쌓이게 되는데

TCP 버퍼에 약 두개정도의 세그먼트가 쌓이면 이제 서버에게 "잘받았다" 라고 ACK #3을 보낸다 <- 이게 그 ACK 다.

 

 

여기서 중요한점! 서버는 패킷을 두개정도 보내고 기다린다. (WAIT)  ACK #3 을 받을때 까지.

이것때문에 속도지연이 일어나고 UDP 보다 느린것이다.

 

여기서 또 하나마지막으로 중요한점.

(계속 중요함...)

 

클라이언트쪽 TCP 버퍼크기를 Window Size 를  ACK#3 에 넣어서 보낸다.

그럼 서버측에서 ACK#3 을 받고 확인할텐데, 다음에 보낼 세그먼트의 크기가 Window size 에 남은 크기보다 크면?
Wait 이 걸린다. <- 이것때문에 서버의 버퍼링, 즉 늦어지는 현상이 벌어질 수 있다.

 

한마디로 클라이언트측 어플리케이션에선 OS 가 전달해준 데이터를 TCP 버퍼에서 유저스페이스 버퍼로 데이터를 계속해서 퍼올리는 일을 해야하는데, 클라이언트측 어플리케이션이 느리다면 서버가 아무리 빨라도 지연이 걸릴수 밖에없다는 뜻이다. 

 

그래서 서버 지연현상은 항상 서버측 문제만은 아닐수도 있다!

'개인공부 > 네트워크' 카테고리의 다른 글

XDR  (1) 2025.04.30
바이너리 전송 방식 vs 텍스트 전송 방식  (0) 2025.04.30
epoll 의 EAGAIN  (0) 2025.01.23
epoll 의 Edge-Triggered 방식  (0) 2025.01.23
epoll vs 멀티스레딩  (0) 2025.01.23