Интернет магазин китайских планшетных компьютеров



Компьютеры - UDP

13 июня 2011


Оглавление:
1. UDP
2. Использование



UDP — это транспортный протокол для передачи данных в сетях IP без установления соединения. Он является одним из самых простых протоколов транспортного уровня модели OSI. Его IP-идентификатор — 0x11.

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

Состав UDP-датаграммы

Первые 64 бита датаграммы представляют собой 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 Порт отправителя Порт получателя
32-63 Длина датаграммы Контрольная сумма
64-... Данные

Значение поля «длина датаграммы» указывает на длину всего UDP-сообщения, то есть включая и UDP-заголовок. Измеряется в октетах.

Максимальная длина данных

Для вычисления максимальной длины данных в UDP-сообщении при передаче в IP сетях необходимо учесть, что UDP-сообщение в свою очередь является содержимым области данных IP-сообщения. Максимальная длина IP-сообщения равна 65535 октетов. Потому максимальная длина UDP-сообщения равна 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-заголовок не содержит информации об адресе отправителя и получателя, поэтому даже при совпадении порта получателя нельзя с точностью сказать, что сообщение пришло в нужное место. Для проверки того, что 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-адрес отправителя
32-63 IP-адрес получателя
64-95 0 0 0 0 0 0 0 0 Протокол Длина UDP-датаграммы

Поле «протокол» содержит в себе значение 17 — идентификатор UDP-протокола. Поле «длина UDP-датаграммы» содержит в себе длину UDP-сообщения в октетах, то есть совпадает с одноименным полем в UDP-заголовке.

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

Расчёт контрольной суммы

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

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

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

При получении сообщения получатель считает контрольную сумму заново, и, если в результате получится двоичное число из шестнадцати единиц, то контрольная сумма считается сошедшейся, и сообщение принимается.

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

Для примера рассчитаем контрольную сумму нескольких 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 адреса получателя.

Длина — длина в октетах данной датаграммы, включая как заголовок, так и данные.

В псевдозаголовке, который «понарошку» добавляется к UDP-заголовку, указываются адреса отправителя и получателя, номер протокола и длина UDP-датаграммы. Процедура вычисления контрольной суммы такая же, как и в протоколе TCP.

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

Здесь следует внести небольшое пояснение. При дополнении до единицы, или, что то же, при обратном представлении числа, запись со всеми нулями эквивалентна записи со всеми единицами. Обе они обозначают нуль. Поскольку первый бит является знаковым, число, состоящее из всех нулей называют положительным нулём, а состоящее из всех единиц — отрицательным. Несмотря на их математическую эквивалентность, в поле контрольной суммы UDP, как можно было видеть, они используются по-разному. Положительный ноль указывает на то, что контрольная сумма намеренно не вычислялась, а отрицательный ноль, на то, что вычисленная контрольная сумма оказалась равной нулю.

Интерфейс протокола IP

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



Просмотров: 2191


<<< Traversal Using Relay NAT
UDP Lite >>>