51

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

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

4 ответа4

62

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

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

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

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

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

48

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

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

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

Заметки:

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

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

  • Полный процесс рендеринга веб-страницы описан ниже. В частности, см. Шаги 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. Вы раздражаетесь, весь процесс был слишком медленным.

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

10

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

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

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

6

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

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

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

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

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

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

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


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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .