69 votes

Les navigateurs web utilisent-ils des ports sortants différents pour les différents onglets ?

Dans un navigateur Web qui prend en charge les onglets multiples, tel que Firefox, les différents onglets qui vont vers des domaines de sites Web différents utilisent-ils un port dédié pour chaque domaine ?

Ou bien le navigateur utilise-t-il un seul port pour gérer tous les onglets et donc tous les domaines ?

68voto

Aa Kavous Points 61

Chaque connexion à un site web utilise un socket différent avec le port TCP de destination par défaut 80 pour le HTTP simple et 443 pour le HTTPS. Pour que le socket soit unique, la combinaison de l'adresse IP source, du port TCP source, de l'adresse IP destination et du port TCP destination doit être différente.

Si vous avez plusieurs connexions au même site Web (en supposant que le site Web n'utilise qu'une seule adresse IP) à partir du même ordinateur, un port TCP source différent doit être utilisé. De cette façon, chaque connexion est unique.

Toutefois, il convient de noter qu'à partir de HTTP 1.1, toutes les connexions sont persistantes pendant une période donnée (sauf déclaration contraire). Cela signifie que la même connexion peut être réutilisée par votre navigateur si plusieurs ressources du même site web sont demandées (par exemple, des fichiers css/js). Cela s'applique également si vous avez plusieurs instances du même site web dans votre navigateur.

Si vous êtes sous Windows, le netstat -no -p TCP vous montrera tous les sockets TCP actifs et leur ID de processus correspondant, y compris ceux de votre navigateur :

enter image description here

Si vous êtes sous Unix/Linux (Debian dans ce cas), vous pouvez utiliser la commande netstat -ntp o ss -t commandement :

enter image description here

63voto

DavidPostill Points 140654

Les navigateurs utilisent-ils des ports différents pour se connecter à des sites web différents ?

Oui, ils le font.

Voici un exemple, montrant mes connexions Firefox actuelles (j'ai 9 onglets ouverts) sur Windows 7 :

enter image description here

Notes :

  • Vous pouvez voir que les ports locaux sont tous différents.

  • Les ports distants sont généralement 80 (HTTP), 443 (HTTPS) ou 8080 (HTTP alternatif).

  • Le processus complet de rendu d'une page web est décrit ci-dessous. Voir en particulier les étapes 5, 6, 13 et 15 (qui sont en gras) :

    • En général, le rendu d'une seule page web utilise plusieurs connexions, qui ne sont pas toutes destinées à la même adresse distante.

    • En effet, les pages web contiennent souvent des ressources hébergées ailleurs (fichiers javascript, etc.).

  • Connexions multiples au même (par exemple stackoverflow.com) ont également des ports locaux différents (car il s'agit de connexions distinctes dans des onglets différents qui rendent des pages différentes).


Rendu d'une page Web - étape par étape

Nota:

  • Les étapes 5, 6, 13 et 15 (qui sont en gras) sont directement liées à la question.

Avez-vous déjà pensé à ce qui se passe lorsque vous surfez sur le web ? Ce n'est pas pas aussi simple qu'il n'y paraît :

  1. Vous tapez une URL dans la barre d'adresse de votre navigateur préféré.
  2. Le navigateur analyse l'URL pour trouver le protocole, l'hôte, le port et le chemin.
  3. Il forme une requête HTTP (c'était très probablement le protocole)
  4. Pour atteindre l'hôte, il doit d'abord traduire l'hôte lisible par l'homme en un numéro IP, ce qu'il fait en effectuant un DNS. sur l'hôte
  5. Il faut ensuite ouvrir un socket de l'ordinateur de l'utilisateur vers ce numéro IP, sur le port spécifié (le plus souvent le port 80).
  6. Lorsqu'une connexion est ouverte, la demande HTTP est envoyée à l'hôte
  7. L'hôte transmet la demande au logiciel serveur (le plus souvent Apache) configuré pour écouter sur le port spécifié.
  8. Le serveur inspecte la demande (le plus souvent uniquement le chemin d'accès) et lance le plugin serveur nécessaire pour traiter la demande (correspondant à l'option au langage de serveur que vous utilisez, PHP, Java, .NET, Python ?).
  9. Le plugin a accès à la requête complète et commence à préparer une réponse HTTP.
  10. Pour construire la réponse, on accède (très probablement) à une base de données. Une recherche dans la base de données est effectuée, sur la base de paramètres dans le chemin (ou les données) de la requête
  11. Les données de la base de données, ainsi que d'autres informations que le plugin décide d'ajouter, sont combinées en une longue chaîne de texte (probablement du HTML).
  12. Le plugin combine ces données avec certaines métadonnées (sous la forme d'en-têtes HTTP) et renvoie la réponse HTTP au navigateur.
  13. Le navigateur reçoit la réponse, et analyse le HTML (qui, avec une probabilité de 95 %, est cassé) dans la réponse.
  14. Un arbre DOM est construit à partir de l'HTML cassé.
  15. De nouvelles requêtes sont adressées au serveur pour chaque nouvelle ressource trouvée dans la source HTML (généralement des images, des feuilles de style et des fichiers de données). fichiers JavaScript). Revenez à l'étape 3 et répétez l'opération pour chaque ressource.
  16. Les feuilles de style sont analysées et les informations de rendu contenues dans chacune d'elles sont attachées au nœud correspondant de l'arbre DOM.
  17. Le Javascript est analysé et exécuté, les nœuds du DOM sont déplacés et les informations de style sont mises à jour en conséquence.
  18. Le navigateur rend la page à l'écran en fonction de l'arbre DOM et des informations de style pour chaque nœud.
  19. Vous voyez la page sur l'écran
  20. Vous êtes ennuyé par la lenteur du processus.

Source : Rendu d'une page Web - étape par étape

11voto

jottr Points 613

En ce qui concerne les onglets vers des sites web différents, rien dans le protocole TCP n'exige que le port local soit différent, pour autant que le tuplet {IP locale, port local, IP cible, port cible} est unique. Pour les onglets d'un même site web, la situation est beaucoup plus complexe.

Le navigateur, comme tout autre logiciel client, utilise un port local différent pour chaque connexion sortante vers la même cible. En général, il établit plusieurs connexions avec un site Web donné, pour récupérer des ressources intégrées telles que des images, des feuilles de style en cascade, du JavaScript, etc. Il regroupera également ces connexions pour une éventuelle réutilisation.

Il n'est pas possible de dire si les différents onglets d'un même site web utiliseront des services distincts. connexions, car (a) il n'y a généralement pas une seule connexion par onglet de toute façon, et (b) selon le moment et l'authentification, les connexions peuvent être réutilisées entre les onglets ; et comme il n'est pas possible d'identifier les connexions, il n'est donc pas possible d'identifier les ports locaux non plus.

6voto

Damon Points 4442

Oui. Non. Peut-être. Ca dépend.

Tout d'abord, un navigateur peut utiliser n'importe laquelle de ces stratégies de connexion :

  1. Connexion unique (peu probable pour tout navigateur plus récent que 1995)
  2. Une connexion par onglet (fondamentalement identique au n° 1, mais très légèrement meilleur)
  3. Une connexion par ressource (naïf, mais ne fonctionne pas si mal)
  4. Pool de connexions avec keep-alive, réutilisation des connexions
  5. Quelque chose de différent (lire : des trucs bizarres)

Vous n'avez aucun moyen de savoir quelle stratégie un navigateur va utiliser, bien que l'utilisation d'un pool de connexions (et la réutilisation des connexions) soit une hypothèse raisonnable.

Deuxièmement, de la manière dont le TCP fonctionne, vous avez un port source et un port de destination pour chaque connexion. La paire adresse/port source et destination définit la connexion.
Tu as toujours [1] utiliser un bien connu port (tel que 80 ou 443) pour se connecter au serveur (qu'il écoute sur son adresse annoncée), mais l'autre port est choisi au hasard. Ainsi, selon le côté par lequel vous regardez une connexion, elle a un ou plusieurs ports possibles.

Ainsi, le même peut utiliser (et utilisera généralement) plusieurs ports différents à son extrémité, mais en principe, différents onglets pourrait (si les connexions sont regroupées et que différentes ressources dans différents onglets sont chargées à partir du même serveur) utilisent le même port.

Puisque la question mentionne explicitement sortant Dans le cas "normal", les numéros de port seraient les mêmes quel que soit l'onglet dans lequel ils se trouvent, ou l'un des deux ports possibles (80 et 443). Bien entendu, il est possible de demander explicitement un port différent (comme 8080) dans une URL. Mais c'est plutôt rare.


[1] Eh bien, pas つねに ... mais ne compliquons pas trop les choses.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X