IT 프로그래밍/컴퓨터네트워크

[컴퓨터네트워크] Congestion control

기술1 2024. 12. 4. 15:36
반응형

네트워크 혼잡

  • Delay 길어짐
  • loss 발생

 

2a : ideal case

비현실적이지만 전송측이 전송을 할 때 항상 라우터의 버퍼가 비어있는 것을 확인했을 때만 전송한다는 것을 가정합니다. 

 

라우터의 버퍼가 비어있는 경우에만 패킷 송신

 

재전송이 발생하지 않기에 

이렇게 되면 이 경우 (goodput) 라고 합니다.

 

 
2b : known loss

패킷이 버퍼가 꽉 차있을 때만 드랍이 되는 경우입니다. 

 

Sender는 패킷 loss가 발생 했을 때만 재전송을 하게 됩니다. Delay가 길게 발생해서 timeout 경우는 제외하고 라우터의 버퍼가 꽉 차있어서 drop 되어있을 때만 재전송이 이루어지는 경우를 scenario 2b라고 볼 수 있습니다. 

 

 

 

2c : duplicates (un-needed duplicates)

현실적인 시나리오입니다.

 

lost가 발생했을 때 재전송, time  out가 발생했을 때 재전송이 발생합니다.  lost와 time out 둘 다 발생한 것입니다. 

 

불필요한 재전송이 많아지는 현상이 나타나게 됩니다. 

 

scenario3 - multi-hop path 고려

4개의 라우터가 있는 상황에서 다중경로, 유한버퍼를 가지고 있을 때 2c의 케이스처럼 모든 재전송 케이스를 다 고려합니다. 여기서 host a에서 host c로의 커넥션이 있다고 가정합니다.

 

end-end congestion control

종단의 두 시스템이 자신들이 판단했을 때 네트워크의 혼잡이 발생했을 때 적절하게 속도조절을 하는 것입니다. 이것이 end-end congestion입니다. 

 

명시적인 피드백은 없고 패킷 손실이나 딜레이가 길게 발생하는 현상이 있다면 혼잡이 발생했다고 판단하면서 혼잡이 발생한 것을 알고 그것에 따라서 적절하게 속도 조절을 하는 것입니다. 

 

이 기법은 TCP에서 end-end를 적용하고 있습니다. 

 

Network-assisted congestion control

직접적인 피드백을 호스트에게 전송하면서 혼잡이 발생했다는 걸 알려줍니다. 그래서 end system은 network 내부에 있는 라우터로부터 신호를 받으면 적절하게 속도를 줄여주면 됩니다.

 

직접적인 피드백은 혼잡의 수준이나 명시적인 전송률을 세팅해주는 경우에 따라서 속도 조절을 하는 것입니다. 

 

TCP ECN, ATM, DECbit protocol에서 사용하는 기법입니다.

 

TCP 에서의 혼잡 제어

end-end 매커니즘을 씁니다. end system들이 스스로 판단해서 속도 조절을 하게 됩니다. 기본적으로 sender의 전송률은 다음과 같이 제한이 됩니다. 

혼잡윈도우보다 작거나 같도록 sender의 전송률을 조절합니다. 

 

크기는 last byte sent에서 last by ack를 빼주면 되고 그것을 혼잡 윈도우보다 작거나 같도록 설정함으로써 조절을 해주는 것입니다. 대략적으로 보면 

이렇게 됩니다.

 

속도 조절을 하기 위해서는 네트워크의 혼잡 정도에 따라서 cwnd를 조절해줍니다. 

 

 

혼잡 제어 알고리즘은 혼잡을 감지하는 TCP 송신자 전송률 조절 알고리즘을 말하며 TCP는 3가지 기법을 혼합해서 사용합니다. 

 

AIMD

전송률을 선형적으로 증가시킵니다. Loss가 발생하기 전까지는 선형적으로 증가시킵니다.

  • additive increase :  1RTT마다 1MSS 증가시켜 나갑니다.
  • multiplicative decrease : 혼잡이 발생했으면 윈도우사이즈를 절반으로 줄이는 것입니다.

 

초기 윈도우 사이즈에서 선형적으로 증가하다가 loss가 발생하면 줄어들고 선형적으로 증가하다가 loss가 발생하면 절반으로 줄어드는 과정으로 동작하는 것이 AIMD 기법입니다.  톱니바퀴 모양으로 윈도우사이즈가 변합니다.

 

TCP slow start

연결이 처음 시작 되었을 때 cwnd = 1MSS , initial rate = MSS/RTT  입니다.

 

초기전송률은 20개의 kbps입니다. 초기 전송률이 너무 낮기에빠르게 사용하지 못한다는 단점이 있어서 초기에는 빠르게 증가시킵니다.

 

Slow start는 커넥션이 처음 시작 되었을 때 첫 번째 loss가 발생하기 전까지는 지수적으로 증가시킵니다.

  • double cwnd every RTT

Loss 발생시, cwnd을 절반으로 줄이고 선형적으로 증가(혼잡 회피, congestion avoidance)

 

일반적으로 선형증가되는 과정을 혼잡회피 단계라고 얘기를 합니다. 이것이 slow start 기법입니다. 

 

 

 

정리

1. Slow Start (느린 시작)

  • 초기에는 **Congestion Window (cwnd)**가 작은 값에서 시작하여 네트워크 상태를 탐색합니다.
  • 조건: cwnd < Threshold (ssthresh)
  • 동작:
    • 각 ACK 수신 시, cwnd가 지수적으로 증가 (1 RTT당 cwnd 두 배로 증가).

2. Congestion Avoidance (혼잡 회피)

  • 네트워크 혼잡을 방지하기 위해 cwnd를 점진적으로 증가시킵니다.
  • 조건: cwnd >= Threshold (ssthresh)
  • 동작:
    • 각 ACK 수신 시, cwnd가 선형적으로 증가 (1 RTT당 약 1MSS씩 증가).

3. Triple Duplicate ACK (3중 중복 ACK)

  • 데이터 손실을 암시하지만 네트워크가 아직 완전히 혼잡하지는 않은 상태.
  • 발생 시 동작:
    1. Threshold (ssthresh) = cwnd / 2로 갱신
    2. cwnd = Threshold (ssthresh)로 설정 (Fast Recovery 단계로 진입)

4. Timeout

  • 데이터 패킷 손실이 심각하여 네트워크 재설정 필요.
  • 발생 시 동작:
    1. Threshold (ssthresh) = cwnd / 2로 갱신
    2. cwnd = 1 MSS로 설정 (Slow Start로 복귀)
반응형