
Иллюстрация представляет упрощенный пример использования полей Window и
Aknowledgement Number. Первоначальный размер окна для TCP соединения был установлен
в 3000 байт. Передав это количество байт, отправитель ждёт их подтверждения, чтобы
продолжить передачу. После получения квитанции, отправитель отправит следующий
сегмент размером в 3000 байт.
Если возникнут задержки в получении квитанций, отправитель прекратит передачу
сегментов. В периоды, когда сети перегружена, или ресурсы получателя истощены, эта
задержка может увеличиться. С ростом этой задержки уменьшается эффективная скорость
передачи данных в соединении. Замедление скорости передачи данных позволяет
оптимизировать использование ресурсов оконечных и промежуточных сетевых устройств.
Уменьшение размера окна
Еще один способ контролировать поток данных заключается в том, чтобы
использовать динамически изменяющиеся размеры окна. Когда сетевые ресурсы
ограничены, TCP может уменьшить размер окна и потребовать, чтобы полученные сегменты
подтверждались чаще. Это позволяет эффективно замедлить скорость передачи.
Протокол TCP станции-получателя отправляет в каждом сегменте в поле Window количество
байт, которое он в состоянии принять и обработать. При необходимости замедлить поток
данных, например, из-за уменьшения объёма буферной памяти, получатель может в
очередном сегменте с квитанцией уменьшить значение поля Window.
Как показано на иллюстрации, в случае, усли принимающая станция испытывает
перегрузки, она может уменьшить размер окна. В этом случае произошла потеря одного из
сегментов. Получатель изменил размер окна приёма в следующем сегменте с 3000 до 1500.
Это привело к сокращению размера окна отправителя до 1500.
После того, как в течении некоторого времени данные передавались без каких-либо
потерь, или ресурсы получателя были восстановлены, TCP получателя может вновь
увеличить размер окна приёма. В свою очередь этот шаг уменьшит нагрузку на сеть,
поскольку будет отправляться меньше квитанций. Размер окна будет продолжать расти до