본문 바로가기

Library/Computer Network

Silly Window Syndrome

시스템이 통보하는 버퍼의 크기는 그 순간의 가용 버퍼 크기에 따라서 달라진다. 시스템의 가용 버퍼 크기는 애플리케이션이 수신 버퍼로부터 데이터를 추출하는 속도에 의존한다. 이 속도는 애플리케이션의 복잡성, CPU의 가용 시간, 사용하고 있는 TCP 스택의 설계 등 많은 요소에 영향을 받는다.

불행히도 많은 1세대 TCP 기반 애플리케이션은 한 번에 몇 바이트 밖에 추출하지 않아 수신 버퍼를 제대로 비우지 못했다. 결과적으로 시스템은 몇 바이트 밖에 되지 않는 작은 크기의 수신 버퍼를 통보하였으며, 따라서 송신 시스템도 아주 작은 크기의 세그먼트만을 전송할 수 있었다. 수신 시스템이 수신 버퍼로부터 몇 바이트만을 추출하고, 작은 크기의 윈도우가 통보되고, 또 다시 작은 크기의 세그먼트를 수신하는 과정이 끊임없이 반복된다.

('Silly Window Syndrome'이라 불리는) 이런 상황을 피하기 위해 RFC 1122는 시스템이 (MSS 옵션의 값으로 정의된) 완전한 세그먼트 하나를 수용할 수 있을 만큼의 가용 버퍼 공간을 갖고 있거나 버퍼 공간이 '정상적인' 윈도우 크기의 절반 이상인 경우에만 0이 아닌 윈도우를 통보할 수 있다고 규정하여 통보될 수 있는 버퍼의 크기를 명확히 밝혔다. 이 두 조건을 모두 만족하지 못하면 수신 시스템은 윈도우의 크기를 0으로 통보하여 송신 시스템이 전송을 멈추도록 해야 한다.


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