Tcp_congestioncontrol
title: 2025-10-06 author: 강병호 (이름) date: 2025-10-06 category: TIL/강병호/2025/10 (파일 경로 : TIL/{이름}/{연}/{월}) layout: post (자유) —
TCP의 혼잡 제어 처리 방법에 대해 설명해 주세요.
- *혼잡 제어(Congestion Control)**는 송신 측이 네트워크의 혼잡 상태를 파악하고, 데이터 전송량을 조절하여 네트워크 과부하를 방지하는 메커니즘입니다. TCP는 주로 다음 네 가지 알고리즘을 조합하여 혼잡 제어를 수행합니다.
- 느린 시작 (Slow Start)
- 연결 초기 또는 타임아웃으로 인한 재전송 시, 혼잡 윈도우(Congestion Window,
cwnd) 크기를 1 MSS(Maximum Segment Size)로 시작합니다. - 이후 하나의 ACK를 받을 때마다
cwnd를 1 MSS씩 증가시켜, 결과적으로 한 RTT(Round Trip Time)마다cwnd가 2배씩 지수적으로 증가합니다. - 이는 네트워크의 수용량을 빠르게 탐색하기 위한 과정입니다.
cwnd가 미리 정해진 임계값(ssthresh)에 도달하면 혼잡 회피 단계로 전환됩니다.- 혼잡 회피 (Congestion Avoidance)
cwnd가 임계값(ssthresh) 이상이 되면,cwnd의 증가 방식을 지수적 증가에서 선형적(가산적) 증가로 변경합니다. (AIMD의 AI: Additive Increase)- 한 RTT마다
cwnd를 1 MSS씩만 증가시켜, 네트워크에 부담을 주지 않으면서 전송량을 점진적으로 늘립니다.- 혼잡 발생 감지 및 처리
- 타임아웃 발생 시: 네트워크에 심각한 혼잡이 발생했다고 간주합니다.
ssthresh를 현재cwnd의 절반으로 줄이고,cwnd를 1 MSS로 리셋한 후 느린 시작부터 다시 시작합니다. - 3개의 중복 ACK 수신 시: 비교적 가벼운 혼잡으로 판단하고, 빠른 회복 단계로 진입합니다. (AIMD의 MD: Multiplicative Decrease)
- 빠른 회복 (Fast Recovery) 및 빠른 재전송 (Fast Retransmit)
- 빠른 재전송: 3개의 중복 ACK를 수신하면 타임아웃을 기다리지 않고 즉시 누락된 세그먼트를 재전송합니다.
- 빠른 회복:
ssthresh를 현재cwnd의 절반으로 줄이고,cwnd를 새로운ssthresh값으로 설정합니다. 이후cwnd를 선형적으로 증가시켜(혼잡 회피와 유사), 네트워크 전송량을 급격히 줄이지 않고 안정적으로 회복을 시도합니다.