혼잡 제어 Congestion Control

혼잡 제어는 네트워크에서 데이터가 너무 몰려 속도가 느려지거나 손실되는 것을 막기 위한 기술이다. 마치 고속도로에 차가 몰려 교통체증이 생기는 것처럼, 네트워크에서도 데이터가 한꺼번에 몰리면 문제가 발생할 수 있다. 이를 방지하기 위해 혼잡 제어는 데이터 전송 속도를 조절하여 네트워크가 원활하게 흐르도록 돕는 역할을 한다.

1988년 연구에 따르면, 단순히 수신자가 송신 속도를 조절하는 방식은 오히려 문제를 더 키울 수 있다고 한다. 예를 들어, 라우터에서 데이터가 잠깐 지연될 경우, 송신자가 응답을 받지 못한 것으로 착각하고 동일한 데이터를 다시 보내면서 혼잡이 더 심해질 수 있다. 따라서 혼잡 제어에서는 송신자가 네트워크 상황을 파악하고 스스로 전송량을 조절해야 한다는 결론이 도출되었다.

 

 

flow control vs congestion control
 
 

혼잡윈도우: CWND 

TCP 연결에서 보낼 수 있는 데이터의 양을 제한하는 변수

 

TCP 연결에서 송신 측이 보낼 수 있는 데이터의 양을 제한하는 변수입니다. 이는 TCP가 네트워크의 혼잡 상태를 감지하고 송신 속도를 조절하는 중요한 요소로, 각 TCP 연결마다 개별적으로 설정됩니다. 예를 들어, 송신 측과 수신 측이 각각 다른 IP와 포트로 연결되어 있다면, 각 연결마다 고유한 cwnd가 관리됩니다.

cwnd는 초기에는 작게 시작해 점차 커지다가 네트워크가 혼잡해지면 크기를 줄입니다. 이런 과정을 통해 TCP는 도로 상황에 맞게 차의 속도를 조절하는 것처럼, 최적의 데이터 전송 속도를 유지하며 혼잡을 피합니다.

 

Slow Start

cwnd값을 1MSS로 시작하여, 매 RTT마다 cwnd값을 두배로 증가시키는 것

 

TCP 연결이 처음 시작될 때, 송신 윈도우 크기(cwnd, Congestion Window)는 보통 1MSS로 설정됩니다. 여기서 MSS(Maximum Segment Size)는 네트워크를 통해 한 번에 보낼 수 있는 데이터 패킷의 최대 크기를 의미합니다. 쉽게 말해, TCP는 네트워크 혼잡을 방지하기 위해 처음에는 아주 신중하게, 작은 양의 데이터로 시작합니다.

 

RTT(Round-Trip Time)는 송신된 데이터가 목적지에 도착하고, 그에 대한 응답(ACK)이 송신자에게 돌아오는 데 걸리는 시간을 말합니다. 네트워크의 혼잡 상태를 확인하고 cwnd를 조절하기 위해 RTT를 기준으로 제어합니다. 송신된 모든 데이터 패킷에 대한 응답이 오면 해당 RTT측정이 완료된 것으로 간주됩니다.

 

Slow Start 알고리즘에서는 송신한 데이터에 대한 응답(ACK)를 받을 때마다 cwnd의 크기를 두 배로 증가시킵니다. 예를 들어, 초기 cwnd가 1MSS였다면, 첫 번째 RTT 이후에는 2MSS, 그 다음에는 4MSS, 8MSS, 16MSS 식으로 증가하게 됩니다. 

 

 

 

AIMD (Additive Increse/ Multicative Decrease)

AIMD는 TCP의 혼잡 제어 방식 중 하나로, 점진적으로 cwnd 값을 증가시키다가, 네트워크 혼잡이 감지되면 cwnd 값을 반으로 줄이는 방식을 사용합니다.