Протокол ТСР.

Главная функция ТСР- доставка сообщения без потерь. Для этого предварительно устанавливается соединение между приложением-отправителем и приложением-получателем. Именно ТСР производит повторную передачу искаженного или утерянного пакета.

ТСР получает поток байтов от приложения и собирает в сегменты, добавляя заголовки в начало сегментов. В заголовке – CRC и порядковый номер сегмента.

Длина сегмента обычно определяется ТСР или выбирается администратором системы. Процесс установления соединения начинается с передачи запроса на установление соединения от машины-отправителя машине-получателю. В запросе содержится номер сокета отправителя (IP адрес и номер порта). В ответ приложение-получатель посылает номер своего сокета. Номера сокетов однозначно определяют соединения между приложениями. После установления соединения ТСР начинает передавать сегменты IP-модулю, потом преобразует каждый из них в одну или несколько дейтаграмм. IP-модуль получатель передает его приложению-получателю (через используемый протокол прикладного уровня). Если сообщение состоит из нескольких сегментов, ТСР-получатель собирает его, исходя из порядковых номеров сегментов, хранящихся в заголовке. Если сегмент утерян или поврежден (последние обнаруживается с помощью CRC в заголовке сегмента) отправитель посылает сообщение, содержащие порядковый номер ошибочного или утерянного сегмента. В этом случае отправитель повторно посылает сегмент.

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

В ТСР важную роль играют таймеры.

Таймер повторной передачи отмеряет время ожидания квитанции на отправленный сегмент. Если квитанция не поступает вовремя, сегмент отправляется вновь, а период повторной передачи увеличивается экспоненциальному закону. Так повторяется несколько раз пока период не достигнет некоторого заданного предела, после чего обслуживаемому процессу выдается сообщение об ошибке. Начальное время ожидания квитанции устанавливается путем изменения времени между отправителем сегмента и получателем квитанции на него. Эта величина называется временем двойного прохода. Математическое ожидание его – сглаженное время двойного прохода.

Таймер задержки. Получателю могут поступать сегменты и после закрытия соединения. Таймер задержки исключает повторное открытие только что закрытого порта, вызываемое прибывшими сегментами. Длительность задержки обычно выбирают равной удвоенному значению максимальному времени жизни сегмента (оно совпадает со значением в IP-дейтаграмме).

Таймер запросов. Когда получатель приостанавливающий передачу путем посылки сегмента с нулевым размером окна, отправляет отправителю сообщение с возобновлением работы, но тот не получает его. Чтобы продолжить передачу, отправитель с периодом задаваемым таймером посылает запросы с одним байтом данных. В ответ на них он получает сегменты, где указан размер окна. Если размер окна нулевой, адресат по-прежнему занят, а если нет- то он готов принимать информацию.

Блок управления передачей и управление потоками.

ТСР должен отслеживать параметры каждого установленного соединения. Для этого используется блок управления передачей (transmission control block – TCB), в котором содержится информация о локальном и удаленном номерах сокетов, буферах передачи и приема, уровнях защиты и приоритете и о текущем сегменте в очереди. Там же находятся порядковые номера переданного и принятого сегментов в сообщении.

Сегменты ТСР.

Структура заголовка ТСР сегмента следующая:

 

Порт отправителя (16 бит) Порт получателя (16 бит)
Позиция сегмента (32 бит)
Первый ожидаемый байт (32 бита)
Смещение данных 4 бит (длина заголовка) Резерв 6 бит URG ACK PSH RST SYN FIN Размер окна (16 бит)
Контрольная сумма ( 16 бит) Указатель срочности данных ( 16 бит)
Опции и заполнитель
Рис. 24. Формат заголовка ТСР-сегмента.
                 

 

- Порт отправителя. Идентифицирует порт источник.

- Порт получателя. Идентифицируюет порт получателя.

- Позиция сегмента ( Seguence number). Поле содержащие номер 1-го байта данных сегмента в сообщении

- Первый ожидаемый байт. Используется тогда когда сегмент служит квитанцией (ACK=1). Содержит порядковый номер 1-го ожидаемого байта. Все байты сообщения с меньшим порядковым номерами считаются квитированными.

- Смещение данных. Длина заголовок в 32 разрядных словах служит указателем на начало поля данных.

- Резерв. Пока не используются.

- Флаги. В состоянии 1 они означают следующие:

URG. Поле срочности подлежит обработке.

ACK. Сегмент служит квитанцией.

PSH. Сегмент должен быть «вытолкнут»- послан в первую очередь.

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

SYN. Сегмент служит для синхронизации счетчиков переданных данных при установлении соединения.

FIN. Означает, что отправлен последний байт сообщения. Эквивалент маркера конца передачи (EOT) в кодировке ASCII.

- Размер окна. Указывает, сколько байтов готов принять получатель.

- Контрольная сумма. CRC определяется для блока данных, состоящей из псевдозаголовка и самого сегмента. 96 разрядный псевдозаголовок предшествует заголовку ТСР и создается в процедуре вычисления CRC. Псевдозаголовок содержит IP-адреса отправителя и получателя, идентификатор протокола и длину сегмента. Эти параметры передаются IP при отправке сегмента и используются протоколом IP.

- Указатель срочности данных. Используется, когда URG=1. Представляет собой смещение относительно номера последовательности в заголовке. Специальная обработка срочных данных производится на прикладном уровне, а не на уровне ТСР.

- Опции. Каждая опция содержит свой номер (один байт), свою длину в байтах и значение. В настоящее время используется только три опции:

0-конец списка опций

1-отсутствие операций

2-максимальный размер сегмента

- Заполнитель. Дополняет заголовок до целого числа 32 разрядных слов.

За заголовком следует поле данных, длина которого не фиксирована. Благодаря опции максимальный размер сегмента, ТСР-получатель может выбрать подходящий размер буфера данных.

Протокол UDP ( user datagram protocol)

UDP – протокол без установления соединения. Его, например, используют протоколы TFTP и RPC ( remove procedure call)

Связь без установления соединения ненадежна, так как отправителю не сообщается, правильно ли было принято его сообщение и получено ли оно вообще. Не предусмотрено и исправление ошибок: они либо игнорируются, либо исправляются на ниже и вышележащих уровнях. Другая особенность UDP – он не имеет средств управления потоком данных. Заголовок UDP-дейтаграммы следующий:

 

Порт отправителя (16 бит) Порт получателя (16 бит)
Длина дейтаграммы (16 бит) Контрольная сумма ( 16 бит)
Данные
Рис. 25. Формат заголовка UDP.

 

Поле контрольной суммы факультативно и заполнено нулями, если не используется. Следует однако помнить, что это единственное средство контроля правильности передачи данных, так как в протоколе IP контрольная сумма вычисляется только для заголовка дейтаграммы.