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/2로 설정 (ssthresh = cnwd / 2)
- 슬로우 스타트 개시
- 혼잡 윈도우가 임계치에 도달하거나 넘어가면 혼잡 회피 수행
- TCP Tahoe 혼잡 제어 예제
TCP 혼잡 제어 알고리즘 : TCP Reno 버전
- 혼잡인식 (둘이 다르게 처리)
- Timeout (심각)
- 3개 중복 ACK (경미)
- 알고리즘
- Timeout 발생시 Taho 버전과 동일하게 동작
- 3개 중복 ACK 발생시 빠른 회복(Fast Recovery) 알고리즘 적용
- TCP Reno 버전 예제
TCP 혼잡 제어 : AIMD
- AIMD (Additive Increase Multiplicative Decrease)
: 혼잡 제어를 단순하게 표현한 것 (톱니바퀴 형태)
'CS > 네트워크' 카테고리의 다른 글
[컴퓨터네트워크] Chapter4.2 IP 주소: 구조와 할당 (0) | 2023.12.14 |
---|---|
[컴퓨터네트워크] Chapter4.1 인터넷 프로토콜(IP) (0) | 2023.12.14 |
[컴퓨터네트워크] Chapter3.6 TCP 신뢰 전송과 흐름 제어 (0) | 2023.12.14 |
[컴퓨터네트워크] Chapter3.5 TCP 세그먼트 구조와 재전송 타이머 (0) | 2023.12.12 |
[컴퓨터네트워크] Chapter3.5 TCP 연결관리 (0) | 2023.12.04 |