Протокол UDP (User Datagram Protocol - протокол пользовательских
датаграмм) является одним из двух основных протоколов, расположенных
непосредственно над IP. Он предоставляет прикладным процессам транспортные
услуги, которые не многим отличаются от услуг, предоставляемых протоколом IP.
Протокол UDP обеспечивает ненадежную доставку датаграмм и не
поддерживает соединений из конца в конец. К заголовку IP-пакета он
добавляет два поля, одно из которых, поле "порт", обеспечивает
мультиплексирование информации между разными прикладными процессами, а
другое
поле - "контрольная сумма" - позволяет поддерживать целостность данных.
Примерами сетевых приложений, использующих UDP, являются NFS
(Network File System - сетевая файловая система) и SNMP (Simple Network
Management Protocol - простой протокол управления сетью).
Взаимодействие между прикладными процессами и модулем UDP
осуществляется через UDP-порты. Порты нумеруются начиная с нуля.
Прикладной
процесс, предоставляющий некоторые услуги другим прикладным процессам
(сервер), ожидает поступления сообщений в порт, специально выделенный для
этих услуг. Сообщения должны содержать запросы на предоставление услуг.
Они отправляются процессами-клиентами.
Например, сервер SNMP всегда ожидает поступлений сообщений в порт
161. Если клиент SNMP желает получить услугу, он посылает запрос в UDPпорт
161 на машину, где работает сервер. В каждом узле может быть только
один сервер SNMP, так как существует только один UDP-порт 161. Данный
номер порта является общеизвестным, то есть фиксированным номером, официально
выделенным для услуг SNMP. Общеизвестные номера определяются стандартами
Internet.
Данные, отправляемые прикладным процессом через модуль UDP, достигают
места назначения как единое целое. Например, если
процессотправитель производит 5 записей в UDP-порт, то процесс-получатель
должен
будет сделать 5 чтений. Размер каждого записанного сообщения будет
совпадать с размером каждого прочитанного. Протокол UDP сохраняет границы
сообщений, определяемые прикладным процессом. Он никогда не объединяет
несколько сообщений в одно и не делит одно сообщение на части.
Когда модуль UDP получает датаграмму от модуля IP, он проверяет
контрольную сумму, содержащуюся в ее заголовке. Если контрольная сумма
равна нулю, то это означает, что отправитель датаграммы ее не подсчитывал,
и, следовательно, ее нужно игнорировать. Если два модуля UDP
взаимодействуют только через одну сеть Ethernet, то от контрольного
суммирования можно отказаться, так как средства Ethernet обеспечивают
достаточную степень надежности обнаружения ошибок передачи. Это снижает
накладные расходы, связанные с работой UDP. Однако рекомендуется всегда
выполнять контрольное суммирование, так как возможно в какой-то момент
изменения в таблице маршрутов приведут к тому, что датаграммы будут
посылаться через менее надежную среду.
Если контрольная сумма правильная (или равна нулю), то проверяется
порт назначения, указанный в заголовке датаграммы. Если к этому порту
подключен прикладной процесс, то прикладное сообщение, содержащееся в
датаграмме, становится в очередь для прочтения. В остальных случаях
датаграмма отбрасывается. Если датаграммы поступают быстрее, чем их
успевает обрабатывать прикладной процесс, то при переполнении очереди
сообщений поступающие датаграммы отбрасываются модулем UDP.