
Jeśli dużo majstrujesz w sieci, konfigurujesz aplikacje oparte na sieci LAN i narzędzia serwerowe lub po prostu jesteś ciekawy, prawdopodobnie zauważyłeś różnicę między lokalnym hostem a lokalnym adresem IP. Czytaj dalej, aby poznać różnice.
Dzisiejsza sesja pytań i odpowiedzi przychodzi do nas dzięki uprzejmości SuperUser — pododdziału Stack Exchange, społecznościowej grupy witryn internetowych z pytaniami i odpowiedziami.
Pytanie
Czytnik SuperUser Diogo chce wiedzieć, dlaczego polecenie ping traktuje hosta lokalnego i lokalny adres IP inaczej, gdy na powierzchni wydają się być tym samym:
Użycie cmd i ping w systemie Windows dało mi następujące wyniki:
Pingowanie „localhost”:
Pingowanie „192.168.0.10” (lokalny adres IP):
Czy obie sytuacje nie są dokładnie takie same?
To znaczy pinguję ten sam interfejs, tę samą maszynę i ten sam adres. Dlaczego otrzymuję tak różne wyniki?
Oczywiście jest jakaś różnica, ale co dokładnie się dzieje, gdy przełączasz się między nimi?
Odpowiedź
Współtwórca SuperUser Tom Wijsman oferuje następujący wgląd w subtelne różnice między nimi:
Nie pingujesz tego samego interfejsu, bez żadnych fizycznych interfejsów nadal masz „lokalny host”.
Twój
localhost
jest używany w odniesieniu do komputera z jego „wewnętrznego” adresu IP, a nie z żadnego „zewnętrznego” adresu IP komputera. Tak więc pakiety ping nie przechodzą przez żaden fizyczny interfejs sieciowy; tylko przez interfejs wirtualnej pętli zwrotnej, który bezpośrednio wysyła pakiety z portu do portu bez żadnych fizycznych przeskoków.Nadal możesz się zastanawiać, dlaczego
localhost
postanawia::1
, podczas gdy tradycyjnie oczekiwalibyśmy, że zostanie rozwiązany na adres IPv4127.0.0.1
. Zauważ, że.localhost
jest tradycyjnie domeną TLD (patrzRFC 2606), który wskazuje z powrotem na adres IP pętli zwrotnej (dla IPv4, patrzRFC 3330, zwłaszcza 127.0.0.0/8).Patrząc w górę
localhost
za pomocąnslookup
daje nam:
nslookup localhost
...
Name: localhost
Addresses: ::1
127.0.0.1
Dlatego system Windows woli używać adresu IP pętli zwrotnej IPv6
::1
(zobaczyćRFC 2373), ponieważ jest wymieniony jako pierwszy.Dobra, więc skąd to się bierze, spójrzmy na plik hosts.
type %WINDIR%System32DriversEtcHosts
...
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
...
Hmm, musimy przyjrzeć się ustawieniom DNS systemu Windows.
Ten artykuł KBinformuje nas o ustawieniu, które ma wpływ na preferencje systemu Windows, podkreślone pogrubioną czcionką:
- W Edytorze rejestru zlokalizuj, a następnie kliknij następujący podklucz rejestru:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpip6Parameters
- Kliknij dwukrotnie DisabledComponents, aby zmodyfikować wpis DisabledComponents. Uwaga: Jeśli wpis DisabledComponents jest niedostępny, musisz go utworzyć. Aby to zrobić, wykonaj następujące kroki:
- W menu Edycja wskaż polecenie Nowy, a następnie kliknij Wartość DWORD (32-bitowa).
- Wpisz DisabledComponents, a następnie naciśnij klawisz ENTER.
- Kliknij dwukrotnie DisabledComponents.
- Wpisz dowolną z następujących wartości w polu Dane wartości:, aby skonfigurować protokół IPv6 do żądanego stanu, a następnie kliknij przycisk OK:
- Rodzaj
0
aby włączyć wszystkie składniki IPv6. (ustawienie domyślne Windows)- Rodzaj
0xffffffff
aby wyłączyć wszystkie składniki IPv6, z wyjątkiem interfejsu pętli zwrotnej IPv6. Ta wartość konfiguruje również system Windows tak, aby preferował używanie protokołu internetowego w wersji 4 (IPv4) zamiast IPv6, modyfikując wpisy w tabeli zasad prefiksów. Aby uzyskać więcej informacji, zobacz Wybór adresu źródłowego i docelowego.- Rodzaj
0x20
preferować IPv4 zamiast IPv6, modyfikując wpisy w tabeli zasad prefiksów.- Rodzaj
0x10
aby wyłączyć IPv6 na wszystkich interfejsach nietunelowych (zarówno w sieci LAN, jak i protokole Point-to-Point) [PPP] interfejsy).- Rodzaj
0x01
aby wyłączyć IPv6 na wszystkich interfejsach tuneli. Należą do nich Intra-Site Automatic Tunnel Addressing Protocol (ISATAP), 6to4 i Teredo.- Rodzaj
0x11
aby wyłączyć wszystkie interfejsy IPv6 z wyjątkiem interfejsu pętli zwrotnej IPv6.- Uruchom ponownie komputer, aby to ustawienie zaczęło obowiązywać.
Co to jest ta tabela zasad prefiksów?
netsh interface ipv6 show prefixpolicies
(lubprefixpolicy
we wcześniejszych wersjach)
Precedence Label Prefix
---------- ----- --------------------------------
50 0 ::1/128
45 13 fc00::/7
40 1 ::/0
10 4 ::ffff:0:0/96
7 14 2002::/16
5 5 2001::/32
1 11 fec0::/10
1 12 3ffe::/16
1 10 ::/96
Ta tabela określa, które prefiksy mają pierwszeństwo przed innymi prefiksami podczas rozwiązywania DNS.
Ach, więc używając tego KB, moglibyśmy dodać tutaj wpisy oznaczające, że IPv4 ma wyższy priorytet niż IPv6.
Notatka:Nie ma powodu, aby zmienić to zachowanie, chyba że występują problemy ze zgodnością. Zmiana tego ustawienia na naszym Windows Server zepsuła nasz serwer pocztowy, więc należy obchodzić się z tym ostrożnie…
Nie ma nic, co lubimy bardziej niż dokładną i pouczającą odpowiedź z powiązanymi dokumentami wsparcia. Najwyraźniej lokalny host i lokalny adres IP są odrębnymi jednostkami, służą różnym celom, a teraz wszyscy wiemy, dlaczego.
Masz coś do dodania do wyjaśnienia? Dźwięk w komentarzach. Chcesz przeczytać więcej odpowiedzi od innych doświadczonych technologicznie użytkowników Stack Exchange?Sprawdź pełny wątek dyskusji tutaj.