статьиGNU Free Documentation License материалы взяты из Википедии Статья была изменена. Оригинал статьи.

UDP

Материал из Энциклопедии в свободной энциклопедии
Перейти к: навигация, поиск
UDP
Название:

User Datagram Protocol

Уровень (по модели OSI):

Транспортный

Семейство:

TCP/IP (иногда называют UDP/IP)

Порт/ID:

17 (в IP)

Спецификация:

RFC 768 / STD 6

Основные реализации (клиенты):

Ядра Windows, Linux, UNIX

Основные реализации (серверы):

Ядра Windows, Linux, UNIX

Расширяемость:

нет

UDP (англ. User Datagram Protocol в протокол пользовательских датаграмм) в это транспортный протокол для передачи данных в сетях IP без установления соединения. Он является одним из самых простых протоколов транспортного уровня модели OSI. Его IP-идентификатор в 1116 (17).

В отличие от TCP, UDP не подтверждает доставку данных, не заботится о корректном порядке доставки и не делает повторов. Поэтому аббревиатуру UDP иногда расшифровывают как Unreliable Datagram Protocol (протокол ненадёжных датаграмм). Зато отсутствие соединения, дополнительного трафика и возможность широковещательных рассылок делают его удобным для применений, где малы потери, в массовых рассылках локальной подсети, в медиапротоколах и т.п.

Содержание

[править] Состав 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-сообщении при передаче в IP сетях необходимо учесть, что UDP-сообщение в свою очередь является содержимым области данных IP-сообщения. Максимальная длина IP-сообщения (с учетом заголовка) равна 65535 октетов. Потому максимальная длина UDP-сообщения (за вычетом минимального IP-заголовка) равна 65535 в 20 = 65515 октетов. Длина заголовка UDP-сообщения равна 8 октетам, следовательно, максимальная длина данных в UDP-сообщении равна 65515 в 8 = 65507 октетов. На практике нерационально использовать максимальную величину IP пакета, так как такой размер превышает MTU основных протоколов канального уровня, и следовательно требует фрагментации IP пакета, поэтому обычно используется размер, соотнесенный с MTU используемого канального протокола.

Октеты IP-сообщение
65535 20 Минимальный IP-заголовок
65515 Данные IP-сообщения:
UDP-сообщение
8 UDP-заголовок
65507 Данные 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 в двоичном виде, 11 в в шестнадцатеричном) в идентификатор UDP-протокола. Поле «длина UDP-датаграммы» содержит в себе длину UDP-сообщения без псевдозаголовка в октетах, то есть совпадает с одноименным полем в UDP-заголовке.

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

[править] Расчёт контрольной суммы

Перед расчетом контрольной суммы UDP-сообщение дополняется в конце нулевыми битами до длины, кратной 16 битам (псевдозаголовок и добавочные нулевые биты не отправляются вместе с сообщением). Поле контрольной суммы в UDP-заголовке во время расчета контрольной суммы отправляемого сообщения принимается нулевым.

Для расчета контрольной суммы псевдозаголовок и UDP-сообщение разбивается на слова (1 слово = 2 байта (октета) = 16 бит). Затем рассчитывается поразрядное дополнение до единицы суммы всех слов с поразрядным дополнением. Результат записывается в соответствующее поле в UDP-заголовке.

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

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

[править] Пример расчёта контрольной суммы

Для примера рассчитаем контрольную сумму нескольких 16-битных слов: 0x398a, 0xf802, 0x14b2, 0xc281. Находим их сумму с поразрядным дополнением.
0x398a + 0xf802 = 0x1318c 0x318d
0x318d + 0x14b2 = 0x0463f 0x463f
0x463f + 0xc281 = 0x108c0 0x08c1
Теперь находим поразрядное дополнение до единицы полученного результата:

0x08c1 = 0000 1000 1100 0001 1111 0111 0011 1110 = 0xf73e или, иначе в 0xffff в 0x08c1 = 0xf73e. Это и есть искомая контрольная сумма.

[править] Поля

Если задействован порт отправителя, то он указывает порт процесса, посылающего датаграмму. Можно принять, что это тот порт, на который при отсутствии какой-либо иной информации следует адресовать ответную датаграмму. Если данное поле не задействовано, то в него следует записать нуль. Порт получателя имеет смысл только в контексте конкретного Internet адреса получателя.

Длина в длина в октетах данной датаграммы, включая как заголовок, так и данные (это означает, что минимальное значение поля длины равно восьми).

[править] Интерфейс протокола IP

Модуль протокола UDP должен иметь возможность извлекать из Internet заголовка датаграммы Internet адреса отправителя и получателя, а также тип протокола. Один из возможных интерфейсов UDP/IP мог бы возвращать в ответ на команду получения полную Internet датаграмму, включая Internet заголовок целиком. Такой интерфейс мог бы также позволить протоколу UDP передавать протоколу IP для посылки некую готовую Internet датаграмму вместе с заголовком. Протокол IP мог бы лишь проверять определенные поля Internet заголовка на совместимость, а также вычислять контрольную сумму[источник не указан 24 дня]

[править] Использование

Недостаточная надёжность протокола может выражаться как в потере отдельных пакетов, так и в их дублировании. UDP используется при передаче потокового видео, игр реального времени, а также некоторых других типов данных.

Ненадёжность протокола UDP надо понимать в том смысле, что в случаях влияния внешних факторов, приводящих к сбоям, протокол UDP не предусматривает стандартного механизма повторения передачи потерянных пакетов. В этом смысле он настолько же надежен, как и протокол ICMP.

Если приложению требуется большая надёжность, то используется протокол TCP или SCTP, либо реализуется какой-нибудь свой нестандартный алгоритм повторения передач в зависимости от условий.

UDP используется в следующих протоколах:

[править] См. также

[править] Ссылки

Источник в «/w/index.php?title=UDP&oldid=44721624»
Пространства имён

Варианты
Просмотры
Действия