Порт (компьютерные сети)

Материал из Википедии — свободной энциклопедии
(перенаправлено с «Порт (TCP/IP)»)
Перейти к: навигация, поиск

Порт (англ. port) — натуральное число, записываемое в заголовках протоколов транспортного уровня модели OSI (TCP, UDP, SCTP, DCCP). Используется для определения процесса — получателя пакета в пределах одного хоста.

Описание[править | править вики-текст]

Пусть:

  1. на хосте запущена операционная система (ОС);
  2. под управлением ОС в пространстве пользователя исполняется несколько процессов;
  3. в каждом из процессов выполняется какая-либо программа;
  4. несколько программ используют сеть;
  5. ОС получает по сети IP-пакет, предназначенный для одной из программ (для одного из процессов).

Процессов (программ) несколько. Как ОС определит, какому из процессов (какой из программ) передать пакет? По номеру порта.

Процесс программы, желающей обмениваться данными по сети, может (например, при создании socket):

  • запросить у ОС определённый номер порта. ОС может либо предоставить запрошенный номер порт, либо отказать программе (например, если номер порта уже выдан какому-либо процессу). Обычно, порты с номерами от 1 до 1024 доступны только привилегированному пользователю (root);
  • запросить у ОС любой свободный номер порта. ОС сама выберет номер порта, ещё не выданный никакому процессу, и предоставит его процессу запрашиваюшей программы.

Обмен данными по сети ведётся между двумя процессами по какому‑либо протоколу. Процессы запущены на разных хостах, работают под управлением одинаковых или разных ОС. У каждого протокола имеется уникальный номер. Каждый из процессов получает у ОС номер порта — уникальный номер в пределах одного хоста. Каждый хост имеет IP-адрес — уникальный номер в пределах сегмента сети. Учитывая вышесказанное, для установки соединения необходимо пять чисел:

(для построения маршрута между хостами);
  • два номера порта:
    • порт процесса — отправителя (кратко: порт отправителя);
    • порт процесса — получателя (кратко: порт получателя)
(для определения процессов, выполняющихся на хостах).

Порт процесса — отправителя (источника) может быть постоянным (статическим) или назначаться динамически для каждого нового сеанса связи.

При соединении по протоколу TCP порт процесса — отправителя используется:

  • операционной системой хоста — получателя для отправки пакета — подтверждения о получении данных;
  • процессом — получателем для отправки пакета — ответа.

При соединении по протоколу UDP допустимо вместо порта процесса — отправителя указывать число ноль (что означает «порт не указан»).

При соединении по протоколу SCTP в рамках ассоциации может использоваться:

  • несколько портов процесса — отправителя (источника) и
  • несколько портов процесса — получателя.

Таким образом в протоколе SCTP достигается более высокая надёжность сеанса связи и скорость передачи.

Так как IP-адрес хоста — отправителя и номер порта процесса — отправителя являются аналогом обратного адреса, записываемого на почтовых конвертах (позволяют получателю отправить ответ отправителю), номер порта процесса — отправителя называют «обратным» портом.

Если на хосте какой‑то процесс постоянно использует один номер порта (например, процесс программы, реализующей web-сервер, может использовать порт 80 для приёма и передачи данных), говорят, что порт является «открытым».

Термины «открытый порт» и «закрытый порт» (заблокированный) также используются, когда речь идёт о фильтрации сетевого трафика (см. брандмауэр).

Если процесс получил номер порта у ОС («открыл порт») и «держит его открытым» для приёма и передачи данных, говорят, что процесс «слушает» (англ. listen) порт.

Обычно, «слушает» порт процесс программы, реализующей сервер для какого-либо протокола. Процесс программы, реализующей клиента для того же протокола, часто позволяет ОС выбрать номер порта для подключения к серверу.

Если хост получит пакет, порт процесса — отправителя называется «удалённым» (англ. remote) портом (открытым на другом хосте), а порт процесса получателя — «локальным» портом (открытым на текущем хосте). Если хост отправил пакет, порт процесса — отправителя называется «локальным» портом (открытым на текущем хосте), а порт процесса — получателя — «удалённым» портом (открытым на другом хосте).

Номера портов для протоколов прикладного уровня модели TCP/IP (HTTP, SSH и др.), обычно, назначаются организацией IANA (англ. internet assigned numbers authority), рекомендуются к использованию. Однако на практике, в целях безопасности номера портов могут выбираться произвольно.

Термин «порт» чаще всего применяется по отношению к протоколам TCP и UDP ввиду популярности этих протоколов. В протоколах SCTP и DCCP используются номера, соответствующие понятию «номер порта» для протоколов TCP и UDP.

В заголовках протоколов TCP и UDP для хранения номеров портов выделены поля размером 16 бит. Для протокола TCP порт с номером 0 зарезервирован и не может использоваться. Для протокола UDP указание порта процесса — отправителя («обратного» порта) не является обязательным, и порт с номером 0 означает отсутствие порта. Таким образом, номер порта — число в диапазоне от 1 до 216-1=65 535.

Примеры использования портов[править | править вики-текст]

Приведём несколько примеров использования портов в компьютерных сетях.

Электронная почта (e-mail)

На сервере запущены процессы программ, реализующих следующие протоколы:

Процесс программы, реализующей протокол SMTP, обычно, «слушает» порт TCP с номером 25 (кратко: «tcp/25»).

Процесс программы, реализующей протокол POP, обычно, «слушает» порт TCP с номером 110 (кратко: «tcp/110»).

Процессы могут быть запущены на одном хосте (компьютере). Определение конкретного процесса осуществляется по номеру порта.

Процесс программы — клиента, желающей подключиться к серверу для отправки (SMTP) или получения (POP или IMAP) почты, как правило, получает номер порта динамически.

DHCP

В некоторых случаях использование заранее известных номеров портов является обязательным.

Например, для получения IP-адреса по протоколу DHCP процесс программы — клиента по протоколу UDP отправляет датаграмму с порта 68 (порт процесса — отправителя) на порт 67 (порт процесса — получателя).

Использование в URL-адресах[править | править вики-текст]

Номера портов могут указываться в адресах веб-сайтов (URL) или в идентификаторах других ресурсов, доступных в компьютерных сетях (URI). По умолчанию в протоколе HTTP используется порт 80, а в протоколе HTTPS — порт 443. URL вида «http://www.example.com:8080/path/» указывает, что веб-ресурс обслуживается веб-сервером на порту 8080.

Состояния порта[править | править вики-текст]

Узнать номера активных (выданных процессам операционной системой) портов для протоколов транспортного уровня во многих операционных системах (Windows, Unix-подобных) можно с помощью утилит netstat и nmapОС UNIX и ОС Linux).

Состояния порта, показываемые утилитами netstat и nmap, приведены в таблице.

Состояние порта[1] Описание
Открыт или прослушивается (англ. open или listen) Программа — сервер готова принимать подключения программ — клиентов («слушает» порт)
Фильтруется (англ. filtred) Не удаётся определить, открыт порт или закрыт, возможно, из-за работы файрвола или по иной причине
Закрыт (англ. closed) ОС ещё не выдала номер порта никакому процессу, но в любой момент может это сделать

Номера портов[править | править вики-текст]

Порты TCP не пересекаются с портами UDP. То есть, порт 1234 протокола TCP не будет мешать обмену данными по протоколу UDP через порт 1234.

Некоторые номера портов стандартизованы. Стандартизацией занимается некоммерческая организация IANA.

В большинстве UNIX-подобных ОС прослушивание портов с номерами 0—1023 (почти все из которых зарегистрированы IANA) требует особых привилегий (root). Другие номера портов (некоторые из которых тоже зарегистрированы IANA) выдаются операционной системой первым запросившим их процессам.

Краткий список номеров портов[править | править вики-текст]

Ниже приведен краткий список распространённых портов сетевых сервисов с комментариями. Подразумевается использование протокола TCP там, где не оговорено иное.

  • FTP: 21 (для команд), 20 (для данных) (передача файлов)
  • telnet: 23 (удалённое управления сетевыми устройствами (если такой сервис поддерживается)) (без шифрования)
  • SMTP: 25 (отправка почты (без шифрования))
  • TFTP: 69/UDP (скачивание файлов)
  • POP3: 110 (получение почты (без шифрования))
  • NTP: 123 (time server) (UDP) (настройка часов)
  • IMAP: 143 (получение и отправка почты (без шифрования))
  • IMAP с SSL: 993 (получение и отправка почты (с шифрованием))
  • SNMP: 161 (мониторинг и управление сетевыми устройствами (при наличии поддержки такого сервиса))
  • SIP: 5060 (TCP или UDP) (управление вызовами в IP-телефонии; также должны быть открыты UDP-порты, используемые в VoIP для передачи медиа-трафика (см. RTP/RTCP))
  • BitTorrent: 6969, 6881—6889 (обмен файлами)
  • traceroute: выше 33434 (UDP) (в некоторых источниках указано, что достаточно указать диапазон портов от 33434 до 33534) (построение маршрута, по которому передаются IP-пакеты)

Некоторые популярные программы — анализаторы трафика (например, Wireshark) и сетевые брандмауэры используют общепринятые обозначения номеров портов для определения протокола передачи данных, что не всегда корректно. В некоторых случаях сетевые службы используют не стандартизованные номера портов или используют номера портов не по назначению. Например, известны случаи запуска интернет-провайдерами SMTP-серверов на портах 2525 (вместо 25) в целях обеспечения безопасности своих пользователей. Специализированные сайты, например, административные веб-интерфейсы, нередко работают на портах, отличных от стандартных 80 и 443.

См. также[править | править вики-текст]

Примечания[править | править вики-текст]

  1. nmap — сканер портов // Сайт на хостинге uCoz, посвящённый администрированию компьютерных систем и сетей. Дата публикации: 6 мая 2011 года.
  2. XEP-0001: XMPP Extension Protocols