Do czego służy adres IP 127.0.0.2?

39

Korzystam z przykładu w hiredis, który używa adresu „127.0.0.2” jako adresu IP serwera redis i działa poprawnie. W rzeczywistości serwer Redis działa na tym samym komputerze. Wiem, że „127.0.0.1” to adres IP „lo”, ale co powiesz na „127.0.0.2”? Czy to to samo, co „127.0.0.1”?


źródło

Odpowiedzi:

37

Tak:

Standardy sieciowe IPv4 rezerwują cały blok adresu 127.0.0.0/8 na potrzeby sprzężenia zwrotnego. Oznacza to, że każdy pakiet wysłany na jeden z 16 777 214 adresów (od 127.0.0.1 do 127.255.255.254) jest zapętlany z powrotem. IPv6 ma tylko jeden adres: :: 1.

Różne standardy Zespołu ds. Inżynierii Internetowej (IETF) rezerwują w tym celu blok adresu IPv4 127.0.0.0/8 w notacji CIDR i adres IPv6 :: 1. Najczęściej stosowanym adresem IPv4 jest 127.0.0.1. Zazwyczaj te adresy sprzężenia zwrotnego są odwzorowywane na nazwy hosta, host lokalny lub sprzężenie zwrotne.

lub z samego RFC:

127.0.0.0/8 - Blok ten jest przeznaczony do użycia jako adres zwrotny hosta internetowego. Datagram wysłany przez protokół wyższego poziomu na adres w dowolnym miejscu w tym bloku powinien zapętlić się z powrotem w hoście. Zwykle jest to realizowane przy użyciu tylko 127.0.0.1/32 dla pętli zwrotnej, ale żadne adresy w tym bloku nigdy nie powinny pojawiać się w żadnej sieci w dowolnym miejscu [RFC1700, strona 5].

Dla zabawy spróbuj pingować:

$ 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 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.065/0.087/0.110/0.024 ms
icyrock.com
źródło
Od tego czasu strona Wikipedii uległa zmianie i teraz mówi „chociaż mapowany jest na nią dowolny adres z zakresu od 127.0.0.1 do 127.255.255.254”, co stanowi sedno tej odpowiedzi w bezpośrednim konflikcie z Wikipedią.
SilverSkin,
6
@SilverSkin Czy mógłbyś wyjaśnić, co masz na myśli? Jedyną różnicą między tym, co jest w odpowiedzi a tym, co jest teraz w Wikipedii, jest to, że (poprawnie) wykluczyli 127.0.0.0 i 127.255.255.255, które są adresami sieci / emisji. Istota jest nadal taka sama - 127.xxx == 127.0.0.1 (z wyjątkiem 127.0.0.0 i 127.255.255.255, które są oczekiwane w dowolnej sieci / 8).
icyrock.com
1
Więc nie ma różnicy między wiązaniem do 127.0.0.124 a wiązaniem do 127.0.0.124? Dlaczego więc wynajęty ma problem z 127.0.0.2, jeśli jest to ten sam adres? Co się stanie, jeśli wyślesz wiadomość na adres 127.0.0.0?
CMCDragonkai
7
Trzeba wspomnieć, że nie jest tak samo w OS X, który tylko 127.0.0.1 kieruje do pętli zwrotnej. Zobacz tutaj .
Wenbing Li
6
@CMCDragonkai 127.0.0.1 i 127.0.0.124 mogą znajdować się na tym samym interfejsie, ale nie mają tego samego adresu. Ktoś może użyć niezwykłego adresu IP, takiego jak 127.0.0.2, jeśli chce się użyć konfiguracji usługi na wspólnym porcie i nie ingerować w inne usługi, które mogą nasłuchiwać na tym samym porcie na 127.0.0.1
Keith Reynolds
6
  • „Czy wszystkie 127.x.x.xadresy są ograniczone do komputera lokalnego?” Tak
  • „Czy wszystkie 127.x.x.xadresy są powiązane z lointerfejsem” Tak
  • „Czy 127.x.x.xadresy są kierowane przez sieć?” Nie

127.0.0.0/8 - Blok ten jest przeznaczony do użycia jako adres zwrotny hosta internetowego. Datagram wysłany przez protokół wyższego poziomu na
adres w dowolnym miejscu w tym bloku zapętla się z powrotem w hoście. Jest
to zwykle realizowane przy użyciu tylko 127.0.0.1/32 dla sprzężenia zwrotnego. Jak
opisano w [RFC1122], sekcja 3.2.1.3, adresy w całym bloku 127.0.0.0/8 nie pojawiają się legalnie w żadnej sieci. - RFC5735

  • „Czy to 127.0.0.2to samo co 127.0.0.1?” NIE

Choć 127.0.0.1na 127.255.255.254to wszystkie lokalne adresy związane interfejs lo. One nie są takie same. Możesz użyć każdego adresu, aby powiązać inną usługę z tym samym portem. Np. 16 milionów serwerów WWW na porcie 80, dostępne tylko z komputera lokalnego (jeśli nie zabraknie pamięci lub innych zasobów najpierw)

Właśnie skonfigurowałem usługę dokowania do połączenia 127.0.0.2:80. Następnie dodałem alias do /etc/hosts. Teraz mogę się z nim połączyć przez http://myserver, ale nie przez http://127.0.0.1lub http://localhost. Jest on jednak dostępny tylko dla tego komputera. Tak jak jest tylko w lointerfejsie.

Następnie skonfigurowałem kolejną usługę dokowania, z którą można się połączyć 127.0.0.3:80, oraz usługę python włączoną localhost:80i inną włączoną 127.0.0.4:80.


To może nie działać we wszystkich systemach operacyjnych. Używam Debiana (9) Gnu / Linux, jądro Linuksa 4.9.0-3-amd64. Niektóre systemy operacyjne mogą traktować wszystkie adresy 127.0.0.1127.255.255.254tak samo. Niektóre mogą tylko współpracować 127.0.0.1.

Zobacz też

ctrl-alt-delor
źródło
Daj nam kontynuować tę dyskusję w czacie .
ctrl-alt-delor
Zajęło mi to około godziny badań, ale udało mi się w końcu zrozumieć, co próbujesz przekazać. Zaktualizowałem cytat z artykułu z Wikipedii w zaakceptowanej odpowiedzi. Ponieważ cytowane oświadczenie zmieniało się na przestrzeni lat, zacytowałem inne oświadczenie, aby przywrócić oryginalne informacje zawarte w odpowiedzi.
Ramhound,
1

Nie jest to wyczerpująca ogólna odpowiedź (już istnieje). Ta moja odpowiedź pokazuje przykład, w którym 127.0.0.2użyto rozwiązania problemu.

Wyciąg:

OP próbował tam przetestować niektóre oprogramowanie w przypadku odrzucenia połączenia z serwerem. Dokonano tego na serwerze za pomocą tymczasowej iptablesreguły, która odrzuca cały ruch z adresu IP klienta. Klient natychmiast „zobaczył”, że połączenie zostało odrzucone.

Problem pojawił się, gdy ta osoba przeniosła oprogramowanie serwera na tę samą maszynę co klient i próbowała użyć interfejsu sprzężenia zwrotnego. Reguła została ustawiona tak, aby blokować komunikację, 127.0.0.1ale informacje, które zostało odrzucone, przeszły tę samą regułę i nigdy nie dotarły do ​​oprogramowania klienckiego, które zawiesiło się (prawdopodobnie do przekroczenia limitu czasu).

Rozwiązaniem było użycie 127.0.0.2adresu serwera i ustawienie reguły, która odrzuca połączenia z nim. Informacja o odrzuceniu trafiła do 127.0.0.1oprogramowania klienckiego.

Kamil Maciorowski
źródło