Порт 0 имеет особое значение в сетевом программировании, особенно в ОС Unix, когда речь идет о программировании сокетов, где порт используется для запроса выделенных системой динамических портов. Порт 0 - это порт с подстановочным знаком, который указывает системе найти подходящий номер порта.
В отличие от большинства номеров портов, порт 0 является зарезервированным портом в сетях TCP/IP, что означает, что его нельзя использовать в сообщениях TCP или UDP. Сетевые порты в TCP и UDP находятся в диапазоне от нуля до 65535. Номера портов в диапазоне от нуля до 1023 определяются как неэпемерные порты, системные порты или общеизвестные порты. Управление по присвоению номеров в Интернете (IANA) ведет официальный список предполагаемого использования этих номеров портов в Интернете, и системный порт 0 не должен использоваться.
Как TCP/UDP порт 0 работает в сетевом программировании
Настройка нового подключения к сетевому сокету требует, чтобы один номер порта был выделен как на стороне источника, так и на стороне назначения. Сообщения TCP или UDP, отправляемые отправителем (источником), содержат оба номера порта, чтобы получатель сообщения (назначение) мог отправлять ответные сообщения правильной конечной точке протокола.
IANA предварительно выделила назначенные системные порты для основных интернет-приложений, таких как веб-серверы (порт 80), но многие сетевые приложения TCP и UDP не имеют собственного системного порта и должны получать его из операционной системы своего устройства при каждом запуске..
Чтобы выделить исходный номер порта, приложения вызывают сетевые функции TCP/IP, такие как bind(), чтобы запросить его. Приложение может предоставить фиксированный (жестко запрограммированный) номер для bind(), если они предпочитают запрашивать определенный номер, но такой запрос может завершиться ошибкой, поскольку другое приложение, работающее в системе, может в данный момент использовать его.
В качестве альтернативы он может предоставить порт 0 для bind() в качестве параметра соединения. Это запускает операционную систему для автоматического поиска и возврата подходящего доступного порта в диапазоне номеров динамических портов TCP/IP.
Приложению предоставляется не порт 0, а какой-то другой динамический порт. Преимуществом этого соглашения о программировании является эффективность. Вместо того, чтобы каждое приложение реализовывало и запускало код, пробующий несколько портов, пока они не получат действительный, приложения полагаются на операционную систему.
Unix, Windows и другие операционные системы по-разному обрабатывают порт 0, но применяется одно и то же общее соглашение.
Порт 0 и сетевая безопасность
Сетевой трафик, отправляемый через Интернет на хосты, прослушивающие порт 0, может быть создан сетевыми злоумышленниками или случайно неправильно запрограммированными приложениями. Ответные сообщения, которые хосты генерируют в ответ на трафик порта 0, помогают злоумышленникам узнать о поведении и потенциальных сетевых уязвимостях этих устройств.
Многие интернет-провайдеры (ISP) блокируют трафик через порт 0, как входящие, так и исходящие сообщения, для защиты от этих эксплойтов.
FAQ
Что такое номера портов?
Номера портов, используемые для сетевых подключений TCP/IP, действуют как адресная информация, идентифицируя отправителей и получателей сообщения. Номера портов позволяют различным приложениям в одной сети одновременно использовать ресурсы.
Как найти номера портов?
Чтобы узнать номер порта определенного IP-адреса, перейдите в командную строку, введите netstat -a, затем нажмите Enter. Вы увидите список активных соединений TCP вместе с IP-адресами и номерами портов, разделенными двоеточием.
Можно ли подключиться к порту 0?
Нет. Официально порт 0 не существует, и вы не можете к нему подключиться, так как это недопустимый номер порта. Однако вы можете отправлять интернет-пакеты на порт 0 и обратно так же, как и с другим номером порта.