6

Мне интересно, что делает номер порта. Есть ли конкретные номера портов для конкретных вещей?

Я знаю, что есть порт 80, и я слышал о 8000 мимоходом. Я не знаю, почему их так называют и что это на самом деле означает.

Могу ли я иметь веб-страницу, которая скажет example.com:10? Я говорю 10 как случайное число. Имеет ли значение то, что вы называете портом? Откуда эти цифры? Как мне настроить среду разработки с номером порта и зачем мне это делать? Во время разработки я вижу все виды номеров портов в зависимости от того, кто они есть. Мне всегда было интересно, откуда приходят цифры и как они настраивают сервер, чтобы он работал.

5 ответов5

5

Думайте о своем сетевом интерфейсе как о гигантской загрузочной док-станции (например, концентратор ИБП или что-то в этом роде). У каждой из этих грузовых дверей есть номер. По умолчанию грузовики, перевозящие определенные виды грузов, используют определенные погрузочные доки. Благодаря наличию нескольких погрузочных доков, концентратор может обрабатывать более одного грузовика одновременно и помогает разделять типы грузов.

Теперь, когда у вас есть эта визуализация, номера портов на компьютере похожи. У вас есть TCP и UDP с TCP, имеющим диапазон портов 1-65535. Вот откуда берутся эти цифры. Теперь некоторые из этих портов зарезервированы для общих типов трафика. Например, 80 для HTTP, 443 для HTTP-SSL, 21 для FTP, 25 для SMTP, 110 для POP3. Конечно, их гораздо больше, но я надеюсь, что это поможет с общей идеей. Теперь вы можете использовать незарезервированные порты для вещей, которые вы хотите сделать, но я бы не стал использовать низкий порт, как 10. Если вы хотите разместить свой сайт на альтернативном порту, выберите 8080 или 8443 (альтернативный порт HTTP-SSL), какой-то номер, который не зарезервирован или является известным альтернативным портом для трафика HTTP.

Используются альтернативные порты, поскольку вы можете одновременно прослушивать только один сервис на конкретном порту. Например, Apache и IIS не могут одновременно прослушивать порт 80 для веб-запроса на одном компьютере. Это связано с тем, что эти сервисы отличаются друг от друга, и они не смогут определить, кто должен был получать трафик. Используя разные порты, эти сервисы знают, что трафик на этом порту предназначен для них.

Чтобы настроить это, вашей конечной службе (веб-серверу, электронной почте, VPN и т.д.) Необходимо знать, какой порт слушать (какой грузовой отсек находиться рядом, и ждать, когда что-то придет или выйдет). Кроме того, ваш брандмауэр должен будет иметь исключение (ваши охранники для проверки вашего концентратора, чтобы увидеть, разрешено ли вам посещать определенные места) для этого порта.

Список общих используемых портов

1

Номера портов ничего не делают конкретно. Это один из способов уникальной идентификации соединения. Каждое TCP-соединение определяется четырьмя вещами: IP-адресами каждой машины и номером порта на каждой машине. Каждый входящий IP-пакет содержит эти четыре фрагмента информации, позволяющие сетевому уровню определить, что следует делать с этим пакетом. Например, пакет приходит с целевым портом 80, и система знает, что Apache прослушивает порт 80, поэтому передает его веб-серверу (некоторые детали я скрываю).

Чтобы клиент подключился к вашему сервису, ему нужно знать ваш IP и какой порт прослушивает ваш сервис. Поскольку ваш IP и порт однозначно определяют ваш конец любого входящего соединения, только один сервис может прослушивать данный порт одновременно. Если у вас больше ничего не было, используя порт 10, вы определенно могли бы разместить на нем свой веб-сервер, и все клиенты должны были бы указать:10 в конце вашего имени хоста /IP. В порте 80 или 443 нет ничего волшебного, кроме того, что они являются стандартными портами, определенными для HTTP и HTTPS (поэтому клиенты будут использовать эти порты, если пользователь их не определит).

Когда клиент (1.2.3.4) подключается к веб-серверу (11.12.13.14) через порт http по умолчанию, он выбирает в настоящее время неиспользуемый порт на своей стороне, например 5307, и устанавливает соединение. Теперь соединение однозначно идентифицировано - 1.2.3.4:5307 <-> 11.12.13.14:80

Если один и тот же клиент одновременно устанавливает второе соединение, ему нужен другой неиспользуемый номер порта (на этот раз - 5308), потому что остальные три части соединения являются постоянными - порт прослушивания службы и оба IP-адреса уже установлены. Это позволяет одному клиенту иметь несколько различимых подключений к одному и тому же сервису. Другой клиент также может подключиться с использованием 5307, и он будет отличаться от первого другим IP-адресом.

0

Существуют порты для различения разных сервисов на одном и том же IP. Таким образом, на одной машине может быть электронная почта (SMTP: 25) и веб-сервер (HTTP: 80).

Номера портов до 1000 обычно зарезервированы для таких известных вещей, как те, что я только что упомянул. Выберите число выше этого примерно до 65565 (степень 2) для ваших собственных вещей.

Кроме того, обратите внимание, что нет причин, по которым ваш веб-сервер должен работать на хорошо известном порту. Это просто, где все будут искать это.

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

google.com:80 <= разговаривает с => 88.88.88.88:4502 (каким бы ни был ваш IP, а порт - тем, что ваш шлюз NAT решил использовать)

Кстати, комбинация IP/ порт называется сокетом. Что касается разработки, вам может потребоваться указать номер порта, чтобы он не конфликтовал с другими компонентами, но функциональность не должна меняться.

Наконец, если вы проходите через брандмауэр, вам нужно открыть порт.

0

Аналогия с погрузочным доком Томми отличная.

Служба может прослушивать только один порт (и да, listen(2) - это имя системного вызова, при котором служба привязывается к порту), и порт может иметь не более одной службы, прослушивающей его. Если вы хотите прослушивать два порта (например, запустить HTTP-сервер на портах 80 и 8080), то вам нужно запустить два процесса, по одному для каждого порта.

Номера портов не зарезервированы в любом смысле - вам разрешено иметь почтовый сервер, прослушивающий порт 80, и веб-сервер на порту 25, но это будет довольно запутанным для всех. Но порты связаны со службами двумя способами:

  1. Существуют «общеизвестные номера» для услуг (и за списком следит Управление по присвоению номеров в Интернете). Это не оговорки как таковые, но они эффективные маркеры «оставайся чистыми». Эти номера также можно найти в файле /etc/services на компьютерах с Unix.
  2. Протокол, такой как HTTP или SMTP, обычно в своем RFC объявляет порт по умолчанию для протокола - для HTTP это порт 80, а для порта SMTP 25. Все это означает, что, например, клиент HTTP попытается подключиться к порту 80 на удаленной машине, если не указано иное.

По крайней мере, в Unix номера портов ниже 1024 являются привилегированными, поскольку только процессы, работающие от имени пользователя root, могут связываться с ними. Это не ограничение, наложенное TCP, а специфичная для Unix вещь (изначально она была задумана как очень легкая мера безопасности).

Результатом всего этого является то, что, например, если вы хотите иметь несколько веб-серверов на компьютере (или на любом другом сервисе), вы можете, если вы запускаете их, одновременно говоря им прослушивать разные порты. Это можно сделать с помощью параметра командной строки при запуске службы или записи в файле конфигурации.

У вас может быть веб-служба на порте 80 (root должен был бы запустить ее), а также некоторые другие службы на основе HTTP на порту 8080 или 9000. Первый будет адресован как http://example.org/, другой - как http://example.org:8080/. Поскольку порт 80 является задокументированным по умолчанию для HTTP, ваш веб-браузер (или любой другой клиент, который вы использовали) автоматически выберет порт 80 в первом случае.

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

0

Допустим, у вас есть сервер, и его IP-адрес - XXX.XXX.XXX.XXX . Вы можете подключиться к вашему серверу, чтобы делать разные вещи. Вы всегда подключаетесь к нему, используя один и тот же IP-адрес, но номер порта, который вы используете, - это то, как сервер определяет, что вы пытаетесь сделать.

Если вы хотите просматривать веб-страницы на своем сервере, вам следует подключиться к серверу через порт 80: XXX.XXX.XXX.XXX:80 . Когда сервер принимает ваше соединение через порт 80, он понимает, что вы хотите просмотреть веб-страницу.

Если вы хотите подключиться к программе FTP, работающей на сервере, вы подключаетесь к порту 21: XXX.XXX.XXX.XXX:2 1. Когда сервер принимает ваше соединение через порт 21, он понимает, что вы хотите использовать FTP.

Та же ситуация касается SSH/SFTP (порт 22), HTTPS (порт 443), DNS-запросов (порт 53) и т.д. Существуют тысячи стандартизированных номеров портов для различных приложений / служб.

Порты - это просто способ для компьютера определить, какой тип запроса к нему делается.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .