tanenbaum_seti_all.pages (525408), страница 159
Текст из файла (страница 159)
Транспортный уровень Состояния Простой Ожидание В Очереди Установлвно Отправпаниа Получение Разъвдинвнив Р1: -/Просюй Р2: А1/Установ- лена Р2: А2/Простой /Установ вно ЫЗТЕМ Рт:-/Пр й Р1; АЗ/ Ожиданив СОММЕСТ Р4: Аб/Простой Р4: Аб/Разъвди- нвнив 01ЗСОММЕСТ $ Рб: А7/Установ- лано Рб: Аз/Отпра- алвниа ЗЕМО А9/Попучвнив ПЕСЕ!ЧЕ РЗ: А1/Установвно РЗ: А4/В очврвд Запрос соццинвния /Установ вно Запрос принят А1 О/Установ- лвно А10/Установ- лано А10/Усганов- лвно -/просто -/Просто Запрос разьвдинвния -/Простой ПсдтввРКцвн Разъединения А12/Установ. лино Паквт данных Ат/Установ- лано А11/Установ- лвно Кредит и~ тай пу, "/Просто П вдикаты ва ждвния) двйствия рис. 6.16. Пример протокола как конечного автомата.
У ка;кдой ячейки матрицы мо;квт быть прады квт, действие и ноВОВ Соотояииа, Тильдв ознвчавт, что основнов действие нв предпринималось. Черта над првдиквтом означает отрицание првди ката. Пустые ячейки соответствуют невозможным или неверным событиям Следует отметить, что выбор используемых состояний обусловлен не только самим протоколом. В нашем примере нет состояния 115ТЕХ11ЧС, которое вполне могло бы следовать после вызова примитива 115ТИ. Состояния 11$ТЕИ!ХС нет потому, что оно связано с полем записи соединения, а примитив 1.15ТТК не создает Р1'! Таблица соадинвний полная Р2: Выполняется запрос совдинвния РЗ: Выпопнявтся примитив ЫЗТЕМ Р4: Выполняется запрос разьадинания Рб: Кредит есть А1: Послать подтвврждвнив соадинания А2:Ждать запрос совдинания АЗ: Поспать подтвврхщанив соадинвния Ав/ Запустить таймвр Аб: Послать подтвврждвния разъацинвния Аб.
Послать запрос разъвдинвния А7: Поспят~ соо щвнив Аб: Ждать кредита А9: Послать крвдит А10: Установить флаг «Запрос разьадинвния лолучвн» А11: Записать кропит А12: Принять сообщение Простой транспортный протокол 697 записи соединения. Почему же? Потому что мы решили использовать в качестве идентификаторов соединений номера виртуальных каналов сетевого уровня, а лля примитива Е15ТЕй номер виртуального канала в конечном счстс выбирается сетевым уровнем, когда прибывает пакет САСЕ кЕООЕ5Т.
Действия с А1 по А12 представляют собой значительные действия, такие как отправление пакетов и запуск таймера. В таблице не перечислены монсе значимые события, как, например, инициализация полей записи соединения. Если действие включаст активизацию спящего процесса, то действие, следующее за активизацией, также учитывается. Например, если прибывает пакет САЕЕ кЕ(И5Т и процесс находился в состоянии ожидания этого пакета, то передача пакета САЕС АССЕРТ, слсдуюшая за активизацией, рассматривается как часть рсакции на прибыл не пакста САСЕ ЯЕООЕ5Т. После выполнения каждого действия соединение может переместиться в новос состояние, как показано на рис.
6.16. Прелставлсиие протокола в виде матрицы состояний обладает тремя преимушествами. Во-первых, такая форма значительно упрошает программисту проверку всех комбинаций состояний и событий при принятии решения о том, нс трсбустся ли какое-либо лсйствие со стороны протокола. В рабочих версиях протокола некоторые комбинации использовались бы для обработки ошибок. В матрице, показанной на рисунке, нс проведено различия между невозможными и запрещенными состояниями, Например, если сослинсние находится в состояшш ожидания (ваЖпя), то событие О!5СОлйЕСТ является невозможным, так как пользователь блокирован и нс может выполнять никакие примитивы.
С другой стороны, в состоянии передачи (зепйпй) получение пакета данных нс ожидается, так как кредит на них не отпускался. Прибытие пакета данных в этом состоянии является ошибкой протокола. Второе преимушество представления протокола в виде матрицы состоит в его реализации. Можно представить себе двумерный массив, в котором элемент а11]Ц является указателем или индексом процедуры обработки события 1 в состоянии Е При этом можно написать транспортную сущность в вилс короткого цикла ожидания события. Когда событие происходит, бсрстся соответствующее соединение и извлекается его состояние.
При извсстпых значениях события и состояния транспортная сущность просто обращается к массиву а и вызывает соотвстствуюшую процедуру обработки. Результатом такого подхода будет более рс~улярное и систематическое строение программы, нежели в нашем примере транспортной сущности. Третье преимущество использования конечного автомата заключается в способе описания протокола. В некоторых стандартных документах протоколы описываются как конечные автоматы того жс вида, что и на рис.
6.17. Созлать работающую транспортную сущность по такому описанию значительно лсгчс, чем по многочисленным разрозненным документам. Основной недостаток подхода на основе конечного автомата состоят в том, что оп может оказаться более сложным для понимания, чем привсденный ранее в листинге пример программы. Однако частично эту проблему можно решить, изобразив конечный автомат в виде графа, как это сделано на рис.
6.17. 593 Глава 6. Транспортный уровень рис. 6.17. Пример протоколе в виде графа. для простоты переходы, не изменяющие состояние соединения, были опущены Транспортные протоколы Интернета." 00Р В Интернете нашли применение два основных протокола транспортного уровня, один из которых ориентирован иа соединение, другой — иет. В следующих разделах мы изучим их. Протоколом без установления соединения является 1ЛЗР.
Протокол ТСР, напротив, ориентирован иа соединение. Так как 1Л)Р— это, иа самом деле, просто 1Р с добавлением небольшого заголовка, мы изучим сперва его, Рассмотрим также два практических применения 1)ЭР. Основы 00Р Среди набора протоколов Интернета есть транспортный протокол без установления соединения, 1ЛЭР (1)зег 1) агайгат Ргососо! — пользовательский дейтаграммный протокол). У1)Р позволяет приложениям отправлять инкапсулированные 1Р-дейтаграммы без установления соединений.
01)Р описан в КРС 768. Транспортные протоколы Интернета: 00Р 599 С помощью протокола 1Л)Р передаются сегменты, состоящие из 8-байтного заголовка, за которым следует поле полезной нагрузки. Заголовок показан на рис, 6,18. Два номера портов служат для идентификации конечных точек внутри отправляющей и принимающей машин. Когда прибывает пакет ()ЭР, содержимое его поля полезной нагрузки передается процессу, связанному с портом назначения. Это связывание происходит при выполнении примитива типа В1Х0 Это было продемонстрировано в листинге 6.1 применительно к ТСР (в ()ПР процесс связывания происходит точно так же). В сущности, весь смысл использования (11)Р вместо обычного 1Р заключается как раз в указании портов источника и приемника.
Без этих двух полей на транспортном уровне невозможно было бы определить действие, которое следует произвести с пакетом. В соответствии с полями портов производится корректная доставка сегментов. Э б Рно. 6.18. Заголовок 00Р Информация о порте источника требуется прежде всего при создании ответа, пересылаемого отправителю. Копируя значения поля Порт источника из входящего сегмента в поле Порт назначения исходящего сегмента, процесс, посылающий ответ, может указать, какому именно процессу на противоположной стороне он предназначается. Поле Длина И)Р содержит информацию о длине сегмента, включая заголовок и полезную нагрузку. Контрольная сумма 00Р не является обязательной.
Если она не подсчитывается, ее значение равно 0 (настоящая нулевая контрольная сумма кодируется всеми единицами). Отключать функцию подсчета контрольной суммы глупо, за исключением олного случая — когда нужна высокая производительность (например, при перелаче оцифрованной речи). Наверное, стоит прямо сказать о том, чего Ш)Р не делает. Итак, () 1)Р не занимается контролем потока, контролем ошибок, повторной передачей после приема испорченного сегмента.
Все зто перекладывается на пользовательские процессы. Что же он делает? ()ОР предоставляет интерфейс для 1Р путем демультиплексирования нескольких процессов, использующих порты. Это все, что он делает. Для процессов, которым хочется управлять потоком, контролировать ошибки и временные интервалы, протокол (11)Р— зто как раз то, что доктор прописал. Одной из областей, где 1Л)Р применяется особенно широко, является область клиент-серверных приложений. Зачастую клиент посылает короткий запрос серверу и надеется получить короткий ответ.
Если запрос или ответ теряется, клиент по прошествии определенного временного интервала может попытаться еще раз. Это позволяет не только упростить код, но и уменьшить требуемое количе- 000 Глава 6. Транспортный уровень ство собщеннй по сравнению с протоколами, которым требуется начальная настройка. !)!л!8 (Роп1а!и Мате Яузгеш — служба имен ломенов) — зто приложение, которое использует (Л)Р именно так, как описано ранее. Мы изучим его в главе 7.