Skip to content

Jaka jest różnica między Locahost a lokalnym adresem IP?

25 de lipiec de 2021
sshot5141fabf45b77

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”:

1627203568 989 Jaka jest roznica miedzy Locahost a lokalnym adresem IP

Pingowanie „192.168.0.10” (lokalny adres IP):

1627203568 209 Jaka jest roznica miedzy Locahost a lokalnym adresem 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ójlocalhostjest 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ć, dlaczegolocalhostpostanawia::1, podczas gdy tradycyjnie oczekiwalibyśmy, że zostanie rozwiązany na adres IPv4127.0.0.1. Zauważ, że.localhostjest 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ęlocalhostza pomocąnslookupdaje 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ą:

  1. W Edytorze rejestru zlokalizuj, a następnie kliknij następujący podklucz rejestru:

    HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpip6Parameters

  2. 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:
    1. W menu Edycja wskaż polecenie Nowy, a następnie kliknij Wartość DWORD (32-bitowa).
    2. Wpisz DisabledComponents, a następnie naciśnij klawisz ENTER.
    3. Kliknij dwukrotnie DisabledComponents.
  3. 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:
    • Rodzaj0aby włączyć wszystkie składniki IPv6. (ustawienie domyślne Windows)
    • Rodzaj0xffffffffaby 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.
    • Rodzaj0x20preferować IPv4 zamiast IPv6, modyfikując wpisy w tabeli zasad prefiksów.
    • Rodzaj0x10aby wyłączyć IPv6 na wszystkich interfejsach nietunelowych (zarówno w sieci LAN, jak i protokole Point-to-Point) [PPP] interfejsy).
    • Rodzaj0x01aby wyłączyć IPv6 na wszystkich interfejsach tuneli. Należą do nich Intra-Site Automatic Tunnel Addressing Protocol (ISATAP), 6to4 i Teredo.
    • Rodzaj0x11aby wyłączyć wszystkie interfejsy IPv6 z wyjątkiem interfejsu pętli zwrotnej IPv6.
  4. Uruchom ponownie komputer, aby to ustawienie zaczęło obowiązywać.

Co to jest ta tabela zasad prefiksów?

netsh interface ipv6 show prefixpolicies(lubprefixpolicywe 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.

Czy ten post był pomocny?