Порты и сокеты
Понимаем, как одна машина обслуживает много сетевых сервисов одновременно — через порты и сокеты.
Порт — это 16-битный номер (0–65535), который адресует конкретный процесс (сервис) на машине. IP приводит пакет к нужному компьютеру, порт — к нужной программе на нём.
Зачем нужны порты
На одном сервере одновременно работают веб-сервер, почта, база данных, SSH. У них один IP-адрес. Как пакет понимает, какому из сервисов он адресован? По порту. IP-адрес — это как адрес дома, а порт — номер квартиры. Транспортный уровень доставляет данные нужному «жильцу».
Известные порты
За многими сервисами закреплены стандартные номера портов (0–1023 — «well-known»). Их полезно знать наизусть:
| Порт | Сервис | Описание |
| 80 | HTTP | веб без шифрования |
| 443 | HTTPS | веб с TLS |
| 22 | SSH | удалённый доступ к серверу |
| 53 | DNS | разрешение имён |
| 25 / 587 | SMTP | отправка почты |
| 5432 | PostgreSQL | база данных |
Поэтому https://site.com и https://site.com:443 — одно и то же: 443 подставляется по умолчанию. А ваш дев-сервер на localhost:3000 слушает порт 3000.
Что такое сокет
Сокет (socket) — это программный интерфейс «конца» сетевого соединения, конкретная пара IP:порт. С точки зрения кода сокет — объект, в который пишут и из которого читают байты, как из файла.
Уникальное соединение определяется четвёркой: IP и порт источника + IP и порт назначения. Именно поэтому к серверному порту 443 могут одновременно подключиться тысячи клиентов: у каждого своя четвёрка, потому что у клиентов разные адреса и/или порты.
Соединение 1: 203.0.113.5:51000 -> 93.184.216.34:443
Соединение 2: 198.51.100.7:62000 -> 93.184.216.34:443
(разные источники — разные соединения к одному порту)
Серверные и клиентские порты
- Сервер «слушает» (listen) фиксированный порт, например 443, и ждёт подключений.
- Клиент при подключении получает случайный высокий порт (ephemeral, обычно 49152–65535) — он временный, на время соединения.
Зачем это веб-разработчику
«Address already in use» при запуске сервера — порт занят другим процессом. «Connection refused» — на порту никто не слушает. Понимание портов объясняет, почему фронтенд на :3000 и API на :8000 — это «разные origin» (важно для CORS, разберём позже), и как пробрасывать порты в Docker (-p 8080:80).
Итог
- Порт (0–65535) адресует процесс на машине; IP адресует машину.
- Известные порты: 80 (HTTP), 443 (HTTPS), 22 (SSH), 53 (DNS).
- Сокет — это пара
IP:порт, конец соединения. - Соединение уникально определяется четвёркой источник/назначение, поэтому один порт обслуживает много клиентов.