본문 바로가기

Library/Computer Network

TCP Flow Control

애플리케이션은 TCP를 통해 다른 애플리케이션으로 데이터를 전송하는 경우 자신의 TCP 소프트웨어에 데이터를 쓴다. TCP 소프트웨어는 그 데이터를 전송 버퍼에 저장하고 데이터의 일부를 세그먼트 담아 이를 목적지 시스템에 배달하기 위해 IP에 전달한다.

이 과정의 주요 요소 가운데 하나가 송신 시스템에서 목적지 시스템으로의 데이터 전송 속도를 조정하는 흐름 제어이다. 목적지 시스템의 버퍼 크기, 네트워크의 패킷 처리 특징 등 여러 가지 이유로 전송 속도를 변경할 것이 요구된다. 이런 이유에서, TCP는 여러 가지 흐름 제어 기법을 갖고 있으며 송신 시스템이 이러한 변경에 적절하게 반응할 수 있게 한다.

원래 RFC 793은 몇 가지 흐름 제어 기법만을 제안하였으며 그 기법 가운데 대부분은 연결 종료를 수신하는 것에 초점이 맞춰져 있다. 가장 중요한 서비스 내용은 다음과 같다.

수신 윈도우의 크기 결정 : TCP는 원격 시스템의 수신 버퍼의 가용 공간, 갱신 주기 및 기타 관련 요소에 기반하여 수신 시스템에서 허용하는 만큼의 데이터만을 전송할 수 있다. 따라서 수신 시스템이 전송 속도를 조절하는 한 가지 방법은 자신이 통보하는 버퍼의 크기를 조절하는 것이다. 결과적으로 이 크기는 송신 시스템이 한 번에 전송할 수 있는 데이터의 양이 된다.

슬라이딩 수신 윈도우 : 수신 시스템에 의해 통보되는 윈도우 크기와 더불어 '슬라이딩(sliding) 윈도우'의 개념은 송신 시스템이 전송한 세그먼트에 대한 확인 메시지를 수신하기 전에 세그먼트를 전송할 수 있게 한다. 이 개념은 송신 시스템이 앞서 전송한 데이터에 대한 확인 메시지를 아직 수신하지 않은 채 확인 메시지가 곧 도착할 것이라는 가정을 하고 추가로 데이터를 전송할 수 있게 한다.

이러한 기법은 목적지 시스템에서 송신 시스템의 데이터 전송 속도를 제어할 수 있게 한다. 원론대로라면 수신 시스템은 전송 작업의 네트워크 혼잡 지점(point of congestion)이 될 가능성이 높기 때문에 데이터 전송 속도를 마지막으로 제어한다.

시간이 흐르면서 수신 시스템이 정상적으로 동작하더라도 네트워크 마비가 발생할 수 있으므로 송신 시스템이 전송 속도를 늦춰야 하는 경우 등에서 송신 시스템을 위한 흐름 제어 기법의 필요성이 증명되었다. 이런 이유에서, RFC1122는 네트워크와 관련된 다양한 흐름 제어 서비스의 구현을 의무화하였다. 여기에는 다음과 같은 서비스가 포함된다.

혼잡 윈도우의 크기 설정 : 네트워크 혼잡과 관련된 문제를 처리하기 위해서 송신 시스템은 '혼잡 윈도우(congestion window)'를 사용해야 한다. 혼잡 윈도우는 기반 IP 네트워크의 데이터 처리 능력에 따라 크기가 조절된다는 점에서 수신 윈도우와 개념이 유사하다.

느린 시작 : 송신 시스템은 처음부터 네트워크 혼잡이 발생하는 것을 방지하기 위해 새로 설정된 가상 회선에 많은 양의 데이터를 전송하기 이전에 IP 네트워크의 처리 능력을 파악해야 한다. 이것이 혼잡 윈도우를 작은 크기에서 네트워크 포화 상태에 이르기까지 점차 증가시키는 방식으로 동작하는 '느린 시작(slow start)'의 목적이다.

혼잡 회피 : 네트워크 혼잡이 발견될 때마다 혼잡 윈도우는 감소하며, '혼잡 회피(congestion avoidance)'라고 불리는 기술이 사용되어 최대 크기에 이르기까지 점차 본래의 상태로 증가한다. 혼잡 회피를 느린 시작과 함께 사용하면 송신 시스템이 가상 회선의 최적 전송 속도를 파악하는데 도움이 된다.

모든 것을 종합해 볼 때, 수신 윈도우와 혼잡 윈도우를 사용하면 송신 시스템에 수신 시스템의 상태와 네트워크의 혼잡 상태를 포함하여 네트워크 상태에 대한 상당히 완전한 그림을 제공할 수 있다.


Quotes from Internet Core Protocols, O'Reilly, Eric A. Hall, 인터넷 핵심 프로토콜 가이드, 한빛미디어