Компьютерные сети
Порты: двери в компьютер
Ваш браузер открыл 30 вкладок, мессенджер качает файлы, Spotify играет музыку - и всё через один сетевой кабель и один IP-адрес. Как компьютер знает, какой пакет кому? Порты - система «квартирных номеров» для сетевого трафика.
- **Веб-разработка:** понимание портов нужно для настройки серверов, работы с Docker, отладки CORS
- **Безопасность:** файрволы работают с портами; открытые порты = потенциальные уязвимости
- **DevOps:** проброс портов, конфликты портов, load balancing - ежедневные задачи
Предварительные знания
Номера портов
**Порт** - это 16-битное число (0–65535), которое идентифицирует конкретное приложение или сервис на компьютере. Если IP-адрес - это адрес дома, то порт - это номер квартиры.
Диапазон портов делится на три категории: **Well-known** (0–1023) - системные, требуют root-прав; **Registered** (1024–49151) - для приложений; **Dynamic/Private** (49152–65535) - для клиентских соединений.
**Важно:** Порт существует только в контексте транспортного протокола. TCP:80 и UDP:80 - это разные порты! Веб-сервер может слушать TCP:80, а другой сервис - UDP:80.
Сколько всего возможных номеров портов?
Стандартные порты
**Well-known порты** (0–1023) зарезервированы для стандартных сервисов. IANA (Internet Assigned Numbers Authority) ведёт официальный реестр. Знание этих портов - базовый навык сетевика.
**Мнемоника:** HTTP = 80, HTTPS = 443. Разница +363. SSH = 22 (два «s» в названии = двойка). DNS = 53 (пять + три = восемь букв в «resolver»).
На каком порту работает HTTPS?
Сокеты - точки соединения
**Сокет** (socket) - это комбинация IP-адреса и порта, уникально идентифицирующая конечную точку соединения. Записывается как `IP:port`, например `192.168.1.100:443`.
**Ephemeral ports** (динамические порты) - порты из диапазона 49152–65535, которые ОС автоматически назначает клиентским соединениям. Каждое новое соединение получает свой уникальный порт.
Что уникально идентифицирует TCP-соединение?
Мультиплексирование
**Мультиплексирование** - способность одного сетевого интерфейса обслуживать множество соединений одновременно. Порты - ключевой механизм мультиплексирования на транспортном уровне.
**Эффективность:** Без портов каждому приложению нужен был бы отдельный IP. Благодаря мультиплексированию один сервер с одним IP может обслуживать миллионы одновременных соединений.
Порт - это физический разъём на компьютере
Сетевой порт - это логический номер, не физический. Физические порты (USB, Ethernet) - совсем другое
Путаница возникает из-за общего термина. Сетевой порт - число от 0 до 65535, которое идентифицирует сервис. Никакого отношения к разъёмам не имеет.
Что позволяет мультиплексирование на транспортном уровне?
Ключевые идеи
- **Порт** - 16-битное число (0–65535), идентифицирующее сервис на хосте
- **Well-known порты** (0–1023): HTTP=80, HTTPS=443, SSH=22, DNS=53
- **Сокет** = IP + порт, 5-tuple уникально идентифицирует соединение
- **Мультиплексирование** позволяет множеству приложений работать через один IP
Связанные темы
Порты - фундамент для понимания транспортных протоколов:
Вопросы для размышления
- Почему нельзя запустить nginx на порту 80 без sudo?
- Как веб-сервер обслуживает тысячи клиентов на одном порту 443?
- Что произойдёт, если два приложения попытаются занять один порт?
Связанные уроки
- net-14-udp — Порты используются UDP для мультиплексирования
- net-15-tcp-basics — TCP-соединение идентифицируется парой src:port/dst:port
- net-25-nat — NAT перезаписывает порты для маскировки адресов
- net-42-firewall — Файрволы фильтруют трафик по портам
- net-06-ip-intro — Порты работают поверх IP-адресации
- alg-10-binary-search — Port lookup в ОС использует hash table - O(1) поиск
- os-15-syscalls