Опубликован: 11.08.2008 | Уровень: специалист | Доступ: платный
Лекция 9:

Транспортный уровень. Пользовательский протокол дейтаграмм

< Лекция 8 || Лекция 9: 12345 || Лекция 10 >
Аннотация: В этой лекции можно изучить простейший пользовательский протокол дейтаграмм — UDP (User Datagram Protocol)

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

На приемном конце транспортный уровень собирает все различные блоки, принадлежащие к одной и той же прикладной программе, проверяет их и те, которые свободны от ошибок, передает дальше или доставляет к прикладной программе в виде потока. После того как будет передан весь поток, транспортный уровень завершает соединение. Набор программ для транспортного уровня задается двумя протоколами: UDP и TCP. В этом разделе мы изучим простейший из них — пользовательский протокол дейтаграмм (UDPUser Datagram Protocol).

UDP, как и TCP, обслуживает взаимодействие между прикладным уровнем и уровнями IP, а также обслуживает взаимодействие между прикладными программами и сетевыми операциями.

Протоколы транспортного уровня имеют несколько задач. Одна из них — создать связь "процесс-процесс" ( процесс – это работающая прикладная программа); чтобы это выполнить, UDP использует номер порта. Другая задача — обеспечить механизм управления транспортным уровнем. UDP занимается этой задачей в очень малой степени: он не обеспечивает механизма управления потоками, а следовательно, не обрабатывает подтверждения полученных пакетов. Однако UDP обеспечивает в некоторой степени контроль ошибок. Если UDP обнаруживает ошибку в принятом пакете, он, ничего не оповещая, удаляет его. Он может только получать блоки данных от процесса и доставлять их недостоверно приемнику. Блоки данных должны быть достаточно малы, чтобы подогнать их в пакет передачи. UDP называют не ориентированным на соединение, недостоверным транспортным протоколом.

Наряду с недостатками он имеет некоторые преимущества. UDP — очень простой протокол, использующий минимальные дополнительные затраты. Если процесс может посылать маленькие сообщения и не заботится о достоверности, он вполне может применять UDP. UDP, передающий маленькие сообщения, требует меньшего взаимодействия (обмена сигналами) между передатчиком и приемником, чем при использовании TCP.

Пользовательская дейтаграмма

UDP-пакеты называются пользовательскими дейтаграммами, имеют фиксированный размер заголовка 8 байт. Рис. 9.1. показывает формат пользовательской дейтаграммы.

Обсудим некоторые поля заголовков.

  • Адрес порта источника. Это номер порта, который используется процессом, выполняющимся в хосте сервера. Он равен 16 битам длины; это означает, что номер порта может быть в пределах от 0 до 65 535. Если хост источника — это клиент (клиент, посылающий запрос), номер порта в большинстве случаев – это кратковременный номер порта, затребованный процессом и выбранный работающим на хосте источника программным обеспечением UDP.
  • Адрес порта пункта назначения. Это номер порта, используемый процессом в хосте пункта назначения. Он также имеет 16 бит длины. Если хост пункта назначения – это сервер (клиент, посылающий запрос), то номер порта в большинстве случаев хорошо известен. Если хост пункта назначения – это клиент (сервер, посылающий отклик), номер порта в большинстве случаев кратковременный. В этом случае сервер копирует кратковременный номер порта, он получен в пакете запроса.
  • Длина. Это поле длиной 16 бит, которое определяет полную длину дейтаграммы пользователя, плюс заголовок данных. Эти 16 бит могут определять полную длину от 0 до 65 535 байт.
  • Контрольная сумма. Это поле используется для обнаружения всей пользовательской дейтаграммы (заголовок плюс данные).
Формат UDP-дейтаграммы

Рис. 9.1. Формат UDP-дейтаграммы

Контрольная сумма

Вычисление UDP контрольной суммы отличается от IP и ICMP. Здесь контрольная сумма включает три раздела: псевдозаголовок, заголовок UDP и данные, поступившие от прикладного уровня.

Псевдозаголовок – это часть заголовка IP-пакета, в котором дейтаграмма пользователя инкапсулирована в некоторые поля, заполненные нулями ( рис. 9.2.).

Поле протокола добавлено для того, чтобы гарантировать, что пакет принадлежит UDP, а не TCP. Мы увидим позже, что если процесс будет использовать либо UDP, либо TCP, номер порта назначения может быть тот же самый. Значение поля протокола для UDP – 17. Если это значение изменится во время передачи, вычисление контрольной суммы у приемника будет обнаружено, он и UDP удалят этот пакет — он не будет доставлен к ложному протоколу.

Заметим совпадение между полем псевдозаголовка и последними 12 битами заголовка IP.

Вычисление контрольной суммы у передатчика.

Передатчик делает следующие восемь шагов для вычисления контрольной суммы:

  1. Дополняет псевдозаголовок к пользовательской дейтаграмме UDP.
  2. Заполняет нулями поле контрольной суммы.
  3. Разделяет все биты на 16-битовые (2-байтовые) слова. Если полное число байтов четное — дополняет один байт заполнения (все нули).
  4. Это заполнение делается только с целью вычисления контрольной суммы и в дальнейшем будет удалено.
  5. Складывает все 16-битовые секции с использованием арифметики с дополнением единиц.
  6. Дополняет результат (изменяет нули на единицы и все единицы на нули). Это16-битовое число вставляет в поле контрольной суммы.
  7. Удаляет псевдозаголовок и все дополнительные заполнения.
  8. Доставляет UDP пользовательскую дейтаграмму к IP программному обеспечению для инкапсуляции.

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

Псевдозаголовок, дополняемый к UDP-дейтаграмме

Рис. 9.2. Псевдозаголовок, дополняемый к UDP-дейтаграмме
Вычисление контрольной суммы на стороне приемника

Приемник для вычисления контрольной суммы делает следующие шесть шагов:

  1. Дополняет псевдозаголовок к пользовательской дейтаграмме UDP.
  2. Если надо, то дополняет заполнение.
  3. Разделяет все биты на 16-битовые секции.
  4. Складывает все 16-битовые секции с использованием арифметики с дополнением единиц.
  5. Дополняет результат.
  6. Если результат равен нулю, отбрасывает псевдозаголовок и любые заполнения и принимает UDP-дейтаграмму только 7 байт. Если результат какой-либо другой, пользовательская дейтаграмма удаляется.
Пример

На рис. 9.3. показано вычисление контрольной суммы для очень маленькой пользовательской дейтаграммы всего лишь с 7 байтами. Поэтому число байтов данных — нечетное, дополняется заполнение для вычисления контрольной суммы.

Псевдозаголовок, так же как и заполнение, будет отброшен, когда пользовательская дейтаграмма будет доставлена к IP.

Пример контрольной суммы, простой пользовательской дейтаграммы UDP

Рис. 9.3. Пример контрольной суммы, простой пользовательской дейтаграммы UDP
Использование контрольной суммы

Вычисление контрольной суммы и ее включение в пользовательскую дейтаграмму необязательно. Если контрольная сумма не вычислена, поле заполняется нулями.

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

< Лекция 8 || Лекция 9: 12345 || Лекция 10 >
Евгений Виноградов
Евгений Виноградов

Прошел экстерном экзамен по курсу перепордготовки "Информационная безопасность". Хочу получить диплом, но не вижу где оплатить? Ну и соответственно , как с получением бумажного документа?

Илья Сидоркин
Илья Сидоркин

Добрый день! Подскажите пожалуйста как и когда получить диплом, после сдичи и оплаты?????

Алексей Гончаренко
Алексей Гончаренко
Россия
Айбек Куттымурат
Айбек Куттымурат
Казахстан, Алматы