시스템이 통보하는 버퍼의 크기는 그 순간의 가용 버퍼 크기에 따라서 달라진다. 시스템의 가용 버퍼 크기는 애플리케이션이 수신 버퍼로부터 데이터를 추출하는 속도에 의존한다. 이 속도는 애플리케이션의 복잡성, CPU의 가용 시간, 사용하고 있는 TCP 스택의 설계 등 많은 요소에 영향을 받는다.
불행히도 많은 1세대 TCP 기반 애플리케이션은 한 번에 몇 바이트 밖에 추출하지 않아 수신 버퍼를 제대로 비우지 못했다. 결과적으로 시스템은 몇 바이트 밖에 되지 않는 작은 크기의 수신 버퍼를 통보하였으며, 따라서 송신 시스템도 아주 작은 크기의 세그먼트만을 전송할 수 있었다. 수신 시스템이 수신 버퍼로부터 몇 바이트만을 추출하고, 작은 크기의 윈도우가 통보되고, 또 다시 작은 크기의 세그먼트를 수신하는 과정이 끊임없이 반복된다.
('Silly Window Syndrome'이라 불리는) 이런 상황을 피하기 위해 RFC 1122는 시스템이 (MSS 옵션의 값으로 정의된) 완전한 세그먼트 하나를 수용할 수 있을 만큼의 가용 버퍼 공간을 갖고 있거나 버퍼 공간이 '정상적인' 윈도우 크기의 절반 이상인 경우에만 0이 아닌 윈도우를 통보할 수 있다고 규정하여 통보될 수 있는 버퍼의 크기를 명확히 밝혔다. 이 두 조건을 모두 만족하지 못하면 수신 시스템은 윈도우의 크기를 0으로 통보하여 송신 시스템이 전송을 멈추도록 해야 한다.
Quotes from Internet Core Protocols, Eric A. Hall, O'Reilly, 인터넷 핵심 프로토콜 가이드, 한빛미디어
Library/Computer Network