Протокол UDP: что это, как работает и чем отличается от TCP

UDP отправляет данные отдельными датаграммами без соединения и подтверждений, поэтому работает быстрее TCP, но может терять пакеты.

Разбираем заголовок в 8 байт, порты DNS, NTP и HTTP/3, максимальный размер пакета и запускаем сервер с клиентом на Python.

Статью написал:
Ваня Буявец, продюсер, основатель Checkroi
Ваня Буявец
Основатель Checkroi, продюсер, эксперт в выборе онлайн-курсов
Все 3046 статей автора Подписаться на Телеграм-канал
Одобрено экспертом:
Наташа Буявец, основатель Checkroi, эксперт по онлайн-курсам
Наташа Буявец
Основательница Checkroi, продюсер Youtube-каналов, эксперт по онлайн-курсам
Все 3700 экспертных мнений Подписаться на Телеграм-канал
Обложка: Протокол UDP: что это, как работает и чем отличается от TCP

UDP (User Datagram Protocol, протокол пользовательских датаграмм) — транспортный протокол, который отправляет данные отдельными пакетами без установки соединения и подтверждений доставки. У него заголовок всего 8 байт и нет повторной отправки, поэтому он быстрее TCP. На UDP работают DNS, синхронизация времени, видеозвонки, онлайн-игры и HTTP/3.

Ниже разберём, как устроен UDP-пакет, чем протокол отличается от TCP, какие порты за ним закреплены, и запустим сервер с клиентом на Python. Если сетевые термины пока путаются, начните с обзора сетевых протоколов простыми словами: там TCP и UDP показаны рядом с HTTP, FTP и SSH.

Что такое UDP простыми словами

Рой отправляет почтовые открытки по сети

Сравните открытку и заказное письмо. Открытку бросили в ящик и забыли: почта не скажет, дошла ли она, и две открытки могут прийти в обратном порядке. Заказное письмо идёт с уведомлением о вручении, зато дольше и с бумажками. UDP похож на открытку, TCP на заказное письмо.

Протокол описан в документе RFC 768 от 28 августа 1980 года, его автор Джон Постел. Документ занимает три страницы, и с тех пор формат пакета не менялся. Там же прямо сказано, чего от протокола ждать не стоит:

Протокол ориентирован на транзакции, доставка и защита от дублей не гарантируются. Приложениям, которым нужна упорядоченная надёжная доставка потока данных, следует использовать TCP.

UDP живёт на транспортном уровне, четвёртом в модели OSI. В заголовке IP-пакета у него свой номер протокола, 17. Ниже него IP доставляет пакет до нужного компьютера, а сам UDP доводит данные до нужной программы через номер порта.

Единицу данных UDP называют датаграммой или UDP-пакетом. Встречается и написание «дейтаграмма», это одно и то же слово.

Как работает протокол UDP

У UDP нет фазы установки соединения. Программа просто берёт данные, указывает адрес и порт получателя и отправляет. Весь путь выглядит так:

  1. Приложение передаёт данные операционной системе через сокет типа «датаграмма».
  2. UDP добавляет к данным заголовок из 8 байт: порты отправителя и получателя, длину и контрольную сумму.
  3. IP заворачивает датаграмму в свой пакет и отправляет по сети.
  4. Компьютер получателя проверяет контрольную сумму и по номеру порта отдаёт данные нужной программе.
  5. Если пакет потерялся по дороге, отправитель об этом не узнает. Повтор, если он нужен, делает само приложение.

Главное следствие: UDP сохраняет границы сообщений. Отправили три датаграммы, получатель прочитает три отдельных сообщения, а не склеенный поток байтов, как в TCP. Это удобно для коротких запросов вроде DNS: один вопрос, один ответ.

Порт обозначается числом от 0 до 65 535, по нему система понимает, какой программе отдать пакет. Подробно о том, чем сетевой порт отличается от разъёма на корпусе, рассказано в статье про порты компьютера.

Канал основателя Checkroi Вани Буявца3 700 человек читают мой Телеграм-канал про нейросетиСобрал промпты для Claude Code и ChatGPT, разборы ИИ-инструментов и лайфхаки по продвижению бизнеса в одном местеПрисоединиться

Структура пакета: заголовок в 8 байт

Заголовок UDP состоит из четырёх полей по 16 бит. Для сравнения: заголовок TCP по RFC 9293 занимает 20 байт, только когда опций нет, а с опциями он длиннее.

Поле Размер Что хранит
Порт отправителя (Source Port) 2 байта Куда слать ответ. Поле необязательное: если не используется, туда пишут ноль
Порт получателя (Destination Port) 2 байта Какой программе на целевом компьютере отдать данные
Длина (Length) 2 байта Размер датаграммы вместе с заголовком, минимум 8 байт
Контрольная сумма (Checksum) 2 байта Проверка, что заголовок и данные не испортились по дороге

Контрольную сумму считают не только по самому пакету, но и по псевдозаголовку: IP-адресам отправителя и получателя, номеру протокола и длине. Так получатель отсеет датаграмму, которая пришла не на тот адрес.

Контрольная сумма в IPv4 и IPv6

  • В IPv4 нулевая контрольная сумма означает «отправитель её не считал», так разрешает RFC 768. Но RFC 1122 требует, чтобы по умолчанию подсчёт был включён, а пакет с неверной суммой система молча выбрасывает.
  • В IPv6 контрольная сумма UDP обязательна: по RFC 8200 узел IPv6 должен вычислять её для каждого исходящего пакета.

Размер UDP-пакета и MTU

Поле длины 16-битное, поэтому датаграмма с заголовком не длиннее 65 535 байт. В IPv4 из этого вычитаются ещё 20 байт заголовка IP, и полезных данных в одной датаграмме помещается максимум 65 507 байт.

На практике пакеты гораздо меньше. В обычной сети Ethernet MTU, максимальный размер кадра для IP, равен 1500 байт. За вычетом 20 байт IPv4 и 8 байт UDP остаётся 1472 байта данных. Всё, что длиннее, IP режет на фрагменты, и потеря любого из них губит всю датаграмму.

Поэтому RFC 8085 с рекомендациями по UDP не рекомендует отправлять датаграммы больше MTU пути: приложению стоит либо определять этот MTU, либо слать датаграммы меньше минимального.

Чем UDP отличается от TCP

Рой сравнивает открытку и заказное письмо

Оба протокола работают поверх IP и используют порты. Различаются тем, сколько работы они берут на себя.

Параметр UDP TCP
Соединение Не устанавливается Тройное рукопожатие перед передачей
Доставка Не гарантирована Подтверждения и повторная отправка
Порядок пакетов Может нарушиться Восстанавливается на приёме
Границы сообщений Сохраняются Поток байтов без границ
Заголовок 8 байт От 20 байт
Рассылка многим сразу Широковещание и мультикаст Только один получатель
Где выбирают Звонки, игры, DNS, стриминг Сайты, почта, файлы, банковские операции

Правило выбора простое. Если устаревшие данные бесполезны, как кадр видеозвонка секундной давности, берут UDP. Если важен каждый байт, как в файле или платеже, берут TCP.

Выбор транспорта под задачу входит в обычную работу сетевого инженера. С чего начать путь в профессию, рассказано в плане, как стать сетевым инженером с нуля, а программы обучения собраны в каталоге курсов по сетевому администрированию.

CheckroiCheckroiПодборка курсов по сетевому администрированию40 курсов • 18 школСравните цены, школы, программу и найдите выгодные предложения по обучениюСравнить→

Где используют датаграммы: порты и сервисы

Панель роутера с подписанными портами 53, 123 и 443

За многими сервисами UDP-порты закреплены в реестре IANA. Вот те, что встречаются чаще всего:

Сервис UDP-порт Зачем
DNS 53 Перевод доменного имени в IP-адрес
DHCP 67 (сервер), 68 (клиент) Раздача IP-адресов в локальной сети
TFTP 69 Простая передача файлов, например прошивок
NTP 123 Синхронизация времени
SNMP 161, 162 Мониторинг сетевого оборудования
Syslog 514 Сбор системных журналов
STUN и TURN 3478 Соединение звонков через NAT
mDNS 5353 Поиск устройств в домашней сети
HTTP/3 (QUIC) 443 Загрузка сайтов

DNS работает поверх UDP со времён RFC 1035 1987 года. Там сказано, что DNS-сообщения по UDP ограничены 512 байтами, а более длинный ответ обрезается и помечается флагом TC.

Голосовая связь и видео тоже живут на UDP: потерянный кусок звука лучше пропустить, чем ждать его повтора и получить задержку. Этим занимаются VoIP-инженеры, у которых UDP и порты STUN каждый день в работе.

HTTP/3 и QUIC: зачем вебу UDP

Долгое время сайты грузились только по TCP. Протокол QUIC изменил это: по RFC 9000 его пакеты передаются в UDP-датаграммах, чтобы QUIC было проще развернуть в существующих системах и сетях.

Надёжность при этом никуда не делась, её просто перенесли выше. RFC 9114 описывает HTTP/3 как HTTP поверх QUIC, и упорядоченную надёжную доставку внутри каждого потока обеспечивает QUIC. Чем HTTP/3 отличается от прежних версий, видно в разборе HTTP и HTTPS.

CheckroiCheckroiПодборка курсов по Python567 курсов • 51 школаСравните цены, школы, программу и найдите выгодные предложения по обучениюСравнить→

Пример на Python: сервер и клиент

Проще всего понять UDP, запустив его. Скрипт ниже поднимает сервер на порту 9999, отправляет ему три слова и получает их обратно заглавными буквами. Сервер и клиент работают в одном файле, так что хватит одного терминала:

import socket
import threading

ADDR = ("127.0.0.1", 9999)

server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind(ADDR)

def serve():
    for _ in range(3):
        data, client = server.recvfrom(1024)
        print(f"сервер: {data.decode()!r} от {client[0]}")
        server.sendto(data.decode().upper().encode(), client)

threading.Thread(target=serve, daemon=True).start()

client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
client.settimeout(1.0)
for word in ["привет", "udp", "без рукопожатия"]:
    client.sendto(word.encode(), ADDR)
    reply, _ = client.recvfrom(1024)
    print(f"клиент: ответ {reply.decode()!r}")

Вывод в терминале:

сервер: 'привет' от 127.0.0.1
клиент: ответ 'ПРИВЕТ'
сервер: 'udp' от 127.0.0.1
клиент: ответ 'UDP'
сервер: 'без рукопожатия' от 127.0.0.1
клиент: ответ 'БЕЗ РУКОПОЖАТИЯ'

Что здесь важно:

  • SOCK_DGRAM означает UDP. Для TCP был бы SOCK_STREAM.
  • Нет вызовов listen(), accept() и connect(): соединения не существует, каждая датаграмма сама несёт адрес получателя.
  • recvfrom() возвращает и данные, и адрес отправителя, по нему сервер шлёт ответ.
  • settimeout(1.0) нужен потому, что ответ может не прийти никогда. Без тайм-аута клиент повис бы навсегда.

Если хочется потренировать сокеты дальше, начните с задач по Python для начинающих и потом переходите к сетевым.

Ваня БуявецКанал основателя Checkroi Вани БуявцаЗабирайте промпты и обучение по нейросетям в моём Телеграм-каналеБольше 3 700 человек уже применяют Claude Code, ChatGPT и другие нейросети в работе, учёбе, бизнесе и жизниПерейти в канал

Как проверить открытый порт

Чтобы узнать, какие программы слушают UDP на вашем компьютере, хватит встроенных команд.

Задача Команда
Слушающие UDP-порты в Linux с именами процессов sudo ss -ulpn
UDP-порты в Windows с PID процесса netstat -ano -p udp
Отправить тестовую датаграмму nc -u 127.0.0.1 9999
Просканировать UDP-порты удалённого хоста sudo nmap -sU -p 53,123,161 адрес
Поймать UDP-трафик в Wireshark фильтр udp.port == 53

Ключи ss по справке man: -u показывает UDP-сокеты, -l только слушающие, -p процессы. Сайт man7.org из России открывается не всегда, та же справка есть в самой системе: команда man ss. В netstat для Windows параметр -p принимает tcp, udp, tcpv6 или udpv6, это видно в справке Microsoft.

Со сканированием UDP есть подвох. Закрытый порт отвечает ICMP-сообщением «порт недоступен», а открытый на пустой пакет отвечает редко: программа обычно сразу выбрасывает его как неверный. Так это объясняет документация Nmap, и порт без ответа получает статус open|filtered: открыт он или его закрыл фаервол, по скану не понять. Команды с примерами вывода собраны в статье про сканирование портов в Nmap.

Частые ошибки и что с ними делать

Ошибка «Message too long» при отправке

Симптом: sendto() падает с ошибкой «Message too long».

Причина: датаграмма больше, чем пропускает система. Скрипт с отправкой 1472, 65 507 и 65 508 байт на Linux дал такой результат:

1472 байт: отправлено
65507 байт: отправлено
65508 байт: ошибка Message too long

В macOS порог намного ниже. Предел задаёт параметр ядра net.inet.udp.maxdgram, в исходниках XNU он равен 9216 байтам. Там тот же скрипт падает уже на 65 507.

Решение: резать данные на куски до 1472 байт или до MTU своей сети, а большие файлы передавать по TCP.

CheckroiCheckroiПодборка курсов по Linux158 курсов • 30 школСравните цены, школы, программу и найдите выгодные предложения по обучениюСравнить→

Пакеты теряются и приходят не по порядку

Симптом: на локальной машине всё работает, а через интернет часть сообщений пропадает.

Причина: так UDP и устроен, повтора и сортировки в нём нет.

Решение: добавить в каждое сообщение номер и при необходимости переспрашивать пропущенное. Если нужна полноценная надёжность, проще взять TCP или готовый QUIC, чем изобретать свой протокол.

Клиент зависает на recvfrom

Симптом: программа ждёт ответа и не завершается.

Причина: ответ потерялся или порт закрыт, а UDP об этом не сообщает.

Решение: всегда ставить тайм-аут на сокет и решать, что делать, если ответа нет: повторить запрос или вернуть ошибку.

Сервер на UDP стал участником DDoS-атаки

Симптом: исходящий трафик сервера внезапно вырос, а жалобы приходят от чужих сетей.

Причина: UDP не проверяет, кто на самом деле прислал запрос. Злоумышленник подставляет адрес жертвы, и ваш сервер шлёт ей ответы, которые больше запроса. RFC 8085 называет такие ответы потенциальным вектором атак с усилением.

Решение: не открывать DNS, NTP и SNMP в интернет без нужды, ограничивать частоту ответов и проверять отправителя. Как устроены такие атаки и почему их трудно остановить, описано в материале о DDoS-атаках.

CheckroiCheckroiПодборка курсов для системных администраторов132 курса • 31 школаСравните цены, школы, программу и найдите выгодные предложения по обучениюСравнить→

Где освоить сетевое администрирование системно

Разобраться в одном протоколе можно за вечер. Настраивать сети, фаерволы и мониторинг, ловить потери пакетов в Wireshark и объяснять разработчикам, почему их сервис не проходит через NAT, учат на курсах по сетям. Работа с TCP, UDP и портами каждый день входит в задачи сетевого инженера и системного администратора.

Программы по сетевому администрированию можно сравнить по цене, длительности и формату:

КурсШколаСтоимость со скидкойВ рассрочкуДлитель­ностьОбзор курса от Checkroi
Администрирование ОС Linux
Перейти на сайт курса
SkillboxSkillbox90 157 ₽5556 ₽/мес.3 месяцаОбзор курса
Профессия «Сетевой инженер»
Перейти на сайт курса
НетологияНетология85 800 ₽3575 ₽/мес.12 месяцевОбзор курса
Сетевые технологии
Перейти на сайт курса
MerionMerion21 840 ₽1578 ₽/мес.2 месяцаОбзор курса
Сетевые технологии Huawei
Перейти на сайт курса
MerionMerion11 830 ₽938 ₽/мес.2 месяцаОбзор курса
Системное администрирование и информационные технологии - курс переподготовки
Перейти на сайт курса
АПОК — Академия профессионального образования кадровАПОК32 980 ₽2748 ₽/мес.576 часовОбзор курса

Больше программ — в полном каталоге курсов по сетевому администрированию

Часто задаваемые вопросы

Что такое UDP простыми словами?

UDP (User Datagram Protocol) — транспортный протокол, который отправляет данные отдельными датаграммами без установки соединения. Он не подтверждает доставку и не повторяет потерянные пакеты, зато работает быстрее TCP.

Как расшифровывается UDP?

User Datagram Protocol, по-русски «протокол пользовательских датаграмм». Встречается и написание «дейтаграмма», это одно и то же.

Чем UDP отличается от TCP?

TCP устанавливает соединение, подтверждает получение и восстанавливает порядок пакетов. UDP ничего из этого не делает: у него заголовок 8 байт, и он подходит там, где важна скорость, например для звонков, игр и DNS.

Какой порт у UDP?

Своего единого порта у протокола нет: номер от 0 до 65 535 выбирает сервис. Например, DNS слушает UDP-порт 53, NTP — 123, DHCP — 67 и 68, HTTP/3 — 443.

Какой максимальный размер UDP-пакета?

Поле длины позволяет датаграмму до 65 535 байт вместе с заголовком, в IPv4 это до 65 507 байт данных. В обычной сети Ethernet без фрагментации помещается 1472 байта данных.

Почему HTTP/3 работает поверх UDP?

HTTP/3 работает поверх протокола QUIC, а пакеты QUIC передаются в UDP-датаграммах. Надёжную доставку и шифрование при этом обеспечивает сам QUIC.

Читайте Checkroi первым в Google
Добавьте Checkroi в избранные источники — и наши разборы курсов и обзоры школ будут показываться выше в вашей выдаче Google.
Оставить комментарий
0 комментариев
Форма комментария

Оставьте комментарий

Напишите, что думаете. Нам важно ваше мнение!