linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Уроки
  • How it works
  • Симулятор
  • База знаний
  • Собеседование
Index
Categories
All entries
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
home/linux/kb/Сеть: L4 и выше/port

kb/network-l4 ── Сеть: L4 и выше ── beginner

Порт - как несколько сервисов делят один IP

16-битное число (0-65535), идентифицирует **процесс-получатель** на хосте. IP говорит куда (хост), порт - кому (процессу). 80 - HTTP, 443 - HTTPS, 22 - SSH.

view as markdownaka: tcp-port, udp-port, port-number

Зачем нужен порт

IP-адрес адресует машину. Но на машине крутится десяток процессов: web, SSH, база, мониторинг. Когда пакет прилетает на 192.168.1.50 - кому его отдавать?

Решает порт - 16-битное число (от 0 до 65535) в TCP/UDP-заголовке. Каждый «слушающий» процесс привязан к конкретному порту через bind() + listen(). Когда пакет приходит на этот порт - ядро отдаёт его тому процессу.

Пара (IP, port) = socket address - глобально уникальный адрес endpoint'а в интернете.

Категории портов

ДиапазонИмяКто использует
0-1023well-knownСтандартные сервисы (root-only на Linux)
1024-49151registeredЗарегистрированные у IANA сервисы
49152-65535dynamic / ephemeralКлиентские исходящие соединения

Известные well-known:

  • 22 SSH
  • 53 DNS
  • 67/68 DHCP server / client
  • 80 HTTP
  • 123 NTP
  • 443 HTTPS
  • 3306 MySQL
  • 5432 PostgreSQL
  • 6379 Redis

Полный список - /etc/services.

Ephemeral ports - почему ты увидишь 54321 в curl'е

Когда клиент делает соединение - он не выбирает свой порт явно. ОС берёт случайный из ephemeral-диапазона (на Linux дефолт 32768-60999, проверить можно cat /proc/sys/net/ipv4/ip_local_port_range).

Эти порты живут на время соединения. После закрытия - освобождаются (с лагом TIME_WAIT, см. tcp-states).

Это значит: если ты делаешь много исходящих соединений - порты могут кончиться. На облачном NAT-gateway'е с тысячами клиентов это реальная проблема.

Один порт - один процесс?

По сути - да. Только один процесс может bind() на конкретный (IP, port). Иначе EADDRINUSE.

Исключения:

  • SO_REUSEPORT - несколько процессов могут слушать один порт, ядро балансирует входящие коннекты между ними (как nginx/haproxy делают)
  • 0.0.0.0 vs специфический IP - bind 0.0.0.0:80 и bind 1.2.3.4:80 могут конфликтовать или нет, зависит от порядка bind'а

Посмотреть кто что слушает

bash
ss -tlnp                # все TCP listening сокеты + процессы
ss -ulnp                # UDP
lsof -i :443            # кто на 443
netstat -tulnp          # старая школа, тоже работает

Расшифровка флагов ss:

  • -t TCP, -u UDP
  • -l только listening
  • -n без DNS-резолва
  • -p показать процесс (нужен root для чужих)

§ команды

bash
ss -tlnp

Все TCP-сокеты в LISTEN с привязанным процессом

bash
ss -tn state established

Активные TCP-соединения - оба порта (свой и удалённый) видны

bash
lsof -i :443

Кто использует порт 443 (входящие или исходящие)

bash
cat /proc/sys/net/ipv4/ip_local_port_range

Диапазон ephemeral-портов на этом хосте

bash
sudo nc -l 8080

Открыть слушающий порт 8080 для эксперимента (TCP)

§ см. также

  • tcp-handshakeTCP three-way handshakeTCP-соединение открывается тремя пакетами: SYN от клиента, SYN-ACK от сервера, ACK от клиента. После - соединение Established, можно слать данные.
  • udp-basicsUDP - User Datagram ProtocolUDP - простой протокол доставки датаграмм без установки соединения, без ретрансмитов, без гарантии порядка. Заголовок 8 байт. Применение: DNS, DHCP, QUIC, VoIP, любой случай когда задержка важнее надёжности.
  • tls-handshakeTLS handshakeTLS - слой шифрования поверх TCP. Перед передачей данных стороны делают handshake: обмениваются ключами, проверяют сертификат, выбирают cipher.
  • http-protocolHTTP/1.1, HTTP/2, HTTP/3HTTP/1.1 - текстовый протокол с keep-alive. HTTP/2 - бинарный с мультиплексированием в одном TCP-соединении. HTTP/3 = HTTP/2-семантика поверх QUIC/UDP без TCP-head-of-line blocking.
  • cmd-nmapnmap - сканирование портов и хостовnmap - сетевой сканер: discover хостов (-sn), TCP/UDP-порты (-sS/-sU), версии сервисов (-sV), ОС (-O), NSE-скрипты. Только в своей сети или с явным разрешением - сканировать чужое запрещено.
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки