Олифер В.Г., Олифер Н.А. - Компьютерные сети. Принципы, технологии, протоколы (4-ое изд.) - 2010 - обработка (953099), страница 141
Текст из файла (страница 141)
",1460 ' Направление передачи сегментов Рис. 17.18. Порядковый номер и номер квитанции В качестве квитанции получатель сегмента отсылает ответное сообщение (сегмент), в поле нодтеерждеииого номера которого он помещает число, на единицу превышающее макси- Алгоритм скользящего окна в протоколе ТСР имеет некоторые существенные особенности. В частности, в рассмотренном обобщенном алгоритме скользящего окна единицей пере- даваемых данных является кадр, и размер окна также определяется в кадрах, в то время как в протоколе ТСР дело обстоит совсем по-другому.
888 Глава 17. Базовые протвколы ТСРДР мальный номер байта в полученном сегменте. Так, для первого отправленного сегмента, изображенного на рис. 17.13, квитанцией о получении (подтвержденным номером) будет число 34060, для второго — 35520 и т.д. Подтвержденный номер часто интерпретируют не только как оповещение о благополучной доставке, но и как номер следующего ожидаемого байта данных. Квитанция в протоколе ТСР посылается только в случае правильного приема данных.
Таким образом, отсутствие квитанции означает либо потерю сегмента, либо потерю квитанции, либо прием искаженного сегмента. В соответствии с определенным форматом один и тот же ТСР-сегмент может нести в себе как пользовательские данные (в поле данных), так и квитанцию (в заголовке), которой подтверждается получение данных от другой стороны. Поскольку протокол ТСР является дуплексным, каждая сторона одновременно выступает и как отправитель, и как получатель.
У каждой стороны есть пара буферов: один — для хранения принятых сегментов, другой — для сегментов, которые только еще предстоит отправить. Кроме того, имеется буфер для хранения копий сегментов, которые были отправлены, но квитанции о получении которых еще не поступили (рис. 17.14). ВР1, п1) ВР2 п2) тса д нив Буфер отправления Буфер приема Буфер копий Смю $$И3 Буфер приема Буфвр отправления п~Дп ЯЕП Рис. 17.1Я. Система буферов ТСР-совдинвния И при установлении соединения, и в ходе передачи обе стороны, выступая в роли получателя, посылают друг другу так называемые окна приема, Каждая из сторон, получив окно приема, «узнает», сколько байтов ей разрешается отправить с момента получения последней квитанции. Другими словами, посылая окна приема, обе стороны пытаются регулировать поток байтов в свою сторону, сообщая своему «визави», какое количество байтов (начиная с номера байта, о котором уже была выслана квитанция) они готовы в настоящий момент принять.
На рис. 17.15 показан поток байтов, поступающий от приложения в выходной буфер модуля ТСР Из потока байтов модуль ТСР «нарезает» последовательность сегментов 569 Протоколы транспортного уровня ТСР и 00Р и поочередно отправляет их приложению-получателю. Для определенности на рисунке принято направление перемещения данных справа налево. В этом потоке можно указать несколько логических границ: (3 Первая граница отделяет сегменты, которые уже были отправлены и на которые уже пришли квитанции. Последняя квитанция пришла на байт с номером Ж. Е) По другую сторону этой границы располагается окно размером И~ байт.
Часть байтов, входящих в окно, составляют сегменты, которые также уже отправлены, но квитанции иа которые пока не получены. Е) Оставшаяся часть окна — это сегменты, которые пока не отправлены, но могут быть отправлены, так как входят в пределы окна. («И наконец, последняя граница указывает на начало последовательности сегментов, ни один из которых не может быть отправлен до тех пор, пока не придет очередная квитанция и окно не будет сдвинуто вправо.
Напреаление движения окна Сел«энты ~ Сел«энты . Сегменты,, Серванты, отправлены, ~ отправлены,: которые которые еще квитанции ' квитанции пока разрешено не разрешено получены не получены отправлять отправлять Направление передачи денных ив источника к приемнику Рис.
17.15. Особенности реализации алгоритма скользящего окна в протоколе ТСР Если размер окна равен И', а последняя по времени квитанция содержала значение М, то отправитель может посылать новые сегменты до тех пор, пока в очередной сегмент не попадет байт с номером М+ й'.
Этот сегмент выходит за рамки окна, и передачу в таком случае необходимо приостановить до прихода следующей квитанции. Получатель может послать квитанцию, подтверждающую получение сразу нескольких сегментов, если они образуют непрерывный поток байтов. Например, (рис. 17.16, а), если в буфер, плотно без пропусков заполненный потоком байтов до 2354 включительно, поочередно поступили сегменты (2355-3816), (3817-5275) и (5276 — 8400), где цифры в скобках означают номера первых и последних байтов каждого сегмента, то получателю ностаточно отправить только одну квитанцию на все три сегмента, указав в ней в качестве номера квитанции значение 8401.
Таким образом, процесс квитирования в ТСР является накспашельяым. Вполне возможны ситуации, когда сегменты приходят к получателю не в том порядке, в котором были посланы, то есть в приемном буфере может образоваться «прогалина» (рис. 17.16, б). Пусть, к примеру, после указанных ранее трех сегментов вместо следующего по порядку сегмента (8401 — 10566) пришел сегмент (10567-12430). Очевидно, что ВтО Глава 17. Базовые протоколы ТСР/(Р послать в качестве номера квитанции значение 12431 нельзя, потому что это бы означало, что получены все байты вплоть до 12430.
Поскольку в потоке байтов образовался разрыв, получатель может только еще раз повторить квитанцию 8401, говоря тем самым, что все еще ожидает поступления потока байтов, начиная с 8401, то есть подтверждает получение не отдельных блоков данных, а непрерывной последовательности байтов. Передача квитанции на получение байта 8401 11 12 (З И Время( в Передача квитанции 11 12 О 14 18 6 Время( рис. 17.16.
Накопительный принцип квитироаания: а — плотное заполнение буфера (в момент 14 передается квитанция на байт 8401), б — неплотное заполнение буфера (в момент 15 снова передается квитанция на байт 8401) Когда протокол ТСР передает в сеть сегмент, он «на всякий случай» помещает его копию в буфер, называемый также очередью повторной передачи, и запускает таймер. Когда приходит квитанция на этот сегмент, соответствующая копия удаляется из очереди. Если же квитанция не приходит до истечения срока, то сегмент, вернее его копия, посылается повторно.
Может случиться так, что копия сегмента придет тогда, когда исходный сегмент уже окажется на месте, тогда дубликат попросту отбрасывается. Управление потоком Какой размер окна должен назначить источник приемнику, и наоборот7 Точнее, каким на каждой из сторон должно быть выбрано время ожидания (тайм-аут) очередной квитанции г От ответа на этот вопрос зависит производительность протокола ТСР При выборе величины шайи-аута должны учитываться скорость и надежность линий связи, их протяженность и многие другие факторы. Тайм-аут не должен быть слишком коротким, чтобы по возможности исключить избыточные повторные передачи, снижающие полезную пропускную способность системы, но он не должен быть и слишком длинным, чтобы избежать длительных простоев, связанных с ожиданием несуществующей или кзаблудившейся» квитанции. В протоколе ТСР тайм-аут определяется с помощью достаточно сложного адаптивного алгоритма, идея которого состоит в следующем.
При каждой передаче засекается время от момента отправки сегмента до прихода квитанции о его приеме (время оборота). Получаемые значения времени оборота усредняются с весовыми коэффициентами, возрастающими от предыдущего замера к последующему. Это делается с тем, чтобы усилить влияние последних замеров.
В качестве тайм-аута выбирается среднее время оборота, умноженное ва некоторый коэффициент. Практика показывает, что значение этого коэффициента должно превышать 2. В сетях с большим разбросом времени оборота при выборе тайм-аута учитывается и дисперсия этой величины. Протоколы транспортного уровня ТОР н 00Р 571 газмер окна приема связан с наличием в данный момент места в буфере данных у принимающей стороны.
Поэтому в общем случае окна приема на разных концах соединения имеют разный размер. Например, можно ожидать, что сервер, вероятно обладающий большая буфером, пошлет клиентской станции окно приема большее, чем клиент серверу. В заэиснмости от состояния сети то одна, то другая стороны могут объявлять новые значения окон приема, динамически уменьшая и увеличивая их. Варьируя величину окна, можно влиять на загрузку сети.
Чем больше окно, тем большая порция неподтвержденных данных может быть послана в сеть. Но если пришло большее количество данных, чем может быть принято модулем ТСР данные отбрасываются. Это ведет к излишним пересылкам информации и ненужному росту нагрузки на сеть и модуль ТСР. В то же время окно малого размера может ограничить передачу данных скоростью, которая определяется временем путешествия по сети каждого посылаемого сегмента. Чтобы избежать применения малых окон, в некоторых реализациях ТСР предлагается получателю аанных откладывать реальное изменение размеров окна до тех пор, пока свободное место ае составит 20-40 М от максимально возможного объема памяти для этого соединения.