2 votes

Comprendre l'ip et le port uniques

Mon navigateur est Firefox, avec 3 onglets ouverts :

tab1-->google.com
tab2-->yahoo.com
tab3-->msn.com

Ils utilisent tous port 80 et Photoshop aussi : enter image description here Comment l'ordinateur sait-il quelles données appartiennent à quel processus ?

0 votes

Considérez le port 80 comme un numéro d'extension. L'onglet 1 appelle Google sur le poste 0. Il demande ensuite à la secrétaire des communications futures. Il n'est pas nécessaire que cela se produise sur le port 80. Il en va de même pour l'onglet 2, qui appelle quelqu'un d'autre et qui constitue donc une paire IP:80 différente.

13voto

Daniel B Points 52129

Une connexion TCP est identifiée de manière unique par (hôte local, port local, hôte distant, port distant). (Techniquement, le protocole fait également partie des critères, mais si nous nous limitons à TCP, il s'agit bien sûr de TCP).

Un exemple de connexion avec un routeur :

  • Hôte local : 192.168.2.100 (ou similaire)
  • Port local : 50000
  • Hôte distant : 216.58.208.46 (Google)
  • Port distant : 80

Si vous ouvrez une autre connexion à Google, il utilisera un port de sortie différent, ce qui permettra de l'identifier de manière unique.

C'est également ce que votre système d'exploitation utilise pour acheminer les paquets de réponse vers la bonne application.

4voto

barlop Points 21549

Je vais corriger votre diagramme voir l'image ci-dessous.

enter image description here

Il est utile d'utiliser le mot "paquet" au sens général, c'est-à-dire au sens de l'ingénierie électronique, sans la confusion de la terminologie des "couches" ISO OSI.

Il y a un paquet qui contient des informations telles que l'adresse IP source, l'adresse IP de destination, et après cela, il y a d'autres champs qui peuvent être appelés le segment TCP, et ils ont des champs tels que le port source TCP, le port de destination TCP.

Note ajoutée-

Dans des scénarios un peu plus complexes, vous pourriez avoir deux connexions, avec la même IP source accédant à la même IP de destination et au même port de destination, mais une connexion aurait un port tcp local, l'autre un autre port tcp local. Cela pourrait se produire si vous avez plusieurs onglets ouverts dans un navigateur Web, accédant au même serveur Web. Un autre scénario est celui où vous avez plusieurs cartes réseau. N'oubliez pas que les adresses IP appartiennent aux interfaces réseau (ce qui est plus précis que de dire qu'elles appartiennent à des "ordinateurs"). Un ordinateur peut avoir plusieurs interfaces réseau, plusieurs IP. Une connexion est établie entre les interfaces réseau.

1 votes

C'est partie de la réponse, mais il manque toujours le host:port "local".

0 votes

@grawity : ce n'est pas le host:port local qui l'a perturbé.

0 votes

@grawity J'ai ajouté le concept de paquet, (puisque cela clarifie le concept de port qu'il ne comprenait pas), et cela couvre également un peu l'IP source et le port source. D'ailleurs, je pense que mon image originale était légèrement erronée car j'ai appelé "port" un identifiant alors que je pense que ce n'est pas le cas. J'ai donc corrigé mon image. (Il faudra cependant que je me penche sur la différence entre un identifiant et un identifiant unique).

3voto

Frank Thomas Points 33103

Le processus du serveur web sur le serveur est à l'écoute sur le port 80 pour les connexions sur sa propre adresse IP. Une connexion est établie vers une adresse IP ET un port, pas seulement l'un ou l'autre. Ainsi, votre ordinateur peut se connecter au port 80 sur 3 adresses IP différentes sans problème.

Votre PC n'utilise pas le port 80 à l'extrémité locale de la connexion. Le système d'exploitation utilisera le prochain port local libre dans la plage qu'il est écrit d'utiliser. Pour Windows, les ports commençant à 1024 (anciennes versions) ou à 16536 (versions plus récentes) sont utilisés pour les connexions. Les boîtes Linux ont tendance à utiliser des ports dans la plage supérieure, au-dessus de 38000 environ.

Vous pouvez confirmer ce comportement dans Windows (powershell) avec :

netstat -a | findstr <the servers IP address>

ou sous Linux (en tant que root) :

netstat -ntup | grep <the servers IP address>

et notant le port local. Ce n'est pas le port 80.

De plus, certains serveurs n'écoutent que les nouvelles connexions sur un port (comme FTP), et ouvrent une nouvelle connexion pour transférer réellement des données ou fournir des services. Ce comportement dépend toutefois entièrement du démon en question. Si le service veut utiliser d'autres moyens pour suivre les sessions individuelles, il est libre de le faire, et de garder tout le trafic sur un seul port, comme TCP/80.

Edit : pour répondre à votre question élargie :

Votre navigateur connaît un site par son domaine et son adresse IP, et non par son numéro de port. Chaque système d'exploitation et chaque application fournit une version de la méthode Berkeley Sockets. GetHostByName(string name) qu'il utilise pour rechercher un serveur distant par nom de domaine. Sur la couche TCP, puisque, comme je l'ai mentionné, vous n'utilisez pas TCP/80 localement (seuls les serveurs utilisent 80, et il est impossible qu'un serveur de MSN ne sache pas s'il s'agit de Google), il n'y a aucune ambiguïté.

Il est à noter que lorsqu'un programme utilise un port pour envoyer des données, il semble qu'il envoie le flux de données au port local, mais il est important de se rappeler que lors de la création de ce port, une connexion TCP a été créée entre les hôtes IP, de sorte que le port connaît déjà la (seule) adresse IP distante à laquelle ce port local est connecté.

0 votes

Aujourd'hui, Windows dispose également d'une plage de ports éphémères élevée par défaut, commençant quelque part entre 65535 et 16384.

0 votes

@DanielB, noté.

0 votes

Oui, vous avez raison. Le port 80 appartient au serveur. Vous dites : "Ainsi, votre ordinateur peut se connecter au port 80 sur 3 adresses IP différentes sans problème". Si mon ordinateur utilise plusieurs adresses IP pour chaque demande (alors que chaque ordinateur a une adresse IP unique), comment le serveur peut-il me reconnaître ?

3voto

Selly Points 201

Toutes les applications utiliseront un port aléatoire pour un "usage interne". C'est ce qu'on appelle le port local.

En regardant dans Resmon.exe, sous l'onglet Network vous pouvez voir une liste des connexions TCP. Il s'agit des connexions TCP ouvertes par chaque programme. Cela s'affiche :

  • Image (le programme qui utilise la connexion TCP)
  • PID (il s'agit du numéro d'identification personnel que l'application utilise)
  • Adresse locale (l'IP de votre machine dans 99% des cas)
  • Port local (celui dont nous parlons - il s'agit du numéro de port aléatoire qui est attribué à chaque connexion TCP afin qu'elle puisse être identifiée dans Windows).
  • Adresse distante (il s'agit du serveur/appareil auquel l'application se connecte)
  • Port distant (le port que l'application utilise)
  • Perte de paquets et latence (Le pourcentage de perte de paquets et la... latence - ou Ping comme certains l'appellent)

Globalement, chaque application/connexion TCP (car certaines applications peuvent en avoir plusieurs, comme un navigateur web avec plusieurs onglets) obtient un port local aléatoire qui peut être utilisé pour chaque connexion TCP ouverte.

EDIT :

Merci à @Hennes d'avoir identifié que les ports sont supérieurs à 1023 et inférieurs à 65536.

Tous les ports jusqu'à 1023 sont réservés, comme le port 80, etc. Et 65535 est le numéro de port maximum.

3 votes

Où aléatoire est >1023 et <=65536

0 votes

@Hennes Faux hennes et hitten. Le numéro de port le plus élevé est 65535 (16 bits vont de 0 à 65535). Cela fait 65536 nombres, allant du premier port 0, jusqu'à 2^16 MOINS 1. et un lien pour confirmer que le port le plus élevé est 65535 stackoverflow.com/questions/113224/ Donc votre commentaire voté est faux, et la dernière ligne de la réponse de bitten est fausse.

0 votes

@barlop D'accord, mec, calme-toi, mec. Simple erreur, ça m'a semblé bizarre quand je l'ai lu, mais je lui ai fait confiance. Je vais l'éditer.

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