Je suis en train d'exécuter l'exemple dans hiredis, qui utilise 127.0.0.2
comme adresse IP du serveur Redis, et il fonctionne correctement. En fait, le serveur Redis fonctionne sur la même machine. Je sais que 127.0.0.1
est l'adresse IP de lo
, mais qu'en est-il de 127.0.0.2
? Est-ce la même chose que 127.0.0.1
?
Réponses
Trop de publicités?Oui :
Les normes de réseau IPv4 réservent tout le bloc d'adresses 127.0.0.0/8 à des fins de bouclage. Cela signifie que tout paquet envoyé à l'une de ces 16 777 214 adresses (127.0.0.1 à 127.255.255.254) est renvoyé. IPv6 a juste une seule adresse, ::1.
Les normes diverses du groupe de travail sur l'ingénierie de l'Internet (IETF) réservent le bloc d'adresses IPv4 127.0.0.0/8, en notation CIDR et l'adresse IPv6 ::1 à cet effet. L'adresse IPv4 la plus courante utilisée est 127.0.0.1. Ces adresses de bouclage sont généralement associées aux noms d'hôte localhost ou loopback.
ou à partir du RFC lui-même :
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 n'importe où dans ce bloc doit boucler à l'intérieur de l'hôte. Cela est habituellement implémenté en utilisant uniquement 127.0.0.1/32 pour le bouclage, mais aucune adresse dans ce bloc ne doit jamais apparaître sur un réseau n'importe où [RFC1700, page 5].
Pour le plaisir, essayez de faire un ping :
$ ping 127.127.127.127
PING 127.127.127.127 (127.127.127.127) 56(84) bytes of data.
64 bytes from 127.127.127.127: icmp_req=1 ttl=64 time=0.110 ms
64 bytes from 127.127.127.127: icmp_req=2 ttl=64 time=0.065 ms
^C
--- 127.127.127.127 statistiques ping ---
2 paquets transmis, 2 reçus, perte 0%, temps 999ms
rtt min/avg/max/mdev = 0.065/0.087/0.110/0.024 ms
Je répondrai à chacune de vos questions ci-dessous, avec des références et des exemples. Ce n'est pas aussi simple que Oui ou Non.
- “Les adresses
127.x.x.x
sont-elles toutes restreintes à la machine locale?” Oui - “Toutes les adresses
127.x.x.x
sont-elles liées à l'interfacelo
” Oui - “Les adresses
127.x.x.x
sont-elles routées sur le réseau?” Non - “Toutes les adresses 127.x.x.x sont-elles identiques?” Non (selon le système d'exploitation)
127.0.0.0/8 - Ce bloc est assigné pour être utilisé comme adresse de bouclage hôte Internet. Un datagramme envoyé par un protocole de niveau supérieur à une adresse n'importe où dans ce bloc boucle à l'intérieur de l'hôte. Cela est ordinairment 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 pas légitimement sur aucun réseau nulle part. — RFC5735 Emphase ajoutée.
- “Est-ce que
127.0.0.2
est identique à127.0.0.1
?” NON Selon rfc5735 cela peut être le cas, mais ce n'est pas obligatoire. Il s'agit d'un comportement défini par l'implémentation. Consultez le manuel de votre système d'exploitation. Quoi qu'il en soit, toute la plage est réservée et ne doit pas être routée sur un réseau.
Alors que 127.0.0.1
à 127.255.255.254
sont toutes des adresses locales liées à l'interface lo
. Elles ne sont pas identiques. Vous pouvez utiliser chaque adresse pour lier un service différent sur le même port. Par exemple, 16 millions de serveurs web sur le port 80, uniquement accessibles depuis la machine locale (Si vous ne manquez pas de mémoire, ou d'autres ressources en premier)
Je viens de configurer un service docker pour se lier à 127.0.0.2:80
. J'ai ensuite ajouté un alias à /etc/hosts
. Maintenant je peux m'y connecter via http://monserveur
, mais pas via http://127.0.0.1
ou http://localhost
. Cependant, il n'est disponible que sur cette machine. Car il est seulement sur l'interface lo
.
J'ai ensuite configuré un autre service docker pour se lier à 127.0.0.3:80
, et un service python sur localhost:80
et un autre sur 127.0.0.4:80
.
Cela peut ne pas fonctionner sur tous les systèmes d'exploitation. Je suis sous Debian(9) Gnu/Linux, noyau Linux 4.9.0-3-amd64. Certains OS peuvent considérer toutes les adresses 127.0.0.1
à 127.255.255.254
de la même manière. Certains ne fonctionnent peut-être qu'avec 127.0.0.1
.
Notez que des services comme ping écouteront sur 0.0.0.0 (ipv4) donc ping 127.127.127.127
sera reçu par l'écouteur, car 127.127.127.127
est l'une de vos adresses. Cependant, si un service écoute sur une adresse spécifique, vous devez utiliser cette adresse spécifique pour vous y connecter (En fonction du système d'exploitation utilisé).
voir aussi
Pas une réponse générale exhaustive (il y en a déjà une). Cette réponse de la mienne montre un exemple où 127.0.0.2
a été utilisé pour résoudre le problème.
Extrait:
L'OP a tenté de tester un logiciel dans un cas où sa connexion à un serveur était rejetée. Cela a été fait sur le serveur par une règle temporaire iptables
qui rejette tout le trafic provenant de l'IP du client. Le client a immédiatement été capable de "voir" que la connexion était rejetée.
Le problème est apparu lorsque cette personne a déplacé le logiciel serveur sur la même machine que le client et a essayé d'utiliser l'interface de bouclage. La règle était configurée pour bloquer la communication depuis 127.0.0.1
mais l'information indiquant qu'une connexion était rejetée était soumise à la même règle et n'atteignait jamais le logiciel client qui restait bloqué (probablement jusqu'à expiration du délai).
La solution a été d'utiliser 127.0.0.2
comme adresse du serveur et de définir une règle qui rejette les connexions vers celle-ci. L'information concernant un rejet a été envoyée à 127.0.0.1
et a pu être transmise au logiciel client.