Практически любое современное приложение взаимодействует с сетью. Когда вы смотрите стрим на YouTube, играете в онлайн-игру, совершаете видеозвонок или отправляете DNS-запрос, за передачу данных отвечает один из транспортных протоколов - TCP или UDP.
Если TCP делает ставку на надежность и гарантированную доставку, то UDP (User Datagram Protocol) ориентирован на максимальную скорость и минимальные задержки. Благодаря своей простоте UDP остается одним из самых востребованных транспортных протоколов Интернета спустя десятилетия после своего появления.
UDP (User Datagram Protocol) - это транспортный протокол семейства TCP/IP, который обеспечивает передачу данных между приложениями без предварительного установления соединения.
Главная идея UDP заключается в следующем:
Просто отправь пакет получателю. Если он потеряется - это не проблема самого протокола.
UDP не пытается:
Благодаря этому протокол получается очень быстрым и практически не добавляет накладных расходов.
Немного истории
В конце 1970-х годов активно развивалась сеть ARPANET - предшественник современного Интернета. Уже существовал надежный транспортный протокол TCP, однако инженеры столкнулись с проблемой.
Не всем приложениям была нужна надежность.
Например:
Для подобных задач гораздо важнее получить актуальную информацию прямо сейчас, чем ждать повторной передачи потерянного пакета.
В 1980 году американский инженер David P. Reed предложил новый транспортный протокол, который получил название User Datagram Protocol. Спустя несколько месяцев был опубликован документ RFC 768, официально описывающий UDP. Именно этот стандарт используется и сегодня практически без изменений.
Принцип работы UDP
В отличие от TCP, UDP является Connectionless-протоколом.
Это означает, что перед передачей данных не происходит никакого "рукопожатия" (Three-Way Handshake).
Процесс выглядит максимально просто:
На этом обязанности UDP заканчиваются.
Если пакет потеряется - отправитель об этом даже не узнает.
Основные особенности UDP
UDP обладает несколькими важными характеристиками.
- Нет установки соединения
Передача начинается сразу после отправки первого пакета. Это позволяет значительно уменьшить задержку.
- Нет подтверждения доставки
Получатель не сообщает отправителю:
- Нет повторной передачи
Если пакет потерян где-то по пути, UDP не будет пытаться отправить его повторно. Если приложению необходима такая функциональность, оно должно реализовать ее самостоятельно.
- Нет контроля порядка
Пакеты могут прийти:
UDP никак это не контролирует.
- Минимальные накладные расходы
Заголовок UDP занимает всего 8 байт.
Для сравнения:
Именно поэтому UDP считается очень "легким" протоколом.
Формат заголовка UDP
Заголовок UDP состоит всего из четырех полей.
Общий размер заголовка: 8 байт.
- Source Port
Номер порта приложения-отправителя.
Например:
Иногда может быть равен 0.
- Destination Port
Порт приложения, которое должно принять пакет.
Например:
- Length
Содержит длину всей UDP-датаграммы:
Минимальное значение - 8 байт.
- Checksum
Используется для проверки целостности данных. Если контрольная сумма не совпадает, пакет считается поврежденным и отбрасывается. Следует отметить, что контрольная сумма не гарантирует доставку, а лишь помогает обнаружить ошибки передачи.
Области применения UDP
Из-за отсутствия подтверждений доставки UDP идеально подходит там, где скорость важнее надежности.
- DNS
Когда браузер запрашивает IP-адрес сайта, почти всегда используется UDP. Причина проста: DNS-запрос очень маленький. Если пакет потеряется, клиент просто отправит новый запрос.
- Онлайн-игры
Практически все современные мультиплеерные игры используют UDP. Игроку важнее получить актуальные координаты противника через 20 мс, чем старые координаты спустя 300 мс после повторной передачи.
- Видеозвонки
Во время разговора потеря одного кадра практически незаметна. Зато задержка в несколько секунд сделает разговор невозможным. Поэтому многие технологии передачи аудио и видео используют UDP.
- Потоковое видео
Во многих системах IPTV, видеоконференций и прямых трансляций применяется UDP. Небольшая потеря кадров значительно менее заметна, чем длительные остановки воспроизведения.
- VoIP
IP-телефония также использует UDP. Во время телефонного разговора важнее слышать собеседника с минимальной задержкой, чем ожидать повторной доставки потерянного аудиопакета.
- DHCP
При получении IP-адреса компьютер еще не имеет полноценной сетевой конфигурации. Поэтому протокол DHCP использует UDP.
- NTP
Протокол синхронизации времени также построен поверх UDP. Передаются небольшие сообщения, поэтому надежное соединение не требуется.
Source: Orkhan Alishov's notes