Quelle est la différence entre l'adresse IP 0.0.0.0 et 127.0.0.1?

220

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:

capture d'écran de netstat -an output

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

Réponses:

157

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 dans 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.).

Lee B
la source
vous voulez donc dire que le socket du serveur Web est lié à toutes les adresses disponibles lors de l'écoute sur 0.0.0.0?
onmyway133
0.0.0.0signifie la route par défaut uniquement si elle est accompagnée d'un préfixe /0(ou d'un 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 exemple 127.0.0.1, le processus n'est accessible que depuis le même ordinateur en ciblant exactement 127.0.0.1: <numéro de port> . Essayez cet outil python pour jouer!
Gab
77

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).

slubman
la source
38

L'adresse IP 0.0.0.0peut avoir des significations très différentes selon son utilisation.

  • 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 la route 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, lorsque netstatvous voyez dans la sortie de la commande (ce que vous avez demandé), cela signifie qu'un socket donné écoute toutes les adresses IP disponibles de l'ordinateur. lorsqu'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 à toutes 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 vous voyez 0.0.0.0, cela signifie qu'il écoute sur ce port sur toutes les adresses de la machine, y compris le loopback one ( 127.0.0.1).
Massimo
la source
3
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
1
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.0sur un système Windows génère un message d'erreur.
Massimo
curl 0.0.0.0rendements connection refusedsur Arch Linux. ping 0.0.0.0, en revanche, semble être un pseudonyme pour ping 127.0.0.1lequel fonctionne bien.
Matthias Braun
@MatthiasBraun connection refusedpeut être parce que curl essaie par défaut de se connecter au port 80 / tcp. Essayez de trouver vos ports ouverts avec nmap -sV localhostet pour , par exemple , si 631 / tcp: curl 0.0.0.0:631.
Pablo A
27

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 RFC1122 , Section 3.1.2.3:

Nous résumons maintenant les cas particuliers 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 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 [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.


la source
4

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.

Hải Phong
la source