Дом и квартира
IP-адрес определяет устройство, но на компьютере одновременно работает множество программ: браузер, мессенджер, почтовый клиент, система обновлений. Чтобы входящие данные попали именно к нужной, используется номер порта. Если IP-адрес это адрес дома, то порт номер квартиры.
Порт это число от 0 до 65535, и оно существует отдельно для TCP и UDP. Одинаковые номера в двух протоколах считаются разными портами, так что TCP 53 и UDP 53 не мешают друг другу.
Кроме адреса и порта, в заголовках указывается и протокол. Поэтому полностью соединение описывается пятёркой значений: протокол, адрес и порт отправителя, адрес и порт получателя. Это и есть та информация, по которой роутер ведёт таблицы трансляции адресов.
Три диапазона номеров
Порты от 0 до 1023 называют системными, или общеизвестными: за ними закреплены стандартные службы. Веб по HTTP использует 80, HTTPS 443, SSH 22, DNS 53, почта по разным протоколам 25, 110, 143, 587 и 993.
Порты от 1024 до 49151 зарегистрированные: их занимают отдельные приложения, например базы данных и игровые серверы. Диапазон с 49152 по 65535 динамический: из него система выбирает временные номера для исходящих соединений. Когда ваш браузер обращается к сайту, он использует один из таких портов как «обратный адрес».
Сокет как пара «адрес и порт»
Сокет это конечная точка сетевого соединения, идентифицируемая сочетанием протокола, IP-адреса и порта. Соединение TCP однозначно определяется четвёркой: адрес и порт клиента, адрес и порт сервера. Поэтому браузер может открыть десятки соединений к одному серверу на порт 443: у каждого будет свой исходящий порт.
Для программиста сокет это объект, через который программа читает и пишет данные. Серверная программа создаёт «слушающий» сокет и ждёт подключений, а клиент создаёт сокет и устанавливает соединение.
Открытый, закрытый и отфильтрованный порт
Порт называют открытым, если на нём есть программа, готовая принимать соединения. Закрытым, если программы нет и система отвечает отказом. Отфильтрованным, если ответа нет вовсе, потому что пакеты отбрасывает фаервол. Различие видно по поведению при подключении: отказ приходит мгновенно, а фильтрация проявляется таймаутом.
Открытый порт сам по себе не опасен, он нужен для работы сервиса. Опасность создаёт уязвимая или плохо защищённая программа, доступная из интернета. Поэтому принцип простой: снаружи должны быть видны только те порты, которые нужны.
Как посмотреть у себя: Сетевые порты и сокеты
В Windows команда netstat -ano покажет соединения и прослушиваемые порты вместе с номером процесса, в Linux аналогичное выводит ss -tulpn. Так видно, какая программа занимает какой порт. Если нужный порт занят другим приложением, возникает ошибка «адрес уже используется».
Проверить, доступен ли порт из интернета, можно онлайн-сервисами проверки портов. Результат зависит от роутера: пока не настроен проброс порта, снаружи домашнее устройство недоступно, что нормально.
Заблуждения: Сетевые порты и сокеты
Смена порта не защищает сервис: она лишь уменьшает шум от автоматических сканеров. Номера портов не всегда соответствуют службам: программа может слушать любой порт. И «закрыть порт» на роутере означает запретить входящий трафик, а исходящие соединения к чужим портам это не затрагивает.
Ещё одно частое непонимание: если приложение «использует порт 443», это не значит, что оно обязательно работает через HTTPS. Многие службы выбирают этот порт именно потому, что он почти нигде не закрыт. Что действительно передаётся по соединению, определяется протоколом внутри, а не номером. Поэтому справочные таблицы портов полезны как подсказка, но не как доказательство того, какая программа работает на другой стороне.