web-dev-qa-db-fra.com

Est-ce que 0.0.0.0:0 et *: * représentent la même chose?

J'ai utilisé netstat (sous Windows) pour afficher les ports écoutés pour TCP et UDP:

enter image description here

J'ai remarqué que dans la colonne Adresse étrangère , UDP affiche *:* au lieu de 0.0.0.0:0, ces deux valeurs représentent-elles la même chose? Si tel est le cas, pourquoi UDP affiche-t-il *:* au lieu de 0.0.0.0:0?

23
user612473

Il a été souligné que ma réponse était une erreur. Étant donné que je ne peux pas le supprimer, je fournirai le correct.

L’expression *:* signifie "Toute adresse, tout port". Tous les auditeurs UDP afficheront cette signature. Cela est dû à la nature sans connexion de UDP.


Réponse originale (incorrecte). Oui et non. *:* fait référence à N'IMPORTE QUELLE adresse IPv6. La distinction entre une adresse inconnue/non spécifiée est vague dans IPv4; nous utilisons donc 0.0.0.0/0 pour représenter tout hôte sur le réseau, mais dans IPv6, il existe une différence subtile.

Cependant, dans la plupart des cas, les utilisateurs utilisent :: pour représenter une chaîne contiguë de 0.

Dans une adresse IPv6, toute séquence de zéros contigus peut être remplacée par :: afin que:

  • 0.0.0.0/0 => 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0000 => :: => *:*
  • fe80:0000:0000:0000:2000:0aff:fea7:0f7c => fe80::2000:0aff:fea7:0f7c

La représentation utilisant des caractères génériques permet toutefois un contrôle plus fin des modèles d'adresses. Par exemple, :: ne correspond pas à fe80::2000:0aff:fea7:0f7c, mais *:* le sera.

Cette différence n’est pas vraiment significative pour tout périphérique qui n’effectue pas de routage, mais lorsque vient le temps de sélectionner les itinéraires optimaux vers des espaces adresse agrégés, la notation générique permet une sélection plus flexible des réseaux de destination.

12
Frank Thomas

Le / fait référence au masque de sous-réseau, qui fait partie de la couche IP.

Le : fait référence à un port faisant partie de la couche transport.

Pour TCP, il est logique qu’il existe une extrémité distante pour une connexion.

UDP, puisqu'il est sans connexion, cela n'a aucun sens de montrer une adresse étrangère.

Mon sentiment est que cela afficherait toujours le caractère générique pour UDP et qu'il est potentiellement là pour rendre l'analyse de la sortie un peu plus conviviale, ou pour montrer si vous utilisez IPv4/6:

IPV4 "*:*" vs IPV6 "[::]:*"

15
Luke Exton

La différence est simplement de notation.

Netstat dans Windows utilise 0.0.0.0:0 pour représenter une idée abstraite de "toute adresse distante et port" pour un écouteur IPv4 TCP local et *:* pour un écouteur UDP. Pour IPv6, l'adresse distante est notée [::]:0 pour TCP et *:* pour UDP.

Dans OS X, *.* est utilisé pour TCP et UDP, qu’ils soient IPv4 ou IPv6 (notez que OS X utilise des points pour séparer l’adresse et le port). Linux utilise 0.0.0.0:* pour IPv4 et :::* pour IPv6, les deux premiers points représentant l'abréviation de toutes les adresses IPv6 et le troisième deux-points le séparateur entre l'adresse et le port.

Le IIRC de quelque chose que j'ai entendu ou lu il y a longtemps, je pense que les paires UDP peuvent apparaître, mais généralement pas Les connexions sont généralement très courtes et ne durent que quelques millisecondes. Je n'ai jamais vu cela moi-même, alors ça pourrait être incorrect.

6
NetworkLlama

Dans les deux cas, l’information est fondamentalement sans signification, mais indique plus ou moins la même chose.

Votre première ligne est un socket TCP. La colonne d'adresse locale indique l'adresse et le port sur lesquels elle accepte les connexions, et la colonne d'adresse distante ne signifie rien, car un socket d'écoute n'a pas encore d'extrémité distante de la connexion. Un socket connecté TCP affichera l'adresse de l'autre extrémité de la connexion dans cette colonne, mais pour un socket d'écoute, il décide pour afficher une adresse et un port à zéro.

Votre deuxième ligne est un socket UDP. Le protocole UDP est un protocole sans connexion, ce qui signifie qu'il envoie et reçoit des paquets sans savoir qui est connecté à qui, que le paquet fasse partie d'une conversation existante ou que les données viennent d'arriver de nulle part. La colonne d'adresse locale a la même signification que pour TCP et la colonne d'adresse distante n'a pas de sens, car un socket UDP peut avoir un pair, plusieurs pairs ou aucun autre à tout moment. (En réalité, POSIX a la notion de "socket UDP connecté", mais ça va un peu plus loin).

Maintenant la question: pourquoi affichent-ils différemment? Cela ne semble être rien d’autre qu’un hasard du code Windows Netstat. Linux (net-tools) netstat affiche 0.0.0.0:* pour l'extrémité distante des deux TCP listen sockets et des sockets UDP (pour IPv4; il affiche :::* pour IPv6), ce qui diffère de l'un ou l'autre exemple sous Windows, mais au moins c'est cohérent dans le même programme. Peut-être que Windows opte pour une distinction sémantique entre "à remplir plus tard" dans le cas de TCP et "ouvert à tout" dans le cas de UDP, mais il est tout aussi probable que les deux bits de code aient été écrits par deux personnes différentes sans souci particulier de cohérence.

6
hobbs