Protokół DNS – format komunikatu

  DNS, Protokół DNS, Teoria DNS

Komunikat przekazywany przez protokół DNS składa się z następujących części:

  • nagłówek (header) – zawiera podstawowe dane o przenoszonych danych, ich typie, zawartości oraz kilka flag
  • zapytanie (question) – część zawierająca zapytanie klienta, zapytanie zostanie powtórzone przez serwer w komunikacie z odpowiedzią
  • odpowiedź (answer section) – rekordy DNS, które są odpowiedzią na przesłane zapytanie
  • informacje o zwierzchności (authority section) – lista autorytatywnych serwerów DNS strefy, z której zostały pozyskane rekordy DNS (tj. rekordy NS domeny), lub link do serwerów DNS, którym mamy przesłać kolejne zapytania (w zależności od tego, czy pytany serwer jest autorytatywny dla wyszukiwanej informacji, czy też nie)
  • sekcja dodatkowa (additional section) – rekordy A i AAAA dla nazw pojawiających się w wartościach rekordów w odpowiedzi lub sekcji autorytatywnej, które zna serwer DNS (jest dla nich autorytatywny)

Nagłówek zawiera następujące informacje:

  • ID – 16-bitowy identyfikator liczbowy, przydzielony komunikatowi z zapytaniem, serwer przypisuje ten identyfikator do swojej odpowiedzi, co pozwala na ich jednoznaczne powiązanie (jest to konieczne, ponieważ protokół UDP jest bezstanowy)
  • QR – oznacza czy komunikat jest zapytaniem czy odpowiedzią
  • OPCODE – określa typ zapytania
  • AA (Authoritative Answer) – oznacza, że serwer, który wysłał nam odpowiedź, jest autorytatywnym dla nazwy, o którą pytamy. Innymi słowy, oznacza to, że dane w części „answer” nie pochodzą z cache ani z zapytania rekurencyjnego, ale bezpośrednio z pliku strefy, tj. w przesłaniu odpowiedzi nie pośredniczył żaden caching serwer DNS.
  • TC (Truncation) – oznacza skrócenie odpowiedzi, która jest dłuższa niż 512 bajtów i nie zmieściła się w jednym pakiecie UDP.
  • RD (Recursion Desired) – oznacza, że klient wymaga od serwera wykonania zapytania rekurencyjnego. Serwer może to żądanie odrzucić, ale w odpowiedzi wysyła to samo ustawienie tej flagi.
  • RA (Recursion Available) – flaga ustawiania przez serwer w przypadku, gdy obsługuje on zapytania rekurencyjne. Jeśli serwer umożliwia skorzystanie z tej usługi, wysyła flagę RA we wszystkich odpowiedziach jako informację o dostępnych możliwościach, nie chodzi tu tylko o reakcję na flagę RD w zapytaniu.
  • RCODE (Response code) – kod odpowiedzi
    • 0 – brak błędu
    • 1 – błąd formatu
    • 2 – błąd serwera (awaria)
    • 3 – błąd nazwy – serwer informuje, że domena podana w zapytaniu nie istnieje
    • 4 – nieobsługiwany typ zapytania
    • 5 – odrzucono
  • QDCOUNT – liczba rekordów w sekcji zapytania
  • ANCOUNT – liczba rekordów w sekcji odpowiedzi
  • NSCOUNT – liczba rekordów w sekcji zwierzchności
  • ARCOUNT – liczba rekordów w sekcji dodatkowej