Question Quelle est la différence entre les adresses IP 0.0.0.0 et 127.0.0.1?


Je sais que 127.0.0.1 ~ 127.255.255.254 sont les adresses IP de bouclage pour la plupart des systèmes d'exploitation modernes, et ces adresses IP peuvent être utilisées pour faire référence à notre propre ordinateur.

Mais qu'est-ce que 0.0.0.0? Il semble que cela se réfère également à l'ordinateur local, alors quelle est la différence?

Et, pourriez-vous m'expliquer les connexions IP suivantes:

screenshot of netstat -an output


207
2017-10-25 07:22


origine


Jetez également un coup d'oeil à cette question, car elle donne des détails sur ce que 0.0.0.0 est (et n'est pas): serverfault.com/questions/228629/… - Ellie Kesselman
Un système d'exploitation moderne utiliserait ::1 comme adresse de bouclage. - kasperd


Réponses:


La seule chose à faire est que vous ne dites pas "toutes les adresses doivent avoir un accès" - cela se fait dans votre ou vos pare-feu et / ou le logiciel serveur et / ou dans d'autres couches de sécurité comme tcpwrappers.

0.0.0.0, dans ce contexte, signifie "toutes les adresses IP sur la machine locale" (en fait probablement, "toutes les adresses IPv4 sur la machine locale"). Ainsi, si votre ordinateur de serveur Web a deux adresses IP, 192.168.1.1 et 10.1.2.1, et que vous autorisez un démon de serveur Web tel qu'apache à écouter le 0.0.0.0, il sera accessible à ces deux adresses IP. Mais seulement à ce qui peut contacter ces adresses IP et le (s) port (s) Web.

Notez que, dans un contexte différent (routage), 0.0.0.0 désigne généralement la route par défaut (la route vers "le reste de" Internet), à part les routes de votre réseau local, etc.).


143
2017-10-25 08:55



vous voulez donc dire que le socket du serveur Web est lié à toutes les adresses disponibles lorsqu’il écoute sur 0.0.0.0? - onmyway133
0.0.0.0 signifie la route par défaut seulement s'il est accompagné d'un préfixe /0 (ou masque de réseau 0.0.0.0) - minmaxavg
À noter: si un processus écoute sur 0.0.0.0, il sera accessible aux adresses IP de toutes les interfaces réseau de la machine, y compris l'adresse actuellement configurée de l'interface de bouclage. Mais si le processus n’écoute que sur le port <numéro de port> d’une adresse de bouclage, par ex. 127.0.0.1, puis le processus est seulement accessible de la même machine par ciblant exactement 127.0.0.1: <numéro de port>. Essayer ce outil python  jouer! - Gab是好人


Lorsqu'un service écoute sur 0.0.0.0, cela signifie que le service écoute sur toutes les interfaces réseau configurées. Lorsqu'il écoute sur 127.0.0.1, le service est uniquement lié à l'interface de bouclage (disponible uniquement sur la machine locale).


75
2017-10-25 07:33





L'adresse IP 0.0.0.0 peut avoir des significations très différentes, selon où il est utilisé.

  • Ce n’est pas une adresse valide à attribuer à une interface réseau réelle, ni à aucune autre adresse du sous-réseau 0.0.0.0/8 (c’est-à-dire une adresse commençant par 0.).
  • Il ne peut pas être utilisé comme adresse source sur un paquet IP, à moins que cela ne se produise lorsqu'un ordinateur ne connaît toujours pas sa propre adresse IP et tente d'en acquérir une (exemple classique: DHCP).
  • S'il est utilisé dans une table de routage, il identifie la passerelle par défaut. une route vers 0.0.0.0 est celle par défaut, c'est-à-dire celle utilisée lorsqu'il n'y a plus de route spécifique disponible pour une adresse de destination.
  • Enfin, vu dans la sortie de la netstat commande (ce que vous avez demandé), cela signifie qu’une socket donnée écoute toutes les adresses IP disponibles de l’ordinateur; quand un ordinateur a plus d’une adresse IP, un socket ne peut être lié qu’à une adresse et une paire de ports spécifiques, ou à un port et tout les adresses; si vous voyez une adresse IP à cet endroit, cela signifie que le socket n’écoute que sur ce port et cette adresse spécifique; si tu vois 0.0.0.0, cela signifie qu’il écoute sur ce port sur tout adresses de la machine, y compris celle du bouclage (127.0.0.1).

38
2017-08-12 06:45



Qu'est-ce que cela signifie si vous curl 0.0.0.0? Curl contacte-t-il et envoie-t-il une demande via les interfaces disponibles? Comment sait-il quelle interface est la bonne? Je comprends comment un serveur peut écouter toutes les interfaces, mais quel mécanisme permet à un client de demander toutes les interfaces, par exemple lorsque je curl 0.0.0.0 ou curl [::]. - CMCDragonkai
Le système d'exploitation vous en empêchera probablement, car cela n'a pas de sens du point de vue de la mise en réseau. Essayer ping 0.0.0.0 sur un système Windows génère un message d'erreur. - Massimo
curl 0.0.0.0 les rendements connection refusedsur Arch Linux. ping 0.0.0.0, d'autre part, semble être un alias pour ping 127.0.0.1 qui fonctionne bien. - Matthias Braun
@MatthiasBraun le connection refused peut-être parce que curl essaie par défaut de se connecter au port 80 / tcp. Essayez de trouver vos ports ouverts avec nmap -sV localhost et ensuite par exemple si 631 / tcp: curl 0.0.0.0:631. - Pablo Bianchi


La réponse de Lee B est exacte, mais voici quelques RFC pertinents au cas où cela vous intéresserait.

0.0.0.0:

De RFC1122Section 3.1.2.3:

Nous résumons maintenant les cas spéciaux importants pour les classes A, B,               et C adresses IP, en utilisant la notation suivante pour un IP               adresse:

            { <Network-number>, <Host-number> }

        or
            { <Network-number>, <Subnet-number>, <Host-number> }

...

          (a)  { 0, 0 }

             This host on this network.  MUST NOT be sent, except as
             a source address as part of an initialization procedure
             by which the host learns its own IP address.

Juste cela, "cet hôte sur ce réseau" ... comme le dit la réponse de Lee B, cela se traduit par toutes les adresses IP disponibles sur votre hôte. L'hébergement d'un service sur 0.0.0.0 hébergera automatiquement ce service sur chaque interface adressable.

127.0.0.1:

De RFC5735:

127.0.0.0/8 - Ce bloc est affecté à une utilisation en tant qu’adresse de bouclage d’hôte Internet. Un datagramme envoyé par un protocole de niveau supérieur à une adresse n'importe où dans ce bloc revient en boucle à l'intérieur de l'hôte. Ceci est généralement mis en œuvre en utilisant uniquement 127.0.0.1/32 pour le bouclage. Comme décrit dans la [RFC1122], Section 3.2.1.3, les adresses de l'ensemble du bloc 127.0.0.0/8 n'apparaissent légitimement sur aucun réseau, où que ce soit.

La différence entre 0.0.0.0 et l'adresse de bouclage 127.0.0.1 réside dans le fait que l'adresse de bouclage est conçue pour permettre une interface IP pleinement fonctionnelle au sein de l'hôte même, quel que soit le reste de la configuration réseau, le cas échéant. Tout le trafic envoyé au périphérique en boucle est immédiatement reçu. Ce n’est pas tant que le réseau de bouclage «fasse référence» à votre propre hôte… c’est plutôt comme si vous aviez un mini segment de réseau dans votre hôte qui permettait aux périphériques, processus et sockets de s’ouvrir et de se connecter.


26
2017-08-12 06:20





En termes simples: écouter sur 0.0.0.0 signifie écouter depuis n'importe quel endroit ayant un accès réseau à cet ordinateur, par exemple depuis cet ordinateur même, depuis un réseau local ou depuis Internet, tandis que l'écoute sur 127.0.0.1 signifie uniquement écouter depuis cet ordinateur même.


3
2017-12-28 10:28