Czy Ping kiedykolwiek używa pamięci podręcznej DNS?


Mam kilka pytań.
Po pierwsze, dziś rano biegałem
       ping
vs
       google.com
i podał mi adres

216.58.220.14

.
Co dziwnego się stało: w dowolnym momencie po pierwszym pingowaniu wszystkie próby ping zakończyły się tym samym adresem, tj.

216.58.220.14

(Spodziewałem się innego adresu przez co najmniej chwilę, biorąc pod uwagę, że Google zrównoważy ich obciążenie)
Więc proszę mojego znajomego (kolegę) siedzącego obok mnie (w tej samej sieci),
       ping google.com
i tak jak się spodziewałem, zwrócił inne adresy.

Pytanie 1:

Czy ping używa pamięci podręcznej DNS komputera.

Pytanie 2:

Jak wyświetlić rekordy pamięci podręcznej DNS Linux (Ubuntu).
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Która baza danych zostanie użyta przez system do odzyskania nazwy hosta w nowoczesnym systemie Linux, jest zdefiniowana w pliku nsswitch.conf.

http://www.oreilly.com/openboo ... .html
http://www.oreilly.com/openboo ... .html
Biblioteka resolverów

Termin konwerter nie odnosi się do specjalnej aplikacji, ale do biblioteki konwertera. Jest to zestaw funkcji, które można znaleźć w bibliotece standardowej C. Centralne procedury to gethostbyname (2) i gethostbyaddr (2), które szukają wszystkich adresów IP powiązanych z nazwą hosta i odwrotnie. Można je skonfigurować tak, aby po prostu wyszukiwały informacje w hostach, wysyłały zapytania do szeregu serwerów nazw DNS lub korzystały z bazy danych hostów sieciowych usług informacyjnych (NIS).
Funkcje rozpoznawania odczytują pliki konfiguracyjne, gdy są wywoływane. Na podstawie tych plików konfiguracyjnych określają, które bazy danych mają być przeszukiwane, w jakiej kolejności oraz inne szczegóły związane ze sposobem konfigurowania środowiska. Stara standardowa biblioteka Linuksa, libc, używała/etc/host.conf jako głównego pliku konfiguracyjnego, ale wersja 2 standardowej biblioteki GNU, glibc, używa/etc/nsswitch.conf.

Zakładając brak wpisu w google.com
/etc/hosts
plik, po każdym uruchomieniu polecenia ping skontaktuje się z serwerem DNS w celu ustalenia nazwy hosta. Wszystko zależy więc od tego, w jaki sposób serwer DNS zwraca żądanie. Przetestowałem tutaj testową maszynę wirtualną z systemem Ubuntu 14.04 i używającym serwera DNS Google (8.8.8.8), a oto wyniki polecenia ping i odpowiadające mu przechwytywanie tcpdump:

Pierwszy ping i odpowiadający mu tcpdump:
>
root@testvm:/home/testuser# ping google.com
PING google.com (80.149.20.99) 56(84) bytes of data.
64 bytes from 80.149.20.99: icmp_seq=1 ttl=59 time=19.0 ms
64 bytes from 80.149.20.99: icmp_seq=2 ttl=59 time=18.7 ms
64 bytes from 80.149.20.99: icmp_seq=3 ttl=59 time=20.4 ms
64 bytes from 80.149.20.99: icmp_seq=4 ttl=59 time=18.7 ms
^C
--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 18.733/19.261/20.467/0.715 ms

11:23:10.439152 IP 10.11.1.33.45008 > google-public-dns-a.google.com.domain: 48602+ A? google.com. (28)
11:23:10.482544 IP google-public-dns-a.google.com.domain > 10.11.1.33.45008: 48602 16/0/0 A 80.149.20.99, A 80.149.20.88, A 80.149.20.108, A 80.149.20.93, A 80.149.20.104, A 80.149.20.94, A 80.149.20.114, A 80.149.20.103, A 80.149.20.98, A 80.149.20.89, A 80.149.20.113, A 80.149.20.119, A 80.149.20.109, A 80.149.20.118, A 80.149.20.123, A 80.149.20.84 (284)
11:23:10.483370 IP 10.11.1.33 > 80.149.20.99: ICMP echo request, id 2397, seq 1, length 64
11:23:10.502433 IP 80.149.20.99 > 10.11.1.33: ICMP echo reply, id 2397, seq 1, length 64


Drugi ping i odpowiadający mu tcpdump:
>
root@testvm:/home/testuser# ping google.com
PING google.com (80.149.20.98) 56(84) bytes of data.
64 bytes from 80.149.20.98: icmp_seq=1 ttl=59 time=18.1 ms
64 bytes from 80.149.20.98: icmp_seq=2 ttl=59 time=18.4 ms
^C
--- google.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 18.173/18.326/18.480/0.204 ms

11:25:34.118450 IP 10.11.1.33.51623 > google-public-dns-a.google.com.domain: 60862+ A? google.com. (28)
11:25:34.146881 IP google-public-dns-a.google.com.domain > 10.11.1.33.51623: 60862 16/0/0 A 80.149.20.98, A 80.149.20.84, A 80.149.20.89, A 80.149.20.118, A 80.149.20.109, A 80.149.20.114, A 80.149.20.103, A 80.149.20.113, A 80.149.20.93, A 80.149.20.119, A 80.149.20.104, A 80.149.20.108, A 80.149.20.123, A 80.149.20.88, A 80.149.20.99, A 80.149.20.94 (284)
11:25:34.147512 IP 10.11.1.33 > 80.149.20.98: ICMP echo request, id 2408, seq 1, length 64
11:25:34.165675 IP 80.149.20.98 > 10.11.1.33: ICMP echo reply, id 2408, seq 1, length 64

Oto kilka interesujących punktów:
  • ping wykonuje wyszukiwanie DNS (rekord A) na skonfigurowanym serwerze DNS (ponieważ w pliku/etc/hosts nie ma wpisu dla tego hosta) za każdym razem, gdy polecenie jest uruchamiane.
  • Serwer DNS Google zwraca wiele adresów IP w innej kolejności.
  • Narzędzie ping używa pierwszego adresu IP zwróconego przez serwer DNS i powtarza go.

Zatem sam proces pingowania nie jest buforowany i wszystko zależy od tego, jak odpowiada serwer DNS. Może się zdarzyć, że żądany serwer DNS zwróci wartości z pamięci podręcznej lub te same wyniki, wtedy ping również użyje tego samego adresu IP.
Innym ważnym czynnikiem jest (jak wspomniano powyżej)
/etc/nsswitch.conf
plik informujący retrievera, której bazy danych szukać iw jakiej kolejności. Oto odpowiednia zawartość z testowej maszyny wirtualnej:
hosts:          files dns

Powyższe mówi systemowi, aby użył pliku
/etc/hosts
najpierw, a jeśli nie zostanie znaleziony, serwer DNS rozpozna nazwę hosta. W takim przypadku wpis w pliku/etc/hosts będzie miał pierwszeństwo przed wpisem dns. Więcej na ten temat tutaj:

Usługa nazw i konfiguracja konwertera
http://www.oreilly.com/openboo ... .html
Kolejna ciekawa lektura dotycząca środowiska Windows:

Dylemat rozpoznawania nazw za pomocą PING vs NSLOOKUP
http://blogs.msdn.com/b/nitins ... .aspx
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

  • Nie, ale generalnie zależy to od determinacji. Po wpisaniu polecenia rekord DNS jest tłumaczony na adres IP (tak, zależy to od pamięci podręcznej), a następnie protokół poleceń ping (ICMP) działa z adresem IP, a nie z nazwą. Oznacza to, że jeśli nastąpi zmiana DNS podczas ciągłego echa miejsca docelowego, ta zmiana nie wpłynie na wynik. Pamięć podręczna również nie ma tutaj znaczenia.
  • Ubuntu domyślnie nie obsługuje DNS. Jednak programem obsługi jest demon NSCD.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się