본문 바로가기

TIL

TCP 송/수신 원리

반응형

송신측 (Server) 


서버(web) 소켓 = file
Process (RWX : read/write/excute) -> 소켓의 경우 Receive, Send(I/O)
하드디스크에 들어 있는 파일을 -> Driver -> File System으로 보낸다.
실제 파일은 1.4 MB 이더라도 서버 프로세스 메모리 사이즈를 개발자가 설정해 줄 수 있다. 
예를들어 64KB로 설정을 했다면 64KB씩 끊어 읽어온다.
[ TCP ] - 분해 되어 Buffer로 Copy 해온다 (= Buffered I/O) 분해된 이것을 Segment라고 한다.
[ IP ] - Segment를 또 쪼개어 나누어 담는데 Packet이라고 한다. 
[ Driver ]
[ NIC ] - L2 , Frame 으로 전송 되면서 몇 번 변경 되곤 한다. 

* 수신측의 ACK 확인
* 송신측 = 수신측의 Window Size > Message Size ? Send : Wait
* Wait을 하여 속도 지연 발생 신호를 받고 다음 Segment(Packet)을 보낸다.

(데이터 방향 : 위쪽에서 아래로 진행)

 


 

 

 

수신측 (Client) - Process 


[ User Mode ] Socket(File) - File I/O Buffer 
[ Kernel Mode ] TCP - TCP Buffer (Segment)
- TCP 는 받은 Segment 에 대한 ACK를 보내며 다음 Segment를 송신해달라는 신호를 보낸다. 
- 함께 Window Size를 보내는데 이것을 Include Window Size 라고 한다.

[ Kernel Mode ] IP - (Packet)
[ S/W ] Driver - Frame을 분해
[ H/W ] NIC - Frame 분해

(데이터 방향 : 아래에서 위쪽으로 진행)

 

 

- 결론  : TCP Buffer란 Window Size(송신 된 Segment를 받아서 조합 할 수 있는 맥스 사이즈) 이며, 다 차면 여유공간이 없어져서 송신측의 Wait을 유발한다. 따라서 Socket 보내는 쪽(Server)가 느려서 속도 지연이 발생하는 것이 아닐 수 있다. Receive 속도가 Network 수신 속도보다 커야 하며 TCP 버퍼를 늘리는 것으로 문제를 해결 할 수 있다.

 

반응형