$ sudo teach IT
Модуль 4

UDP — быстро и без лишних церемоний

Самый простой транспортный протокол. Он почти ничего не добавляет к IP — и именно поэтому так полезен.

Вы узнаете
  • что такое порт и зачем он нужен транспортному уровню;
  • как устроена датаграмма UDP;
  • почему отсутствие гарантий иногда лучше, чем их наличие.

4.1Порты: как данные находят нужную программу

IP доводит пакет до устройства, но на устройстве одновременно работают десятки программ: браузер, мессенджер, игра. Чтобы понять, кому из них предназначены данные, транспортный уровень использует порты — числа от 0 до 65 535.

Диапазон Название Для чего
0 – 1023 Системные (общеизвестные) Закреплены за стандартными службами: 80 — HTTP, 443 — HTTPS, 53 — DNS, 22 — SSH.
1024 – 49 151 Зарегистрированные Используются конкретными приложениями: 3306 — MySQL, 5432 — PostgreSQL, 3389 — удалённый рабочий стол.
49 152 – 65 535 Динамические Операционная система выдаёт их программам- клиентам на время одного соединения.

Сервер слушает заранее известный порт, а клиент при подключении получает случайный временный. Пара «IP-адрес + порт» называется сокетом. Каждое соединение однозначно определяется пятью значениями: протокол, адрес и порт отправителя, адрес и порт получателя. Поэтому вы можете открыть один и тот же сайт в десяти вкладках — у каждой будет свой порт отправителя, и ответы не перепутаются.

4.2Как устроен UDP

UDP (User Datagram Protocol) добавляет к данным заголовок всего из четырёх полей общей длиной 8 байт:

Поле Размер Назначение
Порт отправителя 2 байта Куда присылать ответ
Порт получателя 2 байта Какой программе предназначены данные
Длина 2 байта Размер заголовка вместе с данными
Контрольная сумма 2 байта Проверка, что данные не исказились в пути

Одно сообщение UDP называют датаграммой. Отправка выглядит предельно просто: программа формирует датаграмму и сразу отдаёт её в сеть. Никакой предварительной договорённости с получателем нет — поэтому говорят, что UDP работает без установления соединения.

4.3Чего UDP не делает

UDP ничего не обещает
  • Не подтверждает доставку. Отправитель не знает, дошла ли датаграмма.
  • Не повторяет потерянное. Пропало — значит пропало.
  • Не следит за порядком. Датаграммы могут прийти вперемешку.
  • Не регулирует скорость. Отправитель может слать быстрее, чем получатель или сеть успевают обработать.

Звучит как список недостатков, но у медали есть обратная сторона: нет рукопожатия — нет задержки перед первой отправкой; нет повторов — нет «подвисаний» из-за одного потерянного пакета; маленький заголовок — меньше накладных расходов. Если приложению нужны какие-то гарантии, оно реализует их само и ровно в том объёме, который ему нужен.

Аналогия: прямой эфир

Диктор в прямом эфире не останавливается и не повторяет фразу, если у вас на секунду пропал звук. Повтор всё равно пришёл бы слишком поздно и только сбил бы трансляцию. Лучше потерять слово, чем отстать от эфира.

4.4Где применяется UDP

Применение Почему UDP
DNS-запросы Один короткий вопрос и один короткий ответ. Устанавливать соединение ради этого дольше, чем сам обмен.
Голосовые и видеозвонки Важна минимальная задержка. Потерянные 20 миллисекунд звука незаметны, а пауза на повторную передачу — заметна.
Онлайн-игры Устаревшие координаты игрока бесполезны: проще дождаться следующего обновления, чем повторять старое.
DHCP, NTP Короткие служебные обмены; у DHCP вдобавок в момент запроса ещё нет IP-адреса для полноценного соединения.
QUIC и HTTP/3 Современный транспорт, который строит поверх UDP собственные, более гибкие гарантии (об этом — модуль 8).
VPN-тоннели Внутри тоннеля уже работает TCP со своими повторами. Дублировать их снаружи вредно, поэтому тоннель выгоднее строить на UDP.