Что такое сетевой порт?

Очевидно, что наиболее распространенное использование слова «порт» относится к судоходству. Однако в вычислительной технике также используется термин «порт». На самом деле, у него есть два применения. Первый относится к розетке, в которую можно подключить кабель. Типичные примеры включают порт USB или Ethernet. Технически сокет Ethernet можно рассматривать как сетевой порт. Это не общепринятое значение слова «порт» в сети. Сетевой порт — это логический номер, который определяет, для какого процесса или сетевой службы предназначен или отправляется сетевой трафик.

Зачем нужны номера портов?

Когда ваш компьютер взаимодействует с веб-сервером в Интернете, он помещает свой IP-адрес в поле отправителя. Это позволяет серверу узнать, на какой IP-адрес ему нужно отправить ответ. Когда этот ответ возвращается на ваш компьютер, ваш браузер интерпретирует ответ и отображает веб-страницу.

Это прекрасно работает в идеализированной системе с одним программным обеспечением, создающим и принимающим сетевой трафик. Однако реальный мир не такой. На любом компьютере есть ряд программ, создающих сетевой трафик. Чтобы убедиться, что сетевой трафик правильно передается нужной программе, в некоторых случаях требуется правильный процесс в программе. Один последний уровень адресации используется номер порта.

Представьте себе, что у вас есть веб-браузер с двумя открытыми вкладками и онлайн-видеоигра одновременно. Каждая вкладка браузера должна иметь возможность отправлять и получать сетевой трафик, возможно, одновременно. Онлайн-игра также должна как отправлять, так и получать сетевой трафик. Вы не хотите, чтобы ваша игра отфильтровывала случайные веб-ответы, и вы также не хотите, чтобы ваш браузер фильтровал ваш игровой трафик. Обеим вкладкам и игре будет назначен как минимум один сетевой порт, чтобы можно было легко определить предполагаемый процесс-получатель.

То же самое работает и для серверов. Предположим, у вас есть сервер, на котором работает как веб-сервер, так и сервер электронной почты. В этом случае номер порта позволяет операционной системе легко различать, какие сетевые пакеты предназначены для какой службы.

Что такое номера портов?

Номера портов имеют форму 16-битного целого числа без знака. Это означает, что числа составляют шестнадцать двоичных битов, отрицательных чисел нет, и все числа целые. Это позволяет использовать 65536 возможных номеров портов в диапазоне от 0 до 65535. Физической системы портов нет.

Вся схема адресации, как и с IP-адресами и MAC-адресами, вполне логична. Вы можете думать об IP- и MAC-адресах как об адресе письма, чтобы доставить его в ваш дом/компьютер. В этой аналогии номер порта будет похож на имя на конверте, чтобы убедиться, что он попадет к нужному человеку/процессу в вашем доме/компьютере.

В пространстве номеров портов есть другая структура. Порт номер 0 зарезервирован. В трафике TCP 0 полностью не используется. В трафике UDP номер порта является необязательным, при этом порт 0 означает «нет порта». Это работает для UDP, потому что это протокол без сохранения состояния, который не обязательно ожидает ответа. Порты TCP и UDP разделены. Одна служба может привязываться к одному или нескольким портам по одному или обоим протоколам. Службы, которые используют оба, обычно подключаются к одним и тем же номерам портов в TCP и UDP.

Порты 1-1023 известны как «общеизвестные» порты, и для привязки к ним обычно требуются административные разрешения. Некоторые известные порты: 80 для HTTP, 443 для HTTPS и 53 для DNS. Далее у вас есть диапазон 1024 – 49151. Они известны как «зарегистрированные» порты. Это порты, которые регулярно используются определенными службами, но они недостаточно распространены или недостаточно ранние, чтобы получить число ниже 1023. Порты между 49152 и 65535 называются эфемерными портами.

Использование номеров портов

IANA, Управление по присвоению номеров в Интернете, ведет общеизвестные и зарегистрированные списки портов. С общеизвестными портами связана только одна служба. Однако зарегистрированные порты могут иметь множество известных служб, которые используют этот порт по умолчанию.

Как правило, ничто не мешает любой программе привязываться к любому номеру порта. Как упоминалось выше, номера портов ниже 1024, как правило, требуют прав администратора или root для привязки. Тем не менее, вы можете заставить любую службу привязываться, например, к порту 80, даже если это не веб-сервер. Номера портов в общеизвестных и зарегистрированных диапазонах, как правило, используются только сетевыми прослушивателями, а эфемерные порты обычно используются для инициирования соединений.

Прослушиватель — это порт, который открывается и остается открытым. Он прослушивает сообщения, чтобы обработать их и отправить ответ. Это почти исключительно поведение служб серверного типа, таких как веб-сервер. Веб-сервер будет размещаться на портах 80 и 443, а браузер, подключающийся к этим портам, будет локально использовать эфемерный порт.

Стандартные номера портов для прослушивателей приложений означают, что легко узнать, как на самом деле подключиться к службе. Например, когда вы указываете HTTPS в начале URL-адреса, ваш браузер по умолчанию предполагает, что ему необходимо подключиться к порту 443. В некоторых случаях прослушиватели будут настроены на альтернативных портах. Это может быть связано с тем, что другая служба или версия службы уже использует стандартный порт. Это также может быть попыткой обеспечить безопасность через неизвестность.

Вывод

Сетевой порт — это логический адрес. Программное обеспечение может привязываться к порту, поэтому операционная система знает, что любой трафик, отправляемый на этот порт, предназначен для этого процесса. Номера портов находятся в диапазоне от 0 до 65535. Многие службы связаны со стандартным номером порта. Серверы используют эти порты, а устройства, подключающиеся к ним, используют случайные порты с большими номерами. Это позволяет легко подключаться к службам по умолчанию и гарантирует, что подключение к такой службе не помешает вам самостоятельно разместить другую службу.