- UDP-пакет
-
UDP Название: User Datagram Protocol
Уровень (по модели OSI): Транспортный
Семейство: TCP/IP (иногда называют UDP/IP)
Порт/ID: 17 (в IP)
Спецификация: Основные реализации (клиенты): Ядро Windows, Linux, UNIX
Основные реализации (серверы): Ядро Windows, Linux, UNIX
Расширяемость: нет
UDP (англ. User Datagram Protocol — протокол пользовательских датаграмм) — это транспортный протокол для передачи данных в сетях IP без установления соединения. Он является одним из самых простых протоколов транспортного уровня модели OSI. Его
Содержание
Состав UDP-датаграммы
Первые 64 бита (8 октетов) датаграммы представляют собой UDP-заголовок, остальные биты — данные сообщения:
Биты 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 0-31 Порт отправителя (Source port) Порт получателя (Destination port) 32-63 Длина датаграммы (Length) Контрольная сумма (Checksum) 64-... Данные (Data) Значение поля «длина датаграммы» указывает на длину всего UDP-сообщения, то есть включая и UDP-заголовок. Измеряется в октетах.
Максимальная длина данных
Для вычисления максимальной длины данных в UDP-сообщении необходимо учесть, что UDP-сообщение в свою очередь является содержимым области данных IP-сообщения. Максимальная длина IP-сообщения (с учетом заголовка) равна 65535 октетов. Потому максимальная длина UDP-сообщения (за вычетом минимального IP-заголовка) равна 65535 − 20 = 65515 октетов. Длина заголовка UDP-сообщения равна 8 октетам, следовательно, максимальная длина данных в UDP-сообщении равна 65515 − 8 = 65507 октетов. На практике сообщения максимальной длины не используются — ограничиваются 8192 октетами данных.
Октеты IP-сообщение 65535 20 Минимальный IP-заголовок 65515 Данные IP-сообщения: UDP-сообщение 8 UDP-заголовок 65507 Данные UDP-сообщения Псевдозаголовок
UDP-заголовок не содержит информации об адресе отправителя и получателя, поэтому даже при совпадении порта получателя нельзя с точностью сказать, что сообщение пришло в нужное место. Для проверки того, что UDP-сообщение достигло пункта своего назначения, используется дополнительный псевдозаголовок:
Биты 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 0-31 IP-адрес отправителя (Source address) 32-63 IP-адрес получателя (Destination address) 64-95 0 0 0 0 0 0 0 0 Протокол (Protocol) Длина UDP-датаграммы (UDP length) Поле «протокол» содержит в себе значение 17 (00010001 в двоичном виде, 0x11 — в шестнадцатеричном) — идентификатор UDP-протокола. Поле «длина UDP-датаграммы» содержит в себе длину UDP-сообщения (UDP-заголовок + данные; длина псевдозаголовка не учитывается) в октетах, то есть совпадает с одноименным полем в UDP-заголовке.
Псевдозаголовок не включается в UDP-сообщение. Он используется для расчета контрольной суммы перед отправлением сообщения и при его получении (получатель составляет свой псевдозаголовок, используя адрес хоста, с которого пришло сообщение, и собственный адрес, а затем считает контрольную сумму).
Расчет контрольной суммы
Перед расчетом контрольной суммы UDP-сообщение дополняется в конце нулевыми битами до длины, кратной 16 битам (эти нулевые биты не отправляются вместе с сообщением). Поле контрольной суммы в UDP-заголовке во время расчета контрольной суммы отправляемого сообщения принимается нулевым.
Для расчета контрольной суммы все UDP-сообщение (UDP-заголовок, данные), включая псевдозаголовок, разбивается на слова (1 слово = 2 байта (октета) = 16 бит). Затем рассчитывается поразрядное дополнение до единицы суммы всех слов с поразрядным дополнением. Результат записывается в соответствующее поле в UDP-заголовке.
В том случае, если контрольная сумма получилась равной нулю, поле заполняют единицами. Если контрольную сумму не требуется рассчитывать, значение поля оставляют нулевым.
При получении сообщения получатель считает контрольную сумму заново (уже учитывая поле контрольной суммы), и, если в результате получится двоичное число из шестнадцати единиц (то есть 0xffff), то контрольная сумма считается сошедшейся, и сообщение принимается.
Пример расчета контрольной суммы
Для примера расчитаем контрольную сумму нескольких 16-битных слов: 0x398a, 0xf802, 0x14b2, 0xc281. Находим их сумму с поразрядным дополнением:
0x398a + 0xf802 = 0x1318c = 0x318d ;
0x318d + 0x14b2 = 0x463f ;
0x463f + 0xc281 = 0x108c0 = 0x08c1 .Теперь находим поразрядное дополнение до единицы полученного результата:
0x08c1 = 0000 1000 1100 0001 → 1111 0111 0011 1110 = 0xf73e или, проще — 0xffff − 0x08c1 = 0xf73e.
Это и есть искомая контрольная сумма.
Использование
Недостаточная надёжность протокола может выражаться как в потере отдельных пакетов, так и в их дублировании. UDP используется при передаче потокового видео, игр реального времени, а также некоторых других типов данных.
Ненадёжность протокола UDP надо понимать в том смысле, что в случаях влияния внешних факторов, приводящих к сбоям, протокол UDP не предусматривает стандартного механизма повторения передачи потерянных пакетов. В этом смысле он настолько же надежен, как и протокол TCP или
UDP используется в следующих протоколах:
- RTP и TFTP
- NTP
- NFS
См. также
Ссылки
Wikimedia Foundation. 2010.