Характеристика протокола UDP
Среди набора протоколов Интернета есть транспортный протокол без установления соединения, UDP (User Datagram Protocol – пользовательский дейтаграммный протокол). Протокол UDP позволяет приложениям отправлять инкапсулированные IP-дейтаграммы без установления соединений.
С помощью протокола UDP передаются сегменты, состоящие из 8-байтного заголовка, за которым следует поле полезной нагрузки. Заголовок показан на рис. 6.5. Два номера портов служат для идентификации конечных точек внутри отправляющей и принимающей машин. Когда прибывает пакет UDP, содержимое его поля полезной нагрузки передается процессу, связанному с портом назначения. Смысл использования UDP вместо обычного IP заключается в указании портов источника и приемника. Без этих двух полей на транспортном уровне невозможно было бы определить действие, которое следует произвести с пакетом. В соответствии с полями портов производится корректная доставка сегментов.
Информация о порте источника требуется прежде всего при создании ответа, пересылаемого отправителю. Копируя значение поля Порт источника из входящего сегмента в поле Порт назначения исходящего сегмента, процесс, посылающий ответ, может указать, какому именно процессу на противоположной стороне он предназначается.
Поле Длина UDP содержит информацию о длине сегмента, включая заголовок и полезную нагрузку. Контрольная сумма UDP не является обязательной. Если она не подсчитывается, ее значение равно 0 (настоящая нулевая контрольная сумма кодируется всеми единицами).
Рис. 6.5 Заголовок UDP
Протокол UDP не занимается контролем потока, контролем ошибок, повторной передачей после приема искаженного сегмента. Все это перекладывается на пользовательские процессы. Этот протокол предоставляет интерфейс для IP путем демультиплексирования нескольких процессов, использующих порты.
Одной из областей, где UDP применяется особенно широко, является область клиент-серверных приложений. Зачастую клиент посылает короткий запрос к серверу и надеется получить короткий ответ. Если запрос или ответ теряется, клиент по прошествии определенного временного интервала может попытаться еще раз послать запрос. Это позволяет не только упростить код, но и уменьшить требуемое количество сообщений в сети.