UDP

Предпосылки: IP и маршрутизация (IP-адрес, пакет, инкапсуляция).

IPv6 | TCP

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) — временные, операционная система выделяет их для исходящих соединений.

Основные стандартные порты:

ПортСервис
22SSH
80HTTP
443HTTPS
3306MySQL
5432PostgreSQL
6379Redis
27017MongoDB

Клиент и сервер

Сервер ждёт подключений на известном порту (например, 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.


IPv6 | TCP