Синдром незначительного окна (silly-window syndrome) является названием потенциальной проблемы в основанной на окне схеме управления потоком, в котором система отправляет несколько небольших пакетов вместо ожидания доступности окна приемлемого размера. Например, если клиентская программа сетевой регистрации имеет общий размер приемного буфера в 4096 октетов, а пользователь останавливает вывод терминала в ходе большого вывода, буфер станет почти полным, когда будут получены новые сегменты большого размера.
Если оставшееся пространство буфера снизится на 10 байтов, для принимающего не было бы полезным предлагать получить дополнительные 10 октетов.
Если затем пользователю было бы разрешено напечатать несколько символов и снова остановиться, для принимающего TCP попрежнему не было бы полезным посылать обновление окна с разрешением на дополнительные 14 октетов. Вместо этого желательно подождать до тех пор, пока не будет возможно отправить приемлемо большой пакет, поскольку приемный буфер уже содержит достаточно данных для нескольких следующих страниц вывода. Избегание синдрома незначительного окна желательно как для отправителя, так и для получателя соединения с управляемым потоком, поскольку на каждом конце можно предотвратить использование незначительных окон. Мы описали избегание получателем синдрома незначительного окна в предыдущем подразделе; когда пакет отправляется, приемное окно объявляется нулевым, если оно менее одного пакета и менее одной четверти приемного буфера.
Для избегания отправителем синдрома незначительного окна операция вывода откладывается, если для отправки готов по крайней мере полный пакет данных, но может быть отправлено менее одного пакета из-за размера окна отправки. Вместо отправки tcpoutput() устанавливает состояние вывода в дежурное состояние, запустив дежурный таймер. Если ко времени истечения таймера не было получено обновления окна, отправляются доступные данные в надежде, что подтверждение будет включать окно большего размера. Если этого не происходит, соединение остается в дежурном состоянии, периодически осуществляя зондирование окна до тех пор, пока окно не будет открыто.
Начальная реализация избежания отправителем синдрома незначительного окна создавала большие задержки и низкую пропускную способность через соединения с хостами, использующими реализации TCP с маленькими буферами. К сожалению, эти реализации всегда объявляют окна приема с размером меньше максимального размера сегмента - поведение, которое считается незначительным данной реализацией.
Как решение этой проблемы, TCP сохраняет запись самого большого окна приема, предложенного противоположным узлом, в переменной управляющего блока протокола max_sndwnd. Когда может быть отправлена по крайней мере половина max_sndwnd, отправляется новый сегмент. Эта методика повышает производительность, когда система BSD взаимодействует с этими ограниченными хостами.
- 21/03/2010 19:58 - Реализация алгоритма медленного старта
- 21/03/2010 19:54 - Медленный старт
- 21/03/2010 19:43 - Обработка сдерживания источника
- 31/01/2010 15:39 - Отложенные подтверждения и обновления окон
- 31/01/2010 15:30 - Избежание небольших пакетов
- 30/01/2010 12:10 - Обработка вывода TCP
- 30/01/2010 11:58 - Обработка ввода TCP
- 30/01/2010 11:55 - Отключение соединения в FreeBSD
- 30/01/2010 11:53 - Кеш SYN
- 24/01/2010 19:31 - MTU. Установление соединения