Справочник по сетевым протоколам

       

Управление окном


Окно, посылаемое с каждым сегментом, указывает диапазон номеров очереди, которые отправитель окна (он же получатель данных) готов принять в настоящее время. Предполагается, что такой механизм связан с наличием в данный момент места в буфере данных.

Указание окна большого размера стимулирует передачу. Но если при шло большее количество данных, чем может быть принято программой TCP, данные будут отброшены. Это приведет к излишним пересылкам информации и ненужному увеличению нагрузки на сеть и программу TCP. Указание окна малого размера может ограничить передачу данных скоростью, которая определяется временем путешествия по сети после каждого посылаемого сегмента.

Такие механизмы протокола позволяют программе TCP заявлять большое окно, но впоследствии объявлять окна намного меньшего размера и не принимать такое большое количество данных. Такое, так называемое, сокращение окна выглядит довольно обескураживающе. Принцип устойчивости диктует, чтобы программа протокола TCP не сокращала сама окно, но была бы готова к таким действиям со стороны другой программы TCP.

Программа TCP, посылающая данные, должна быть готова принять от клиента и передать по сети по крайней мере один октет новых данных, даже если окно отправления равно нулю. Программа TCP должна периодически повторно посылать данные другой программе TCP, даже если окно нулевое. В случае нулевого окна рекомендуется использовать интервал повторной посылки в две минуты. Такие повторные посылки важны для того, чтобы гарантировать, что в случае, когда одна из двух программ TCP имеет нулевое окно, открытие этого окна будет гарантированно сообщено партнеру.

Когда программа TCP, получающая данные, имеет нулевое окно, но к ней приходит сегмент, то эта программа должна послать подтверждение и указать, какой следующий номер в очереди она ожидает и какое у нее окно в настоящий момент (окно нулевое).

Программа TCP пакует предназначенные к в пересылке данные в сегменты, заполняющие текущее окно. Однако она не может перепаковать уже имеющиеся сегменты в очереди на повторную посылку. Такая перепаковка хоть и не обязательна, но может быть полезна.

В соединении, имеющем односторонний поток данных, информация об окне будет передаваться с сегментами подтверждения, а они будут все иметь одинаковый номер очереди. Поэтому не будет способа восстановить их очередность при получении. Это не является серьезной проблемой, но может случайно привести к получению информации об окне из какого-нибудь устаревшего сообщения. Во избежание такой проблемы должен осуществляться отсев и информация об окне должна браться из сегментов, имеющих самый большой номер в очереди (это сегменты, чей номер подтверждения больше или равен наибольшему из ранее полученных номеров).

Процедура управления окном оказывает значительное влияние на характеристики коммуникаций. Дальнейшие комментарии содержат пожелания разработчикам.



Содержание раздела