Przekształcanie nazwy w adres
Raz, kiedy wpisujesz nazwę domeny, musi ona zostać przetłumaczona na adres IP, który Twój komputer potrzebuje do nawiązania połączenia. System Domyślnych Imion Domen (DNS) robi to za pomocą ścisłej hierarchii: strefa korzenia (13 logicznie odróżnionych klasterów serwerów korzeniowych, obsługiwanych z setek lokalizacji fizycznych przez anycast) zna tylko, które serwery są autorytatywne dla każdego najwyższego poziomu domeny (.com, .org, .uk); każdy serwer TLD zna tylko, które serwery są autorytatywne dla konkretnego drugiego poziomu domeny; a serwer autorytatywny dla tej domeny w końcu przechowuje rzeczywisty rekord A lub AAAA mapujący nazwę na adres. Żaden pojedynczy serwer nie posiada całej mapy – system skaluje się precyzyjnie, ponieważ każdy poziom musi znać tylko poziom bezpośrednio poniżej niego.
Rekurencyjne vs. iteracyjne rozwiązywanie
Twoje urządzenie prawie nigdy nie komunikuje się bezpośrednio z serwerami korzeniowymi, TLD i autorytatywnymi. Zamiast tego prosi o pomoc rekurencyjnego rozdzielacza – zarządzanego przez Twojego dostawcę internetowego lub publicznego, takiego jak 1.1.1.1 lub 8.8.8.8 – aby wykonał całą procedurę i przekazał ostateczną odpowiedź. Rozdzielacz wykonuje wieloetapowe zadanie: pyta serwer korzeniowy, który serwer TLD ma spróbować, pyta serwer TLD, który serwer autorytatywny ma spróbować, a następnie pyta serwer autorytatywny o rzeczywisty rekord, śledząc przekierowania na każdym kroku aż do uzyskania odpowiedzi zamiast kolejnego przekierowania.
klient -> rozdzielacz: "Jaki jest rekord A dla www.example.com?" rozdzielacz -> korzeń: "Który obsługuje .com?" serwer TLD .com: "Który obsługuje example.com?" example.com: "Jaki jest rekord A dla www.example.com?" klient: 198.51.100.7 (zapamiętany na czas TTL sekund) Podział ten ma znaczenie, ponieważ oddziela dwa bardzo różne zadania. Zapytania iteracyjne (serwer przekazuje odpowiedź lub przekierowanie, nigdy nie wykonuje dalszych wyszukiwań samodzielnie) to to, co robią serwery korzeniowe i TLD – muszą pozostać lekkie i pozbawione stanu, aby obsługiwać ogromny globalny wolumen zapytań. Rozwiązywanie rekurencyjne (wykonuje całą wielokrokową wędrówkę i zwraca tylko ostateczną odpowiedź) to to, co robi rozdzielacz w imieniu klienta, a jest celowo wyłączone z serwerów korzeniowych/TLD, aby uniknąć przeciążenia najbardziej ruchliwego i krytycznego pod względem bezpieczeństwa elementu całego systemu.
client -> resolver: "what is A record for www.example.com?" resolver -> root: "who handles .com?" <- referral resolver -> .com TLD: "who handles example.com?" <- referral resolver -> example.com: "what is www.example.com?" <- authoritative ANSWER resolver -> client: 198.51.100.7 (cache this for `TTL` seconds)
Buforowanie i TTL
Każde wpis DNS zawiera TTL (czas życia, w sekundach) ustawiony przez jego właściciela oraz resolver buforuje odpowiedź na dokładnie ten czas przed zezwolenie mu na ponowne zapytanie. To właśnie sprawia, że DNS skaluje się do rozmiarów internetu – powtarzające się zapytania dla popularnych domen są natychmiast odpowiadane z pamięci podręcznej, bez konieczności wykonywania cyklów sieciowych do serwerów root lub TLD, a większość rzeczywistych zapytań nigdy nie opuszcza pamięci podręcznej resolvera. Ustawianie TTL jest w zasadzie kompromisem: długi TTL (godziny do dni) zmniejsza obciążenie i przyspiesza powtarzalne wyszukiwania, ale spowalnia propagację aktualizacji wpisu, ponieważ buforowane resolvery nadal serwują przestarzałą odpowiedź, dopóki ona nie wygaśnie; krótki TTL (sekundy do minut) jest tym, czego używają usługi tuż przed zaplanowaną migracją lub awarią, akceptując więcej ruchu zapytań w zamian za możliwość przekierowania klientów w ciągu kilku minut.
; example TTL in a zone file (seconds) www.example.com. 300 IN A 198.51.100.7 ; 300s = 5 minutes: a resolver serves this cached answer to every ; client that asks, for 5 minutes, before it re-queries the authoritative server
Dlaczego ten projekt przetrzymuje się w obliczu ataków i awarii
Rozprowadzanie uprawnień hierarchicznie również rozprasza niepowodzenia. Jeśli jeden autorytatywny serwer dla małego domeny ulegnie awarii, to wpływa na to tylko zapytania dotyczące tej konkretnej domeny – rdzeń i domena najwyższego poziomu (TLD) pozostają nienaruszonymi usługami dla całego internetu. Serwery rdzeniowe są również silnie replikowane za pomocą anycast (taka sama nazwa IP ogłaszana z setek fizycznych lokalizacji; routery wysyłają każde zapytanie do najbliższego topologicznie instancji), więc nawet duży atak typu denial-of-service na rdzenie, który wielokrotnie był próbowany, ma tendencję jedynie pogarszać wydajność w określonych regionach zamiast wyłączyć cały system. Cachowanie wzmacnia tę odporność: większość zapytań nigdy nie dociera do poziomu autorytetowego podczas awarii, ponieważ są obsługiwane z pamięci buforów resolvera, które zostały wypełnione przed wystąpieniem awarii.
Frequently asked questions
Jakie jest różnica między zapytaniem rekurencyjnym a iteracyjnym DNS?
W zapytaniu rekurencyjnym serwer wykonuje pełne, wieloetapowe wyszukiwanie i zwraca tylko ostateczną odpowiedź – to właśnie robi Twój resolver w Twoim imieniu. W zapytaniu iteracyjnym serwer przekazuje odpowiedź, którą posiada, lub odsyłacz do następnego serwera, który ma je zapytać, bez samodzielnego wykonywania dalszych wyszukiwań – to właśnie robią serwery root i TLD, utrzymując je lekkie.
Dlaczego DNS potrzebuje TTL i buforowania w ogóle?
Bez buforowania każde pojedyncze zapytanie o każdy domenię musiałoby przechodzić przez root -> TLD -> autorytatywny raz na nowo, co natychmiast przeciążyłoby niewielką liczbę serwerów root i TLD ze względu na globalny wolumen zapytań. Buforowanie ograniczane TTL pozwala resolverom odpowiadać na większość powtarzających się zapytań natychmiast z pamięci, a wartość TTL umożliwia właścicielowi domeny ustalenie kompromisu między szybszym rozpowszechnianiem zmian a mniejszym obciążeniem zapytaniowym.
Dlaczego serwery root DNS nie są przeciążone, biorąc pod uwagę ogromny ruch generowany przez Internet?
Serwery root są intensywnie buforowane (większość zapytań nigdy do nich nie dociera, ponieważ resolverzy już mają zapamiętane odpowiedzi) i są replikowane za pomocą anycast, gdzie to samo adres IP jest ogłaszane z setek lokalizacji na całym świecie, więc zapytania są automatycznie kierowane do najbliższego instancji. To rozprasza obciążenie geograficznie i ogranicza zasięg potencjalnej awarii lub ataku.
Wypróbuj na żywo
Wszystko powyżej działa bezpośrednio w Twojej przeglądarce — otwórz DNS Resolution i zmieniaj parametry podczas działania. Nic nie jest instalowane ani przesyłane na serwer, cały model działa w jednej karcie.
▶ Otwórz symulację DNS Resolution