11-10-2023
Порт — цифровой номер, который является программным адресом, используемым для взаимодействия различных конечных точек (сетевых устройств, хостов) в современных компьютерных сетях на транспортном уровне модели OSI. Порты используются в транспортных протоколах TCP, UDP, SCTP, DCCP и позволяют различным программам и сетевым службам на одном хосте получать данные в IP-пакетах независимо друг от друга.
Всякое взаимодействие двух хостов подразумевает использование как минимум одного порта получателя, и как правило, порта источника. Номер порта, добавленный к IP-адресу компьютера, завершает идентификацию возможного сеанса связи. То есть, пакеты данных направляются по сети к определенному IP-адресу назначения, а затем, по достижении конечного компьютера, далее направляется конкретному процессу, связанному с номером порта назначения. Принцип использования портов зависит от протокола, который их использует. Порт хоста назначения конкретного сетевого взаимодействия обычно известен приложению заранее. Порт хоста-источника сетевого пакета может назначаться как динамически для каждого нового сеанса связи, так и быть постоянным, статическим. Для TCP-соединения порт хоста-отправителя особенно важен, так как именно на него должен прийти ответ и подтверждение доставки пакета от хоста-получателя. Для SCTP в рамках ассоциации может использоваться несколько портов хоста-источника и несколько портов хоста-назначения (таким образом в данном протоколе достигается более высокая надёжность сеанса связи и скорость передачи). В случае, если определённый номер постоянно закреплён за определённой программой на хосте и может постоянно использоваться для приёма и / или передачи данных, то говорят что такой порт является «открытым». Сходная терминология открытый порт или закрытый (заблокированный) порт используется в сетевых брандмауэрах. Если конкретная программа ожидает передачи на определённый порт и держит его открытым, говорят, что программа «слушает порт». Номера портов, рекомендованные и используемые для конкретных специфических целей, то есть для сетевых сервисов, выделяет и регистрирует IANA (Internet Assigned Numbers Authority), однако на практике часто встречаются случаи их неофициального применения.
Ввиду значительного распространения протоколов TCP и UDP, чаще всего упоминая порты в сети подразумевают порты именно для этих транспортных протоколов. Сетевые сервисы в SCTP и DCCP обычно используют номера, соответствующие их реализациям в TCP и UDP (при наличии).
Номер порта является 16-разрядным целым двоичным числом, таким образом, порты возможны в диапазоне от 1 до 65535 (для TCP, номер порта 0 зарезервирован и не может быть использован). Для UDP порт источника не является обязательным и нулевое значение означает отсутствие порта.
Приведём несколько примеров портов в компьютерных сетях. В частности, на примере популярной сетевой службы электронной почты (E-mail). Сервер используется для отправки и получения электронной почты, то есть, как правило, нуждается в существовании двух служб. Первая служба используется для передачи сообщений на другие сервера. Это выполняется посредством простого протокола передачи почты (SMTP). Приложение-служба протокола SMTP обычно прослушивает TCP-порт 25 для входящих запросов. Вторая служба это, как правило, либо Post Office Protocol (POP), либо Internet Message Access Protocol (IMAP), которые используются клиентскими приложениями электронной почты на персональных компьютерах пользователей для получения сообщений электронной почты с сервера. Служба POP прослушивает TCP-порт под номером 110. Обе службы могут быть запущены на одном и том же хост-компьютере, и в этом случае по номеру порта можно определить сервис, который запрошен удаленным компьютером, будь то компьютер пользователя или другой почтовый сервер. Номера порта-источника (то есть клиента) для подключения к серверу SMTP и POP3 обычно определяется динамически.
Как отмечалось выше, в некоторых приложениях использования конкретных номеров портов клиентами и сервером чётко определены. Хорошим примером этого является протокол динамического управления IP-адресами (DHCP), в котором клиент всегда использует UDP-порт 68, а сервер всегда использует UDP-порт 67.
Номера портов можно иногда увидеть в адресах http://www.example.com:8080/path/ указывает, что веб-ресурс обслуживается веб-сервером на порту 8080.
Пакеты TCP или UDP всегда содержат два поля номера порта: отправителя и получателя. Тип обслуживающей программы определяется портом получателя поступающих запросов, и этот же номер является портом отправителя ответов. «Обратный» порт (порт отправителя запросов, он же порт получателя ответов) при подключении по TCP определяется клиентом произвольно (хотя номера меньше 1024 и уже занятых портов не назначаются), и для пользователя интереса не представляет.
Использование обратных номеров портов в UDP зависит от реализации.
Активные порты протоколов транспортного уровня во многих операционных системах (Windows, Unix-подобные) могут быть обнаружены с помощью команды NetStat или nmap (в UNIX / Linux).
Возможны следующие состояния порта, показываемые netstat и nmap:
Состояние | Описание |
---|---|
open | программа-сервер готова принимать подключения |
listen | сервер слушает данный порт |
filtred | файрвол или иная причина не позволяет nmap’у определить открыт или закрыт порт |
closed | порт закрыт |
Порты TCP не пересекаются с портами UDP. То есть, порт 1234 протокола TCP не будет мешать обмену по UDP через порт 1234.
Ряд номеров портов стандартизован и поддерживается некоммерческой организацией IANA.
В большинстве UNIX-подобных операционных систем прослушивание портов с номерами 0—1023 (почти все из которых зарегистрированы) требует особых привилегий. Каждый из остальных портов может быть захвачен первым запросившим его процессом. Однако, зарегистрировано номеров намного больше, чем 1024.
Ниже приведен краткий список распространённых портов сетевых сервисов с комментариями. Подразумевается использование протокола TCP там, где не оговорено иное.
Некоторые популярные программы — анализаторы трафика (такие как Wireshark) и сетевые брандмауэры, пользуются общепринятыми обозначениями номеров портов, для определения протокола передачи, что не всегда корректно, так как в некоторых, случаях порты могут использоваться по другому и различными сетевыми службами. Например известны случаи, когда интернет-провайдеры в целях обеспечения безопасности создавали для своих пользователей SMTP-сервер на порту 2525, вместо 25. В то же время специализированные сайты (например, такие как административные веб-интерфейсы) нередко работают на портах, отличных от стандартных 80 и 443.
Порт (TCP/IP).