Как приложение может использовать порт 80 / HTTP, не конфликтуя с браузерами? - PullRequest
53 голосов
/ 02 июня 2010

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

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

Ответы [ 7 ]

74 голосов
/ 02 июня 2010

Есть 2 порта: порт источника (браузер) и порт назначения (сервер). Браузер запрашивает у ОС доступный исходный порт (скажем, он получает 33123 ), затем устанавливает сокетное соединение с портом назначения (обычно 80 / HTTP , 443 / HTTPS ).

Когда веб-сервер получает ответ, он отправляет ответ, имеющий 80 в качестве порта источника и 33123 в качестве порта назначения.

Так что, если у вас есть 2 браузера, одновременно обращающихся к stackoverflow.com, у вас будет что-то вроде этого:

Firefox (localhost:33123) <-----------> stackoverflow.com (69.59.196.211:80)
Chrome  (localhost:33124) <-----------> stackoverflow.com (69.59.196.211:80)
20 голосов
/ 02 июня 2010

Исходящие HTTP-запросы не выполняются на порту 80. Когда приложение запрашивает сокет, оно обычно получает один случайным образом. Это порт источника.

Порт 80 предназначен для обслуживания содержимого HTTP (сервером, а не клиентом). Это порт назначения.

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

7 голосов
/ 02 июня 2010

Это 5-кратный набор (IP-протокол, локальный IP-адрес, локальный порт, удаленный IP-адрес, удаленный порт), который идентифицирует соединение. Каждый из нескольких браузеров (или фактически один браузер, загружающий несколько страниц одновременно) будет использовать порт назначения 80, но в каждом случае локальный порт (который назначается O / S) различен. Поэтому нет конфликта.

5 голосов
/ 02 июня 2010

Клиенты обычно выбирают порт между 1024 и 65535. Это зависит от операционной системы, как справиться с этим. Я думаю, что клиенты Windows увеличивают значение для каждого нового подключения, клиенты Unix выбирают случайный номер порта.

Некоторые сервисы используют статический клиентский порт, например NTP (123 UDP)

4 голосов
/ 02 июня 2010

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

Когда вы говорите, что «приложения иногда используют HTTP для отправки сообщений, поскольку использование других портов может вызвать проблемы с брандмауэром», вы на самом деле имеете в виду «приложения иногда отправляют сообщения на порт 80».

Сервер прослушивает порт 80 и может принимать несколько подключений к этому порту.

4 голосов
/ 02 июня 2010

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

2 голосов
/ 02 июня 2010

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

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

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

...