Адаптационные механизмы протокола

Надежный потоковый сервис.

Протокол TCP.

Протоколы TCP и IP являются «рабочими лошадками» Интернет. В этом разделе будут рассмотрены механизмы, посредством которых TCP обеспечивает надежный, ориентированный на установление соединений потоковый сервис в дейтограмной сети IP. В число этих механизмов входит вариант алгоритма ARQ с выборочным повторением и алгоритм управления перегрузками на базе индикации потерь сегментов. Подробно протокол описан в документах RFC 793 и RFC 1122.

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

Аналогично UDP, каждый прикладной процесс для TCP-модуля представляется номером порта. Структура из пары переменных (порт, IP-адрес) называется сокетом. Соединение между отправителем и получателем однозначно определяется двумя сокетами. Для хранения всей информации, необходимой для установления и поддержания соединения, определена специальная структура данных – блок управления передачей (Transmission Control Block - TCB). В эту структуру, кроме двух сокетов, входят флаги безопасности и приоритета соединения, указатели буферов отправителя и получателя, указатели номеров очередного сегмента и сегмента повторной посылки, а также ряд других переменных.

ТСР не сохраняет границы сообщений и рассматривает данные, которые поступают ему от приложения, как поток байтов. Свои сегменты он формирует так, как считает необходимым, но с учетом свойств протокола сетевого уровня (сегмент должен полностью поместиться в IP-пакет). Таким образом, если приложение отсылает сообщение, размер которого составляет 1000 байтов, то на приемной стороне оно может быть представлено двумя частями по 500 байт, тремя частями по 300, 300 и 400 байт и.т.д.

Надежный потоковый сервис протокол ТСР обеспечивает посредством специальных адаптационных механизмов. Напомним, что этот протокол предполагает наличие сетевой среды, в которой пакеты могут теряться, дублироваться, приходить в узел назначения с нарушением порядка их отправки. Для идентификации таких нарушений в протоколе введена последовательная нумерация байтов сегмента. Порядковый номер первого байта сегмента передается в его заголовке и он считается порядковым номером сегмента. Номер первого байта для каждого соединения выбирается случайным образом в период установления соединения. Поскольку каждый байт сегмента оказывается пронумерованным, то легко решается задача опознания на приемной стороне нарушений порядка их доставки. Механизм подтверждения приема носит накопительный характер, т.е. подтверждение приема байта с номером N, означает, что байты с номерами N-1, N-2, … успешно получены. Диапазон возможных номеров байтов ограничен числами от 0 до 231-1. Заметим, что при скорости передачи в 100 Мбит/с полный цикл использования всего допустимого диапазона номеров составляет 5,4 минуты, что вполне достаточно для того, чтобы любой сегмент был получен приемной станцией, а все его дубли были уничтожены.

Передача данных в протоколе ТСР регулируется на основе алгоритма скользящего окна.

Окно передачи определяется тремя указателями:

· Slast - указатель наименьшего номера неподтвержденных байтов,

· Sresent - указатель номера последнего из отправленных байтов,

· Slast+Ws–1 – указатель наибольшего номера байта, который передающий модуль может принять от приложения (но не отправить в сеть).

Заметим, что передатчик отправит сегмент в сеть лишь после получения от приложения некоторого числа байтов, превышающего заранее установленный порог, либо после истечения определенного интервала времени. При этом, величина сегмента должна быть такой, что наибольший номер его байта, не должно превосходить величину Slast+WА–1, где WА - это так называемое объявляемое окно, параметр определяемый размером свободного буферного пространства приемного приложения.

Величина окна передачи (Ws) является механизмом адаптации интенсивности передатчика к требованиям сети и изменяется под воздействием целого ряда факторов.

В свою очередь, приемный модуль протокола ТСР формирует свое окно, которое также управляется тремя параметрами:

· Rlast - указатель наименьшего номера байта, который еще не был передан приложению

· Rnext - указатель номера следующего ожидаемого к приему байта,

· R new - указатель наибольшего номера корректно принятого байта.

Отметим, что R new может оказаться больше Rnext. Такая ситуация является следствием того, что приемный модуль не отбрасывает байты, принятые в пакетах, не содержащих ошибок, но пришедших с нарушением порядка их следования. Если размер буферной памяти приемного модуля равен WR байт (максимальный размер приемного окна), то всегда существует возможность принять байты с номерами, не превышающими R last+WR-1. При этом, мы предполагаем, что приложение не обязательно читает байты немедленно после их приема.

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

ТСР располагает механизмом управления потоком, предотвращающим переполнение приемного буфера. Этот регулятор представляет собой, так называемое, объявляемое окно (advertised window) – специальное поле в заголовке сегмента, передаваемого от приемника к передающему узлу. Это поле информирует передающий модуль о доступной величине буферной памяти приемника. Величина объявляемого окна определяется выражением

.

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

.

Для иллюстрации эффекта регулирования интенсивности потока, генерируемого приложением, рассмотрим ситуацию, когда приложение на приемной стороне прекращает читать данные из буфера своего модуля TCP. Ясно, что величина Rnew будет увеличиваться, а Rlast оставаться постоянной; такая динамика приводит к постоянному уменьшению величины объявляемого окна и передающий модуль TCP вынужден уменьшать размер отправляемых сегментов. В конце концов, WA станет равным нулю и передающий модуль ТСР прекратит отправку данных. Однако, запись данных приложения в буфер передающего модуля будет продолжаться до тех пор, пока он не примет Ws байт. В этот момент работа приложения будет полностью заблокирована.

Надежность передачи данных обеспечивается применением алгоритма повторной передачи с выборочным повторением. Когда протокол станции-отправителя передает сегмент с номером M, он помещает его копию в очередь повторной передачи и запускает специальный таймер повторной передачи; при получении подтверждения о благополучном приеме сегмента М, его копия уничтожается. В противном случае, после истечении таймера повторной передачи модуль TCP снова отправит этот сегмент в сеть. Время доставки сегментов в сетевой среде, в которой работает протокол ТСР (Интернет, например), может изменяться в значительных пределах даже в течении одного соединения. Поэтому выбор значения таймера повторной передачи представляет собой непростую задачу. В протоколе ТСР для этого предусмотрена адаптивная процедура, базирующаяся на постоянном измерении интервала времени от посылки сегмента до получения квитанции о его приеме (τ n). Эти значения непрерывно усредняются с некими весовыми коэффициентами, уменьшающимися от последнего к предыдущему замером. В результате получают значение параметра «полное время оборота» (round-trip time, tRTT).

,

где , типичное значение . Значение таймера повторной передачи (tout) учитывает также дисперсию значения tRTT:

,

где k некоторая константа. Таким образом, если девиация значений полного времени оборота будет значительная, то и значения таймера повторной передачи будут увеличены в сравнении со средним значением tRTT. Поскольку вычисление значения стандартного уклонения относительно трудоемко, то в практически используемых процедурах оценка вариации значений tRTT базируется на вычислении абсолютного уклонения :

,

,

при типичном значении .


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: