TCP는 데이터 순서 보장을 위해 한 번에 하나의 Packet만 수신할까?
정답은 X입니다.
많은 데이터를 매번 ACK를 받고 보내기엔 너무 많은 Cost가 필요합니다.
위와 같은 문제를 해결하기 위해 window라는 논리적인 패킷 묶음을 사용합니다.
최소한의 ACK로 데이터 순서를 보장하며 전송을 할 수 있습니다.
참조문서 내용일부)
Receive socket buffer 크기가 결국은 TCP의 receive window이다. 어느 지점까지는 receive window가 크면 TCP throughput이 증가한다. 예전에는 socket buffer 크기를 애플리케이션이나 운영체제 설정에서 조절하고는 했다. 최신 네트워크 스택은 receive socket buffer 크기, 즉 receive window를 자동으로 조절하는 기능을 가지고 있다.
이후 애플리케이션이 read 시스템 콜을 호출하면 커널 영역으로 전환되고, socket buffer에 있는 데이터를 유저 공간의 메모리로 복사해 간다. 복사한 데이터는 socket buffer에서 제거한다. 그리고 TCP를 호출한다. TCP는 socket buffer에 새로운 공간이 생겼기 때문에 receive window를 증가시킨다. 그리고 프로토콜 상태에 따라 패킷을 전송한다. 패킷 전송이 없으면 시스템 콜이 종료된다.
참조)
https://d2.naver.com/helloworld/47667