Почему только порт 80 для веб-сервисов?
Почему не разумно выделять более одного порта TCP /IP для http? Хотя, по общему признанию, наивно, не так ли интуитивно понятно, что производительность сервера может быть как-то увеличена?
9 ответов
Порт 80 - это хорошо известный порт, что означает, что он хорошо известен как местоположение, в котором вы обычно найдете HTTP-серверы. Вы можете найти его документированным в HTTP /1.1 RFC .
Наличие значения по умолчанию полезно именно потому, что вам не нужно вводить его в свой веб-браузер с помощью URI. Если вы запускаете HTTP-сервер (или фактически любую службу) на нестандартном порту, вы заставляете клиента помнить, какое произвольное 16-битное число вы выбрали, и введите его.
В дополнение к этому недружелюбие нет выгоды от производительности: порт представляет собой лишь одну часть 4-кортежа (dst ip:port, src ip:port)
, который однозначно идентифицирует TCP-соединение , Если два соединения имеют общий доступ к dst ip:port
, это не означает, что они имеют общий доступ к системному ресурсу - они могут находиться в разных потоках или разных процессах.
Теперь, если у вас есть логически разные службы, которые используют для использования HTTP, нет проблемы с их запуском на разных портах. Это просто делает URI немного уродливым.
Сервер не тратит ресурсы, обрабатывая соединения в одном или нескольких портах. Ресурсы сервера назначаются для обработки соединений, а номер порта - это просто способ подключения определенной программы к определенному соединению.
Например: HTTP-сервер знает, что он будет слушать подключения, входящие в порт 80. И сервер знает, что в любое время, когда он получает запрос на порт 80, он будет обрабатывать его на http-сервере. После этого сервер http будет обрабатывать сообщение, а затем будет потреблять ресурсы.
Вы, кажется, думаете о портах как о чем-то реальном; его просто 16-разрядное беззнаковое число (0-65535), которое является меткой в заголовке IP-пакета. Это помогает с мультиплексированием на уровне приложений. Когда входящий пакет поступает на сетевую карту, ОС получает уведомление. Он проверяет, к какому порту был направлен входящий пакет, а затем пересылает пакет только в нужное приложение. Если вы используете веб-сервер (nginx) для прослушивания на порту 80, только nginx получает пакеты, отправленные на порт 80.
Когда клиент (IP: 100.200.100.200) делает HTTP-запрос на сервер (55.55.55.55), они делают этот запрос на порт назначения 80 на сервере (55.55.55.55:80), но исходный порт случайным образом выбранный ОС для веб-браузера (что-то вроде 45490). HTTP-ответ от веб-сервера происходит от (55.55.55.55:80), но отправляется в пункт назначения (ваш IP-адрес) (100.200.100.200:45490). ОС вашего компьютера знает, что входящие пакеты на порту 45490 (от 55.55.55.55:80) должны быть предоставлены веб-браузеру, который сделал запрос. Поскольку каждое уникальное соединение с веб-сайтом от клиента получает уникальный случайный порт, поэтому вы можете иметь несколько веб-браузеров, подключающихся к одному веб-сайту, и когда страница перезагружается в одном браузере, другие окна не затрагиваются.
Каждый IP-пакет имеет как исходный, так и целевой IP-адреса и порт, доступные ему в заголовке. ОС и приложение (веб-браузер или веб-сервер) могут использовать оба способа, чтобы выяснить, какое действие необходимо выполнить для обработки пакета.
Порт 80 & 443 являются «стандартными» портами для HTTP /HTTPS
Это означает, что вам не нужно указывать порт ( http://www.example.com:80 , https://www.example.com:443 ) при использовании веб-браузера.
Если вы хотите, чтобы веб-сервер прослушивал любые другие порты, пользователям нужно вручную добавить порт в URL-адрес или он должен быть закодирован в любой ссылке на этот конкретный порт.
Кроме того, большинство прокси-серверов и межсетевых экранов не будут подключаться к этим портам, если они специально не настроены для этого (без конфигурации, исходящие прокси не будут прослушивать нестандартные порты, поэтому не будут перенаправлять запрос веб-серверам, тогда как Брандмауэры просто блокируют попытки подключения не к TCP80 /443)
Все это ограничивает то, что можно сделать на уровне TCP /IP
Одним из способов повышения производительности может быть наличие устройства /службы балансировки нагрузки, прослушивающего TCP80 /443, которое затем перенаправляет запрос на серверы на разных портах и /или ip (локальное балансирование) или даже на разные удаленные сайты (Global Balancing ). Но это совсем другая тема.
Добавление дополнительных портов не добавляет лишнюю полосу пропускания или что-то в этом роде, порт больше ярлыка, чем труба , он может «расти» настолько широко, насколько вам это нужно, не становясь медленнее из-за заполнения трубы.
Если сервер получает слишком много запросов, сервер, конечно, замедляется, однако это не тот тип проблемы, который можно устранить, добавив еще один номер порта.
Если вы использовали случайные порты, пользователю приходилось добавлять правильные номера портов каждый раз, когда они попадали на ваш сайт. т.е. www.example.com:80; www.example.com:81; www.example.com:82 и т. д.
Это не увеличит производительность, чтобы использовать больше портов. Исходные порты для каждого соединения эфемерные порты и все равно разные
Каждое соединение TCP /IP имеет sourceIP: sourcePort и destinationIP: destinationPort.
Когда вы инициируете соединение, вы всегда будете использовать 80 в качестве порта назначения (что имеет смысл, поскольку серверу необходимо только слушать порт 80 для HTTP, а не на нескольких портах). Фокус в том, что sourcePort является динамическим для каждого соединения.
Пример:
user1: 1.1.1.1:29999 до 2.2.2.2:80
user2: 1.1.1.2:45333 - 2.2.2.2:80
Не допускайте использования другого порта для другого физического соединения или более высокой пропускной способности сети или производительности обработки сервера. То, что сервер получает, это TCP или UDP-пакеты, которые, как оказалось, имеют номер порта в качестве части адреса. Они по-прежнему идут по тем же проводам, проходят через те же аппаратные средства и драйвер сетевого интерфейса и т. Д.
Если вы должны были отправить два пакета на сервер, то с точки зрения ресурсов, которые сервер затрачивает на обработку этих двух пакетов, не имеет значения, имеет ли один из двух разных номеров портов или те же номера портов, с которыми они связаны, внутренняя обработка будет близка к идентичной.
Следовательно, это не способ повышения производительности каким-либо образом.
Единственным возможным исключением из этого может быть то, что вы должны были связать двух разных демонов (или двух копий того же самого), работающих одновременно с двумя разными номерами портов, и если каждый из этих демонов будет очень сильно увеличиваться нагрузки. Обычно это не так.
Как упоминал Реми, порт 80 & 443 - это порты по умолчанию для HTTP /HTTPS.
Большинство сетей и брандмауэров не блокируют трафик, проходящий через эти порты. Таким образом, использование этих портов проще, так как большую часть времени вам может не понадобиться беспокоиться о том, что брандмауэры блокируют вашу службу, вам может потребоваться переконфигурировать правила брандмауэра и получить одобрения от соблюдения /безопасности для них.