TCP 윈도 사이즈
TCP Window Size
TCP 윈도 사이즈는 TCP(Transmission Control Protocol)에서 송신 측이 수신 측의 확인 응답(ACK) 없이도 전송할 수 있는 데이터의 최대 크기를 나타낸다. 윈도 사이즈는 네트워크의 속도와 수신 측의 버퍼 용량에 맞춰 조절되며, 데이터 전송의 효율성과 네트워크 혼잡을 관리하는 데 중요한 역할을 한다. 수신 측은 자신의 윈도 사이즈를 송신 측에 전달하여, 송신 측이 과도한 양의 데이터를 보내는 것을 방지한다.
주요 역할
흐름 제어
- TCP 윈도 사이즈는 흐름 제어(flow control) 메커니즘의 핵심 요소이다. 수신 측은 자신의 윈도 사이즈를 조절하여 송신 측이 수신 속도에 맞춰 데이터를 전송하도록 한다. 윈도 사이즈가 작을수록 전송되는 데이터 양이 줄어들고, 수신 측의 데이터 처리 속도가 낮을 때 이를 통해 데이터 손실을 방지할 수 있다.
네트워크 혼잡 제어
- 윈도 사이즈는 네트워크 혼잡을 방지하는 데도 중요한 역할을 한다. 송신 측은 수신 측이 설정한 윈도 사이즈에 맞춰 데이터를 전송하므로, 네트워크에 과부하가 걸리는 것을 방지하고 네트워크 자원을 효율적으로 사용한다.
윈도 사이즈 공식
송신 측에서 동시에 전송할 수 있는 데이터 양은 수신 측의 윈도 사이즈와 네트워크의 대역폭 및 왕복 시간(RTT, Round Trip Time)에 의해 결정된다. 이를 Bandwidth-Delay Product(BDP)라고 하며, 다음과 같은 공식으로 나타낼 수 있다.
- 최대 전송 가능 데이터 양 = 대역폭 × RTT
여기서 대역폭은 초당 전송할 수 있는 데이터 양(예: Mbps)이고, RTT는 패킷이 왕복하는 데 걸리는 시간이다.
BDP는 송신 측에서 최적의 윈도 사이즈를 설정하는 기준이 된다. 만약 윈도 사이즈가 BDP보다 작으면 송신 측은 수신 측의 ACK를 기다리느라 전송이 지연될 수 있으며, BDP보다 크면 네트워크 자원이 낭비될 수 있다.
예시
대역폭이 10 Mbps이고 RTT가 50ms인 경우:
- 윈도 사이즈 = 10 Mbps × 0.05 s = 0.5 Mb = 500 KB
이 경우, 최적의 전송 성능을 위해 송신 측은 약 500KB 크기의 윈도 사이즈를 설정하는 것이 좋다.
윈도 사이즈 조정
TCP는 데이터 전송 중에 윈도 사이즈를 동적으로 조절한다. 수신 측이 데이터를 처리할 때마다 새 윈도 사이즈를 송신 측에 전달하여, 전송할 수 있는 데이터 크기를 적절하게 조정한다. 송신 측은 수신 측이 설정한 윈도 사이즈 내에서 데이터를 전송할 수 있으며, 이를 초과하는 데이터는 ACK 응답을 받을 때까지 기다려야 한다.