Jak działa kwerenda DNS
Kiedy klient DNS chce wyszukać nazwę używaną w programie, kieruje kwerendę do serwera DNS w celu rozpoznania nazwy. Każdy komunikat kwerendy wysyłany przez klienta zawiera trzy elementy informacji określające pytanie, na które serwer ma odpowiedzieć:
-
Nazwa domeny DNS, podana w postaci pełnej nazwy domeny (FQDN)
-
Typ kwerendy, który może albo określać rekord zasobu według typu, albo wyspecjalizowany typ kwerendy
-
Klasa nazwy domeny DNS.
Dla serwerów DNS systemu Windows klasa powinna być zawsze określona jako klasa Internet (IN).
Nazwą może być na przykład nazwa FQDN komputera, taka jak „host_a.przyklad.microsoft.com.”, a typem kwerendy — wyszukiwanie rekordu zasobu adresu (A) według tej nazwy. Kwerendę DNS można sobie wyobrazić jako operację zadawania przez klienta dwuczęściowego pytania serwerowi, na przykład „Czy masz jakieś rekordy zasobów A komputera o nazwie 'nazwa-hosta.przyklad.microsoft.com.'?” Kiedy klient odbiera odpowiedź od serwera, odczytuje i interpretuje przysłany rekord zasobu A, znajdując adres IP komputera, o który pytał według nazwy.
Kwerendy DNS są rozwiązywane na kilka różnych sposobów. Klient może czasami odpowiedzieć na kwerendę lokalnie, korzystając z zawartych w pamięci podręcznej informacji otrzymanych z poprzedniej kwerendy. Serwer DNS może odpowiadać na kwerendy przy użyciu zawartości swojej własnej pamięci podręcznej rekordów zasobów. Może także wysłać kwerendę do innych serwerów DNS lub skontaktować się z nimi w imieniu klienta zgłaszającego żądanie, w pełni rozpoznać nazwę, a następnie wysłać odpowiedź z powrotem do klienta. Ten proces jest nazywany rekursją.
Ponadto w celu rozpoznania nazwy klient może sam próbować skontaktować się z dodatkowymi serwerami DNS. W takim przypadku używa oddzielnych i dodatkowych kwerend, formułowanych na podstawie odwołań zawartych w odpowiedziach otrzymanych od serwerów. Ten proces jest nazywany iteracją.
Ogólnie przetwarzanie kwerendy DNS jest wykonywane w dwóch częściach:
-
Kwerenda o nazwę rozpoczyna się na komputerze klienckim i jest przekazywana do programu rozpoznawania nazw, którym jest usługa klienta DNS, w celu rozwiązania.
-
Kiedy kwerenda nie może być rozwiązana lokalnie, zostają wysłane kwerendy do odpowiednich serwerów DNS.
Oba procesy omówiono szczegółowo w kolejnych sekcjach.
Część 1. Lokalny program rozpoznawania nazw
Na poniższym rysunku omówiono kompletny proces realizacji kwerendy DNS.
.gif)
Jak widać we wstępnych krokach procesu wykonywania kwerendy, nazwa domeny DNS jest używana w programie na komputerze lokalnym. Następnie do usługi klienta DNS jest przekazywane żądanie rozwiązania kwerendy przy użyciu informacji przechowywanych w lokalnej pamięci podręcznej. Jeśli poszukiwana nazwa może być rozpoznana, na kwerendę jest udzielana odpowiedź i proces się kończy.
Pamięć podręczna lokalnego programu rozpoznawania nazw może zawierać informacje o nazwie otrzymane z dwóch źródeł:
-
Jeśli plik Hosts jest skonfigurowany lokalnie, wszelkie mapowania nazw na adresy prowadzące z tego pliku są wstępnie ładowane do pamięci podręcznej w czasie uruchamiania usługi klienta DNS.
-
Rekordy zasobów otrzymane w odpowiedziach na poprzednie kwerendy DNS są dodawane do pamięci podręcznej i przechowywane przez pewien czas.
Jeśli w pamięci podręcznej nie ma odpowiednika parametru kwerendy, proces rozwiązywania jest kontynuowany przez klienta, który wysyła kwerendę do serwera DNS.
Część 2. Wykonywanie kwerendy na serwerze DNS
Jak pokazano na poprzednim rysunku, klient wysyła kwerendę do preferowanego serwera DNS. Faktyczny serwer użyty w czasie wstępnej części procesu wykonywania kwerendy klient/serwer jest wybierany z listy globalnej. Aby uzyskać więcej informacji na temat kompilacji i aktualizacji tej globalnej listy, zobacz Funkcje klienta.
Kiedy serwer DNS odbiera kwerendę, najpierw sprawdza, czy może na nią odpowiedzieć autorytatywnie na podstawie informacji rekordu zasobu zawartego w strefie lokalnie skonfigurowanej na serwerze. Jeśli poszukiwana nazwa jest zgodna z odpowiednim rekordem zasobu znajdującym się wśród lokalnych informacji strefy, serwer odpowiada autorytatywnie, wykorzystując te informacje do rozpoznania poszukiwanej nazwy.
Jeśli w strefie nie ma informacji odpowiadających poszukiwanej nazwie, serwer sprawdza, czy może rozpoznać nazwę, używając buforowanych lokalnie informacji uzyskanych z poprzednich kwerend. Jeśli odpowiednik zostanie znaleziony w pamięci podręcznej, serwer odpowiada przy użyciu tych informacji. Jeśli preferowany serwer może odpowiedzieć żądającemu klientowi pozytywnie na podstawie zawartości swej pamięci podręcznej, kwerenda się kończy.
Jeśli poszukiwana nazwa nie ma odpowiednika na preferowanym serwerze ani w jego pamięci podręcznej, ani wśród informacji strefy, proces wykonywania kwerendy może być kontynuowany z zastosowaniem rekursji, aż do pełnego rozpoznania nazwy. Wymaga to pomocy ze strony innych serwerów DNS. Domyślnie przed odesłaniem odpowiedzi usługa klienta DNS w imieniu klienta żąda od serwera użycia procesu rekursji w celu pełnego rozpoznania nazwy. W większości wypadków serwer DNS jest domyślnie konfigurowany w taki sposób, aby obsługiwał proces rekursji, co pokazano na rysunku poniższej.
.gif)
Aby serwer DNS poprawnie wykonywał rekursję, najpierw potrzebuje pewnych pomocniczych informacji o sposobie nawiązywania kontaktu z innymi serwerami DNS działającymi w obszarze nazw domen DNS. Te informacje są dostarczane w postaci głównych wskazówek, tzn. listy wstępnych rekordów zasobów, które mogą być wykorzystane przez usługę DNS do znajdowania innych serwerów DNS autorytatywnych dla domeny katalogu głównego drzewa obszaru nazw domen DNS. Serwery główne są autorytatywne dla domeny katalogu głównego i dla domen najwyższego poziomu umieszczonych w drzewie obszaru nazw domen DNS. Aby uzyskać więcej informacji, zobacz Aktualizacja głównych wskazówek.
Dzięki możliwości znajdowania serwerów głównych przy użyciu głównych wskazówek serwer DNS może wykonywać rekursję. Teoretycznie ten proces umożliwia dowolnemu serwerowi DNS odnajdowanie serwerów, które są autorytatywne dla dowolnej innej nazwy domeny DNS użytej na dowolnym poziomie drzewa obszaru nazw domen.
Rozważmy na przykład zastosowanie procesu rekursji do odnalezienia nazwy „host_b.przyklad.microsoft.com.”, gdy klient kieruje kwerendę do pojedynczego serwera DNS. Proces rozpoczyna się w momencie, kiedy serwer i klient DNS są uruchomione i nie zawierają lokalnie buforowanych informacji, które byłyby pomocne w rozpoznaniu nazwy wymienionej w kwerendzie. Dla potrzeb przykładu założono, że nazwa poszukiwana przez klienta to nazwa domeny, o której na podstawie skonfigurowanych stref serwer nie posiada lokalnie żadnych informacji.
Najpierw preferowany serwer analizuje pełną nazwę i ustala, że potrzebuje danych o lokalizacji serwera, który jest autorytatywny dla domeny najwyższego poziomu — „com”. Następnie serwer kieruje kwerendę iteracyjną do serwera DNS domeny „com”, aby uzyskać odwołanie do serwera „microsoft.com”. Następnie z serwera „microsoft.com” nadchodzi odpowiedź z odwołaniem do serwera DNS domeny „przyklad.microsoft.com”.
W końcu następuje nawiązanie kontaktu z serwerem „przyklad.microsoft.com.”. Ponieważ ten serwer w ramach swoich skonfigurowanych stref zawiera poszukiwaną nazwę, odpowiada autorytatywnie serwerowi, który zainicjował rekursję. Kiedy pierwszy serwer odbiera odpowiedź wskazującą, że na żądaną kwerendę została uzyskana odpowiedź autorytatywna, przekazuje tę odpowiedź z powrotem do żądającego klienta i proces kwerendy rekurencyjnej kończy się.
Mimo iż proces kwerendy rekurencyjnej wykonywany w opisany powyżej sposób może znacznie obciążać zasoby, wykazuje pewne zalety z punktu widzenia wydajności serwera DNS. Na przykład w czasie procesu rekursji serwer DNS wykonujący wyszukiwanie rekurencyjne otrzymuje informacje o obszarze nazw domen DNS. Te informacje są buforowane przez serwer i mogą być wykorzystane ponownie, pozwalając na szybsze udzielanie odpowiedzi na następne kwerendy. Wraz z upływem czasu te buforowane informacje mogą się rozrosnąć i zająć znaczną część zasobów pamięci serwera, chociaż są czyszczone przy każdym wyłączeniu i ponownym włączeniu usługi DNS.
Alternatywne odpowiedzi na kwerendy
W poprzedniej sekcji poświęconej kwerendom DNS przyjęto założenie, że proces kończy się pozytywną odpowiedzią zwracaną do klienta. Jednak na kwerendy mogą być także udzielane inne odpowiedzi. Oto najczęściej spotykane:
-
Odpowiedź autorytatywna
-
Odpowiedź pozytywna
-
Odpowiedź z odwołaniem
-
Odpowiedź negatywna
Odpowiedź autorytatywna to pozytywna odpowiedź zwracana do klienta, która w komunikacie DNS zawiera ustawiony bit uwierzytelniania wskazujący, że odpowiedź została uzyskana z serwera dokonującego bezpośredniego uwierzytelnienia poszukiwanej nazwy.
Odpowiedź pozytywna może się składać z poszukiwanego rekordu zasobu albo z listy rekordów zasobów (nazywanej także zestawem rekordów zasobów) zgodnej z poszukiwaną nazwą domeny DNS i typem rekordu określonym w komunikacie kwerendy.
Odpowiedź z odwołaniem zawiera dodatkowe rekordy zasobów, nie określone w kwerendzie według nazwy ani typu. Ten rodzaj odpowiedzi jest zwracany do klienta, jeśli nie jest obsługiwany proces rekursji. Te rekordy mają służyć jako przydatne odpowiedzi referencyjne, które mogą być wykorzystane przez klienta do kontynuowania kwerendy z zastosowaniem iteracji.
Odpowiedź z odwołaniem zawiera dodatkowe dane, takie jak rekordy zasobów (RR), które są innego typu niż poszukiwane. Jeśli na przykład była poszukiwana nazwa hosta „www” i w tej strefie nie znaleziono żadnych rekordów zasobów adresu tej nazwy, lecz zamiast nich dla nazwy „www” został znaleziony rekord zasobu CNAME, serwer DNS może dołączyć tę informację do odpowiedzi wysyłanej klientowi.
Jeśli klient może używać iteracji, może wykorzystywać informacje odwołań w celu wykonania dodatkowych kwerend pozwalających mu na pełne rozpoznanie nazwy.
Odpowiedź negatywna uzyskana z serwera może wskazywać, że w czasie, gdy serwer próbował przetworzyć i rekursywnie rozwiązać kwerendę w pełni i autorytatywnie, wystąpił jeden z dwóch możliwych wyników:
-
Serwer autorytatywny zgłosił, że poszukiwana nazwa nie istnieje w obszarze nazw DNS.
-
Serwer autorytatywny zgłosił, że poszukiwana nazwa istnieje, lecz nie istnieją dla niej rekordy określonego typu.
Program rozpoznawania nazw przekazuje wyniki kwerendy w postaci odpowiedzi pozytywnej lub negatywnej z powrotem do żądającego programu i umieszcza odpowiedź w pamięci podręcznej.
Uwagi
-
Jeśli odpowiedź na kwerendę jest zbyt długa, aby mogła zostać wysłana i rozpoznana w pojedynczym pakiecie wiadomości UDP, serwer DNS może zainicjować odpowiedź w trybie awaryjnym za pośrednictwem portu TCP 53 i w pełni odpowiedzieć klientowi w sesji realizowanej za pomocą połączenia typu TCP.
-
Wyłączenie rekursji na serwerze DNS jest dokonywane na ogół wtedy, gdy klienci DNS są ograniczeni do rozpoznawania nazw na konkretnym serwerze DNS, takim jak serwer umieszczony w lokalnym intranecie. Ponadto rekursja może być wyłączona w przypadku, gdy serwer DNS jest niezdolny do rozpoznawania zewnętrznych nazw DNS, a klienci powinni przechodzić do innych serwerów DNS w celu rozpoznania tych nazw.
Aby wyłączyć stosowanie rekursji, można odpowiednio skonfigurować właściwości Zaawansowane w konsoli DNS odpowiedniego serwera. Aby uzyskać więcej informacji, zobacz Wyłączanie rekursji na serwerze DNS.
-
Wyłączenie rekursji uniemożliwi korzystanie z usług przesyłania dalej.
-
Domyślnie serwery DNS wykonujące kwerendy rekurencyjne i kontaktujące się z innymi serwerami DNS korzystają z domyślnych kilku ustawień czasów. Są to:
-
Interwał ponawiania rekursji o długości 3 sekund. Jest to czas, przez jaki usługa DNS czeka przed ponowieniem kwerendy w czasie wyszukiwania rekurencyjnego.
-
Limit czasu rekursji o długości 15 sekund. Jest to czas, przez jaki usługa DNS czeka przed zaniechaniem wyszukiwania rekurencyjnego, które było ponawiane.
W większości przypadków te parametry nie wymagają modyfikacji. Jeśli jednak wyszukiwanie rekurencyjne jest prowadzone za pośrednictwem powolnych łączy WAN, można poprawić wydajność serwera i sprawność wykonywania kwerend dzięki niewielkim korektom tych ustawień. Aby uzyskać więcej informacji, zobacz Dostrajanie zaawansowanych parametrów serwera.
Jak działa iteracja
Iteracja jest typem rozpoznawania nazw stosowanego między klientami i serwerami DNS, kiedy obowiązują następujące warunki:
-
Klient żąda zastosowania rekursji, lecz na serwerze DNS rekursja jest wyłączona.
-
Klient nie żąda użycia rekursji podczas wykonywania kwerendy na serwerze DNS.
Iteracyjne żądanie od klienta informuje serwer DNS, że klient oczekuje najlepszej odpowiedzi, jakiej serwer DNS może udzielić natychmiast, bez kontaktowania się z innymi serwerami DNS.
Kiedy jest stosowana iteracja, serwer DNS odpowiada klientowi na podstawie własnych informacji o obszarze nazw w kontekście poszukiwanych danych nazw. Jeśli na przykład serwer DNS w intranecie odbiera kwerendę od lokalnego klienta dotyczącą nazwy „www.microsoft.com”, może zwrócić odpowiedź ze swojej pamięci podręcznej nazw. Jeśli poszukiwana nazwa nie jest obecnie przechowywana w pamięci podręcznej nazw na serwerze, serwer może odpowiedzieć w formie odwołania, czyli listy rekordów zasobów NS i A do innych serwerów DNS, które są bliżej nazwy poszukiwanej przez klienta.
Kiedy podawane jest odwołanie, klient DNS przyjmuje, że w celu rozpoznania nazwy może kontynuować wysyłanie kwerend iteracyjnych do innych skonfigurowanych serwerów DNS. Na przykład w najczęściej spotykanej sytuacji klient DNS może rozszerzyć poszukiwania aż do serwerów domeny katalogu głównego w Internecie, usiłując zlokalizować serwery DNS autorytatywne dla domeny „com”. Po uzyskaniu kontaktu z serwerami głównymi w Internecie może uzyskać od nich dalsze iteracyjne odpowiedzi, które wskazują faktyczne serwery DNS w Internecie obsługujące domenę „microsoft.com”. Kiedy klient uzyska rekordy tych serwerów DNS, może wysłać następną kwerendę iteracyjną do zewnętrznych serwerów DNS firmy Microsoft w Internecie, które mogą udzielić definitywnej i autorytatywnej odpowiedzi.
Jeśli jest stosowana iteracja, serwer DNS może nie tylko udzielić klientowi swojej najlepszej odpowiedzi, ale również dalej pomagać w rozwiązywaniu kwerend o nazwę. W większości kwerend iteracyjnych, jeśli podstawowy serwer DNS nie może rozwiązać kwerendy, klient kontaktuje się z innymi serwerami nazw funkcjonującymi w obszarze nazw DNS przy użyciu lokalnie skonfigurowanej listy serwerów DNS.
Jak działa buforowanie
Gdy serwery DNS przetwarzają kwerendy klientów przy użyciu rekursji lub iteracji, odkrywają i pobierają znaczną ilość informacji o obszarze nazw DNS. Te informacje są umieszczane przez serwer w pamięci podręcznej.
Buforowanie stanowi sposób przyspieszania rozwiązywania następnych kwerend DNS o popularne nazwy, jednocześnie znacznie zmniejszając ruch w sieci związany z systemem DNS.
Gdy serwery DNS wykonują kwerendy rekurencyjne w imieniu klientów, tymczasowo buforują rekordy zasobów (RR). Rekordy zasobów umieszczone w pamięci podręcznej zawierają informacje uzyskane od serwerów DNS, które są autorytatywne dla nazw domen DNS poznanych w czasie wykonywania kwerend rekurencyjnych w celu wyszukania i udzielenia pełnej odpowiedzi na kwerendę rekurencyjną wykonywaną w imieniu klienta. Później, kiedy inni klienci będą przysyłać nowe kwerendy z żądaniami informacji o rekordach zasobów odpowiadających buforowanym rekordom, serwer DNS może wykorzystać buforowane rekordy zasobów, aby na nie odpowiedzieć.
Kiedy informacje są buforowane, wartość czasu wygaśnięcia (TTL) dotyczy wszystkich buforowanych rekordów zasobów. Dopóki nie upłynie czas TTL buforowanych rekordów zasobów, serwer DNS może kontynuować buforowanie i ponownie wykorzystywać te rekordy do udzielania odpowiedzi na przysyłane przez klientów kwerendy odpowiadające tym rekordom. Wartości czasu TTL buforowania stosowane do rekordów zasobów w większości konfiguracji stref mają przypisaną wartość Minimalny (domyślny) czas wygaśnięcia (TTL), która jest ustawiana w rekordzie zasobu adresu startowego uwierzytelniania (SOA) strefy. Domyślnie minimalna wartość czasu TTL wynosi 3 600 sekund (1 godzina), lecz można ją zmienić, lub też w razie potrzeby można indywidualnie ustawić czas TTL buforowania osobno dla każdego rekordu zasobu.
Uwagi
-
Serwer DNS można zainstalować jako serwer tylko buforujący. Aby uzyskać więcej informacji, zobacz Korzystanie z serwerów tylko buforujących.
-
Domyślne serwery DNS korzystają domyślnie z pliku głównych wskazówek o nazwie Cache.dns, który jest przechowywany w folderze główny_katalog_systemowy\System32\Dns na komputerze serwera. Kiedy usługa jest uruchamiana, zawartość tego pliku jest wstępnie ładowana do pamięci serwera. Plik zawiera informacje wskazujące dotyczące serwerów głównych obszaru nazw DNS, w którym działają serwery DNS. Aby uzyskać więcej informacji o tym pliku lub sposobie jego wykorzystania, zobacz Pliki związane z systemem DNS.