Jaka jest różnica między lokalizacją a lokalnym adresem IP?
Jeśli robisz dużo majsterkowania sieciowego, konfigurujesz aplikacje sieciowe i narzędzia serwerowe lub po prostu ciekawi, zauważyłeś, że istnieje różnica między localhost a lokalnym adresem IP. Czytaj dalej, aby poznać różnice.
Dzisiejsza sesja pytań i odpowiedzi przychodzi do nas dzięki uprzejmości SuperUser - poddziału Stack Exchange, opartego na społecznościach grupowania witryn z pytaniami i odpowiedziami.
Pytanie
Czytnik SuperUser Diogo chce wiedzieć, dlaczego polecenie ping traktuje localhost i lokalny adres IP inaczej, gdy na powierzchni wydają się być tym samym:
Używanie poleceń 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 są dokładnie takie same?
Mam na myśli, że 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 dzieje się po przełączeniu między tymi dwoma?
Odpowiedź
Współpracownik SuperUser Tom Wijsman oferuje następujące wgląd w subtelne różnice między tymi dwoma:
Nie pingujesz tego samego interfejsu, bez fizycznych interfejsów nadal masz "hosta lokalnego".
Twój
Lokalny Gospodarz
jest używany w odniesieniu do komputera z "wewnętrznego" adresu IP, a nie z "zewnętrznych" adresów IP komputera. Tak więc pakiety ping nie przechodzą przez żaden fizyczny interfejs sieciowy; tylko poprzez interfejs zwrotny wirtualnej pętli, która bezpośrednio wysyła pakiety z portu do portu bez fizycznych przeskoków.Nadal możesz się zastanawiać dlaczego
Lokalny Gospodarz
postanawia:: 1
, podczas gdy tradycyjnie spodziewalibyśmy się, że rozwiąże on adres IPv4127.0.0.1
. Zauważ, że.Lokalny Gospodarz
jest tradycyjnie TLD (patrz RFC 2606), który wskazuje powrót do adresu IP pętli (dla IPv4, patrz RFC 3330, szczególnie 127.0.0.0/8).Patrząc w górę
Lokalny Gospodarz
za pomocąnslookup
daje nam:
nslookup localhost
... Nazwa: localhost Adresy: :: 1 127.0.0.1
W związku z tym system Windows woli używać adresu IP z powrotem do pętli IPv6
:: 1
(patrz dokument RFC 2373), ponieważ jest on wymieniony jako pierwszy.Okay, więc skąd się bierze, spójrzmy na plik hosts.
wpisz% WINDIR% \ System32 \ Drivers \ Etc \ Hosts
... Rozpoznawanie nazw # localhost jest obsługiwane w samym DNS. # 127.0.0.1 localhost # :: 1 localhost ...
Hmm, musimy przyjrzeć się ustawieniom DNS systemu Windows.
W tym artykule z bazy wiedzy podano informacje o ustawieniu wpływającym na preferencje systemu Windows, wyróżnione pogrubieniem:
- W Edytorze rejestru zlokalizuj, a następnie kliknij następujący podklucz rejestru:
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip6 \ Parameters
- Kliknij dwukrotnie pozycję DisabledComponents, aby zmodyfikować pozycję 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 pozycję 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 komponenty IPv6. (Domyślne ustawienie Windows)- Rodzaj
0xffffffff
aby wyłączyć wszystkie składniki IPv6, z wyjątkiem interfejsu sprzężenia zwrotnego IPv6. Ta wartość powoduje również skonfigurowanie systemu Windows do preferowania używania protokołu IP w wersji 4 (IPv4) przez IPv6 przez modyfikowanie wpisów w tabeli zasad przedrostków. Aby uzyskać więcej informacji, zobacz Wybór źródła i adresu docelowego.- Rodzaj
0x20
preferować IPv4 przez IPv6, modyfikując wpisy w tabeli strategii przedrostków.- Rodzaj
0x10
wyłączyć IPv6 na wszystkich interfejsach typu "nontunnel" (zarówno w interfejsach LAN, jak i PPP).- Rodzaj
0x01
aby wyłączyć IPv6 na wszystkich interfejsach tunelowych. Należą do nich automatyczny protokół adresowania tuneli wewnątrzzakładowych (ISATAP), 6to4 i Teredo.- Rodzaj
0x11
aby wyłączyć wszystkie interfejsy IPv6 z wyjątkiem interfejsu sprzężenia zwrotnego IPv6.- Uruchom ponownie komputer, aby to ustawienie zaczęło obowiązywać.
Co to jest ta tabela polityk przedrostków?
Interfejs netsh ipv6 pokazuje prefixpolicies
(lubprefixpolicy
w starszych wersjach)Prefiks etykiety Prefiks ---------- ----- -------------------------------- 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 decyduje, które prefiksy mają pierwszeństwo przed innymi prefiksami podczas rozwiązywania DNS.
Ah, więc używając tego KB możemy dodać tutaj wpisy, które oznaczają, że IPv4 ma wyższy priorytet niż IPv6.
Uwaga: Nie ma powodu, aby zastępować to zachowanie, chyba że masz problemy ze zgodnością. Zmiana tego ustawienia na naszym serwerze Windows zepsuła nasz serwer pocztowy, więc należy obchodzić się z nim ostrożnie ...
Nie ma nic lepszego niż dokładna i pouczająca odpowiedź, której brakuje w powiązanych dokumentach pomocniczych. Oczywiście localhost i lokalny adres IP to odrębne jednostki, służą różnym celom, a teraz wszyscy wiemy dlaczego.
Czy masz coś do dodania do wyjaśnienia? Dźwięk w komentarzach. Chcesz przeczytać więcej odpowiedzi od innych użytkowników Stack Exchange, którzy znają się na technologii? Sprawdź cały wątek dyskusji tutaj.