Używanie cmd
i ping
Windows dał mi następujące wyniki:
- Pingowanie „localhost”:
- Pingowanie „192.168.0.10” (lokalny adres IP):
Czy obie sytuacje nie są dokładnie takie same?
Mam na myśli pingowanie tego samego interfejsu, tej samej maszyny i tego samego adresu. Dlaczego otrzymuję tak różne wyniki?
EDYCJA: Oto mój ipconfig /all
ekran:
windows
ip-address
ping
localhost
Diogo
źródło
źródło
Odpowiedzi:
Nie pingujesz tego samego interfejsu , bez fizycznych interfejsów nadal masz „hosta lokalnego”.
Twoje
localhost
odnosi się do twojego komputera z jego „wewnętrznego” adresu IP, a nie z „zewnętrznych” adresów IP twojego komputera. Pakiety ping nie przechodzą przez 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
tak się dzieje::1
, podczas gdy tradycyjnie spodziewalibyśmy się, że rozwiąże to na adres IPv4127.0.0.1
. Zauważ, że.localhost
tradycyjnie jest to TLD (patrz RFC 2606 ), który wskazuje na adres IP pętli zwrotnej (dla IPv4, patrz RFC 3330 , szczególnie 127.0.0.0/8).Wyszukiwanie za
localhost
pomocąnslookup
daje nam:W związku z tym system Windows woli używać adresu IP z pętlą zwrotną IPv6
::1
(patrz RFC 2373 ), ponieważ jest wymieniony jako pierwszy.Okej, skąd to się bierze, spójrzmy na plik hosts.
Hmm, musimy spojrzeć na ustawienia DNS systemu Windows.
W tym artykule bazy wiedzy opisano ustawienie wpływające na preferencje systemu Windows, wyróżnione pogrubioną czcionką:
Co to jest ta tabela zasad prefiksów?
Ta tabela określa, które prefiksy mają pierwszeństwo przed innymi prefiksami podczas rozstrzygania DNS.
Ach, więc używając tej KB, moglibyśmy dodać tutaj wpisy, które wskazują, że IPv4 ma wyższy priorytet niż IPv6.
Uwaga: Nie ma powodu, aby zastępować to zachowanie, chyba że występują problemy z kompatybilnością. Zmiana tego ustawienia w naszym systemie Windows Server spowodowała uszkodzenie naszego serwera poczty, dlatego należy się z nim obchodzić ostrożnie ...
źródło
The ".localhost" TLD has traditionally been statically defined in host DNS implementations as having an A record pointing to the loop back IP address and is reserved for such use.
ZwróćTLD
uwagę na tradycyjnie zdefiniowane użycie i zwróć uwagę . W rzeczywistościping localhost.
prace, które potwierdzają, że jest to przynajmniej prawdą w kontekście tego pytania. Twoje ostatnie zdanie nie jest tym, co powiedział RFC, proszę zacytować, jeśli to „zapobiegnie przekształceniu go w TLD”, ponieważ według tego, co mówi , jest tradycyjnie TLD. W przeciwnym razie nie odniosą się do nichthe .localhost TLD
localhost
może być TLD, jeśli rzeczywisty serwer DNS odpowiada za to, ale ogólnie localhost jest ogólnie zdefiniowany jako nazwa hosta w / etc / hosts, w której nazwy hostów są sprawdzane przed próbą rozwiązania przez DNS. Jako takidig localhost
zwykle nie zwraca rekordu „A” dla 127.0.0.1 ani rekordu AAAA dla :: 1. Oznacza to, że RFC jest w błędzie, gdy mówitraditionally been statically defined in host DNS implementations
, ale raczej zwraca się przez usługę wyszukiwania nazw systemu, która nie zawsze korzysta z DNS.nslookup
zwraca rekordy. Tak więc, YMMV ...dig
zwraca rekordy A, AAAA i NSlocalhost
, w tym rekord organu dla:localhost. IN NS localhost.
Interfejs ten istnieje niezależnie od interfejsu Ethernet (ów).
Nawet bez komplikacji IPv6 masz dwa różne adresy.
Loopback IPv4 address: 127.0.0.1
Adres IPv4 interfejsu Ethernet: 192.168.0.10
Interfejs sprzężenia zwrotnego może znajdować się w innej warstwie oprogramowania, bardziej oddalonej od prawdziwego sprzętu. Wątpię, czy zależy to na przykład od konkretnego sterownika interfejsu Ethernet.
źródło
Localhost i twój adres IP to nie to samo.
Localhost to specjalny adres IP oprogramowania, który jest powiązany z twoim systemem. Localhost lub 127.0.0.1 to adres zwrotny pętli. Zawsze wskazuje na twój system i jest dostępny tylko z twojego komputera. To rutowanie odbywa się na poziomie systemu operacyjnego i na pewno nigdy nie opuszcza karty sieciowej ... Więc nie ma szans, aby trafiła do sieci ...
Pingowanie własnego adresu IP jest podobne, ale potencjalnie obejmuje cały stos sieciowy, ponieważ musi wykryć, że jest to Twój adres IP i odpowiednio go trasować ...
Efekt powinien być taki sam, ale mogą występować różnice.
Na przykład odłącz kabel sieciowy. Pinguj swój statyczny adres IP. Możesz nie otrzymać trasy do hosta lub inne błędy. Teraz ping localhost lub 127.0.0.1 i będzie działać.
źródło
Zdaję sobie sprawę z screenów, że to pytanie nie dotyczy Linuksa, ale być może stanowi użyteczny „przypadek”.
W tym systemie operacyjnym, jeśli pingujesz jeden z adresów lokalnego adaptera, jest on tłumaczony na urządzenie loopback (specjalny przypadek włamania). Oznacza to, że pakiety faktycznie trafiają do urządzenia pętli zwrotnej (co ma wszystkie implikacje, które możesz pomyśleć: na przykład z punktu widzenia zapory ogniowej te pakiety przychodzą na interfejs pętli zwrotnej i będą pasować do reguł dla tego interfejsu).
Urządzenie, do którego przypisany jest adres IP, nigdy nie zobaczy pakietów. (Jest to dobre, ponieważ nie zrobiłoby tego dobrze z tymi pakietami: chciałby wysłać frajerów na zewnątrz.)
Jeśli jednak interfejs, który przechowuje ten adres IP, ulegnie awarii, utracisz to połączenie. Mapowanie do pętli zwrotnej przestanie działać.
Innymi słowy, wykonalnym rozwiązaniem jest uznanie tych lokalnych adresów za aliasy dla urządzenia zwrotnego.
Odnośniki do kodu:
http://lxr.linux.no/#linux+v3.3.2/net/ipv4/route.c#L2623
Spójrz na funkcję
ip_route_output_slow
. Wywołuje tofib_lookup
, a jeśli ta funkcja zwróci kodRTN_LOCAL
,dev_out
zostanie przepisane do pętli zwrotnej:http://lxr.linux.no/#linux+v3.3.2/net/ipv4/route.c#L2769
źródło
Wygląda na to, że alias „Localhost” przekształca się w pętlę zwrotną IPv6, a kiedy jawnie używasz adresu IPv4, oczywiście tak nie jest.
źródło
@ebwhite ma rację co do tego.
Teraz może być tak, że masz skonfigurowane Teredo (nie mogę rozpoznać po twoim zrzucie ekranu, lepiej jest przesłać go do pliku tekstowego i wkleić cały wynik) - zachowanie localhost będącego IPv6 jest zgodne z systemami na moim Tylko sieć IPv4 z zainstalowanym teredo, ale systemy bez niego zachowują się tak, jak się spodziewasz
127.0.0.1
podczas pingowanialocalhost
. Przetestowałem to z Windows XP i muszę zobaczyć, co robią moje systemy Windows 7 i zaktualizować pytanie.Generalnie systemy domyślnie IPv6 jeśli IPv6 jest dostępna tak, system działa tak jak powinien, po konstrukcji .
źródło