В компьютерных сетях порт или номер порта — это номер, назначенный для уникальной идентификации конечной точки соединения и направления данных в определенную службу. На программном уровне, в операционной системе , порт — это логическая конструкция, которая идентифицирует определенный процесс или тип сетевой службы . Порт на программном уровне идентифицируется для каждой комбинации транспортного протокола и адреса назначенным ему номером порта. Наиболее распространенными транспортными протоколами, использующими номера портов, являются протокол управления передачей (TCP) и протокол пользовательских дейтаграмм (UDP); эти номера портов представляют собой 16-битные беззнаковые числа .
Номер порта всегда связан с сетевым адресом хоста , например IP-адресом , и типом транспортного протокола, используемого для связи. Он дополняет адрес назначения или отправителя сообщения. Определенные номера портов зарезервированы для идентификации определенных служб, чтобы прибывающий пакет можно было легко переслать работающему приложению. Для этой цели номера портов ниже 1024 идентифицируют исторически наиболее часто используемые службы и называются известными номерами портов . Порты с более высокими номерами доступны для общего использования приложениями и известны как эфемерные порты .
Порты предоставляют услугу мультиплексирования для нескольких услуг или нескольких сеансов связи на одном сетевом адресе. В клиент-серверной модели архитектуры приложений для одной и той же услуги может быть инициировано несколько одновременных сеансов связи.
Для TCP и UDP номер порта — это 16-битное целое число без знака, таким образом, в диапазоне от 0 до 65535. Для TCP номер порта 0 зарезервирован и не может быть использован, в то время как для UDP исходный порт является необязательным, а значение ноль означает отсутствие порта . Процесс связывает свои входные или выходные каналы через интернет-сокет , который является типом файлового дескриптора , связанного с транспортным протоколом , сетевым адресом, таким как IP-адрес , и номером порта. Это известно как привязка . Сокет используется процессом для отправки и получения данных по сети. Сетевое программное обеспечение операционной системы имеет задачу передачи исходящих данных со всех портов приложений в сеть и пересылки поступающих сетевых пакетов процессам путем сопоставления IP-адреса пакета и номера порта с сокетом. Для TCP только один процесс может привязываться к определенной комбинации IP-адреса и порта. Обычные сбои приложений, иногда называемые конфликтами портов , происходят, когда несколько программ пытаются использовать один и тот же номер порта на одном и том же IP-адресе с одним и тем же протоколом.
Приложения, реализующие общие службы, часто используют специально зарезервированные известные номера портов для получения запросов на обслуживание от клиентов. Этот процесс известен как прослушивание и включает в себя получение запроса на известный порт, потенциально устанавливая диалог «сервер-клиент» один к одному, используя этот прослушивающий порт. Другие клиенты могут одновременно подключаться к тому же прослушивающему порту; это работает, поскольку TCP-соединение идентифицируется кортежем, состоящим из локального адреса, локального порта, удаленного адреса и удаленного порта. [1] Известные порты определяются соглашением, контролируемым IANA ( Internet Assigned Numbers Authority ). Во многих операционных системах для привязки приложений к этим портам требуются особые привилегии, поскольку они часто считаются критически важными для работы IP-сетей. И наоборот, клиентская часть соединения обычно использует высокий номер порта, выделенный для краткосрочного использования, поэтому называется эфемерным портом .
IANA отвечает за глобальную координацию корневого DNS-сервера, IP-адресации и других ресурсов протокола. Это включает в себя регистрацию часто используемых номеров портов TCP и UDP для известных интернет-сервисов.
Номера портов делятся на три диапазона: известные порты , зарегистрированные порты и динамические или частные порты .
Известные порты (также известные как системные порты ) — это те, которые пронумерованы от 0 до 1023. Требования к новым назначениям в этом диапазоне более строгие, чем для других регистраций. [2]
Зарегистрированы порты с 1024 по 49151. IANA ведет официальный список известных и зарегистрированных диапазонов. [3]
Динамическими или частными портами являются порты от 49152 до 65535. Одним из распространенных вариантов использования этого диапазона являются эфемерные порты .
Протоколы транспортного уровня , такие как протокол управления передачей (TCP) и протокол пользовательских датаграмм (UDP), передают данные с помощью протокольных единиц данных (PDU). Для TCP PDU является сегментом , а для UDP — датаграммой . Оба протокола используют поле заголовка для указания номеров портов источника и назначения. Номера портов кодируются в заголовке пакета транспортного протокола , и их можно легко интерпретировать не только отправляющим и принимающим хостами, но и другими компонентами сетевой инфраструктуры. В частности, межсетевые экраны обычно настраиваются на различение пакетов на основе номеров портов источника или назначения. Переадресация портов является примером этого применения.
Практика попыток последовательного подключения к ряду портов на одном хосте обычно известна как сканирование портов . Обычно это связано либо с попытками взлома со злым умыслом , либо с поиском администраторами сети возможных уязвимостей для предотвращения таких атак. Попытки подключения к порту часто отслеживаются и регистрируются хостами. Методика port knocking использует серию подключений к порту (knocks) с клиентского компьютера для включения подключения к серверу.
Примером использования портов является доставка электронной почты . Серверу, используемому для отправки и получения электронной почты, обычно требуются две службы. Первая служба используется для передачи электронной почты на другие серверы и с них. Это достигается с помощью протокола Simple Mail Transfer Protocol (SMTP). Стандартное приложение службы SMTP прослушивает порт TCP 25 на предмет входящих запросов. Вторая служба обычно представляет собой либо почтовый протокол (POP), либо протокол доступа к сообщениям в Интернете (IMAP), который используется клиентскими приложениями электронной почты на персональных компьютерах пользователей для получения сообщений электронной почты с сервера. Служба POP прослушивает порт TCP с номером 110. Обе службы могут работать на одном и том же хост-компьютере, и в этом случае номер порта различает службу, запрошенную удаленным компьютером, будь то компьютер пользователя или другой почтовый сервер.
В то время как номер порта прослушивания сервера четко определен (IANA называет их известными портами), номер порта клиента часто выбирается из динамического диапазона портов (см. ниже). В некоторых приложениях клиенты и сервер используют определенные номера портов, назначенные IANA. Хорошим примером этого является DHCP , в котором клиент всегда использует UDP-порт 68, а сервер всегда использует UDP-порт 67.
Номера портов иногда можно увидеть в веб- или других унифицированных локаторах ресурсов (URL). По умолчанию HTTP использует порт 80, а HTTPS использует порт 443, но URL-адрес типа http://www.example.com:8080/path/
указывает, что веб-браузер подключается к порту 8080 HTTP-сервера.
Концепция номеров портов была создана ранними разработчиками ARPANET в неформальном сотрудничестве авторов программного обеспечения и системных администраторов. Термин номер порта еще не использовался. Ему предшествовало использование термина номер сокета на ранних этапах разработки сети. Номер сокета для удаленного хоста был 40-битным числом. [4] Первые 32 бита были похожи на сегодняшний адрес IPv4, но в то время наиболее значимые 8 бит были номером хоста. Наименее значимая часть номера сокета (биты с 33 по 40) была сущностью, называемой Another Eightbit Number , сокращенно AEN. [5] Сегодня сетевой сокет относится к связанной, но отличной концепции, а именно к внутреннему адресу конечной точки, используемому только внутри узла.
26 марта 1972 года Винт Серф и Джон Постел призвали к документированию текущих на тот момент обычаев и созданию каталога номеров сокетов в RFC 322. Администраторов сетей попросили представить записку или сделать телефонный звонок, «описывающий функцию и номера сокетов программ сетевых служб на каждом ХОСТЕ». [6] Этот каталог был впоследствии опубликован как RFC 433 в декабре 1972 года и включал список хостов и их номеров портов, а также соответствующую функцию, используемую на каждом хосте в сети. Эта первая функция реестра служила в первую очередь для документирования использования и указывала на то, что использование номеров портов конфликтует между некоторыми хостами для «полезных общественных услуг». [5] Документ обещал разрешение конфликтов на основе стандарта, который Постел опубликовал в мае 1972 года в RFC 349, в котором он впервые предложил официальное назначение номеров портов сетевым службам и предложил специальную административную функцию, которую он назвал царем , для ведения реестра. [7] 256 значений AEN были разделены на следующие диапазоны:
Служба Telnet получила первое официальное назначение значения 1. В деталях первый набор назначений был следующим: [7]
В раннем ARPANET AEN также назывался именем сокета [8] и использовался с протоколом Initial Connection Protocol (ICP), компонентом протокола Network Control Protocol (NCP). [9] [10] NCP был предшественником современных интернет-протоколов. Сегодня терминологическое имя службы все еще тесно связано с номерами портов, причем первые представляют собой текстовые строки, используемые в некоторых сетевых функциях для представления числового номера порта.