안녕하세요!

FE 개발자 유진주입니다.

CS/네트워크

[컴퓨터네트워크] Chapter3.7 TCP 혼잡 제어

ypearl 2023. 12. 14. 03:08

Chapter3.7 TCP 혼잡 제어

  • TCP  혼잡 제어의 개념
  • TCP 혼잡 제어 적용 기법
    - 슬로우 스타트(Slow Start)
    - 혼잡 회피(Congestion Avoidance)
    - 빠른 복구(Fast Recovery)
  • TCP Tahoe 버전 혼잡 제어
  • TCP Reno 버전 혼잡 제어

 

 

혼잡 제어(Congestion Control) 개념

- 네트워크 혼잡(Network Congestion)

  • 트래픽 증가로 인해 라우터/스위치 버퍼의 큐잉 지연시간 증가오버플로우 발생

 

 

- TCP의 네트워크 혼잡 인식

  • 심각한 혼잡: Timeout 발생
  • 경미한 혼잡: 중복 ACK 발생(3 duplicate ACKs)

 

- TCP의 혼잡 제어 원리

  • 세그먼트 전송률(transmission rate) 축소 조정
    (네트워크로 유입되는 트래픽 감축)

 

 

- 흐름제어를 위한 TCP 전송률 제어

  • 마지막송신바이트번호 - 마지막수신확인바이트번호 ≤ 수신윈도우
    (LastByteSent - LastByteAcked ≤ rwnd)

 

- 혼잡제어를 위한 TCP 전송률 제어

  • 마지막송신바이트번호 - 마지막수신확인바이트번호 ≤ min(수신윈도우, 혼잡윈도우)
    (LastByteSent - LastByteAcked ≤ min(rwnd, cwnd))

 

 

TCP 혼잡 제어 기법

- 슬로우 스타트(Slow Start)

  • 연결 시작 또는 혼잡 발생시에 혼잡윈도우(cwnd)를 최소값(예, 1MSS)부터 전송률을 낮게(천천히) 시작
  • ACK가 수신될 때마다 혼잡윈도우를 1씩 증가 (1MSS만큼)
    (ACK 수신 → cwnd = cwnd +1)
  • RTT마다 혼잡윈도우를 2배씩 증가(지수적 증가, exponential increase) 
혼잡윈도우 변화

*스타트는 슬로우지만, 증가 속도는 2의 지수배이기 때문에, 상당히 빠른 속도로 증가한다.

 

 

- 혼잡 회피(Congestion Avoidance)

  • 슬로우 스타트 구간에서 혼잡 윈도우는 지수적(exponential)으로 증가
  • 혼잡 윈도우가 임계치(ssthresh)에 도달하거나 넘어가면
    선형적(linear)으로 증가하도록 증가 속도를 조정하는 알고리즘
  • RTT마다 혼잡윈도우를 1씩 증가(선형적 증가, linear increase) (1MSS)
  • ACK가 수신될 때마다 혼잡윈도우를 (1/cnwd)씩 증가
    (ACK 수신 → cwnd = cwnd + (1/cnwd))

 

 

- 빠른 복구(Fast Recovery)

  • 3개의 중복 ACK에 의한 빠른 재전송 시에 적용: 경미한 혼잡 상황
  • 정상 ACK가 수신되어 오류 복구가 완료되면 슬로우 스타트 구간을 건너뛰고 혼잡 회피 단계로 진입

[알고리즘]

1) 임계치를 현재 혼잡 윈도우의 1/2로 설정 (ssthresh = cnwd/2)

2) 손실된 세그먼트 재전송

3) 혼잡 윈도우를 임계치 +3으로 설정 (cnwd = ssthresh + 3)

4) 여전히 중복 ACK를 수신하면 cwnd = cwnd + 1, 새로운 세그먼트 추가 전송 가능

5) 정상 ACK를 수신하면 cwnd = ssthresh, 혼잡 회피 단계로 진입

 

 

[빠른복구 예제1]   // 혼잡윈도우 6 가정

중복 ACK 3번 발생 시점(ACK5) : 빠른 재전송

- 임계치: 6/2 = 3

- 혼잡 윈도우: 3 + 3 = 6

여전히 중복 윈도우 2개...

- 혼잡 윈도우: 6 + 2 = 8

[빠른복구 예제2]

 

 

TCP 혼잡 제어 알고리즘 : TCP Tahoe 버전

- 혼잡인식 (둘 다 똑같게 처리)

  • Timeout (심각)
  • 3개 중복 ACK  (경미)

 

- 알고리즘

  1. 임계치를 현재 혼잡 윈도우의 1/2로 설정 (ssthresh = cnwd / 2)
  2. 슬로우 스타트 개시
  3. 혼잡 윈도우가 임계치에 도달하거나 넘어가면 혼잡 회피 수행

 

- TCP Tahoe 혼잡 제어 예제

 

 

TCP 혼잡 제어 알고리즘 : TCP Reno 버전

- 혼잡인식 (둘이 다르게 처리)

  • Timeout  (심각)
  • 3개 중복 ACK  (경미)

 

- 알고리즘

  1. Timeout 발생시 Taho 버전과 동일하게 동작
  2. 3개 중복 ACK 발생시 빠른 회복(Fast Recovery) 알고리즘 적용

 

- TCP Reno 버전 예제

좌: 빠른 복구 생략 / 우: 빠른 복구 포함
보다 정확한 표현

 

 

TCP 혼잡 제어 : AIMD

- AIMD (Additive Increase Multiplicative Decrease)

: 혼잡 제어를 단순하게 표현한 것 (톱니바퀴 형태)