UDP
Предпосылки: IP и маршрутизация (IP-адрес, пакет, инкапсуляция).
IP-адрес доставляет пакет до машины. Но на машине работает десяток приложений одновременно — браузер, почтовый клиент, мессенджер, база данных. Когда пакет пришёл, операционная система должна понять, какому приложению его отдать.
Порт: адрес приложения
Порт (port — “гавань”) — число от 0 до 65535, идентифицирующее приложение. Почему 65535? Порт хранится в 16 битах: 2¹⁶ = 65536 значений.
Приложение “слушает” на определённом порту — привязка к порту (binding). Все данные, приходящие на этот порт, отдаются этому приложению. Полный адрес приложения = IP + порт, записывается как 192.168.1.25:8080. Эта комбинация называется сокет (socket — “гнездо”).
Порты разбиты на диапазоны. Well-known (0–1023) — зарезервированы за стандартными сервисами и требуют привилегий. Registered (1024–49151) — зарегистрированы за конкретными приложениями. Ephemeral (49152–65535) — временные, операционная система выделяет их для исходящих соединений.
Основные стандартные порты:
| Порт | Сервис |
|---|---|
| 22 | SSH |
| 80 | HTTP |
| 443 | HTTPS |
| 3306 | MySQL |
| 5432 | PostgreSQL |
| 6379 | Redis |
| 27017 | MongoDB |
Клиент и сервер
Сервер ждёт подключений на известном порту (например, 443). Клиент инициирует подключение — операционная система выделяет случайный эфемерный порт. Пример: браузер 192.168.1.25:52431 (случайный) подключается к серверу 142.250.74.46:443 (известный).
UDP: минимальный транспорт
UDP (User Datagram Protocol — протокол пользовательских датаграмм) — простейший транспортный протокол. Датаграмма (datagram) — самодостаточная единица данных (“data” + “-gram” от греческого “запись”).
Заголовок UDP — всего 8 байт:
+----------------+----------------+----------+----------+-------------+
| Порт | Порт | Длина | Контр. | Данные |
| отправителя | получателя | | сумма | |
| (2 байта) | (2 байта) | (2 байта)| (2 байта)| |
+----------------+----------------+----------+----------+-------------+
UDP не гарантирует доставку (данные могут потеряться), порядок (могут прийти не по порядку) и отсутствие дублирования. Отправил — и забыл.
Это не недостаток, а осознанный выбор. Для видеозвонков, стриминга, онлайн-игр, DNS-запросов скорость важнее надёжности: потерянный кадр видео незаметен, а задержка от ожидания подтверждения — заметна.
Когда надёжность всё-таки нужна — передача файлов, HTTP-запросы, работа с базами данных — используется TCP.