Механизм скользящего окна
В наиболее общей форме надежной пересылки данных с установлением соединения пакеты данных должны доставляться принимающей стороне в том же порядке, в котором они передавались. Протокол сигнализирует о сбое, если какие-либо пакеты данных теряются, повреждаются, дублируются или принимаются в другом порядке. Наиболее простым решением такой задачи является использование подтверждений получателя о приеме каждого сегмента данных. Однако если отправитель вынужден ждать подтверждения после посылки каждого сегмента, как показано на рис. 6, то скорость передачи при таком способе значительно снижается. Поскольку с того момента, как отправитель заканчивает отсылку пакета данных, до момента завершения обработки какого-либо принятого подтверждения проходит определенный интервал времени, он может быть использован для передачи дополнительной порции данных. Количество пакетов данных, которое разрешается пересылать отправителю без получения подтверждения, называется окном (window). В протоколе TCP используются так называемые ожидаемые подтверждения; они содержат номер, относящийся к октету, который ожидается следующим. Механизм скользящего окна заключается в том, что согласование размеров окна происходит динамически в течение TCP-сеанса. Механизм скользящего окна — это механизм управления потоком данных, который требует, чтобы получатель принимал подтверждение от отправителя после передачи некоторого количества данных. Рис. 6. Размер окна равен одному
Для управления потоком данных, передаваемых между двумя устройствами, в протоколе TCP используется механизм управления потоком (flow-control mechanism). Получатель докладывает отправителю о получении данных; получение такого уведомления позволяет установить размер окна. Окно определяет количество октетов, отсчитываемое от текущего номера подтверждения, которое TCP-устройство способно принять в заданный момент времени. Например, при размере окна, равном 3, отправитель может передать получателю три октета. После этого он должен дождаться подтверждения от получателя. Если получатель получил три октета, он должен отправить подтверждение об этом отправителю октетов. После этого отправитель может передать следующие три октета. Если же получатель не получил три октета, например, при переполнении буфера, то он не отправит подтверждение. Если отправитель не получает подтверждение, это означает, что последние октеты нужно передать повторно и при этом снизить скорость передачи. Размер окна TCP может изменяться в процессе передачи потока данных между двумя сетевыми устройствами. В каждом подтверждении, отправленном от получателя, содержится информация о количестве байтов, которые получатель способен принять. В протоколе TCP предусмотрено использование так называемого окна управления заторами, которое в нормальном состоянии равно окну устройства-получателя, но его размер уменьшается вдвое, если теряется какой-либо сегмент данных (например, при перегрузке в сети). Такой механизм позволяет уменьшать или увеличивать размер окна по мере необходимости в процессе управления буфером устройства и обработкой потока данных. Больший размер окна позволяет передать одновременно большее количество октетов. Когда отправитель передает три октета, он переключается в режим ожидания сигнала ACK для четырех октетов. Если получатель способен обработать блок данных размером в два октета, то он отбрасывает третий октет и обозначает его как следующий ожидаемый блок данных. При этом указывается новый размер окна, который равен двум. Отправитель передает следующие два октета, однако размер окна все еще остается равным трем (предположим, устройство все же может обработать три октета одновременно). Получатель запрашивает октет с номером 5 и устанавливает новый размер окна, равный двум.
|