Протоколы Internet

         

Протокол UDP


4.4.2 Протокол UDP

Семенов Ю.А. (ГНЦ ИТЭФ)

Протокол UDP (user datagram protocol, RFC-768) является одним из основных протоколов, расположенных непосредственно над IP. Он предоставляет прикладным процессам транспортные услуги, немногим отличающиеся от услуг протокола IP. Протокол UDP обеспечивает доставку дейтограмм, но не требует подтверждения их получения. Протокол UDP не требует соединения с удаленным модулем UDP ("бессвязный" протокол). К заголовку IP-пакета udp добавляет поля порт отправителя и порт получателя, которые обеспечивают мультиплексирование информации между различными прикладными процессами, а также поля длина

udp-дейтограммы и контрольная сумма, позволяющие поддерживать целостность данных. Таким образом, если на уровне ip для определения места доставки пакета используется адрес, на уровне UDP - номер порта.

Примерами сетевых приложений, использующих UDP, являются NFS(network file system), TFTP(trivial file transfer protocol, RFC-1350), RPC (remote procedure call, RFC-1057) и SNMP (simple network management protocol, RFC-1157). Малые накладные расходы, связанные с форматом UDP, а также отсутствие необходимости подтверждения получения пакета, делают этот протокол наиболее популярным при реализации приложений мультимедиа, но главное его место работы - локальные сети и мультимедиа.

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

Например, сервер snmp всегда ожидает сообщения, адресованного в порт 161. Если клиент snmp желает получить услугу, он посылает запрос в UDP-порт 161 на машину, где работает сервер. На каждой машине может быть только один агент SNMP, т.к. существует только один порт 161. Данный номер порта является общеизвестным, т.е. фиксированным номером, официально выделенным в сети Internet для услуг SNMP. Общеизвестные номера портов определяются стандартами Internet (см. табл. 4.4.2.1).


Данные, отправляемые прикладным процессом через модуль UDP, достигают места назначения как единое целое. Например, если процесс-отправитель производит 5 записей в порт, то процесс-получатель должен будет сделать 5 чтений. Размер каждого записанного сообщения будет совпадать с размером каждого прочитанного. Протокол UDP сохраняет границы сообщений, определяемые прикладным процессом. Он никогда не объединяет несколько сообщений в одно и не делит одно сообщение на части. Формат UDP-сообщений представлен ниже на рис. 4.4.2.1:



Рис. 4.4.2.1 Формат UDP-дейтограмм

Длина сообщения равна числу байт в UDP-дейтограмме, включая заголовок. Поле UDP контрольная сумма содержит код, полученный в результате контрольного суммирования UDP-заголовка и поля данные. Не трудно видеть, что этот протокол использует заголовок минимального размера (8 байт). Таблица номеров UDP-портов приведена ниже (4.4.2.1). Номера портов от 0 до 255 стандартизованы и использовать их в прикладных задачах не рекомендуется. Но и в интервале 255-1023 многие номера портов заняты, поэтому прежде чем использовать какой-то порт в своей программе, следует заглянуть в RFC-1700. Во второй колонке содержится стандартное имя, принятое в Internet, а в третей - записаны имена, принятые в unix.

Таблица 4.4.2.1 Номера UDP-портов (более полный перечень в RFC-1700; Если какой-то номер порта в перечне отсутствует, это не означает, что он не зарезервирован и его можно использовать, просто я сэкономил место)



Десятич. номер порта Обозначение порта Описание   в Интернет в Unix   0

- -

Зарезервировано 1

TCPmux -

tcp Мультиплексор 2

Compressnet -

Программа управления 3

Compressnet -

Процесс сжатия 5

RJE -

Вход в удаленную задачу 7

Echo echo

Эхо 9

Discard discard

Сброс 11

Users systat

Активные пользователи 13

Daytime daytime

Время дня 15

- Netstat

Кто работает или netstat 19

Chargen chargen

Генератор символов
20

FTP-data ftp-data

FTP (данные) 21

FTP ftp

Протокол пересылки файлов (управление) 23

telnet telnet

Подключение терминала 24

- -

Любая частная почтовая система 25

SMTP smtp

Протокол передачи почтовых сообщений 31

MSG-auth   Распознавание сообщения (аутентификация) 35

- -

Любой частный принт-сервер 37

Time time

Время 39

RLP -

Протокол поиска ресурсов 41

Graphics   Графика 42

nameserver name

Сервер имен 43

Nicname whois

Кто это? (whois-сервис) 45

MPM -

Блок обработки входных сообщений 46

MPM-snd -

Блок обработки выходных сообщений 48

Auditd -

Демон цифрового аудита 49

login -

Протокол входа в ЭВМ 50

RE-mail-ck -

Протокол удаленного контроля почтовым обменом 53

Domain nameserver

Сервер имен доменов (dns) 57

- -

Любой частный терминальный доступ 59

- -

Любой частный файл-сервер 64

covia -

Коммуникационный интегратор (ci) 66

SQL*net -

Oracle SQL*net 67

Bootps Bootps

Протокол загрузки сервера 68

Bootpc bootpc

Протокол загрузки клиента 69

TFTP tftp

Упрощенная пересылка файлов 70

Gopher -

Gopher (поисковая система) 71

- Netrjs-1

Сервис удаленных услуг 77

- rje

Любой частный RJE-сервис 79

Finger finger

finger 80

WWW-HTTP   World Wide Web HTTP 81

Hosts2-NS -

Сервер имен 2 87

- -

Любая частная терминальная связь 88

Kerberos   Kerberos 92

NPP -

Протокол сетевой печати 93

DCP -

Протокол управления приборами 95

Supdup supdup

Supdup протокол 97

Swift-rvf -

swift-протокол удаленных виртуальных файлов 101

Hostname hostnames

Сервер имен ЭВМ для сетевого информационного центра 102

ISO-Tsap iso-tsap

ISO-Tsap 103

GPPitnp   Сети точка-точка 104

ACR-nema   ACR-nema digital IMAG. & comm. 300 108

Snagas   sna-сервер доступа  109

POP2 -

Почтовый протокол pop2 110

POP3 -

Почтовый протокол POP3 111

SUNRPC sunrpc

SUN microsystem RPC 113

Auth auth

Служба распознавания 114

Audionews   Аудио-новости 115

SFTP   Простой протокол передачи файлов 117

UUCP-path uucp-path

Служба паролей uucp 118

SQLserv   SQL-сервер 119

NNTP NNTP

Протокол передачи новостей 123

NTP NTP

Сетевой протокол синхронизации 129

PWDgen   Протокол генерации паролей 130-132

    Cisco 133

Statsrv   Сервер статистики 134

Ingres-net   Ingres-net-сервис 135

LOC-srv   Поисковый сервис 137

Netbios-SSN -

Служба имен Netbios 138

Netbios-DGM   Служба дейтограмм netbios 139

Netbios-SSN   Служба сессий Netbios 147

ISO-IP   ISO-IP 150

SQL-net   SQL net 152

BFTP   Протокол фоновой пересылки файлов 156

SQLsrv   SQL-сервер 158

PCmail-srv   PC почтовый сервер 161

- SNMP

Сетевой монитор SNMP 162

- SNMP-trap

SNMP-ловушки 170

Print-srv   postscript сетевой сервер печати 179

BGP   Динамический протокол внешней маршрутизации 191

Prospero   Служба каталогов Prospero 194

IRC   Протокол Интернет для удаленных переговоров 201-206

    Протоколы сетей Apple talk 213

IPX   ipx 348

CSI-SGWP   Протокол управления cabletron 396

Netware-IP   Novell-Netware через IP 398

Kryptolan   Kryptolan 414

Infoseek   Infoseek (информационный поиск) 418

Hyper-g   Hyper-g 444

SNPP   Простой протокол работы со страницами 512

- biff (exec)

Unix Comsat (удаленное исполнение) 513

- Who

Unix Rwho daemon 514

- syslog

Дневник системы 515

Printer   Работа с буфером печати (spooler) 525

- Timed

Драйвер времени Зарегистрировано ряд портов для стандартного применения и в диапазоне 1024-65535. Например:
 
Номер порта Обозначение Назначение
1397 Аudio-activmail Активная звуковая почта
1398 Video-activmail Активная видео-почта
5002 RFE Радио-Ethernet
6000-6063 X11 Система X Windows
7008 AFS3-update Сервер-сервер актуализация
<


/p> Модуль IP передает поступающий IP-пакет модулю UDP, если в заголовке этого пакета указан код протокола UDP. Когда модуль UDP получает дейтограмму от модуля IP, он проверяет контрольную сумму, содержащуюся в ее заголовке. Если контрольная сумма равна нулю, это означает, что отправитель ее не подсчитал. ICMP, IGMP, UDP и TCP протоколы имеют один и тот же алгоритм вычисления контрольной суммы (RFC-1071). Но вычисление контрольной суммы для UDP имеет некоторые особенности. Во-первых, длина UDP-дейтограммы может содержать нечетное число байт, в этом случае к ней добавляется нулевой байт, который служит лишь для унификации алгоритма и никуда не пересылается. Во-вторых, при расчете контрольной суммы для UDP и TCP добавляются 12-байтные псевдо-заголовки, содержащие IP-адреса отправителя и получателя, код протокола и длину дейтограммы (см. рис. 4.4.2.2). Как и в случае IP-дейтограммы, если вычисленная контрольная сумма равна нулю, в соответствующее поле будет записан код 65535.



Рис. 4.4.2.2. Псевдозаголовок, используемый при расчете контрольной суммы

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

Так как максимальная длина IP-дейтограммы равна 65535 байтам, максимальная протяженность информационного поля UDP-дейтограммы составляет 65507 байт. На практике большинство систем работает с UDP-дейтограммами с длиной 8192 байта или менее. Детальное описание форматов, полей пакетов и пр. читатель может найти в RFC-768.


Содержание раздела