Используют ли веб-браузер разные исходящие порты для разных вкладок?

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

Или браузер использует один порт для управления всеми вкладками и, следовательно, всеми доменами ?.

Используют ли браузеры разные порты для подключения к различным веб-сайтам?

Да, они делают.

Вот пример, показывающий мои текущие подключения Firefox (у меня есть 9 открытых вкладок) в Windows 7:

Введите описание изображения здесь

Заметки:

  • Вы можете видеть, что локальные порты все разные.

  • Удаленные порты обычно 80 (HTTP), 443 (HTTPS) или 8080 (HTTP Alternate).

    • Многие другие порты используются для размещения веб-серверов. Поиск HTTP в списке номеров портов TCP и UDP для некоторых из них.
  • Полный процесс создания веб-страницы описан ниже. См., В частности, шаги 5, 6, 13 и 15 (выделены жирным шрифтом):

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

    • Это связано с тем, что веб-страницы часто включают ресурсы, размещенные в других местах (файлы javascript и т. Д.).

  • Несколько подключений к одному и тому же веб-сайту (например, stackoverflow.com) также имеют разные локальные порты (поскольку они представляют собой отдельные соединения на разных вкладках, отображающих разные страницы).


Рендеринг веб-страницы – шаг за шагом

Заметка:

  • Шаги 5, 6, 13 и 15 (выделенные жирным шрифтом) имеют непосредственное отношение к вопросу.

Вы когда-нибудь думали о том, что происходит, когда вы занимаетесь поиском в Интернете? Это не так просто, как кажется:

  1. Вы вводите URL-адрес в адресную строку в предпочитаемом браузере.
  2. Браузер анализирует URL-адрес, чтобы найти протокол, хост, порт и путь.
  3. Он формирует HTTP-запрос (это, скорее всего, протокол)
  4. Чтобы добраться до хоста, сначала нужно перевести читаемый человеческий узел в IP-номер, и он делает это, выполняя поиск DNS на хосте
  5. Затем сокет должен быть открыт с компьютера пользователя на этот номер IP, на указанном порту (чаще всего на порту 80)
  6. Когда соединение открыто, HTTP-запрос отправляется на хост
  7. Хост перенаправляет запрос серверному программному обеспечению (чаще всего Apache), настроенному на прослушивание на указанном порту
  8. Сервер проверяет запрос (чаще всего только путь) и запускает серверный плагин, необходимый для обработки запроса (соответствующий используемому языку сервера, PHP, Java, .NET, Python?)
  9. Плагин получает доступ к полному запросу и начинает подготовку ответа HTTP.
  10. Для построения ответа на доступ к базе данных (скорее всего). Выполняется поиск базы данных на основе параметров в пути (или данных) запроса
  11. Данные из базы данных вместе с другой информацией, которую плагин решает добавить, объединяются в длинную строку текста (возможно, HTML).
  12. Плагин объединяет эти данные с некоторыми метаданными (в виде заголовков HTTP) и отправляет ответ HTTP обратно в браузер.
  13. Браузер получает ответ и анализирует HTML (который с вероятностью 95% нарушен) в ответе
  14. Дерево DOM построено из разбитого HTML-кода
  15. Новые запросы поступают на сервер для каждого нового ресурса, который находится в источнике HTML (обычно это изображения, таблицы стилей и файлы JavaScript). Вернитесь к шагу 3 и повторите для каждого ресурса.
  16. Таблицы стилей анализируются, и информация об рендеринге каждого из них привязывается к соответствующему узлу в дереве DOM
  17. Javascript анализируется и выполняется, а узлы DOM перемещаются, и информация о стиле обновляется соответствующим образом
  18. Браузер отображает страницу на экране в соответствии с деревом DOM, а информация о стиле для каждого узла
  19. Вы видите страницу на экране
  20. Вы раздражаетесь, весь процесс был слишком медленным.

Источник Рендеринг веб-страницы – шаг за шагом

Каждое подключение к веб-сайту использует другой сокет с TCP-портом назначения по умолчанию 80 для простых HTTP и 443 для HTTPS. Для того чтобы сокет был уникальным, комбинация исходного IP-адреса, исходного TCP-порта, целевого IP-адреса и TCP-порта назначения должна быть разной.

Если у вас несколько подключений к одному и тому же веб-сайту (при условии, что веб-сайт использует только один IP-адрес) с того же компьютера, необходимо использовать другой TCP-порт источника. Таким образом, каждое соединение уникально.

Однако следует отметить, что с HTTP 1.1 все соединения сохраняются в течение определенного периода времени (если не указано иное). Это означает, что одно и то же соединение может быть повторно использовано вашим браузером, если запрашиваются несколько ресурсов с одного и того же веб-сайта (например, файлы css / js). Это также применимо, если в вашем браузере имеется несколько экземпляров одного и того же веб-сайта.

Если вы находитесь в Windows, команда netstat -no -p TCP покажет вам все активные сокеты TCP и их соответствующий идентификатор процесса, в том числе ваш браузер:

Введите описание изображения здесь

Если вы используете Unix / Linux (в данном случае Debian), вы можете использовать команду netstat -ntp или ss -t :

Введите описание изображения здесь

Что касается вкладок на разные веб-сайты, в TCP нет ничего, что требует, чтобы локальный порт был другим, если кортеж (локальный IP-адрес, локальный порт, целевой IP-адрес, целевой порт ) уникален. Для вкладок на один и тот же сайт ситуация намного сложнее.

Браузер, как и любая другая клиентская программа, использует другой локальный порт для исходящего соединения с одной и той же целью. В общем, он будет создавать несколько соединений с любым сайтом, чтобы получить встроенные ресурсы, такие как изображения, CSS, JavaScript и т. Д. Он также объединит эти соединения для возможного повторного использования.

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

Да. Нет. Может быть. Это зависит.

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

  1. Одно соединение (маловероятно для любого браузера более позднего, чем 1995)
  2. Одно соединение на вкладку (в основном такое же, как # 1, только немного лучше)
  3. Одно соединение на ресурс (наивное, но не работает так плохо)
  4. Пул соединений с keep-alive, повторное использование соединений
  5. Что-то другое (читайте как: странные вещи)

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

Во-вторых, как работает TCP, у вас есть исходный порт и порт назначения для каждого подключения. Пара адреса и порта источника и получателя определяет соединение.
Вы всегда используете [1] хорошо известный порт (например, 80 или 443) для подключения к серверу (которому он прослушивает его рекламируемый адрес), но другой случай выбирается случайным образом. Таким образом, в зависимости от того, с какой стороны вы смотрите на соединение, у него есть один или несколько возможных портов.

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

Поскольку вопрос явно упоминает об исходящих , в «нормальном» случае номера портов будут одинаковыми независимо от того, в какую вкладку они находятся, или одного из двух возможных портов (80 и 443). Хотя, конечно, можно явно запросить другой порт (например, 8080) в URL-адресе. Однако это редкость.


[1] Ну, не всегда … но давайте не будем слишком усложнять его.

  • Моделирование сетевого соединения с низкой пропускной способностью и высокой задержкой в ​​Linux
  • Поддерживает ли Mac OS X журнал сетевых адресов и дат / времени?
  • Подключение к собственному IP-адресу не работает
  • Зачем нужен маршрутизатор?
  • Как найти IP-адрес моего мостового маршрутизатора?
  • Как получить сетевую статистику в реальном времени в Linux с помощью формата KB / MB / Bytes и для конкретного идентификатора процесса или порта
  • Давайте будем гением компьютера.