web-dev-qa-db-fra.com

Quelle est la différence entre l'adresse 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 qu'il 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

234
Jichao

La seule chose est que vous ne dites pas "toutes les adresses devraient avoir accès" - cela se fait dans vos pare-feu et/ou le logiciel serveur et/ou 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 machine 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 comme Apache à écouter sur 0.0.0.0, il sera accessible à ces deux adresses IP. Mais seulement à ce qui peut contacter ces adresses IP et les ports Web.

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

163
Lee B

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

81
slubman

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

  • Ce n'est pas une adresse valide à donner à une interface réseau réelle, ainsi que toute autre adresse dans le sous-réseau 0.0.0.0/8 (c'est-à-dire toute adresse commençant par 0.).
  • Il ne peut pas être utilisé comme adresse source sur n'importe quel paquet IP, sauf si cela se produit lorsqu'un ordinateur ne connaît toujours pas sa propre adresse IP et essaie 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 la route par défaut, c'est-à-dire celle utilisée quand il n'y a plus de route spécifique disponible pour une adresse de destination.
  • Enfin, vu dans la sortie de la commande netstat (ce que vous avez demandé), cela signifie qu'un socket donné écoute toutes les adresses IP disponibles de l'ordinateur; lorsqu'un ordinateur possède plusieurs adresses IP, un socket ne peut être lié qu'à une adresse et une paire de ports spécifiques, ou à un port et toutes adresses; si vous y voyez une adresse IP, cela signifie que le socket écoute uniquement sur ce port et cette adresse spécifique; si tu vois 0.0.0.0, cela signifie qu'il écoute sur ce port sur toutes les adresses de la machine, y compris celle de bouclage (127.0.0.1).
40
Massimo

La réponse de Lee B est juste, mais voici quelques RFC pertinents au cas où vous seriez intéressé.

0.0.0.0:

De RFC1122 , section 3.1.2.3:

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

            { <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 l'indique 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 attribué pour être utilisé comme adresse de bouclage de l'hôte Internet. Un datagramme envoyé par un protocole de niveau supérieur à une adresse située n'importe où dans ce bloc revient en boucle à l'intérieur de l'hôte. Ceci est généralement implémenté en utilisant uniquement 127.0.0.1/32 pour le bouclage. Comme décrit dans [RFC1122], Section 3.2.1.3, les adresses dans l'ensemble du bloc 127.0.0.0/8 n'apparaissent légitimement sur aucun réseau.

La différence entre 0.0.0.0 et l'adresse de bouclage 127.0.0.1 est que l'adresse de bouclage est conçue pour permettre une interface IP pleinement fonctionnelle au sein de l'hôte lui-même, quelle que soit l'apparence du reste de la configuration réseau, le cas échéant. Tout trafic envoyé au périphérique de bouclage est immédiatement reçu sur celui-ci. Ce n'est pas tellement que le réseau de bouclage "se réfère" à votre propre hôte ... c'est plus comme si vous avez un mini segment de réseau dans votre hôte que les périphériques, les processus et les sockets et peuvent ouvrir et se connecter.

28
user62491

En termes simples: écouter sur 0.0.0.0 signifie écouter de n'importe où qui a un accès réseau à cet ordinateur, par exemple, à partir de cet ordinateur, du réseau local ou d'Internet, alors que l'écoute sur 127.0.0.1 signifie uniquement écouter à partir de cet ordinateur

5
Hải Phong