Если я понимаю право, приложения иногда используют HTTP для отправки сообщений, начиная с использования других портов склонно вызвать проблемы с брандмауэром. Но как это работает, не конфликтуя с другими приложениями, такими как веб-браузеры? На самом деле, как несколько выполнений браузеров сразу не конфликтуют? Они все контролируют порт и уведомляются..., можно ли совместно использовать порт таким образом?
У меня есть чувство, что это - немой вопрос, но не что-то, о чем я когда-либо думал прежде, и в других случаях я видел проблемы, когда 2 приложения настроены для использования того же порта.
Имеется 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)
Браузер - это клиентское приложение, которое вы используете для просмотра контента на веб-сервере , который обычно находится на другом компьютере. Веб-сервер прослушивает порт 80, а не браузер на клиенте.
Клиенты обычно выбирают порт от 1024 до 65535. Как с этим справиться, зависит от операционной системы. Я думаю, что клиенты Windows увеличивают значение для каждого нового соединения, клиенты Unix выбирают случайный номер порта.
Некоторые службы используют статический клиентский порт, например NTP (123 UDP)
Порт 80, о котором вы говорите, - это удаленный порт на сервере, локально браузер открывает порт высокого уровня для каждого установленного соединения.
Каждое соединение имеет номера портов на обоих концах, один называется локальным портом, другой - удаленным портом.
Брандмауэр разрешает трафик на порт высокого уровня для браузера, потому что он знает, что соединение было установлено с вашего компьютера.
Исходящие HTTP-запросы не происходят на порту 80. Когда приложение запрашивает сокет, оно обычно получает один из них в произвольном порядке. Это порт Source.
Порт 80 предназначен для обслуживания HTTP-контента (сервером, а не клиентом). Это порт назначения.
Каждый браузер использует свой Source для генерации запросов. Таким образом, пакеты возвращаются к нужному приложению.
Вам нужно быть осторожным, проводя различие между «прослушиванием порта 80» и «подключением к порту 80».
Когда вы говорите «приложения иногда используют HTTP для отправки сообщений, поскольку использование других портов может вызвать проблемы с брандмауэром», вы на самом деле имеете в виду «приложения иногда отправляют сообщения на порт 80».
Сервер прослушивает порт 80 и может принимать несколько подключений к этому порту.
Это 5 кортеж (IP-протокол, локальный IP-адрес, локальный порт, удаленный IP-адрес, удаленный порт), который идентифицирует соединение. Несколько браузеров (или один браузер, загружающий несколько страниц одновременно) будут использовать порт назначения 80, но локальный порт (который выделяется операционной системой) в каждом случае свой. Поэтому конфликта нет.