UDP
| Название: |
User Datagram Protocol |
|---|---|
| Уровень (по модели OSI): |
Транспортный |
| Семейство: |
TCP/IP (иногда называют UDP/IP) |
| Порт/ID: |
17 (в IP) |
| Спецификация: | |
| Основные реализации (клиенты): |
Ядра 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-датаграмме добавляется специальный псевдо-заголовок с данными о получателе и отправителе следующего формата:
| Биты | 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 заголовка на совместимость, а также вычислять контрольную сумму
[править] Использование
Недостаточная надёжность протокола может выражаться как в потере отдельных пакетов, так и в их дублировании. UDP используется при передаче потокового видео, игр реального времени, а также некоторых других типов данных.
Ненадёжность протокола UDP надо понимать в том смысле, что в случаях влияния внешних факторов, приводящих к сбоям, протокол UDP не предусматривает стандартного механизма повторения передачи потерянных пакетов. В этом смысле он настолько же надежен, как и протокол ICMP.
Если приложению требуется большая надёжность, то используется протокол TCP или SCTP, либо реализуется какой-нибудь свой нестандартный алгоритм повторения передач в зависимости от условий.
UDP используется в следующих протоколах:
[править] См. также
[править] Ссылки
- RFC 768
- IANA Port Assignments
- «Протокол UDP», Семенов Ю. А.
- Д. Комер. Межсетевой обмен с помощью TCP/IP. Глава 11. Протокол UDP.
| Основные протоколы TCP/IP по уровням модели OSI (Список портов TCP и UDP) | |
|---|---|
| Физический | |
| Канальный | |
| Сетевой | |
| Транспортный | |
| Сеансовый | |
| Представления | |
| Прикладной | |
| Другие прикладные | |