Что такое порты? Какие 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и как найти процесс, занимающий порт.