Gymterview
junior

Что такое порты? Какие well-known порты вы знаете?

Порт — 16-битное число (0–65535), идентифицирующее конкретное приложение (или сервис) на сетевом хосте. Комбинация IP-адрес:порт однозначно определяет конечную точку (endpoint) сетевого взаимодействия и называется сокетом.

Аналогия из жизни: если IP-адрес — это адрес здания, то порт — это номер кабинета. Несколько отделов (приложений) могут находиться в одном здании (на одном IP), но у каждого свой кабинет (порт).

Порт позволяет нескольким приложениям на одном компьютере одновременно использовать сеть. Когда пакет приходит на хост, ОС смотрит на номер порта назначения и передаёт данные соответствующему процессу.

Диапазоны портов

Диапазон Название Описание
0–1023 Well-known (системные) Зарезервированы для стандартных сервисов. На Linux требуют root-прав (или CAP_NET_BIND_SERVICE) для привязки
1024–49151 Registered (зарегистрированные) Зарегистрированы IANA для конкретных приложений
49152–65535 Ephemeral (динамические) Назначаются ОС автоматически для исходящих соединений клиентов

Основные well-known порты

Порт Протокол Сервис Описание
20, 21 TCP FTP Данные (20) / управление (21)
22 TCP SSH Безопасный удалённый доступ
23 TCP Telnet Удалённый доступ (небезопасный)
25 TCP SMTP Отправка email
53 TCP/UDP DNS Система доменных имён
80 TCP HTTP Веб (незашифрованный)
110 TCP POP3 Получение email
143 TCP IMAP Получение email (с синхронизацией)
443 TCP HTTPS Веб (зашифрованный, HTTP + TLS)

Порты, важные для Java-разработчика

Порт Сервис Контекст
3306 MySQL JDBC-подключение
5432 PostgreSQL JDBC-подключение
6379 Redis Кэширование, сессии
8080 HTTP (альтернативный) Tomcat / Spring Boot по умолчанию
8443 HTTPS (альтернативный) Spring Boot HTTPS
9092 Apache Kafka Брокер сообщений
2181 ZooKeeper Координация Kafka (legacy)
27017 MongoDB Документная БД
5672 RabbitMQ AMQP-брокер
8761 Eureka Server Service discovery (Spring Cloud)

Для Java-разработчика

  • Spring Boot по умолчанию запускается на порту 8080 (настройка server.port в application.properties)
  • На одном порту может слушать только один процесс. java.net.BindException: Address already in use — порт уже занят другим приложением
  • netstat -tlnp (Linux) или netstat -ano (Windows) — посмотреть, какие порты заняты
  • В Docker при -p 8080:8080 первый порт — хостовой, второй — контейнерный
  • lsof -i :8080 (Linux/Mac) — найти процесс, занимающий конкретный порт

Вывод

Порты — механизм мультиплексирования на транспортном уровне, позволяющий множеству приложений на одном хосте одновременно работать с сетью. Знание основных well-known портов необходимо для диагностики сетевых проблем и настройки серверов.

На собеседовании: часто просят назвать порты основных сервисов (HTTP — 80, HTTPS — 443, SSH — 22, DNS — 53, PostgreSQL — 5432). Также могут спросить, что делать при Address already in use и как найти процесс, занимающий порт.