cd ../
Network·2026-02-13·7 min read·# entry/022

TCP 혼잡제어의 철학적 배경과 인터넷의 안정성

TCP 혼잡제어의 원리와 발전 과정을 상세히 다룹니다. 슬로우 스타트부터 Fast Recovery까지.

컴퓨터 네트워크의 역사에서 TCP(전송 제어 프로토콜)은 신뢰성 있는 데이터 전송을 보장하는 핵심 기둥의 역할을 수행한다. 초기 TCP의 설계 목적은 단순히 종단 간(End-To-End) 데이터 전달의 무결성이었다.

하지만 1980년대 후반 인터넷이 겪은 ‘혼잡 붕괴’ 사건은 네트워크 관리의 패러다임을 바꿔놓았다.

혼잡제어란?

혼잡제어란 송신측에서 네트워크가 수용할 수 있는 이상의 데이터를 주입하여 패킷 손실이나 전송 지연이 발생하는 상황을 방지하고 제어하는 일련의 메커니즘을 의미한다.

이는 단순히 개별 연결의 성능을 최적화하는 것을 넘어, 전체 인터넷 망의 붕괴를 막고 다양한 네트워크 흐름 간의 공평한 자원 분배를 실현하는 중추적인 역할을 수행한다.

현대의 TCP 혼잡제어의 이론적 기틀은 ACK 피드백을 통해 추론하고, 송신 속도를 동적으로 조절하는 폐쇄 루프 제어 시스템의 형태를 띤다. 이 시스템의 핵심 변수는 혼잡 윈도우($cwnd$)이며, 이는 송신자가 확인 응답을 받지 않고도 한 번에 네트워크로 보낼 수 있는 데이터의 양을 제한하는 역할을 수행한다.


고전적 TCP 혼잡제어의 4단계 아키텍처와 수학적 전개

RFC 2581 및 RFC 5681에 정의된 표준 TCP 혼잡제어 아키텍처는 다음 네 가지 상호 작용하는 알고리즘으로 구성된다.

1

슬로우 스타트 (Slow Start)

연결 초기 또는 타임아웃 발생 후 네트워크의 가용 대역폭을 신속히 파악하기 위한 단계입니다.

2

혼잡 회피 (Congestion Avoidance)

혼잡이 감지되지 않는다면 윈도우 크기를 선형적으로 증가시켜 대역폭을 탐색합니다.

3

빠른 재전송 (Fast Retransmit)

타이머 만료 전 중복 ACK를 기반으로 손실을 감지하고 재전송합니다.

4

빠른 회복 (Fast Recovery)

불필요한 슬로우 스타트 진입을 막고 파이프라인의 처리량을 유지합니다.

이러한 알고리즘은 네트워크 대역폭을 탐색하고, 혼잡을 감지하며, 감지된 혼잡에 대응하여 전송 속도를 조절하는 유기적인 흐름을 형성한다.

주요 변수 정의
  • $cwnd$: 가변적인 Window 크기 (Congestion Window)
  • MSS: 수신자 최대 세그먼트 크기 (Maximum Segment Size)
  • SMSS: 송신자 최대 세그먼트 크기 (Sender Maximum Segment Size)

1. 슬로우 스타트

슬로우 스타트는 연결 초기 또는 타임아웃 발생 후에 네트워크의 가용 대역폭을 신속히 파악하기 위해 수행되는 단계이다. 이름과 달리 실제로는 매우 공격적인 전송 속도 증가를 특징으로 한다. 이는 비어있는 파이프라인을 최대한 빠르게 채우기 위한 전략이다.

송신측은 $cwnd$를 초기 Window Size로 설정하며, 이는 1, 2, 4 또는 현대적 구현에서는 10 MSS로 시작한다. 새로운 데이터를 확인하는 ACK가 도착할 때마다 $cwnd$는 다음과 같이 증가한다.

$cwnd = cwnd + SMSS$

슬로우 스타트 구간의 cwnd 증가

여기서 SMSS는 송신자 최대 세그먼트 크기(Sender Maximum Segment Size)를 의미한다. 매 왕복시간 (Round Trip Time, RTT)마다 전송 가능한 패킷 수가 두 배로 늘어나므로, 전송 속도는 지수적으로 증가하게 된다.

이 과정은 $cwnd$가 슬로우 스타트의 임계값인 $ssthresh$(Slow Start Threshold)에 도달하거나 패킷 손실이 감지될 때까지 지속된다. $ssthresh$의 초기값은 임의로 높게 설정될 수 있으나, 혼잡이 발생되면 조정된다.

2. 혼잡 회피: 선형 증가와 안정적 평형 유지

$cwnd$가 $ssthresh$를 초과하거나 도달하면 TCP는 보다 신중한 대역폭 탐색 단계인 혼잡 회피단계로 전환한다. 이 단계에서는 가용 대역폭의 한계에 근접했다고 판단하여 윈도우 증가 폭을 크게 줄인다.

혼잡 회피 단계에서 $cwnd$는 매 RTT마다 약 1 MSS씩 증가하며, 개별 ACK 수신 시의 공식은 다음과 같다.

$cwnd = cwnd + \frac{SMSS \cdot SMSS}{cwnd}$

혼잡 회피 구간의 cwnd 증가

위 수식은, 한 윈도우 분량의 모든 Segment에 대한 ACK가 수신되었을 때, 결과적으로 $cwnd$가 1 MSS 만큼 증가하도록 설계된 근사치이다. 위 슬로우 스타트와 달리 이런 가산 증가치는, 네트워크가 포화 상태에 도달했을 때 급격한 부하 증가를 막고, 안정적인 평형 상태를 유지하도록 돕는다.

3. 패킷 손실 감지와 대응: 빠른 재전송 및 빠른 회복

전형적인 고전 TCP는 재전송 타이머(RTO)가 만료될 때까지 기다려 손실을 감지하지만, 이는 전송 흐름을 완전히 중단시켜 효율을 저해한다. 이를 보완하기 위해 중복 ACK 기반의 매커니즘이 도입됐다.

알고리즘 단계cwnd 증가 방식전환 조건주요 목적
슬로우 스타트지수적 증가 (RTT당 2배)$cwnd \ge ssthresh$ 또는 손실 발생초기 가용 대역폭의 신속한 탐색
혼잡 회피선형 증가 (RTT당 1 MSS)손실 감지 시 조절안정적인 최대 대역폭 점유 및 유지
빠른 재전송해당 세그먼트 즉시 재전송3개 중복 ACK 수신타이머 만료 전 빠른 복구
빠른 회복윈도우 조절 후 혼잡 회피새로운 데이터의 ACK 수신파이프라인의 공백 방지 및 처리량 보존

TCP 혼잡제어 알고리즘의 세대별 진화: Tahoe ~ NewReno

혼잡제어 기술은 손실 감지 및 복구 효율성을 높이는 방향으로 진화해 왔으며, 각 버전은 혼잡 상황에서의 반응 방식에 뚜렷한 차이를 보인다.

1. TCP Tahoe와 Reno: 빠른 회복의 도입

1988년 발표된 TCP Tahoe는 최초의 혼잡제어 모델로 패킷 손실(타임아웃 혹은 3개 중복 ACK)이 발생하면 $cwnd$를 1로 줄이고 다시 슬로우 스타트를 수행한다. 이는 네트워크 파이프라인을 모조리 비우고 처음부터 다시 하는 느낌이라 효율성 측면에 한계가 있다.

하지만 그 후 등장한 TCP Reno는 빠른 회복 알고리즘을 도입하여 3개 중복 ACK 발생 시 $cwnd$를 절반으로 줄이고 바로 혼잡 회피 단계로 진입하도록 설계되었다.

TCP Reno의 빠른 회복 절차
1

1. 임계값 조정

$ssthresh$를 현재 $cwnd$의 절반으로 설정한다. (단 최소 2 MSS)

패킷 손실은 곧 네트워크 용량 한계를 의미하기 때문에, 현재 전송 속도의 절반을 안전한 수준으로 판단하고 그 수준으로 변경한다.

2

2. 윈도우 재설정

$cwnd$를 $ssthresh + 3SMSS$로 설정하여 중복 ACK 3개분 만큼의 데이터가 네트워크를 떠났음을 반영한다.

중복 ACK는 곧 함께 보낸 이후 패킷 최소 3개가 수신측에 잘 도착했음을 의미한다. 이를 근거로 3개 패킷 만큼의 전송 용량을 팽창한다.

3

3. 윈도우 팽창

이후 추가적인 중복 ACK 수신 시마다 $cwnd$를 1 MSS씩 일시적으로 팽창시켜 새로운 데이터를 전송할 수 있게 한다.

네트워크 상태는 안정적이라는 것을 확인할 수 있고 이를 근거로 송신량을 팽창한다.

4

4. 정상 복귀

손실되었던 세그먼트에 대한 새로운 ACK가 도착하면 $cwnd$를 다시 $ssthresh$로 축소하고 혼잡 회피 단계로 이행한다.

2. TCP NewReno와 SACK: 복합적 손실 대응

TCP Reno는 단일 윈도우 내에서 여러 패킷이 손실될 경우 성능이 급격히 저하되는 부분적 ACK 문제를 안고 있었다.

NewReno는 빠른 회복 알고리즘을 개선하여, 한 윈도우 내의 모든 손실 패킷이 복구될 때까지 빠른 회복 상태를 유지하며 부분적 ACK 수신 시 다음 예상 손실 패킷을 즉시 재전송한다.

또한 SACK 옵션은 수신자가 받은 패킷의 범위를 구체적으로 알려줌으로써 송신자가 손실된 패킷만을 정밀하게 골라 재전송할 수 있게 한다. 이는 특히 고속 네트워크나 무선 환경과 같이 손실이 빈번한 상황에서 불필요한 재전송을 줄이고 파이프라인의 효율을 극대화하는 결정적인 역할을 수행한다.

SACK의 장점
  • 정밀한 재전송: 불필요한 패킷 재전송 방지
  • 파이프라인 효율: 여러 패킷 손실 시에도 빠른 복구 가능
TCP Reno의 한계
  • 부분적 ACK 문제: 다수 패킷 손실 시 성능 저하
  • 고속 네트워크 비효율: 대역폭-지연 곱이 큰 환경에서 느린 회복

고속 환경에서 TCP Reno의 한계

표준 TCP Reno 계열의 선형 증가 방식은 대역폭-지연 곱이 매우 큰 네트워크에서 가용 대역폭을 모두 채우는 데 지나치게 오랜 시간이 걸린다는 근본적인 문제점을 갖는다.

10Gbps 링크에서 100ms 지연이 있는 경우, 표준 TCP가 대역폭을 모두 활용하려면 패킷 손실이 거의 없는 상태에서 한 시간 가량이 소요될 수 있다.