TCP Sliding Window와 Slow Start: 흐름제어·혼잡제어의 역할
TCP Sliding Window와 Slow Start의 역할, rwnd·cwnd 관계, 혼잡 상황에서의 전송 제어 방식을 정리한다.
2026-08-14 · 최초 발행 2025-08-10
수신자 보호와 네트워크 보호는 다른 문제다
TCP는 신뢰성 있는 데이터 전달을 위해 흐름제어와 혼잡제어를 함께 사용한다. 흐름제어는 송신자와 수신자의 처리 속도 차이를 다루고, 혼잡제어는 네트워크 내부의 혼잡을 감지해 전송량을 조절한다.
Sliding Window는 수신자가 처리할 수 있는 범위 안에서 송신을 진행하도록 돕는다. 반면 Slow Start는 네트워크가 감당할 수 있는 전송량을 연결 과정에서 확인하는 혼잡제어 알고리즘이다.
수신 버퍼 여유를 반영하는 Sliding Window
Sliding Window에서 윈도우는 송신자가 한 번에 전송할 수 있는 데이터의 범위다. 수신자는 버퍼 상태에 따라 윈도우 크기를 조절하고, 그 값을 송신자에게 알린다.
송신자는 ACK를 매번 기다리지 않아도 윈도우 크기만큼 연속 전송할 수 있다. 이 방식은 네트워크 자원을 활용하면서도 수신 측의 처리 한계를 넘지 않도록 한다. 수신 버퍼가 가득 차면 윈도우 크기를 줄이거나 0으로 설정하는 Zero Window 상태가 될 수 있다.
네트워크 상태를 살피는 Slow Start
Slow Start는 송신 측이 혼잡 윈도우(Congestion Window, cwnd)를 조절하는 TCP 혼잡제어 방식이다. 연결 초기에 cwnd는 1MSS(Maximum Segment Size)로 설정되고, ACK를 받을 때마다 1MSS씩 증가한다. 그 결과 RTT마다 cwnd는 2배씩 증가한다.
cwnd가 혼잡 회피(Congestion Avoidance) 임계점에 도달하면 증가 방식은 선형적으로 바뀐다. 타임아웃이 발생하면 cwnd를 1MSS로 재설정하고 Slow Start를 다시 시작한다. 중복 ACK가 감지된 경우에는 혼잡 회피 단계로 전환한다.
rwnd와 cwnd가 각각 제한하는 범위
Sliding Window는 수신 측이 설정한 수신 윈도우(rwnd)를 기준으로 동작한다. 결정 요소는 수신 버퍼의 가용 공간이며, 송신자와 수신자 사이의 처리 속도 차이를 조절하는 데 목적이 있다.
Slow Start는 송신 측이 네트워크 상태를 추정해 혼잡 윈도우(cwnd)를 조절한다. 이 윈도우는 네트워크 혼잡 상태에 따라 달라지며, 혼잡이 네트워크 전체에 미치는 영향을 낮추는 데 초점이 있다.
실제 TCP에서 한 번에 전송할 수 있는 데이터의 양은 둘 가운데 더 작은 값으로 결정된다.
전송 가능한 데이터 양 = min(rwnd, cwnd)
전송 환경에서 함께 나타나는 흐름
본사와 지사 사이에서 데이터를 전송하는 기업 네트워크를 보면, 연결 초기에는 Slow Start에 따라 소량의 데이터부터 보낸다. 네트워크 상태를 파악하면서 전송량이 점진적으로 증가한다.
통신이 안정된 뒤에는 Sliding Window가 수신 측 처리 능력에 맞춰 데이터 전송을 조절한다. 패킷 손실이 감지되면 Slow Start 알고리즘이 다시 동작하고, 혼잡 윈도우 크기가 줄면서 네트워크 부하도 감소한다.
클라우드 스토리지에 대용량 파일을 업로드할 때도 같은 두 제어가 맞물린다. 모바일 환경에서는 제한된 대역폭과 높은 지연시간 때문에 Slow Start의 보수적 접근이 중요하며, 고속 네트워크에서는 Sliding Window를 통해 대역폭 활용을 높일 수 있다. 네트워크 상태가 달라지면 cwnd와 rwnd도 동적으로 조절되어 사용자 체감 성능에 영향을 준다.
BBR과 CUBIC이 바꾸는 혼잡제어 방식
TCP BBR(Bottleneck Bandwidth and Round-trip propagation time)은 Google이 개발한 혼잡제어 알고리즘이다. 패킷 손실보다 네트워크 대역폭과 RTT를 기준으로 혼잡 상태를 판단하며, 기존 Slow Start보다 빠른 대역폭 활용이 가능하다.
CUBIC TCP는 고속 장거리 네트워크에 최적화된 혼잡제어 알고리즘이다. 윈도우 크기를 3차 함수(cubic function)로 증가시켜 효율성을 높인다. Sliding Window와 이런 개선된 혼잡제어 알고리즘을 조합하면 다양한 네트워크 환경에 대한 적응성을 강화할 수 있다.
애플리케이션에서 확인할 지점
버퍼 크기가 너무 작으면 처리량이 떨어지고, 너무 크면 메모리 낭비와 지연시간 증가로 이어지는 Bufferbloat 현상이 발생할 수 있다.
재전송 정책도 네트워크 특성에 맞춰야 한다. RTO(Retransmission Timeout) 설정과 중복 ACK 기반 Fast Retransmit 구현 여부는 전송 지연과 손실 대응 방식에 영향을 준다. 패킷 손실률과 RTT 변화를 모니터링하고, 성능이 저하될 때 원인을 분석할 수 있도록 로깅 메커니즘을 갖추는 일도 필요하다.
Sliding Window와 Slow Start는 각각 수신자와 네트워크를 보호하는 서로 다른 제어 방식이다. TCP 애플리케이션의 전송 문제를 분석할 때는 rwnd와 cwnd 중 어느 쪽이 실제 제한으로 작동하는지 함께 봐야 한다.