네트워크 | 혼잡 제어

Faithful Dev·2025년 1월 29일

컴퓨터 공학

목록 보기
70/81

네트워크에서 데이터 패킷이 효율적으로 전송되도록 하기 위해 TCP(Transmission Control Protocol)에는 다양한 혼잡 제어(Congestion Control) 메커니즘이 존재한다.


Congestion Window (CWND, 혼잡 윈도우)

TCP는 수신 측에서 설정하는 수신 윈도우(Receive Window, RWND)와 네트워크 혼잡 상황을 고려한 혼잡 윈도우(CWND)를 기준으로 전송 속도를 조절한다.

  • CWND는 송신 측에서 결정하는 값으로, 네트워크의 혼잡 상태에 따라 동적으로 변경된다.
  • 송신할 수 있는 데이터 양은 min(CWND, RWND)에 의해 결정된다.
  • CWND는 네트워크 혼잡을 피하면서 최대한 효율적으로 대역폭을 활용하기 위해 Slow Start, AIMD 등의 알고리즘을 통해 조정된다.

Slow Start (느린 시작)

TCP 연결이 처음 설정될 때, 네트워크 상태를 모르는 상태이므로 작은 CWND 값에서 시작하여 점진적으로 증가시키는 과정이다.

  • CWND는 매 RTT(Round-Trip Time)마다 지수적으로 증가한다.
  • 초기에는 CWND가 1 MSS(최대 세그먼트 크기)로 시작하며, 매번 ACK를 받을 때마다 CWND를 2배씩 증가시킨다.
    • 예: 1, 2, 4, 8, 16, ... (지수 증가)
  • 이렇게 빠르게 CWND를 증가시키다가 네트워크 혼잡이 감지되면 Slow Start를 종료하고 Congestion Avoidance 단계로 진입한다.
  • 혼잡이 감지되는 순간(패킷 손실 발생 시) CWND를 Slow Start Threshold(ssthresh)로 줄이고 AIMD 기반의 Congestion Avoidance로 전환한다.

Congestion Avoidance (혼잡 회피)

Slow Start 단계에서 빠르게 CWND를 증가시키다가 어느 정도 네트워크가 혼잡해질 것으로 예상되는 시점부터는 점진적인 증가 방식으로 전환된다.

  • CWND가 ssthresh에 도달하면, 증가 속도를 완만하게 조절한다.
  • 증가 방식: 선형 증가
    • CWND는 매 RTT마다 CWND = CWND + (1 MSS)로 증가
    • 즉, 1, 2, 3, 4, 5, ... (선형 증가)
  • 이 단계에서 패킷 손실이 감지되면 AIMD 방식으로 CWND를 조정한다.

AIMD (Additive Increase Multiplicative Decrease)

혼잡을 감지하면 CWND를 감소시키고, 그 이후 다시 증가시키는 혼잡 제어 방식이다.

  • Additive Increase (AI, 가산적 증가):
    • 네트워크가 안정적일 경우 CWND를 선형적으로 증가시킨다.
    • 즉, 매 RTT마다 CWND = CWND + (1 MSS).
  • Multiplicative Decrease (MD, 승수적 감소):
    • 패킷 손실이 발생하면 CWND를 절반으로 감소시킨다.
    • 즉, CWND = CWND / 2.
  • 이 방식을 통해 네트워크가 혼잡하면 CWND를 급격히 줄여 혼잡을 완화하고, 안정적이면 서서히 증가시켜 최적의 전송 속도를 찾는다.

정리

TCP의 혼잡 제어는 아래 단계로 진행된다.
1. Slow Start
- CWND를 지수적으로 증가시킴.
- ssthresh에 도달하거나 패킷 손실이 발생하면 종료.
2. Congestion Avoidance
- CWND를 선형적으로 증가.
- 패킷 손실이 발생하면 AIMD 방식 적용.
3. AIMD 적용
- 패킷 손실 감지 시, CWND를 절반으로 감소(MD).
- 이후 선형적으로 증가(AI).

이를 통해 TCP는 네트워크 상황에 맞게 전송 속도를 동적으로 조절하여 혼잡을 피하면서도 최대한 대역폭을 활용할 수 있도록 설계되었다.

profile
Turning Vision into Reality.

0개의 댓글