UDP (User Datagram Protocol, протокол пользовательских датаграмм) — транспортный протокол, который отправляет данные отдельными пакетами без установки соединения и подтверждений доставки. У него заголовок всего 8 байт и нет повторной отправки, поэтому он быстрее TCP. На UDP работают DNS, синхронизация времени, видеозвонки, онлайн-игры и HTTP/3.
Ниже разберём, как устроен UDP-пакет, чем протокол отличается от TCP, какие порты за ним закреплены, и запустим сервер с клиентом на Python. Если сетевые термины пока путаются, начните с обзора сетевых протоколов простыми словами: там TCP и UDP показаны рядом с HTTP, FTP и SSH.
НетологияПрофессия «Сетевой инженер»85 800 ₽12 месяцев
MerionСетевые технологии21 840 ₽2 месяца
ДипломиксУправление и администрирование сетевых устройств информационно-коммуникационных систем10 900 ₽
Академия ТОПУчебная программа “Кибербезопасность и Сетевые технологии”Бесплатно2 года
АПОКСетевой инженер - курс переподготовки32 980 ₽280 часов
GeekBrainsФакультет сетевого инженера145 925 ₽11 месяцев
Что такое UDP простыми словами

Сравните открытку и заказное письмо. Открытку бросили в ящик и забыли: почта не скажет, дошла ли она, и две открытки могут прийти в обратном порядке. Заказное письмо идёт с уведомлением о вручении, зато дольше и с бумажками. UDP похож на открытку, TCP на заказное письмо.
Протокол описан в документе RFC 768 от 28 августа 1980 года, его автор Джон Постел. Документ занимает три страницы, и с тех пор формат пакета не менялся. Там же прямо сказано, чего от протокола ждать не стоит:
Протокол ориентирован на транзакции, доставка и защита от дублей не гарантируются. Приложениям, которым нужна упорядоченная надёжная доставка потока данных, следует использовать TCP.
UDP живёт на транспортном уровне, четвёртом в модели OSI. В заголовке IP-пакета у него свой номер протокола, 17. Ниже него IP доставляет пакет до нужного компьютера, а сам UDP доводит данные до нужной программы через номер порта.
Единицу данных UDP называют датаграммой или UDP-пакетом. Встречается и написание «дейтаграмма», это одно и то же слово.
Как работает протокол UDP
У UDP нет фазы установки соединения. Программа просто берёт данные, указывает адрес и порт получателя и отправляет. Весь путь выглядит так:
- Приложение передаёт данные операционной системе через сокет типа «датаграмма».
- UDP добавляет к данным заголовок из 8 байт: порты отправителя и получателя, длину и контрольную сумму.
- IP заворачивает датаграмму в свой пакет и отправляет по сети.
- Компьютер получателя проверяет контрольную сумму и по номеру порта отдаёт данные нужной программе.
- Если пакет потерялся по дороге, отправитель об этом не узнает. Повтор, если он нужен, делает само приложение.
Главное следствие: 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.
Выбор транспорта под задачу входит в обычную работу сетевого инженера. С чего начать путь в профессию, рассказано в плане, как стать сетевым инженером с нуля, а программы обучения собраны в каталоге курсов по сетевому администрированию.
Где используют датаграммы: порты и сервисы

За многими сервисами 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.
Пример на 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 для начинающих и потом переходите к сетевым.
Как проверить открытый порт
Чтобы узнать, какие программы слушают 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.
Пакеты теряются и приходят не по порядку
Симптом: на локальной машине всё работает, а через интернет часть сообщений пропадает.
Причина: так UDP и устроен, повтора и сортировки в нём нет.
Решение: добавить в каждое сообщение номер и при необходимости переспрашивать пропущенное. Если нужна полноценная надёжность, проще взять TCP или готовый QUIC, чем изобретать свой протокол.
Клиент зависает на recvfrom
Симптом: программа ждёт ответа и не завершается.
Причина: ответ потерялся или порт закрыт, а UDP об этом не сообщает.
Решение: всегда ставить тайм-аут на сокет и решать, что делать, если ответа нет: повторить запрос или вернуть ошибку.
Сервер на UDP стал участником DDoS-атаки
Симптом: исходящий трафик сервера внезапно вырос, а жалобы приходят от чужих сетей.
Причина: UDP не проверяет, кто на самом деле прислал запрос. Злоумышленник подставляет адрес жертвы, и ваш сервер шлёт ей ответы, которые больше запроса. RFC 8085 называет такие ответы потенциальным вектором атак с усилением.
Решение: не открывать DNS, NTP и SNMP в интернет без нужды, ограничивать частоту ответов и проверять отправителя. Как устроены такие атаки и почему их трудно остановить, описано в материале о DDoS-атаках.
Где освоить сетевое администрирование системно
Разобраться в одном протоколе можно за вечер. Настраивать сети, фаерволы и мониторинг, ловить потери пакетов в Wireshark и объяснять разработчикам, почему их сервис не проходит через NAT, учат на курсах по сетям. Работа с TCP, UDP и портами каждый день входит в задачи сетевого инженера и системного администратора.
Программы по сетевому администрированию можно сравнить по цене, длительности и формату:
| Курс | Школа | Стоимость со скидкой | В рассрочку | Длительность | Обзор курса от Checkroi |
|---|---|---|---|---|---|
| Администрирование ОС Linux Перейти на сайт курса | 90 157 ₽ | 5556 ₽/мес. | 3 месяца | Обзор курса | |
| Профессия «Сетевой инженер» Перейти на сайт курса | 85 800 ₽ | 3575 ₽/мес. | 12 месяцев | Обзор курса | |
| Сетевые технологии Перейти на сайт курса | 21 840 ₽ | 1578 ₽/мес. | 2 месяца | Обзор курса | |
| Сетевые технологии Huawei Перейти на сайт курса | 11 830 ₽ | 938 ₽/мес. | 2 месяца | Обзор курса | |
| Системное администрирование и информационные технологии - курс переподготовки Перейти на сайт курса | 32 980 ₽ | 2748 ₽/мес. | 576 часов | Обзор курса |
Больше программ — в полном каталоге курсов по сетевому администрированию




