728x90
혼잡 제어 개념
네트워크 혼잡
- 트래픽 증가로 인해 라우터/스위치 버퍼의 큐잉 지연시간 증가 및 오버플로우 발생
TCP의 네트워크 혼잡 인식
- 심각한 혼잡: Timeout 발생
- 경미한 혼잡: 중복 ACK 발생(3번 중복 ACK)
TCP의 혼잡 제어 원리
- 세그먼트 전송률 축소 조정(네트워크로 유입되는 트래픽 감축)
흐름제어를 위한 TCP 전송률 제어
- 마지막 송신바이트 번호 - 마지막 수신확인바이트 번호 ≤ 수신윈도우
(LastByteSent - LastByteAcked ≤ rwnd)
혼잡제어를 위한 TCP 전송률 제어
- 마지막 송신바이트 번호 - 마지막 수신확인바이트 번호 ≤ min(수신윈도우, 혼잡윈도우)
(LastByteSent - LastByteAcked ≤ min(rwnd, cwnd)
TCP 혼잡 제어 기법
- 슬로우 스타트(Slow Start)
- 혼잡 회피(Congestion Avoidance)
- 빠른 복구(Fast Recovery)
슬로우 스타트(Slow Start)
- 연결 시작 또는 혼잡 발생 시에 혼잡윈도우(cwnd)를 최소값(ex. 1MSS)부터 전송률을 낮게(천천히) 시작
- ACK가 수신될 때마다 혼잡윈도우를 1씩 증가
- (ACK 수신 → cwnd = cwnd + 1)
- RTT마다 혼잡윈도우를 2배씩 증가(지수적 증가)
- 즉, ACK 기준으로는 1씩 증가, RTT 기준으로는 2배(지수적)으로 증가한다.
혼잡윈도우 변화
혼잡 회피(Congestion Avoidance)
- 슬로우 스타트 구간에서 혼잡 윈도우는 지수적으로 증가
- 혼잡윈도우가 임계치에 도달하거나 넘어가면 선형적으로 증가하도록 증가 속도를 조정하는 알고리즘
- RTT마다 혼잡윈도우를 1씩 증가
- ACK가 수신될 때마다 혼잡윈도우를 (1/cwnd)씩 증가
(ACK 수신 → cwnd = cwnd + (1/cnwd))
빠른 복구(Fast Recovery)
- 3개의 중복 ACK에 의한 빠른 재전송 시에 적용 → 경미한 혼잡 상황
- 정상 ACK가 수신되어 오류 복구가 완료되면 슬로우 스타트 구간을 건너뛰고 혼잡 회피 단계로 진입
알고리즘
- 임계치를 현재 혼잡 윈도우의 1/2로 설정(sstrhresh = cnwd / 2)
- 손실된 세그먼트 재전송
- 혼잡 윈도우를 임계치 + 3으로 설정(cnwd = sstrhresh + 3)
- 여전히 중복 ACK를 수신하면 cwnd = cwnd + 1, 새로운 세그먼트 추가 전송 가능
- 정상 ACK를 수신하면 cwnd = ssthresh, 혼잡 회피 단계로 진입
빠른 복구 예제
- 혼잡윈도우가 6인 상태에서 3번째 중복 ACK 수신 후 송신자는 임계치를 현재 혼잡윈도우의 1/2로 설정(6 / 2 = 3), 손실 패킷(pkt5) 재전송, 혼잡윈도우를 임계치 + 3(3 + 3 = 6)으로 설정
- 2개의 중복 ACK 추가 수신으로 혼잡윈도우는 8로 증가(6 + 2 = 8), 현재 5~10까지 6개의 패킷만 전송했으므로 2개 패킷 추가 전송 가능(pkt11, 12)
- 새로운 ACK11을 수신하면 빠른 복구를 종료하고, 혼잡 윈도우는 임계치로 설정한 다음(ssthresh = 3), 혼잡 회피 단계로 진입
TCP 혼잡 제어 알고리즘: TCP Tahoe 버전
혼잡 인식
- Timeout과 3 duplicate ACK(3개 중복 ACK)를 동일하게 처리한다.
알고리즘
- 임계치를 현재 혼잡 윈도우의 1 / 2로 설정(ssthresh = cnwd / 2)
- 슬로우 스타트 개시
- 혼잡 윈도우가 임계치에 도달하거나 넘어가면 혼잡 회피 수행
TCP 혼잡 제어 알고리즘: TCP Reno 버전
혼잡 인식
- Timeout, 3개 중복 ACK 다르게 처리
알고리즘
- Timeout 발생 시 Taho 버전과 동일하게 동작
- 3개 중복 ACK 발생 시 빠른 회복 알고리즘 적용
TCP 혼잡 제어: AIMD
- 혼잡 상황 발생 -> 혼잡 윈도우의 크기를 1 또는 절반으로 줄임 -> 슬로우 스타트 또는 혼잡 회피로 혼잡 윈도우 천천히 늘림.
- AIMD(Additive Increase Multiplicative Decrease)
728x90
'Computer Network' 카테고리의 다른 글
[컴퓨터 네트워크] 인터넷과 라우터 (0) | 2022.11.20 |
---|---|
[컴퓨터 네트워크] 인터넷 프로토콜: IP (0) | 2022.11.08 |
[컴퓨터 네트워크] TCP 신뢰 전송과 흐름 제어 (1) | 2022.10.31 |
[컴퓨터 네트워크] TCP 세그먼트 구조와 재전송 타이머(TCP Segment & Retransmission Timer) (0) | 2022.10.13 |
[컴퓨터 네트워크] TCP 연결관리(Connection Management) (0) | 2022.10.12 |
댓글