Formáty zpráv DNS

Tento článek vysvětluje strukturu a formát zpráv DNS (Domain Name System) v prostředích s Windows a Windows Serverem. Pochopení formátů zpráv DNS je nezbytné pro správce serveru DNS, kteří potřebují analyzovat provoz DNS, řešit problémy s překladem názvů a optimalizovat výkon DNS.

DNS používá pro komunikaci mezi klienty a servery standardizované formáty zpráv. Všechny zprávy DNS – ať už dotazy, odpovědi nebo aktualizace – se řídí společnou strukturou s konkrétními poli, která určují způsob zpracování informací. Tento článek popisuje tři hlavní typy zpráv DNS a rozdělí jejich komponenty, které vám pomůžou pochopit, jak komunikace DNS funguje na úrovni protokolu.

Protokoly a standardy DNS

DNS ve Windows a Windows Serveru dodržuje oborové standardy a protokoly definované protokoly IETF (Internet Engineering Task Force). Základní protokol DNS je zadaný v dokumentu RFC 1035, který popisuje formát zpráv DNS, včetně dotazů a odpovědí. Další standardy, jako je RFC 2136 pro dynamické aktualizace a RFC 4033 pro rozšíření zabezpečení DNS (DNSSEC), zlepšují funkčnost a zabezpečení DNS.

Protokol DNS se skládá z různých typů zpráv DNS, které se zpracovávají podle informací v polích zpráv. Tato část popisuje typy zpráv DNS a pole v jednotlivých typech zpráv.

Existují tři typy zpráv DNS:

  • Queries

  • Responses

  • Updates

Dotazy a odpovědi se definují v původním standardu DNS a aktualizace se definují v DOKUMENTU RFC 2136. Všechny tři typy se řídí běžným formátem zpráv.

Další informace o formátech zpráv zjistíte rozbalením následujících sekcí.

Formát zprávy dotazu DNS

Běžný formát zprávy DNS má pevnou délku, hlavičku 12 bajtů a proměnnou pozici vyhrazenou pro otázky, odpověď, autoritu a další záznamy prostředků DNS. Běžný formát zprávy lze znázorní takto:

Standardní formát zprávy dotazu DNS

  • Hlavička DNS (pevná délka)
  • Položky otázek (proměnná délka)
  • Záznamy prostředků odpovědi (proměnná délka)
  • Záznamy prostředků autority (proměnná délka)
  • Další záznamy prostředků (proměnná délka)

Hlavička zprávy dotazu DNS

Hlavička zprávy DNS obsahuje následující pole v následujícím pořadí:

Pole hlaviček zpráv dotazu DNS

  • ID transakce:
    16bitové pole identifikující konkrétní transakci DNS. ID transakce je vytvořeno původcem zprávy a je zkopírováno respondérem do zprávy odpovědi. Pomocí ID transakce může klient DNS přiřadit odpovědi ke svým požadavkům.

  • Flags:
    16bitové pole obsahující různé příznaky služby komunikované mezi klientem DNS a serverem, včetně:

    • Požadavek/odpověď: 1bitové pole nastavené na 0 pro požadavek nebo 1 pro odpověď.
    • Kód operace: 4bitové pole představující operaci názvové služby paketu; 0x0 je dotaz.
    • Autoritativní odpověď: 1bitové pole označující, že respondér je autoritativní pro dotazovaný název domény.
    • Zkrácení: 1bitové pole nastavené na hodnotu 1, pokud celkový počet odpovědí překročil velikost datagramu UDP. Pokud nejsou povoleny datagramy UDP větší než 512 bajtů nebo EDNS0, vrátí se pouze prvních 512 bajtů odpovědi UDP.
    • Požadovaná rekurze: 1bitové pole nastavené na 1 pro rekurzivní dotaz a 0 pro iterativní dotazy. Pokud je nastavená hodnota 0, server DNS vrátí seznam dalších serverů DNS z dat místní mezipaměti.
    • K dispozici rekurze: 1bitové pole nastavené serverem DNS na hodnotu 1, pokud dokáže zpracovat rekurzivní dotazy. Pokud je rekurze zakázaná, server správně nastaví pole.
    • Vyhrazeno: 3bitové pole, které je rezervováno a nastaveno na hodnotu 0.
    • Návratový kód: 4bitové pole držící návratový kód:
      • 0: Úspěšná odpověď (odpověď dotazu je v odpovědi).
      • 0x3: Chyba názvu označující, že autoritativní server DNS odpověděl, že název domény neexistuje. Další informace o návratových kódech naleznete v tématu IANA DNS RCODEs.
  • Počet záznamů otázek:
    16bitové pole představující počet položek v části otázky zprávy DNS.

  • Počet záznamů zdroje odpovědi:
    16bitové pole představující počet položek v části odpovědi zprávy DNS.

  • Počet záznamů o prostředku autority:
    16bitové pole představující počet autoritativních záznamů ve zprávě DNS.

  • Počet dalších záznamů:
    16bitové pole představující počet dodatečných záznamů o prostředcích ve zprávě DNS.

Položky dotazů DNS

Oddíl s položkami otázek zprávy DNS obsahuje název domény, který se dotazuje, a obsahuje následující tři pole:

  • Název otázky:
    Dotazovaný název domény. Názvy domén DNS se vyjadřují jako řada popisků (např. microsoft.com). V poli Název otázky se název domény zakóduje jako řada dvojic délky a hodnoty: pole s 1 bajtem označující délku popisku, za nímž následuje samotný popisek. Je například microsoft.com zakódován jako 0x09microsoft0x03com0x00, kde šestnáctkové číslice představují délky popisků, znaky ASCII jsou popisky a konečný 0 označuje konec názvu.

  • Typ otázky:
    16bitové celé číslo reprezentující typ záznamového prostředku, který má být vrácen. Mezi běžné hodnoty patří:

    • 0x01: Záznam hostitele (A)
    • 0x02: Záznam názvového serveru (NS)
    • 0x05: Záznam aliasu (CNAME)
    • 0x0C (12): Reverse-lookup (PTR) záznam
    • 0x0F (15): Záznam MX (Mail Exchange)
    • 0x21 (33): Záznam služby (SRV)
    • 0xFB (251): Záznam o přírůstkových přenosech zón (IXFR)
    • 0xFC (252): Záznam o standardním přenosu zóny (AXFR)
    • 0xFF (255): Všechny záznamy
  • Třída otázky:
    Představuje třídu otázek IN (Internet), obvykle nastavena na 0x0001.

Zpráva odpovědi dotazu DNS

Oddíly odpovědí, autority a dalších informací zprávy odpovědi DNS můžou obsahovat záznamy o prostředcích, které odpovídají na část dotazu ve zprávě. Záznamy prostředků jsou formátovány takto:

  • Název záznamu prostředku: Název domény DNS zaznamenaný jako pole s proměnnou délkou za stejným formátováním jako pole Název otázky.
  • Typ záznamu o prostředku: Hodnota typu záznamu o prostředku.
  • Třída záznamu prostředku: Kód třídy záznamu prostředku, internetová třída 0x0001.
  • Time-to-Live: Hodnota TTL vyjádřená v sekundách jako 32bitové pole bez znaménka.
  • Délka dat zdroje: pole s 2 bajty označující délku dat zdroje.
  • Data o zdrojích: Data o délce proměnné odpovídající typu záznamu prostředku.

Pole Název záznamu zdroje se zakóduje stejným způsobem jako pole Název otázky, pokud název ještě není ve zprávě DNS k dispozici jinde, v takovém případě se místo zakódovaného názvu s délkou použije pole s 2 bajty a funguje jako ukazatel na název, který už existuje.

Název formátu zprávy dotazu

Formát zprávy dotazu na název je stejný jako formát zprávy DNS popsaný výše. V typické zprávě dotazu na název jsou pole zpráv DNS nastavena takto:

  • Identifikátor dotazu (ID transakce):
    Nastavte na jedinečné číslo, aby překladač klienta DNS mohl shodovat odpověď s dotazem. ID transakce odpovědi dotazu vždy odpovídá ID transakce požadavku dotazu.

  • Flags:
    Nastavte pro označení standardního dotazu s povolenou rekurzí.

  • Počet otázek:
    Nastavte na hodnotu 1.

  • Položka otázky:
    Nastavte dotazovaný název domény a typ záznamu prostředku, který se má vrátit.

Formát zprávy s odpovědí na dotaz na jméno

Formát zprávy odpovědi dotazu na název je stejný jako formát zprávy DNS popsaný výše. V typické zprávě dotazu na název by se pole zpráv DNS nastavovala takto:

  • Identifikátor dotazu (ID transakce):
    Nastavte na jedinečné číslo, aby překladač klienta DNS mohl shodovat odpověď s dotazem.

  • Flags:
    Nastavte pro označení standardního dotazu s povolenou rekurzí.

  • Počet otázek:
    Nastavte na hodnotu 1.

  • Položka otázky:
    Nastavte dotazovaný název domény a typ záznamu prostředku, který se má vrátit.

Formát zprávy požadavku na reverzní jméno

Zprávy dotazů na reverzní názvy používají běžný formát zpráv s následujícími rozdíly:

  • Překladač klienta DNS vytvoří název domény v doméně in-addr.arpa na základě IP adresy, která se dotazuje.

  • Záznam prostředku ukazatele (PTR) je dotazován namísto záznamu prostředku hostitele (A).

Aktualizovat formát zprávy

Formát zprávy aktualizace DNS používá hlavičku definující operaci aktualizace, která se má provést, a sadu záznamů prostředků, která obsahuje aktualizaci. Formát zprávy aktualizace DNS obsahuje následující pole:

  • Identification. 16bitový identifikátor přiřazený žadatelem klienta DNS. Tento identifikátor se zkopíruje do odpovídající odpovědi a může ho použít žadatel ke shodě odpovědí na nevyřízených požadavků nebo serverem k detekci duplicitních požadavků od některého žadatele.

  • Flags. Pole příznaků 16bitové zprávy aktualizace DNS. Popis každého příznaku najdete v části "Pole příznaků zprávy DNS Update" níže.

  • Počet položek zóny Počet záznamů prostředků v sekci Položka zóny.

  • Počet záznamů předpokládaných prostředků Počet záznamů o prostředcích v sekci Podmíněné záznamy o prostředcích.

  • Počet záznamů o aktualizačních prostředcích Počet záznamů prostředků v části Aktualizace záznamů o prostředcích

  • Počet dalších záznamů o prostředcích Počet záznamů o zdrojích v části Další záznamy zdrojů

  • Položka zóny. Označuje zónu aktualizovaných záznamů. Všechny záznamy, které se mají aktualizovat, musí být ve stejné zóně, a proto oddíl zóny může obsahovat přesně jeden záznam. Má tři hodnoty: ZNAME je název zóny, ZTYPE musí být SOA a ZCLASS je třída zóny.

  • Nutné záznamy prostředků Obsahuje sadu požadavků na záznamy prostředků, které musí být splněny v okamžiku, kdy hlavní server DNS přijme zprávu aktualizace. Existuje pět možných sad hodnot, které lze vyjádřit:

    • Sada záznamů prostředků existuje (nezávislá hodnota). Musí existovat alespoň jeden záznam o prostředcích se zadaným názvem a typem (v zóně a třídě určené částí zóny).

    • Sada záznamů prostředků existuje (závislá na hodnotě). Sada záznamů prostředků se zadaným názvem a typem existuje a má stejné členy se stejnými daty jako sada záznamů prostředků zadaná v této části.

    • Neexistuje sada záznamů zdrojů. Neexistují žádné záznamy prostředků se zadaným názvem a typem (v zóně a třídě, jak je uvedeno v sekci Zóna).

    • Název se používá. Existuje alespoň jeden záznam prostředku se zadaným názvem (v zóně a třídě určené sekcí Zone). Tento požadavek není splněn prázdnými neterminaly.

    • Název se nepoužívá. Zadaný název vlastní žádný záznam o prostředku žádného typu. Tento požadavek je splněn prázdnými neterminály.

  • Aktualizujte záznamy prostředků. Obsahuje záznamy o prostředcích, které mají být přidány nebo odstraněny z zóny. Během aktualizace se provádí jedna ze čtyř operací:

    • Přidejte záznamy prostředků do sady záznamů o prostředcích.

    • Odstraňte sadu záznamů o prostředcích.

    • Odstraňte všechny sady záznamů prostředků z názvu domény.

    • Odstraňte záznam o prostředku ze sady záznamů o prostředcích.

  • Další záznamy o prostředcích Obsahuje záznamy o prostředcích, které souvisejí s aktualizací, nebo s novými záznamy prostředků, které aktualizace přidává.

Pole příznaků zprávy aktualizace DNS

Pole příznaků zpráv o aktualizaci DNS používá následující příznaky:

  • Request/response. 1bitové pole nastavené na hodnotu 0 představující požadavek na aktualizaci a 1 pro vyjádření odpovědi na aktualizaci.

  • Kód operace. 4bitové pole nastavené na 0x5 pro aktualizace DNS.

  • Reserved. 7bitové rezervované pole nastavené na hodnotu 0.

  • Návratový kód 4bitové pole obsahující kódy, které představují výsledek aktualizačního dotazu. Kódy jsou následující:

    • 0 (NOERROR): Žádná chyba; úspěšná aktualizace.
    • 1 (FORMERR): Chyba formátu; Server DNS nerozuměl žádosti o aktualizaci.
    • 0x2 (SERVFAIL):: Na serveru DNS došlo k vnitřní chybě, například vypršení časového limitu přesměrování.
    • 0x3 (NXDOMAIN):: Název, který by měl existovat, neexistuje.
    • 0x4 (NOTIMP):: Server DNS nepodporuje zadaný kód operace.
    • 0x5 (ODMÍTNUTO):: Server DNS odmítá provést aktualizaci.
    • 0x6 (YXDOMAIN):: Název, který by neměl existovat, neexistuje.
    • 0x7 (YXRRSET):: Sada záznamů prostředků, která by neměla existovat.
    • 0x8 (NXRRSET):: Sada záznamů prostředků, která by měla existovat, neexistuje.
    • 0x9 (NOTAUTH):: Server DNS není autoritativní pro zónu pojmenovanou v části Zóna.
    • 0xA (NOTZONE): Název použitý v oddílech Požadavky nebo Aktualizace není v zóně určené oddílem Zóna.

Formát zprávy pro dynamickou aktualizaci odpovědi

Zpráva odpovědi dynamické aktualizace se řídí stejným formátem jako zpráva aktualizace DNS s výjimkou příznaků DNS. Příznak hlavičky zprávy dynamické aktualizace označuje, jestli je aktualizace úspěšná, včetně kódu úspěšné odpovědi nebo některého z kódů chyb popsaných v příznakech zprávy o aktualizaci DNS.