How TCP Works
TCP의 주요 기능
Sequence Number & ACK Number(송신자 관점)

- 송신자와 수신자 입장에서 각각 윈도우를 어떻게 조절하는지 볼 수 있음

Retransmission scenarioes
- a: ACK를 못받음; timeout 처리; 재전송
- b: RTT 잘못 설정; premature timeout 처리 (RTT<timeout이어야함)

Stop-and-wait operation
- RTT가 크면 링크 이용률이 낮아짐
- 수신자가 순서가 맞지 않는 세그먼트를 처리하는 방식(TCP 스펙에 규정 X)
- 폐기 후 재전송 유도
- 순서에 맞지 않은 패킷을 임시 버퍼에 저장 후, 나중에 순서가 맞으면 처리
TCP Window (송신자 관점)
- Pipelining 기법: 여러 패킷을 동시에 연달아 보내 네트워크 자원을 효율적으로 사용.
- **Throughput(전송률)**을 높이는 데 도움.
Flow Control (수신자 관점)
- 수신자의 처리 속도를 고려하여 송신자가 너무 빠르게 보내지 않도록 조절.
- 수신 버퍼가 가득 차는 것을 막아 데이터 손실을 방지.
- 버퍼의 기본 크기는 4KB(4096바이트) 정도지만, 운영체제나 소켓 옵션을 통해 크기를 조정할 수 있음
- 일부 OS에서는 자동 조정 기능이 있어 트래픽 양에 따라 버퍼 크기를 동적으로 변화
- Sliding Window 기법을 통해 제어
- 수신 윈도우는 현재 수신자가 얼마나 더 데이터를 받을 수 있는지를 나타내는 값
- Window size (N):
- 송신자가 한 번에 보낼 수 있는 최대 데이터량.
- rwnd (receiver window)와 congestion window(cwnd) 둘 중 작은 값으로 결정된다.
- Window moves to right (슬라이딩):
- 데이터가 성공적으로 ACK되면, 송신 윈도우가 오른쪽으로 슬라이드(move)한다.
- 슬라이드하면 새로운 데이터 송신이 가능해진다.

