Unisquads
로그인
홈
이용약관·개인정보처리방침·콘텐츠정책·© 2026 Unisquads
이용약관·개인정보처리방침·콘텐츠정책
© 2026 Unisquads. All rights reserved.

슬로우 스타트 알고리즘 (r1)

이 문서의 과거 버전 (r1)을 보고 있습니다. 수정일: 2026.02.14 21:22

슬로우 스타트 알고리즘

이름

슬로우 스타트 알고리즘

영문명

Slow Start Algorithm

분류

네트워크 혼잡 제어 알고리즘

사용 프로토콜

TCP (전송 제어 프로토콜)

목적

네트워크 혼잡을 피하며 대역폭을 효율적으로 활용

주요 개념

혼잡 창 크기의 지수적 증가

상세 정보

동작 원리

초기 혼잡 창 크기를 작게 설정하고, ACK 패킷 수신 시마다 창 크기를 2배로 증가시킴

시작 단계

혼잡 창 크기를 1 MSS로 설정

전환 조건

혼잡 창 크기가 혼잡 회피 임계값에 도달하거나 패킷 손실이 발생할 때

패킷 손실 시 동작

혼잡 회피 단계로 전환되거나 빠른 재전송/빠른 회복 절차가 수행됨

혼잡 회피와의 관계

슬로우 스타트 후 혼잡 회피 단계로 진입하여 선형적으로 창 크기 증가

개선 알고리즘

TCP Tahoe, TCP Reno, TCP Cubic 등

초기 혼잡 창 크기

RFC 6928 기준 10 MSS로 권장

장점

네트워크 상태를 모르는 상황에서 혼잡을 유발하지 않으면서 빠르게 대역폭을 탐색

단점

고대역폭·고지연 네트워크에서 초기 전송 속도가 느림

관련 RFC

RFC 5681, RFC 6928

1. 개요

슬로우 스타트 알고리즘은 TCP 혼잡 제어의 핵심 메커니즘 중 하나이다. 이 알고리즘은 TCP 연결이 시작될 때, 또는 오랜 시간 유휴 상태(idle) 후에 재개될 때 네트워크의 가용 대역폭을 빠르게 탐색하기 위해 사용된다. 이름에 '슬로우'가 포함되어 있지만, 실제로는 혼잡 윈도우를 지수적으로 급격히 증가시키는 방식으로 동작한다.

이 알고리즘의 주요 목적은 네트워크에 갑작스러운 부하를 주지 않으면서 가능한 빠르게 최적의 전송 속도에 도달하는 것이다. 초기에는 작은 혼잡 윈도우 크기(보통 1 또는 2개의 MSS[1]])로 시작하여, 매 RTT[2]]마다 수신 확인(ACK) 패킷 하나당 윈도우 크기를 1씩 증가시킨다. 이는 효과적으로 매 RTT마다 혼잡 윈도우 크기가 두 배로 증가하는 지수 성장을 의미한다.

슬로우 스타트는 패킷 손실이 발생하거나, 미리 설정된 슬로우 스타트 임계값에 도달하면 종료된다. 이후 알고리즘은 선형적으로 윈도우를 증가시키는 혼잡 회피 단계로 전환된다. 이 방식은 1988년 밴 제이콥슨에 의해 제안되었으며, 초기 TCP의 고정된 윈도우 방식이 네트워크 혼잡을 유발하는 문제를 해결하기 위해 도입되었다.

특징

설명

목적

네트워크의 가용 대역폭을 빠르게 탐색하고 초기 전송 속도를 결정한다.

동작

매 RTT마다 혼잡 윈도우 크기를 지수적으로 증가시킨다(ACK 당 +1 MSS).

종료 조건

패킷 손실 발생 시, 또는 혼잡 윈도우가 슬로우 스타트 임계값(ssthresh)을 초과할 때.

다음 단계

슬로우 스타트 종료 후, 일반적으로 혼잡 회피 단계로 진입한다.

2. 기본 원리와 동작 방식

슬로우 스타트 알고리즘은 TCP 혼잡 제어의 핵심 단계로, 연결 초기에 네트워크의 이용 가능한 대역폭을 빠르게 탐색하기 위해 설계되었다. 이 알고리즘은 혼잡 윈도우(cwnd)를 지수 함수적으로 증가시켜 패킷 전송 속도를 급격히 높이는 방식으로 동작한다. 초기 혼잡 윈도우 크기는 일반적으로 1, 2 또는 10개의 MSS(Maximum Segment Size)로 설정된다.

알고리즘의 동작은 두 가지 주요 매개변수에 의해 제어된다. 첫 번째는 혼잡 윈도우 자체이며, 두 번째는 슬로우 스타트 임계값(ssthresh)이다. 슬로우 스타트 임계값은 슬로우 스타트 단계가 종료되고 혼잡 회피 단계로 전환되는 기준점을 정의한다. 연결이 시작될 때, 송신자는 각 수신된 ACK(승인) 패킷에 대해 혼잡 윈도우를 1 MSS씩 증가시킨다. 이는 매 RTT(왕복 시간)마다 혼잡 윈도우 크기가 두 배로 증가하는 효과를 낳는다.

단계

조건

혼잡 윈도우(cwnd) 증가 방식

슬로우 스타트

cwnd < ssthresh

매 ACK 수신 시 cwnd += 1 MSS (매 RTT마다 배가)

혼잡 회피

cwnd >= ssthresh

매 ACK 수신 시 cwnd += 1/cwnd MSS (매 RTT마다 1 MSS 선형 증가)

패킷 손실이 발생하면, 이는 네트워크 혼잡의 신호로 해석된다. 대부분의 구현에서, 타임아웃 또는 세 개의 중복 ACK 수신과 같은 패킷 손실이 감지되면 슬로우 스타트 단계가 강제로 종료된다. 이때, 슬로우 스타트 임계값(ssthresh)은 현재 혼잡 윈도우 크기의 절반(또는 최소 2 MSS)으로 낮춰지고, 혼잡 윈도우(cwnd)는 다시 작은 값(예: 1 MSS)으로 재설정된다[3]. 이 과정을 통해 알고리즘은 네트워크의 새로운 혼잡 상태에 적응하고, 과도한 패킷 전송으로 인한 추가 혼잡을 방지한다.

2.1. 혼잡 윈도우(Congestion Window)의 초기화 및 확장

혼잡 윈도우(Congestion Window, cwnd)는 송신자가 수신자의 ACK 확인응답을 기다리지 않고 한 번에 전송할 수 있는 최대 데이터 양을 제어하는 변수이다. 슬로우 스타트 단계에서 이 윈도우는 매우 작은 값으로 초기화되며, 일반적으로 1, 2 또는 10개의 세그먼트(MSS) 크기로 시작한다[4].

혼잡 윈도우의 확장은 ACK 패킷 수신에 의해 주도된다. 기본 규칙은 매번 정상적인 ACK 하나를 받을 때마다 혼잡 윈도우 크기를 1 MSS만큼 증가시키는 것이다. 이는 실제로 지수적 성장을 유발한다. 왜냐하면 한 RTT(왕복 시간) 동안 모든 전송된 패킷에 대한 ACK가 도착하면, 그 RTT가 끝날 때 혼잡 윈드우 크기가 거의 두 배로 증가하기 때문이다. 예를 들어, 초기 cwnd가 1 MSS라면 첫 RTT 후 2 MSS, 다음 RTT 후 4 MSS, 그 다음에는 8 MSS로 증가한다.

이 지수적 증가는 네트워크의 사용 가능한 대역폭을 빠르게 탐색하고 활용하는 데 목적이 있다. 송신자는 네트워크에 과부하를 주지 않으면서 가능한 한 빨리 최적의 전송 속도에 도달하려고 한다. 아래 표는 초기 cwnd를 1 MSS로 가정한 지수적 확장의 예를 보여준다.

RTT 회차

혼잡 윈도우(cwnd) 크기 (MSS 단위)

해당 RTT 동안 전송 가능한 총 세그먼트 수

1

1

1

2

2

3 (1+2)

3

4

7 (1+2+4)

4

8

15 (1+2+4+8)

이 과정은 세 가지 조건 중 하나가 발생할 때까지 계속된다: 1) 슬로우 스타트 임계값(ssthresh)에 도달하여 혼잡 회피 단계로 전환될 때, 2) 패킷 손실이 감지되어 타임아웃이 발생하거나 3개의 중복 ACK가 수신될 때, 3) 수신자의 광고된 윈도우(Advertised Window)에 의해 흐름 제어가 선제적으로 제한될 때.

2.2. 슬로우 스타트 임계값(Slow Start Threshold)

슬로우 스타트 임계값은 혼잡 윈도우의 성장 방식을 제어하는 핵심 매개변수이다. 이 값은 일반적으로 ssthresh로 표기되며, 혼잡 제어 알고리즘이 슬로우 스타트 단계에서 혼잡 회피 단계로 전환되는 시점을 결정한다. 초기 ssthresh 값은 임의로 큰 값(예: 65,535 바이트)으로 설정되거나, 이전 연결의 정보를 기반으로 동적으로 설정될 수 있다.

cwnd가 ssthresh 값보다 작을 때는 슼로우 스타트 단계가 활성화되어, 매 왕복 지연 시간마다 cwnd가 지수적으로 증가한다. cwnd가 ssthresh에 도달하거나 초과하면, 알고리즘은 혼잡 회피 단계로 전환된다. 이 단계에서는 cwnd의 성장 속도가 선형적으로 감소하여 네트워크의 혼잡을 더 신중하게 피하려고 시도한다.

패킷 손실이 발생하면, ssthresh 값은 현재 네트워크 상태를 반영하도록 갱신된다. 대부분의 구현에서는 ssthresh를 손실 발생 시점의 cwnd 값의 절반(일반적으로 cwnd/2)으로 설정한다. 이 조정은 네트워크가 수용할 수 있는 대역폭의 추정치를 낮추고, 이후의 공격적인 윈도우 확장을 억제하는 역할을 한다. 갱신된 후, cwnd는 작은 값(보통 1 또는 2 최대 세그먼트 크기)으로 재설정되고, 다시 슼로우 스타트 단계부터 ssthresh를 향해 성장하기 시작한다.

단계

조건

혼잡 윈도우(cwnd) 증가 방식

목적

슬로우 스타트

cwnd < ssthresh

지수적 증가 (매 RTT마다 2배)

사용 가능한 대역폭을 빠르게 탐색

혼잡 회피

cwnd >= ssthresh

선형적 증가 (매 RTT마다 1 MSS)

혼잡을 피하며 안정적으로 운영

이 메커니즘을 통해 ssthresh는 네트워크의 과거 혼잡 이력을 기록하고, 이를 바탕으로 연결의 공격성을 동적으로 조절하는 지표 역할을 한다.

2.3. 패킷 손실과 혼잡 회피(Congestion Avoidance) 전환

패킷 손실은 네트워크 혼잡의 주요 지표로 간주되며, 슬로우 스타트 알고리즘이 혼잡 회피 단계로 전환되는 결정적 계기가 된다. TCP는 일반적으로 세 번의 중복 ACK 수신 또는 재전송 타임아웃 발생을 패킷 손실로 판단한다. 이는 네트워크가 현재의 데이터 전송 속도를 더 이상 수용하지 못하고 있음을 의미하며, 송신 측은 즉각적인 전송 속도 조절을 시작한다.

패킷 손실이 감지되면, 슬로우 스타트 임계값이 현재 혼잡 윈도우 크기의 절반으로 조정된다. 이는 네트워크가 안정적으로 수용할 수 있는 것으로 추정되는 새로운 상한선을 설정하는 과정이다. 동시에, 혼잡 윈도우 자체는 1 또는 2개의 MSS 크기로 줄어든다. 이후 알고리즘은 지수적 증가를 중단하고, 혼잡 회피 단계로 진입하여 혼잡 윈도우를 선형적으로 증가시킨다. 이 전환은 네트워크의 혼잡 상태를 벗어나 최대 처리량에 근접하면서도 안정적으로 운영하기 위한 핵심 메커니즘이다.

구체적인 전환 방식은 사용되는 TCP 혼잡 제어 알고리즘의 변종에 따라 차이가 있다. 예를 들어, TCP Tahoe는 패킷 손실 시 혼잡 윈도우를 1로 재설정하고 슬로우 스타트부터 다시 시작한다. 반면, TCP Reno는 빠른 회복 알고리즘을 도입하여, 중복 ACK에 의한 패킷 손실 시 혼잡 윈도우를 절반으로 줄인 후 즉시 혼잡 회피 단계로 진입함으로써 성능 저하를 완화한다. 재전송 타임아웃이 발생하는 경우 두 알고리즘 모두 혼잡 윈도우를 1로 재설정하고 슬로우 스타트를 재개한다.

3. TCP 혼잡 제어에서의 역할

슬로우 스타트 알고리즘은 TCP 혼잡 제어 메커니즘의 핵심적인 시작 단계를 구성한다. 이 알고리즘의 주요 역할은 연결 초기에 네트워크의 이용 가능한 대역폭을 빠르게 탐색하여 혼잡 윈도우를 급격히 증가시키는 것이다. 이를 통해 전송 속도를 신속하게 상승시켜 링크를 효율적으로 활용하고, 동시에 네트워크에 갑작스러운 과부하를 초래하지 않도록 조심스럽게 시작하는 균형을 추구한다.

구현 방식에 따라 그 역할과 동작에 미묘한 차이가 존재한다. 대표적인 예로 TCP Tahoe와 TCP Reno를 비교할 수 있다. 두 버전 모두 슬로우 스타트 단계에서 혼잡 윈도우를 지수적으로 증가시키는 방식은 동일하다. 그러나 패킷 손실이 감지되었을 때의 반응이 다르다. TCP Tahoe는 타임아웃이나 중복 ACK 수신 시, 혼잡 윈도우를 무조건 1로 줄이고 슬로우 스타트 단계로 돌아간다. 반면, TCP Reno는 빠른 재전송 메커니즘을 통해 세 개의 중복 ACK를 받으면, 혼잡 윈도우를 절반으로 줄이고 바로 혼잡 회피 단계로 진입한다. 이는 Tahoe에 비해 성능 저하를 완화하는 역할을 한다.

슬로우 스타트는 빠른 재전송 메커니즘과 밀접하게 상호작용하며 혼잡 제어의 효율성을 높인다. 빠른 재전송은 타임아웃을 기다리지 않고 조기에 패킷 손실을 감지하여 재전송을 유발한다. 슬로우 스타트는 이러한 빠른 재전송 이후의 복구 과정에서도 역할을 수행한다. 예를 들어, TCP Reno에서 빠른 재전송이 발생한 후, 혼잡 윈도우가 절반으로 감소하면, 알고리즘은 새로운 슬로우 스타트 임계값을 설정하고 슬로우 스타트가 아닌 혼잡 회피 단계로 진행한다. 이 상호작용을 통해 네트워크 혼잡에 대한 반응성을 높이면서도 불필요한 급격한 윈도우 축소를 방지하는 데 기여한다.

구현 버전

패킷 손실 감지 시(중복 ACK)

혼잡 윈도우(cwnd) 조정

다음 단계

TCP Tahoe

타임아웃 또는 중복 ACK

1로 초기화

슬로우 스타트

TCP Reno

3개의 중복 ACK(빠른 재전송)

절반으로 감소

혼잡 회피

3.1. TCP Tahoe와 TCP Reno의 구현 차이

TCP Tahoe와 TCP Reno는 슬로우 스타트 및 혼잡 회피 메커니즘을 구현한 초기 TCP 혼잡 제어 알고리즘이다. 두 알고리즘은 패킷 손실을 감지하고 대응하는 방식에서 근본적인 차이를 보이며, 이는 혼잡 윈도우를 관리하는 전략에 직접적인 영향을 미친다.

주요 차이는 타임아웃 또는 중복 ACK에 의한 패킷 손실 감지 후의 동작에 있다. TCP Tahoe는 손실이 발생하면, 그 원인과 관계없이 항상 혼잡 윈도우(cwnd)를 1 MSS(Maximum Segment Size)로 줄이고 슬로우 스타트 단계로 되돌아간다. 또한 슬로우 스타트 임계값(ssthresh)을 현재 혼잡 윈도우의 절반으로 설정한다. 이는 네트워크에 심각한 혼잡이 발생했다고 가정하고 매우 보수적으로 대응하는 방식이다. 반면, TCP Reno는 "Fast Recovery"라는 추가적인 상태를 도입하여 중복 ACK에 의한 손실(일반적으로 단일 패킷 손실로 간주)과 타임아웃에 의한 손실을 구분하여 처리한다.

구체적인 동작 차이는 다음 표와 같다.

동작

TCP Tahoe

TCP Reno

패킷 손실 감지 (중복 ACK 3개)

ssthresh = cwnd/2, cwnd = 1, 슬로우 스타트 재개

ssthresh = cwnd/2, cwnd = ssthresh + 3, Fast Recovery 상태 진입

Fast Recovery 상태 중 추가 중복 ACK 수신

해당 없음

cwnd를 1 MSS씩 증가시킴 (혼잡 윈도우를 채움)

패킷 손실 감지 (타임아웃)

ssthresh = cwnd/2, cwnd = 1, 슬로우 스타트 재개

ssthresh = cwnd/2, cwnd = 1, 슬로우 스타트 재개

손실된 세그먼트에 대한 누적 ACK 수신

해당 없음

cwnd = ssthresh로 설정, Fast Recovery 종료 및 혼잡 회피 상태로 복귀

결과적으로, TCP Reno는 단일 패킷 손실 시 혼잡 윈도우를 1로 초기화하지 않고 절반으로만 줄인 후 선형 증가하는 혼잡 회피 단계로 바로 진입할 수 있다. 이로 인해 중복 ACK로 인한 일시적인 손실에서 TCP Tahoe보다 빠르게 성능을 회복하는 장점이 있다. 그러나 여러 패킷이 한 번에 손실되는 경우에는 Fast Recovery 메커니즘이 제대로 동작하지 않아 타임아웃이 발생할 수 있으며, 결국 Tahoe와 유사한 성능 저하를 겪게 된다.

3.2. 빠른 재전송(Fast Retransmit)과의 상호작용

빠른 재전송은 TCP가 세그먼트 손실을 감지하는 전통적인 방법인 재전송 타임아웃을 기다리지 않고, 더 신속하게 대응할 수 있게 해주는 메커니즘이다. 이 메커니즘은 수신 측에서 순서가 잘못된 세그먼트를 받을 때마다 중복 ACK를 보내는 동작에 기반한다. 송신 측이 동일한 시퀀스 번호에 대한 중복 ACK를 연속적으로 세 번 받으면, 해당 세그먼트가 손실되었다고 판단하고 타임아웃이 만료되기 전에 즉시 재전송을 시작한다.

슬로우 스타트 알고리즘은 빠른 재전송이 발생했을 때 그 동작 방식이 달라진다. 대표적인 TCP 혼잡 제어 구현체인 TCP Reno에서는 빠른 재전송이 트리거되면, 알고리즘이 즉시 혼잡 회피 단계로 진입한다. 이때의 핵심 동작은 다음과 같다.

1. 현재 혼잡 윈도우 크기의 절반을 새로운 슬로우 스타트 임계값으로 설정한다.

2. 슬로우 스타트 임계값으로 설정된 이 새로운 값으로 혼잡 윈도우 크기를 조정한다.

3. 이후부터는 혼잡 회피 알고리즘(일반적으로 가산 증가)을 사용하여 윈도우를 확장한다.

이 상호작용의 결과, 네트워크는 슬로우 스타트의 지수적 증가 단계에서 벗어나 선형적으로 더 조심스럽게 대역폭을 활용하게 된다. 이는 빠른 재전송이 단순한 패킷 손실 복구를 넘어, 네트워크 혼잡의 초기 징후로 해석되어 혼잡 제어 정책을 더 보수적으로 전환하는 계기가 된다는 점을 의미한다. 반면, TCP Tahoe 구현에서는 빠른 재전송 후에도 혼잡 윈도우를 1로 줄이고 슬로우 스타트를 다시 시작하여 Reno에 비해 더 공격적인 성능 저하를 보인다.

4. 성능 특성과 장단점

슬로우 스타트 알고리즘의 주요 성능상 장점은 사용 가능한 네트워크 대역폭을 빠르게 탐색하는 능력이다. 알고리즘은 혼잡 윈도우를 지수적으로 증가시키기 때문에, 연결 초기에 유휴 상태인 대역폭을 짧은 시간 안에 효과적으로 활용할 수 있다. 이는 짧은 파일 전송이나 HTTP와 같은 요청-응답 트랜잭션에서 전체 전송 시간을 크게 단축시킨다. 특히 대역폭이 충분하고 지연 시간이 짧은 네트워크 환경에서는 매우 효율적으로 동작한다.

그러나 고대역폭-고지연(BDP) 네트워크에서는 명확한 한계를 보인다. BDP가 큰 링크에서 혼잡 윈도우가 충분히 커지기 위해서는 많은 왕복 시간(RTT)이 필요하다. 예를 들어, 초기 윈도우 크기가 10개 패킷이고 RTT가 100ms인 1Gbps 링크에서 윈도우를 10,000개 패킷까지 키우려면 약 10 RTT(1초)가 소요된다. 이 '지연 시작' 기간 동안 링크는 상당히 저활용 상태로 남아 있어 실제 처리량이 잠재적 대역폭에 훨씬 못 미치는 현상이 발생한다.

주요 단점은 패킷 손실에 대한 민감성이다. 슬로우 스타트 단계에서 단 한 번의 패킷 손실도 혼잡 회피 단계로의 조기 전환을 유발하며, 심지어 TCP Tahoe에서는 윈도우 크기를 1로 재설정한다. 이는 대역폭이 넉넉한 네트워크에서 일시적인 손실이 발생할 경우 성능에 치명적인 타격을 줄 수 있다. 또한, 여러 TCP 연결이 동시에 슬로우 스타트를 시작하면 네트워크에 갑작스러운 트래픽 부하를 일으켜 공유된 병목 링크에서 동시에 혼잡 붕괴를 초래할 위험도 있다.

이러한 장단점을 요약하면 다음과 같다.

장점

단점

유휴 대역폭에 대한 빠른 적응

고 BDP 네트워크에서 윈도우 증가 지연

짧은 트랜잭션 성능 향상

패킷 손실에 매우 취약

구현이 간단하고 널리 호환됨

동시 시작 시 네트워크에 갑작스러운 부하 발생

4.1. 링크 대역폭의 빠른 탐색

슬로우 스타트 알고리즘의 핵심 목표는 혼잡 제어를 시작하는 시점에 네트워크의 사용 가능한 대역폭을 가능한 한 빠르게 탐색하는 것이다. 연결이 맺어진 직후, 송신자는 네트워크의 현재 상태에 대한 정보를 거의 가지고 있지 않다. 이때 보수적으로 작은 혼잡 윈도우 크기(예: 1 또는 2개의 MSS)로 데이터 전송을 시작하면, 네트워크 자원을 효율적으로 활용하지 못하고 성능이 저하된다. 슬로우 스타트는 이러한 초기 탐색 단계에서 혼잡 윈도우를 지수 함수적으로 증가시켜, 짧은 시간 내에 링크의 용량에 근접한 전송 속도를 달성하도록 설계되었다.

구체적인 동작 방식은 다음과 같다. 송신자는 매 RTT마다 혼잡 윈도우 크기를 두 배로 증가시킨다. 이는 각 전송된 패킷에 대한 ACK 확인응답을 수신할 때마다 윈도우를 1씩 증가시키는 방식으로 구현된다. 예를 들어, 초기 혼잡 윈도우가 2개 패킷이라면, 첫 번째 RTT 동안 2개 패킷을 보내고 이들의 ACK를 받으면 윈도우는 4가 된다. 다음 RTT에는 4개 패킷을 보낼 수 있으며, 그 ACK를 모두 받으면 윈도우는 8이 된다. 이 지수적 성장은 네트워크에 남아 있는 여유 대역폭이 충분하다고 가정할 때, 매우 빠르게 대역폭을 포화 상태로 만든다.

RTT

혼잡 윈도우 크기 (패킷 수)

해당 RTT 동안 전송 가능한 패킷 수

1

2

2

2

4

4

3

8

8

4

16

16

5

32

32

이러한 빠른 탐색 메커니즘은 특히 짧은 연결이나 파일 전송에서 유리하다. 대역폭이 충분한 네트워크에서는 몇 번의 RTT 안에 최적의 전송 속도에 도달하여 전체 전송 시간을 크게 단축시킨다. 또한, 네트워크가 비어 있는 상태에서 새로운 연결이 시작될 경우, 유휴 상태의 네트워크 자원을 신속하게 활용할 수 있게 한다. 이는 TCP의 공정성과 효율성을 동시에 추구하는 혼잡 제어 정책의 중요한 첫 단계를 구성한다.

4.2. 고대역폭-고지연(BDP) 네트워크에서의 한계

슬로우 스타트 알고리즘은 혼잡 윈도우를 지수적으로 증가시켜 사용 가능한 네트워크 대역폭을 빠르게 탐색하도록 설계되었다. 그러나 이 방식은 대역폭-지연 곱이 큰 네트워크 환경에서는 비효율적이고 긴 연결 설정 시간을 초래하는 한계를 보인다.

BDP가 큰 네트워크는 사용 가능한 대역폭이 넓고 왕복 지연 시간이 길다는 특징을 가진다. 슬로우 스타트는 혼잡 윈도우를 패킷 손실이 발생할 때까지 매 RTT마다 두 배로 증가시킨다. 따라서 링크를 완전히 포화시켜 최대 처리량에 도달하기 위해서는 필요한 윈도우 크기까지 여러 번의 RTT가 소요된다. 예를 들어, 초기 혼잡 윈도우가 10개 패킷이고 목표 윈도우 크기가 1000개 패킷이라면, 이를 채우기 위해서는 약 7번의 RTT(2^7=128)가 필요하다. RTT가 100ms인 경우, 이는 700ms의 지연을 의미하며, 이 시간 동안 링크는 낮은 활용률을 보인다.

이러한 한계는 특히 장거리 해저 광케이블이나 위성 링크와 같은 고지연 환경에서 두드러진다. 짧은 파일 전송이나 HTTP 트랜잭션과 같은 단시간 연결에서는 슬로우 스타트 단계가 끝나기도 전에 데이터 전송이 완료될 수 있어, 네트워크의 실제 용량을 전혀 활용하지 못하는 결과를 낳는다. 또한, 슬로우 스타트는 혼잡을 탐지하는 유일한 신호로 패킷 손실에 의존한다. 고대역폭 환경에서 손실이 발생하면 이미 많은 양의 데이터가 큐에 쌓여 있을 가능성이 높아, 이후의 혼잡 회피 단계에서도 성능이 급격히 저하되는 현상을 초래할 수 있다.

네트워크 조건

슬로우 스타트의 영향

결과적 한계

고 대역폭

목표 윈도우 크기에 도달하기까지 많은 패킷 증설 필요

링크 활용률이 서서히 증가하여 대역폭 낭비 발생

고 지연

각 RTT마다 윈도우가 확장되므로 총 소요 시간이 김

연결 설정 및 전송 완료 지연이 길어짐

고 BDP

위의 두 요소가 결합되어 영향이 증폭됨

전송 효율이 현저히 저하되고 응답 시간이 나빠짐

이러한 문제점을 해결하기 위해 초기 혼잡 윈도우 값을 증가시키거나, TCP CUBIC이나 BBR과 같이 대역폭과 지연을 보다 적극적으로 측정하여 슬로우 스타트 단계를 보완하거나 대체하는 새로운 혼잡 제어 알고리즘이 제안되고 채택되었다.

5. 대안 및 개선 알고리즘

슬로우 스타트 알고리즘은 특히 고대역폭-고지연(BDP) 네트워크 환경에서 링크 용량을 탐색하는 데 시간이 오래 걸리고, 패킷 손실에 취약하다는 한계를 가집니다. 이러한 문제를 해결하기 위해 여러 대안 및 개선 알고리즘이 제안되고 표준 TCP에 통합되었습니다.

대표적인 개선 알고리즘으로는 TCP BIC와 TCP CUBIC이 있습니다. TCP BIC은 패킷 손실을 혼잡의 유일한 신호로 보는 기존 접근법에서 벗어나, RTT를 고려한 이진 탐색 기반의 증감 방식을 사용합니다. 이는 대역폭을 더 공격적으로 늘리다가 혼잡이 감지되면 신속하게 줄이는 방식으로, 고속 네트워크에서의 성능을 크게 향상시켰습니다. TCP CUBIC은 BIC의 복잡성을 줄이고 더욱 매끄러운 성장 곡선을 제공하기 위해 개발되었습니다. 3차 함수를 사용하여 혼잡 윈도우를 조절하며, 최근 혼잡 발생 지점을 기억하고 그 근처에서 더 신중하게 윈도우를 확장합니다. CUBIC은 현재 리눅스 커널의 기본 TCP 혼잡 제어 알고리즘으로 널리 채택되어 있습니다.

또 다른 혁신적인 접근법은 BBR(Bottleneck Bandwidth and Round-trip propagation time)입니다. BBR은 패킷 손실을 혼잡의 지표로 사용하는 전통적인 방식을 근본적으로 재고합니다. 대신, 네트워크 경로의 실제 물리적 특성인 최대 대역폭과 최소 RTT를 지속적으로 측정하여 모델을 구축하고, 이 모델을 기반으로 데이터 전송 속도를 결정합니다. 목표는 버퍼블로트를 유발하지 않으면서도 링크를 최대한 활용하는 것이며, 결과적으로 지연 시간을 줄이고 처리량을 안정화시키는 효과를 보입니다.

알고리즘

핵심 메커니즘

주요 목표/특징

TCP BIC

이진 탐색 기반의 혼잡 윈도우 조절

고대역폭 네트워크에서의 공격적 대역폭 활용

TCP CUBIC

3차 함수를 이용한 혼잡 윈도우 조절

BIC보다 간결하고 안정적인 성장, 리눅스 기본 알고리즘

BBR

대역폭과 RTT 측정 기반 모델링

패킷 손실 무관, 버퍼블로트 감소 및 지연 최소화

이 외에도 데이터센터 환경을 위해 설계된 DCTCP(Data Center TCP)나 초기 슬로우 스타트를 가속화하는 TCP HyStart 같은 알고리즘들도 특정 환경의 문제를 해결합니다. 이러한 발전은 네트워크 조건의 다양성에 맞춰 혼잡 제어의 패러다임이 단순한 손실 반응에서 능동적 모델링과 환경 특화로 진화하고 있음을 보여줍니다.

5.1. TCP BIC 및 CUBIC

TCP BIC는 2004년에 제안된 알고리즘으로, 고대역폭-고지연 네트워크에서 슬로우 스타트 및 혼잡 회피의 선형적 증가 방식이 링크 용량을 효율적으로 활용하지 못하는 문제를 해결하기 위해 개발되었다. 핵심 아이디어는 패킷 손실을 혼잡의 이진 신호로 간주하고, 손실이 발생한 윈도우 크기와 손실 직전의 윈도우 크기의 중간값을 새로운 목표로 삼는 것이다. 이는 손실이 발생한 시점의 네트워크 상태를 근거로 윈도우 크기를 조정하는 방식으로, 기하급수적 증가와 선형 증가 사이를 효율적으로 탐색한다. BIC는 특히 장거리 고속 네트워크에서 기존 TCP Reno보다 우수한 확장성을 보였다.

그러나 BIC는 윈도우 크기 조정 시 공격적으로 증가하는 구간이 존재하여 RTT가 서로 다른 여러 TCP 연결 간의 공정성 문제를 야기할 수 있었다. 이 문제를 해결하기 위해 등장한 것이 TCP CUBIC이다. CUBIC는 2008년에 제안되었으며, BIC의 핵심 논리를 유지하되, 윈도우 증가 함수를 3차 함수(큐빅 함수)로 단순화했다. 증가 함수는 시간의 3차 함수로 표현되며, 마지막으로 패킷 손실이 발생한 시점을 함수의 중심으로 설정한다. 이 방식은 RTT에 독립적으로 동작하므로, 다양한 지연 시간을 가진 흐름 간의 공정성을 크게 향상시킨다.

CUBIC의 동작은 다음과 같은 특징을 가진다.

  • 3차 함수 기반 증가: 윈도우 크기 W(t) = C*(t-K)³ + W_max 공식을 사용한다. 여기서 C는 스케일링 상수, t는 마지막 손실로부터의 경과 시간, K는 윈도우 크기가 W_max에 도달하는 데 걸리는 시간의 추정치, W_max는 마지막 손실 발생 시의 윈도우 크기이다.

  • 충분히 빠른 탐색: 네트워크 용량이 갑자기 증가한 경우, 함수의 볼록한 부분을 통해 빠르게 대역폭을 탐색한다.

  • 점근적 성장: 윈도우가 W_max에 가까워지면 함수의 오목한 부분으로 인해 증가 속도가 느려져 네트워크를 안정적으로 유지한다.

특성

TCP BIC

TCP CUBIC

핵심 원리

이진 탐색을 통한 목표 윈도우 설정

시간의 3차 함수를 통한 윈도우 조정

RTT 공정성

RTT에 민감하여 공정성 문제 존재

RTT에 독립적으로 동작하여 공정성 향상

수학적 모델

조각별 선형 함수

연속적인 3차 함수

표준화

리눅스 커널의 초기 고속 TCP

리눅스의 기본 혼잡 제어 알고리즘 (2.6.19 이후)

CUBIC는 그 우수한 확장성과 공정성으로 인해 리눅스 운영체제의 기본 TCP 혼잡 제어 알고리즘으로 채택되었으며, 현재까지도 인터넷에서 가장 널리 사용되는 알고리즘 중 하나이다. 이는 기존의 TCP Reno가 가진 고대역폭-고지연 네트워크에서의 성능 한계를 극복하는 데 기여했다.

5.2. BBR (Bottleneck Bandwidth and Round-trip propagation time)

BBR(Bottleneck Bandwidth and Round-trip propagation time)은 구글이 2016년에 발표한 새로운 TCP 혼잡 제어 알고리즘이다. 기존의 슬로우 스타트 알고리즘 및 혼잡 회피를 포함한 대부분의 TCP 알고리즘이 패킷 손실을 혼잡의 주요 신호로 삼는 데 반해, BBR은 패킷 손실을 명시적인 혼잡 신호로 사용하지 않는다. 대신, 네트워크 경로의 실제 용량인 병목 대역폭(Bottleneck Bandwidth)과 왕복 지연 시간(RTT)을 지속적으로 측정하여 이 두 가지 파라미터의 곱인 BDP(Bandwidth-Delay Product)를 모델링한다. 이 모델을 바탕으로 데이터 전송 속도를 조절하여 대역폭을 최대한 활용하면서도 큐잉 지연을 최소화하는 것을 목표로 한다.

BBR의 핵심 동작은 네트워크 상태를 탐색하는 '상태 머신'에 기반한다. 주요 상태는 다음과 같다.

상태

목적

주요 동작

Startup

사용 가능한 대역폭을 빠르게 탐색

전송 속도를 지수적으로 증가시킴

Drain

Startup으로 인해 발생한 큐를 배출

전송 속도를 급격히 낮춤

ProbeBW

대역폭 변동을 모니터링 및 추종

8개의 주기로 구성된 패턴으로 속도를 변동시킴

ProbeRTT

최소 RTT를 주기적으로 재측정

전송 속도를 매우 �춰 큐를 비우고 RTT를 측정

Startup 단계는 전통적인 슬로우 스타트와 유사하게 대역폭을 빠르게 찾지만, 목표는 손실 발생이 아닌 전송 속도 증가에 따른 RTT 증가율 변화를 감지하는 것이다. 일단 대역폭 증가가 정체되면 Drain 단계로 전환되어 네트워크 버퍼에 쌓인 패킷을 제거한다. 이후 대부분의 시간을 보내는 ProbeBW 단계에서는 대역폭 변동에 민첩하게 대응하기 위해 주기적으로 전송 속도를 높였다 낮추는 방식을 사용한다.

BBR은 고대역폭-고지연(LFN) 환경이나 패킷 손실이 빈번한 무선 네트워크에서 기존 손실 기반 혼잡 제어 알고리즘보다 더 높은 처리량과 더 낮은 지연을 보이는 경우가 많다. 또한, 네트워크 버퍼블로트 현상을 유발하지 않도록 설계되었다는 점이 큰 장점이다. 그러나 상대적으로 짧은 RTT를 가진 흐름과의 공정성 문제나, 갑작스러운 대역폭 감소에 대한 추종 속도 등이 개선 과제로 지적된다. BBR은 현재 구글의 내부 네트워크 및 유튜브, 구글 클라우드 등 여러 서비스에 적용되어 성능 향상을 이루었다.

6. 실제 적용 사례

슬로우 스타트 알고리즘은 TCP 혼잡 제어의 핵심 구성 요소로서, 현대 네트워크 응용 프로그램의 성능에 직접적인 영향을 미친다. 대표적인 적용 사례로는 웹 브라우저의 페이지 로딩 최적화가 있다. 최신 브라우저는 하나의 페이지를 로드하기 위해 여러 개의 TCP 연결을 동시에 수립하는데, 각 연결은 독립적인 슬로우 스타트 단계를 거친다. 이는 초기 혼잡 윈도우가 작기 때문에 첫 번째 RTT 동안 전송할 수 있는 데이터 양이 제한되는 문제를 야기한다. 이를 완화하기 위해 TCP Fast Open 같은 확장 기술이 연구되고 적용되어, 핸드셰이크 과정에서 데이터 전송을 가능하게 함으로써 초기 지연을 줄인다.

미디어 스트리밍 서비스에서는 지연 시간이 중요한 품질 요소이다. VOD 서비스는 일반적으로 큰 버퍼를 사용하므로 슬로우 스타트로 인한 초기 지연이 상대적으로 덜 중요할 수 있다. 그러나 실시간 라이브 스트리밍이나 화상 통화에서는 연결 초기 또는 네트워크 상태 변화 후의 슬로우 스타트 단계가 버퍼링이나 지연을 유발할 수 있다. 이러한 서비스들은 종종 UDP 기반의 QUIC 프로토콜을 채택하는데, QUIC는 연결 설정 지연을 줄이고, 더 빠른 혼잡 제어 시작을 가능하게 하여 슬로우 스타트의 전통적인 한계를 우회하려고 시도한다.

데이터센터 네트워크 환경은 극단적으로 짧은 RTT와 높은 대역폭을 특징으로 한다. 이러한 환경에서 표준 TCP Reno나 CUBIC의 슬로우 스타트는 혼잡 윈도우를 기하급수적으로 빠르게 증가시키지만, 여전히 여러 RTT가 소요된다. 데이터센터 내의 마이크로버스트 트래픽에 대응하기에는 이 속도가 충분히 빠르지 않을 수 있다. 따라서 데이터센터 TCP(DCTCP)나 TIMELY 같은 전문화된 프로토콜은 ECN을 적극 활용하거나 RTT 변화를 측정하여 보다 공격적이거나 신속한 방식으로 사용 가능한 대역폭을 탐색함으로써, 전통적인 슬로우 스타트의 동작을 수정하거나 대체한다.

6.1. 웹 브라우저 및 스트리밍 서비스

슬로우 스타트 알고리즘은 HTTP를 통한 웹 페이지 로딩 성능에 직접적인 영향을 미친다. 웹 브라우저는 일반적으로 하나의 호스트에 대해 여러 개의 TCP 연결을 동시에 열어 여러 리소스를 병렬로 다운로드한다. 각 연결은 독립적인 슬로우 스타트 단계를 거치기 때문에, 작은 크기의 웹 객체(예: HTML, CSS, 작은 이미지 파일)를 전송하는 동안에는 연결이 최대 대역폭을 활용하지 못하고 종료될 수 있다. 이는 특히 지연 시간이 긴 네트워크에서 웹 페이지의 전체 로드 시간을 증가시키는 요인으로 작용한다[5].

이러한 문제를 완화하기 위해 TCP 초기 혼잡 윈도우 크기는 역사적으로 증가해 왔으며, 현대의 웹 브라우저와 서버는 TLS 핸드셰이크 과정에서 데이터 전송을 시작하는 TCP Fast Open 같은 최적화 기법을 지원하기도 한다. 또한, HTTP/2나 HTTP/3 프로토콜은 멀티플렉싱을 통해 단일 연결로 여러 스트림을 처리함으로써 슬로우 스타트의 빈번한 발생을 줄이는 효과를 낸다.

스트리밍 서비스, 특히 적응형 비트레이트 스트리밍을 사용하는 경우에도 슬로우 스타트는 중요한 고려 사항이다. 비디오 재생이 시작되기 전의 초기 버퍼링 시간은 클라이언트가 서버로부터 첫 번째 데이터 세그먼트를 다운로드하는 속도에 좌우된다. 슬로우 스타트 단계에서의 전송 속도는 느리게 증가하므로, 높은 비트레이트의 비디오 품질로 빠르게 전환하는 데 걸리는 시간이 길어질 수 있다. 많은 스트리밍 제공업체는 전 세계에 분산된 콘텐츠 전송 네트워크 서버를 활용하여 왕복 시간을 줄이고, 슬로우 스타트 기간의 성능 저하를 최소화한다.

6.2. 데이터센터 네트워크(TCP in Datacenter)

데이터센터 네트워크는 짧은 왕복 시간과 높은 대역폭, 그리고 낮은 패킷 손실률을 특징으로 합니다. 이러한 환경에서 전통적인 슬로우 스타트 알고리즘은 링크 용량을 빠르게 탐색하는 장점이 있지만, 매우 짧은 흐름의 경우 연결이 종료될 때까지 혼잡 윈도우가 충분히 성장하지 못해 성능을 제한할 수 있습니다. 또한, 많은 수의 짧은 연결이 동시에 슬로우 스타트 단계에 진입하면 순간적인 버퍼 오버플로우와 미세한 혼잡을 유발할 수 있습니다.

이러한 문제를 해결하기 위해 데이터센터 특화 TCP 변형들이 개발되었습니다. TCP DCTCP는 ECN을 적극적으로 활용하여 네트워크 혼잡을 초기에 감지하고, 혼잡 윈도우를 더 세밀하게 조절합니다. TCP RAPID는 초기 혼잡 윈도우를 크게 설정하거나, 대역폭 지연 곱을 사전에 예측하는 방식으로 슬로우 스타트 단계를 사실상 우회하거나 단축합니다. 한편, Google의 BBR 알고리즘은 패킷 손실 대신 대역폭과 지연 시간을 직접 측정하여 혼잡을 제어하는 다른 접근법을 제시합니다.

다음은 데이터센터 환경에서의 주요 TCP 혼잡 제어 알고리즘 특징을 비교한 표입니다.

알고리즘

핵심 메커니즘

데이터센터 환경에서의 주요 목적

TCP DCTCP

ECN 마크를 기반으로 한 정밀한 혼잡 신호 활용

낮은 지연과 높은 처리량 유지, 큐 잠금 현상 방지

TCP RAPID

초대역폭 예측 또는 큰 초기 윈도우 사용

짧은 흐름의 지연 시간 최소화

BBR

대역폭과 왕복 지연 시간의 실제 측정

대역폭 활용 최대화 및 버퍼블로트 감소

결론적으로, 데이터센터 내부 통신에서는 전통적인 패킷 손실 기반의 혼잡 신호가 비효율적일 수 있어, 슬로우 스타트의 동작을 수정하거나 대체하는 알고리즘이 표준 TCP Reno나 CUBIC보다 더 나은 성능을 보입니다. 이러한 최적화는 분산 파일 시스템, 키-값 저장소, 그리고 마이크로서비스 간의 RPC 호출과 같은 짧은 대기 시간이 요구되는 작업에 필수적입니다.

7. 관련 문서

  • Wikipedia - Slow-start

  • Wikipedia - 슬로우 스타트

  • RFC 5681 - TCP Congestion Control

  • KISA 인터넷 용어사전 - 슬로우 스타트

  • TechTarget - What is slow start?

  • GeeksforGeeks - TCP Congestion Control

  • ScienceDirect - Slow Start Algorithm

리비전 정보

버전r1
수정일2026.02.14 21:22
편집자unisquads
편집 요약AI 자동 생성
히스토리로 돌아가기