Почему только порт 80 для веб-сервисов?

Почему не разумно выделять более одного порта TCP /IP для http? Хотя, по общему признанию, наивно, не так ли интуитивно понятно, что производительность сервера может быть как-то увеличена?

tcp
50 голосов | спросил Marcos Gonzalez 20 J0000006Europe/Moscow 2013, 18:14:40

9 ответов


66

Порт 80 - это хорошо известный порт, что означает, что он хорошо известен как местоположение, в котором вы обычно найдете HTTP-серверы. Вы можете найти его документированным в HTTP /1.1 RFC .

Наличие значения по умолчанию полезно именно потому, что вам не нужно вводить его в свой веб-браузер с помощью URI. Если вы запускаете HTTP-сервер (или фактически любую службу) на нестандартном порту, вы заставляете клиента помнить, какое произвольное 16-битное число вы выбрали, и введите его.

В дополнение к этому недружелюбие нет выгоды от производительности: порт представляет собой лишь одну часть 4-кортежа (dst ip:port, src ip:port), который однозначно идентифицирует TCP-соединение , Если два соединения имеют общий доступ к dst ip:port, это не означает, что они имеют общий доступ к системному ресурсу - они могут находиться в разных потоках или разных процессах.

Теперь, если у вас есть логически разные службы, которые используют для использования HTTP, нет проблемы с их запуском на разных портах. Это просто делает URI немного уродливым.

ответил Useless 20 J0000006Europe/Moscow 2013, 20:41:51
25

Сервер не тратит ресурсы, обрабатывая соединения в одном или нескольких портах. Ресурсы сервера назначаются для обработки соединений, а номер порта - это просто способ подключения определенной программы к определенному соединению.

Например: HTTP-сервер знает, что он будет слушать подключения, входящие в порт 80. И сервер знает, что в любое время, когда он получает запрос на порт 80, он будет обрабатывать его на http-сервере. После этого сервер http будет обрабатывать сообщение, а затем будет потреблять ресурсы.

ответил woliveirajr 20 J0000006Europe/Moscow 2013, 19:24:16
22

Вы, кажется, думаете о портах как о чем-то реальном; его просто 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-адреса и порт, доступные ему в заголовке. ОС и приложение (веб-браузер или веб-сервер) могут использовать оба способа, чтобы выяснить, какое действие необходимо выполнить для обработки пакета.

ответил dr jimbob 21 J0000006Europe/Moscow 2013, 01:23:34
13

Порт 80 & 443 являются «стандартными» портами для HTTP /HTTPS

Это означает, что вам не нужно указывать порт ( http://www.example.com:80 , https://www.example.com:443 ) при использовании веб-браузера.

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

Кроме того, большинство прокси-серверов и межсетевых экранов не будут подключаться к этим портам, если они специально не настроены для этого (без конфигурации, исходящие прокси не будут прослушивать нестандартные порты, поэтому не будут перенаправлять запрос веб-серверам, тогда как Брандмауэры просто блокируют попытки подключения не к TCP80 /443)

Все это ограничивает то, что можно сделать на уровне TCP /IP

Одним из способов повышения производительности может быть наличие устройства /службы балансировки нагрузки, прослушивающего TCP80 /443, которое затем перенаправляет запрос на серверы на разных портах и ​​/или ip (локальное балансирование) или даже на разные удаленные сайты (Global Balancing ). Но это совсем другая тема.

ответил Remi Letourneau 20 J0000006Europe/Moscow 2013, 19:24:01
9

Добавление дополнительных портов не добавляет лишнюю полосу пропускания или что-то в этом роде, порт больше ярлыка, чем труба , он может «расти» настолько широко, насколько вам это нужно, не становясь медленнее из-за заполнения трубы.

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

ответил David 20 J0000006Europe/Moscow 2013, 22:43:15
7

Если вы использовали случайные порты, пользователю приходилось добавлять правильные номера портов каждый раз, когда они попадали на ваш сайт. т.е. www.example.com:80; www.example.com:81; www.example.com:82 и т. д.

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

ответил mellowd 20 J0000006Europe/Moscow 2013, 18:53:03
7

Каждое соединение 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

ответил Thieron 20 J0000006Europe/Moscow 2013, 18:50:26
2

Не допускайте использования другого порта для другого физического соединения или более высокой пропускной способности сети или производительности обработки сервера. То, что сервер получает, это TCP или UDP-пакеты, которые, как оказалось, имеют номер порта в качестве части адреса. Они по-прежнему идут по тем же проводам, проходят через те же аппаратные средства и драйвер сетевого интерфейса и т. Д.

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

Следовательно, это не способ повышения производительности каким-либо образом.

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

ответил Tanith Rosenbaum 21 J0000006Europe/Moscow 2013, 20:54:56
1

Как упоминал Реми, порт 80 & 443 - это порты по умолчанию для HTTP /HTTPS.

Большинство сетей и брандмауэров не блокируют трафик, проходящий через эти порты. Таким образом, использование этих портов проще, так как большую часть времени вам может не понадобиться беспокоиться о том, что брандмауэры блокируют вашу службу, вам может потребоваться переконфигурировать правила брандмауэра и получить одобрения от соблюдения /безопасности для них.

ответил Gladwin B 20 J0000006Europe/Moscow 2013, 20:10:02

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132