문서의 각 단락이 어느 리비전에서 마지막으로 수정되었는지 확인할 수 있습니다. 왼쪽의 정보 칩을 통해 작성자와 수정 시점을 파악하세요.

흐름 제어 | |
이름 | 흐름 제어 |
영문명 | Flow Control |
분류 | |
목적 | 송신자와 수신자 간 데이터 전송 속도 조절 |
주요 메커니즘 | 슬라이딩 윈도우, ACK 확인 응답 |
관련 개념 | |
상세 정보 | |
작동 원리 | 수신자의 처리 능력에 맞춰 송신자가 데이터 전송 속도를 조절 |
슬라이딩 윈도우 | 수신 가능한 데이터 양을 윈도우 크기로 통지 |
윈도우 크기 | 수신 버퍼의 여유 공간에 따라 동적으로 변경 |
ACK 패킷 | 데이터 수신 확인 및 새로운 윈도우 크기 통지 |
혼잡 제어와 차이 | 흐름 제어는 수신자 중심, 혼잡 제어는 네트워크 상태 중심 |
주요 알고리즘 | Stop-and-Wait, Go-Back-N, Selective Repeat |
TCP 구현 | TCP 헤더의 윈도우 크기 필드를 활용 |
문제 상황 | 수신 버퍼 오버플로우 방지 |

흐름 제어는 TCP와 같은 신뢰성 있는 전송 프로토콜에서 데이터 송신자와 수신자 간의 데이터 처리 속도 차이를 조절하는 메커니즘이다. 송신 측이 수신 측의 처리 능력을 초과하는 속도로 데이터를 전송하면, 수신 측의 버퍼가 가득 차 데이터 손실이 발생할 수 있다. 흐름 제어는 이러한 문제를 방지하여 수신 측이 안정적으로 데이터를 처리할 수 있는 속도로 송신률을 조정한다.
흐름 제어의 핵심은 수신 측이 자신의 현재 수용 가능한 버퍼 공간, 즉 수신 윈도우 크기를 송신 측에 지속적으로 알려주는 것이다. 송신 측은 이 윈도우 크기 내에서만 확인응답(ACK)을 받지 않은 데이터를 전송할 수 있다. 이를 통해 수신 측의 버퍼 오버플로를 방지하고, 네트워크 자원의 효율적 사용을 도모한다.
흐름 제어는 주로 송신자와 수신자 간의 속도 불일치를 해결하는 반면, 네트워크 자체의 혼잡을 관리하는 혼잡 제어와는 구별된다. 두 메커니즘은 TCP에서 함께 작동하여 데이터 전송의 효율성과 안정성을 동시에 보장한다.

TCP 연결에서 데이터를 송신하는 측과 수신하는 측은 처리 능력이 다를 수 있습니다. 수신 측의 애플리케이션이 데이터를 처리하는 속도보다 송신 측이 데이터를 전송하는 속도가 빠르면, 수신 측의 버퍼가 가득 차 데이터 손실이 발생할 수 있습니다. 흐름 제어는 이러한 문제를 방지하기 위해 송신 측의 데이터 전송 속도를 수신 측의 처리 능력에 맞추는 메커니즘입니다.
흐름 제어가 없다면, 수신 측의 버퍼 오버플로우로 인해 패킷이 손실됩니다. 손실된 패킷은 재전송을 유발하며, 이는 네트워크 자원의 낭비와 전체 처리량 감소로 이어집니다. 또한, 빠른 송신자와 느린 수신자 사이의 속도 불일치는 효율적인 전이중 통신을 방해합니다.
따라서 흐름 제어는 데이터의 신뢰성 있는 전달을 보장하는 TCP의 핵심 기능 중 하나입니다. 이는 수신 측이 현재 수용할 수 있는 데이터 양을 송신 측에 지속적으로 알림으로써 구현됩니다. 이를 통해 네트워크 자원을 효율적으로 사용하고, 수신 측의 시스템에 과부하를 주지 않도록 합니다.

슬라이딩 윈도우 프로토콜은 흐름 제어를 구현하는 핵심 기법이다. 이 프로토콜은 송신자가 수신자의 처리 능력을 초과하지 않는 범위 내에서 연속적으로 데이터를 전송할 수 있도록 허용한다. 기본 아이디어는 수신자가 현재 수용 가능한 데이터의 양, 즉 수신 윈도우 크기를 송신자에게 지속적으로 알려주고, 송신자는 이 크기만큼의 데이터를 ACK 응답을 기다리지 않고 한꺼번에 보내는 것이다. 데이터가 성공적으로 수신되고 확인 응답이 돌아오면, 윈도우는 확인된 데이터만큼 "슬라이드"하여 이동하며, 새로운 데이터를 윈도우 내에서 전송할 수 있게 된다.
이 프로토콜의 동작은 두 가지 주요 변수인 송신 윈도우와 수신 윈도우에 의해 결정된다. 송신 윈도우는 송신 측에서 현재 전송할 수 있지만 아직 확인 응답을 받지 못한 데이터의 범위를 정의한다. 수신 윈도우는 수신 측의 버퍼에 남아 있는 빈 공간의 크기로, 수신자의 현재 처리 능력을 나타낸다. 실제 송신 가능한 데이터의 양은 이 두 윈도우 크기 중 더 작은 값에 의해 제한된다. 송신자는 수신자로부터 받은 ACK 패킷에 포함된 윈도우 크기 정보를 바탕으로 자신의 송신 윈도우를 조절한다.
윈도우 크기의 조절은 네트워크 상태와 수신자 상태에 따라 동적으로 이루어진다. 수신자의 애플리케이션이 데이터를 빠르게 소비하여 버퍼 공간이 늘어나면, 수신자는 더 큰 윈도우 크기를 알림으로써 송신율을 높일 수 있다. 반대로 버퍼가 가득 차면 윈도우 크기는 0이 되어 송신을 일시 중단시킨다. 이 동적 조절을 통해, 한정된 버퍼 크기를 가진 수신자가 송신자의 빠른 데이터 전송 속도를 따라가지 못해 오버플로가 발생하는 것을 방지한다.
용어 | 설명 |
|---|---|
송신 측에서 ACK를 받지 않은 상태로 전송할 수 있는 데이터의 최대 범위. | |
수신 측의 버퍼 여유 공간을 바이트 단위로 나타낸 값. TCP 헤더의 'Window' 필드를 통해 전달된다. | |
ACK를 받은 데이터는 윈도우에서 벗어나고, 새로운 데이터가 윈도우 안으로 들어와 전송 대상이 되는 과정. |
송신 윈도우는 송신자가 ACK를 기다리지 않고 한 번에 전송할 수 있는 데이터의 양을 정의한다. 이 윈도우 내의 데이터는 TCP 세그먼트로 캡슐화되어 네트워크로 전송된다. 송신자는 수신자로부터 ACK를 받으면 윈도우를 해당 데이터 양만큼 앞으로 이동시켜 새로운 데이터의 전송을 가능하게 한다. 송신 윈도우의 크기는 수신자가 통지하는 수신 윈도우 크기와 네트워크의 혼잡 상태에 의해 동적으로 결정된다.
수신 윈도우는 수신자의 버퍼 여유 공간을 바이트 단위로 나타낸 값이다. 이는 수신 측 TCP가 현재 처리할 수 있는 데이터의 최대량을 의미한다. 수신자는 모든 ACK 세그먼트에 이 윈도우 크기 정보를 포함시켜 송신자에게 지속적으로 알린다. 수신 애플리케이션이 버퍼의 데이터를 읽어가면 버퍼 공간이 생기고, 이에 따라 수신 윈도우 크기도 커진다.
두 윈도우의 관계는 다음과 같이 요약할 수 있다.
윈도우 | 주체 | 역할 | 결정 요소 |
|---|---|---|---|
송신 윈도우 | 송신자 | ACK 없이 전송 가능한 데이터 범위 | 수신 윈도우, 혼잡 윈도우 |
수신 윈도우 | 수신자 | 수신 버퍼의 가용 공간 | 애플리케이션의 데이터 처리 속도 |
송신 윈도우의 실제 크기는 수신 윈도우와 혼잡 윈도우 중 더 작은 값으로 제한된다. 이는 수신자의 처리 능력을 초과하는 데이터 전송을 방지함과 동시에 네트워크의 혼잡을 유발하지 않도록 하는 이중 안전 장치 역할을 한다. 따라서 효율적인 흐름 제어는 송신 윈도우와 수신 윈도우의 협력을 통해 이루어진다.
윈도우 크기는 TCP 연결의 성능을 결정하는 핵심 매개변수이다. 이 크기는 수신자의 현재 처리 능력에 따라 동적으로 조절된다. 수신 측은 ACK 패킷에 포함된 윈도우 크기 필드를 통해 자신의 수신 버퍼에 남아 있는 가용 공간을 송신 측에 알린다. 송신 측은 이 값을 현재의 송신 윈도우 크기로 설정하여, 수신 측이 처리할 수 있는 범위 내에서만 데이터를 전송한다.
윈도우 크기 조절의 주요 목적은 수신 버퍼 오버플로를 방지하는 것이다. 수신 애플리케이션이 버퍼에서 데이터를 읽는 속도보다 송신 속도가 빠르면 버퍼가 가득 차게 된다. 이 경우 수신 측은 윈도우 크기를 0으로 선언하여(제로 윈도우) 송신을 일시 중지시킨다. 이후 애플리케이션이 데이터를 처리하고 버퍼 공간이 생기면, 새로운 윈도우 크기를 담은 윈도우 업데이트 패킷을 보내 송신을 재개한다.
초기 윈도우 크기 필드는 16비트로, 최대 윈도우 크기는 65,535바이트로 제한되었다. 고대역폭·고지연 네트워크에서는 이 크기가 병목 현상을 일으킬 수 있다. 이 문제를 해결하기 위해 윈도우 스케일링 옵션이 도입되었다. 이 옵션은 연결 설정 단계에서 협상되며, 16비트 값을 특정 비트 수만큼 시프트하여 최대 1기가바이트까지의 윈도우 크기를 지원한다.
조절 요소 | 설명 | 영향 |
|---|---|---|
수신 버퍼 가용 공간 | 수신 측 TCP 스택의 빈 버퍼 크기 | 직접적으로 윈도우 크기를 결정 |
애플리케이션 처리 속도 | 데이터를 소켓 버퍼에서 읽는 속도 | 간접적으로 가용 공간에 영향 |
네트워크 조건 | 윈도우 스케일링 필요성 결정 | |
시스템 리소스 | 수신 호스트의 메모리와 CPU 여유도 | 최대 버퍼 크기 설정에 제약 |
이러한 동적 조절 메커니즘은 송신자가 수신자의 처리 능력을 초과하는 데이터를 전송하지 않도록 보장하여, 효율적이고 안정적인 데이터 전송을 가능하게 한다.

TCP 흐름 제어의 핵심은 ACK 응답과 윈도우 업데이트를 통해 데이터 전송 속도를 동적으로 조절하는 것이다. 송신자는 데이터를 보내고, 수신자는 이를 성공적으로 받을 때마다 ACK 패킷을 회신한다. 이 ACK 패킷에는 다음으로 기대하는 시퀀스 번호와 함께 현재의 수신 윈도우 크기 정보가 담겨 있다. 송신자는 이 정보를 바탕으로 자신의 송신 윈도우를 조정하여, 수신자의 버퍼 공간을 초과하지 않는 범위 내에서 데이터를 전송한다.
수신자의 버퍼가 가득 차면, 수신자는 ACK 패킷의 윈도우 크기 필드에 '0'을 설정하여 제로 윈도우 상태를 알린다. 이는 송신자에게 "일시적으로 더 이상 데이터를 보내지 마라"는 신호이다. 송신자는 제로 윈도우 상태에 들어가면 데이터 전송을 중단한다. 그러나 이후 수신 버퍼가 비워져 윈도우 크기가 다시 늘어났을 때, 이를 알리는 새로운 ACK 패킷이 유실될 가능성이 있다. 이를 해결하기 위해 TCP는 윈도우 프로브 메커니즘을 사용한다.
윈도우 프로브는 송신자가 주기적으로(일반적으로 재전송 타임아웃 주기로) 매우 작은 크기(보통 1바이트)의 데이터 세그먼트를 수신자에게 보내는 것이다. 이 프로브 패킷에 대한 응답으로 수신자는 현재의 윈도우 크기를 담은 ACK를 보내게 되고, 송신자는 이를 통해 수신자의 버퍼 상태가 개선되었는지 확인하고 정상적인 데이터 전송을 재개할 수 있다. 이 과정은 제로 윈도우 상태가 해제될 때까지 반복된다.
용어 | 설명 |
|---|---|
ACK 응답 | 수신자가 데이터 수신을 확인하고 다음 기대 번호 및 현재 수신 가능 윈도우 크기를 송신자에게 알리는 패킷. |
수신자의 버퍼가 가득 차 더 이상 데이터를 받을 수 없어, 윈도우 크기를 0으로 통지한 상태. | |
송신자가 제로 윈도우 상태에서 수신자의 버퍼 여유 공간을 탐색하기 위해 주기적으로 보내는 작은 세그먼트. |
TCP에서 흐름 제어는 수신자의 버퍼 용량을 초과하지 않도록 데이터 전송 속도를 조절하는 메커니즘이다. 이 메커니즘의 핵심은 수신자가 송신자에게 보내는 ACK 응답 패킷에 포함된 윈도우 크기 정보를 통해 이루어진다. 수신자는 자신의 가용 버퍼 공간을 계산하여, TCP 헤더의 '윈도우 크기' 필드에 수신 윈도우 값을 담아 ACK와 함께 보낸다. 이 값은 송신자에게 "지금부터 이만큼의 데이터를 더 보내도 된다"는 허용량을 알려주는 역할을 한다.
송신자는 ACK를 수신할 때마다 두 가지 중요한 정보를 확인한다. 첫째는 누적 확인 응답 번호로, 이 번호까지의 데이터가 성공적으로 도착했음을 의미한다. 둘째는 동일 패킷에 실린 새로운 수신 윈도우 값이다. 송신자는 이 값을 바탕으로 자신의 송신 윈도우를 즉시 업데이트한다. 송신 윈도우는 ACK로 확인된 데이터의 마지막 지점부터, 수신자가 허용한 윈도우 크기만큼의 범위를 정의한다. 송신자는 이 윈도우 내에 있는 데이터만을 전송할 수 있으며, 윈도우가 이동함에 따라 새로운 데이터를 계속해서 보낼 수 있다.
이 과정은 슬라이딩 윈도우 프로토콜의 동적 특성을 보여준다. 수신자의 애플리케이션이 데이터를 빠르게 소비하여 버퍼가 빌 경우, 수신 윈도우는 커지고 ACK를 통해 이를 알리게 된다. 그러면 송신자는 더 빠른 속도로 데이터를 전송할 수 있다. 반대로 수신자의 처리 속도가 느려지면 수신 윈도우는 줄어들고, 송신자는 그에 맞춰 전송 속도를 늦춘다. 이렇게 ACK 응답을 통한 지속적인 윈도우 업데이트는 수신자의 상태에 맞춰 유연하게 전송률을 조정하는 폐루프 제어 시스템을 구성한다.
수신자의 수신 버퍼가 가득 차서 더 이상 데이터를 수용할 수 없는 상태를 제로 윈도우라고 부른다. 이 경우, 수신자는 ACK 패킷을 보낼 때 윈도우 크기 필드를 0으로 설정하여 송신자에게 현재 수신 가능한 공간이 없음을 알린다.
송신자는 제로 윈도우 상태를 통보받으면 데이터 전송을 즉시 중단한다. 그러나 수신 버퍼가 비워져 윈도우 크기가 다시 0보다 커졌을 때, 수신자가 이를 알리기 위한 별도의 ACK 패킷을 보내지 않으면 연결이 영구적으로 정체될 수 있다. 이 문제를 해결하기 위해 TCP는 윈도우 프로브 메커니즘을 사용한다. 송신자는 제로 윈도우 상태에 진입한 후, 일정 주기(보통 지수 백오프 알고리즘에 따라 증가하는 간격)로 1바이트의 더미 데이터를 담은 세그먼트를 수신자에게 보낸다. 이 프로브 패킷에 대한 응답으로 수신자는 현재의 윈도우 크기를 담은 ACK를 회신하여, 송신자가 전송을 재개할 시점을 파악할 수 있게 한다.
상태 | 송신자 동작 | 수신자 응답 |
|---|---|---|
정상 | 데이터 전송 | ACK + 윈도우 크기 |
제로 윈도우 | 전송 중단 | ACK + 윈도우 크기(0) |
프로빙 중 | 1바이트 프로브 전송 | ACK + 현재 윈도우 크기 |
윈도우 복구 | 정상 전송 재개 | ACK + 윈도우 크기 |
이 메커니즘은 데드락을 방지하는 데 필수적이다. 윈도우 프로브는 네트워크 자원을 최소한으로 사용하면서 연결의 활성 상태를 유지하고, 수신 측의 처리 능력에 맞춰 데이터 흐름을 조율하는 역할을 한다.

흐름 제어와 혼잡 제어는 모두 TCP에서 데이터 전송 속도를 조절하는 메커니즘이다. 그러나 그 목적과 작동 범위가 근본적으로 다르다. 흐름 제어는 수신자의 처리 능력을 고려하여 송신자가 데이터를 너무 빠르게 보내지 않도록 하는 수신자 중심의 로컬 메커니즘이다. 반면, 혼잡 제어는 네트워크 전체의 상태를 고려하여 네트워크의 포화 상태를 방지하고자 하는 글로벌 메커니즘이다. 두 제어 방식은 독립적으로 설계되었지만, 실제 TCP 동작에서는 서로 긴밀하게 상호작용하며 함께 작동한다.
두 메커니즘은 최종적으로 송신 윈도우 크기를 결정하는 데 공동으로 관여한다. 송신자는 수신자로부터 알려진 수신 윈도우 크기와 자신이 추정한 혼잡 윈도우 크기 중 더 작은 값을 사용하여 실제 데이터 전송량을 결정한다. 이 관계는 다음 공식으로 요약된다.
용어 | 설명 | 결정 주체 |
|---|---|---|
수신 윈도우 (rwnd) | 수신자의 가용 버퍼 공간. 흐름 제어의 기준. | 수신자 |
혼잡 윈도우 (cwnd) | 네트워크 혼잡을 고려한 송신자의 전송 한도. 혼잡 제어의 기준. | 송신자 |
실제 송신 윈도우 |
| 송신자 |
예를 들어, 수신자가 큰 버퍼를 가지고 있어 rwnd가 64KB라고 알려줬더라도, 네트워크 경로에 혼잡이 발생하여 송신자의 cwnd가 16KB로 줄어들었다면, 실제 전송은 16KB로 제한된다. 반대로 네트워크가 원활하여 cwnd가 크더라도, 수신자의 버퍼가 가득 차 rwnd가 0이 되면 전송은 즉시 중단된다[1]] 프로브 메커니즘이 동작함].
따라서 TCP의 효율적인 데이터 전송은 수신자의 처리 능력(흐름 제어)과 네트워크의 수용 능력(혼잡 제어)이라는 두 가지 제약 조건을 동시에 만족시키는 과정이다. 현대의 고속 네트워크에서는 윈도우 스케일링 옵션을 통해 rwnd의 한계를 확장하고, BBR과 같은 새로운 혼잡 제어 알고리즘은 전송 속도와 RTT(왕복 시간)를 함께 고려하여 cwnd를 조절함으로써 두 메커니즘의 협력을 더욱 최적화한다.

TCP 흐름 제어의 기본 메커니즘은 신뢰성 있는 데이터 전송을 보장하지만, 네트워크 효율성을 저하시킬 수 있는 요소를 포함한다. 이를 개선하기 위해 여러 최적화 기법이 개발되었다.
주요 최적화 기법으로는 지연 ACK와 윈도우 스케일링 옵션이 있다. 지연 ACK는 수신 측이 ACK 패킷을 매 데이터 세그먼트마다 즉시 보내는 대신, 짧은 시간(일반적으로 200ms 이내) 동안 지연시켜 자신의 응답 데이터와 함께 '피기백(piggyback)'하거나, 연속된 세그먼트에 대해 하나의 누적 ACK로 응답하는 방식이다. 이는 네트워크 상의 패킷 수를 줄여 오버헤드를 감소시킨다. 반면, 지연 시간이 길어지면 송신 측의 재전송 타이머가 불필요하게 만료될 수 있어 주의가 필요하다.
기본 TCP 헤더의 윈도우 크기 필드는 16비트로, 최대 65,535바이트까지의 윈도우만 표현할 수 있다. 고대역폭·고지연 네트워크 환경에서는 이 크기로도 대역폭 지연 곱을 채우기에 부족해 성능이 제한된다. 윈도우 스케일링 옵션은 TCP 3-way handshake 단계에서 협상되며, 윈도우 크기에 스케일 팩터(2의 지수)를 곱하여 실제 윈도우 크기를 확장한다[2]. 이를 통해 기가비트 이상의 고속 네트워크에서도 파이프라인을 가득 채울 수 있게 된다.
이 외에도, 빠른 재전송과 빠른 회복 알고리즘은 패킷 손실에 대한 대응을 최적화하여 흐름 제어의 정체 기간을 단축시키는 데 기여한다. 이러한 기법들은 혼잡 제어 알고리즘과 함께 작동하여 TCP의 전송 효율을 극대화한다.
지연 ACK는 TCP의 흐름 제어 및 성능 최적화를 위해 설계된 기법 중 하나이다. 이 기법은 수신 측이 데이터그램을 받을 때마다 즉시 ACK 응답을 보내지 않고, 짧은 시간 동안 기다렸다가 여러 ACK를 하나로 묶어서 보내거나, 아예 보낼 응답 데이터가 있으면 그 데이터와 함께 ACK를 실어 보내는 방식을 말한다.
주된 목적은 네트워크 상의 패킷 수를 줄여 오버헤드를 감소시키는 것이다. TCP 연결에서는 일반적으로 수신 측이 데이터 세그먼트를 성공적으로 받을 때마다 ACK 패킷을 송신 측으로 보내야 한다. 만약 작은 크기의 데이터가 빈번하게 오간다면, 네트워크는 많은 수의 ACK 패킷으로 인해 비효율적으로 동작할 수 있다. 지연 ACK는 이러한 작은 ACK 패킷들의 수를 줄여 대역폭 이용 효율을 높인다.
구체적인 동작은 다음과 같다. 수신 측은 데이터를 받은 후 즉시 ACK를 보내지 않고, 일반적으로 200밀리초 이내의 짧은 타이머를 가동한다. 이 지연 시간 동안 두 가지 상황이 발생할 수 있다.
1. 송신 측으로 보낼 응용 계층 데이터가 생성되면, 이 데이터 세그먼트에 ACK 정보를 실어 함께 보낸다(이를 피기백*piggyback이라고 함).
2. 두 번째 데이터 세그먼트가 도착하면, 첫 번째 세그먼트에 대한 ACK와 함께 두 번째 세그먼트에 대한 ACK도 한 번에 보낼 수 있다.
3. 타이머가 만료될 때까지 위의 두 상황이 발생하지 않으면, 별도의 ACK 패킷을 전송한다.
이 기법은 네트워크 효율성을 높이지만, 지연 시간으로 인해 RTT가 증가할 수 있고, 이는 혼잡 제어 알고리즘의 동작이나 재전송 타이머에 영향을 미칠 수 있다. 또한, ACK 응답이 지연되면 송신 측의 슬라이딩 윈도우가 빨리 이동하지 못해 전송 속도가 일시적으로 느려질 수도 있다. 따라서 현대 TCP 구현에서는 이러한 트레이드오프를 고려하여 지연 ACK의 사용을 상황에 맞게 조절한다.
TCP의 기본 윈도우 크기 필드는 16비트로, 최대 65,535바이트(약 64KB)까지의 값을 표현할 수 있다. 이는 초기 네트워크 환경에서는 충분했으나, 고대역폭·고지연(장거리 네트워크) 망에서는 대역폭 지연 곱이 이 한계를 초과하여 링크의 효율을 제한하는 요인이 되었다.
이 문제를 해결하기 위해 RFC 1323에서 정의된 윈도우 스케일링 옵션은 윈도우 크기의 유효 범위를 확장한다. 이 옵션은 TCP 3방향 핸드셰이크 과정에서 협상되며, 윈도우 크기 값에 2^S(여기서 S는 스케일 팩터)를 곱하는 방식으로 동작한다. 스케일 팩터 S는 0에서 14 사이의 값을 가질 수 있어, 이론상 최대 윈도우 크기를 1,073,725,440바이트(약 1GB)까지 확장할 수 있다[3].
윈도우 스케일링의 구현과 효과는 다음과 같이 요약할 수 있다.
항목 | 설명 |
|---|---|
협상 시점 | |
동작 방식 | 실제 윈도우 크기 = 공칭 윈도우 크기(16비트 필드 값) * (2^스케일 팩터) |
주요 목적 | |
필수 조건 | 통신 양단의 시스템(OS, 네트워크 스택)이 해당 옵션을 지원해야 함 |
이 옵션은 특히 위성 통신이나 대륙간 고속 백본 망과 같은 환경에서 TCP의 처리량을 획기적으로 향상시키는 핵심 요소이다. 그러나 옵션 협상 실패나 일부 중간 네트워크 장비의 비표준 패킷 조작으로 인해 연결이 실패할 수 있는 잠재적 문제점도 존재한다.

흐름 제어는 네트워크 성능에 직접적인 영향을 미치는 핵심 메커니즘이다. 적절한 흐름 제어는 대역폭 활용률을 극대화하고 지연 시간을 최소화하여 전체 처리량을 향상시킨다. 반면, 비효율적인 흐름 제어는 송신자가 수신자의 처리 속도를 제대로 추정하지 못하게 하여, 대역폭이 충분함에도 불구하고 데이터 전송이 지연되는 현상을 초래한다. 특히 수신 윈도우 크기가 네트워크 용량에 비해 지나치게 작게 설정되면, 송신자는 빈번히 윈도우가 열리기를 기다리며 유휴 상태에 머물게 되어 처리량이 급격히 저하된다.
성능 지표에 대한 구체적인 영향을 살펴보면 다음과 같은 표로 정리할 수 있다.
성능 지표 | 긍정적 영향 (효율적일 때) | 부정적 영향 (비효율적일 때) |
|---|---|---|
처리량 | 작은 윈도우 크기로 인한 빈번한 전송 중단으로 처리량 감소 | |
지연 | ||
자원 활용도 | ||
공정성 | 단일 연결 내에서 수신자의 처리 능력에 맞는 공정한 데이터 전송 보장 | 다중 연결 환경에서 한 연결의 비효율이 다른 연결의 성능을 간접적으로 저하시킬 수 있음[4] |
TCP의 혼잡 제어와 흐름 제어는 상호 작용하며 성능을 결정한다. 혼잡 제어가 네트워크의 포화 상태를 관리한다면, 흐름 제어는 수신 호스트의 처리 한계를 관리한다. 두 메커니즘이 조화를 이루지 못하면 성능이 최적화되지 않는다. 예를 들어, 네트워크에 혼잡이 없더라도 수신 윈도우가 매우 작으면 혼잡 윈도우는 커질 수 없어 실제 성능은 수신 윈도우 크기에 의해 제한받는다. 이는 대역폭 지연 곱이 큰 장거리 고속 네트워크에서 특히 두드러진 문제가 되며, 이를 해결하기 위해 윈도우 스케일링 옵션 같은 최적화 기법이 필요하다.