Первые 64 бита (8 байт) датаграммы представляют собой UDP-заголовок, остальные биты — данные сообщения:
Биты | ||||||||||||||||||||||||||||||||
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-сообщение | |||||||
Минимальный IP-заголовок | ||||||||
Данные IP-сообщения:
|
Псевдозаголовок
UDP-заголовок не содержит информации об адресе отправителя и получателя, поэтому даже при совпадении порта получателя нельзя с точностью сказать, что сообщение пришло в нужное место. Для проверки того, что UDP-сообщение достигло пункта своего назначения, используется дополнительный псевдозаголовок:
Биты | ||||||||||||||||||||||||||||||||
0-31 | IP-адрес отправителя (Source address) | |||||||||||||||||||||||||||||||
32-63 | IP-адрес получателя (Destination address) | |||||||||||||||||||||||||||||||
64-95 | Протокол (Protocol) | Длина UDP-датаграммы (UDP length) |
Поле «протокол» содержит в себе значение 17 (00010001 в двоичном виде, 0x11 — в шестнадцатеричном) — идентификатор UDP-протокола. Поле «длина UDP-датаграммы» содержит в себе длину UDP-сообщения (UDP-заголовок + данные; длина псевдозаголовка не учитывается) в октетах, то есть совпадает с одноименным полем в UDP-заголовке.
Псевдозаголовок не включается в UDP-сообщение. Он используется для расчета контрольной суммы перед отправлением сообщения и при его получении (получатель составляет свой псевдозаголовок, используя адрес хоста, с которого пришло сообщение, и собственный адрес, а затем считает контрольную сумму).
|
|