Passa al contenuto principale

4. Messages (Messaggi)

Tutte le comunicazioni all'interno del protocollo di dominio sono trasportate in un singolo formato chiamato messaggio.


4.1. Format (Formato)​

Il formato di livello superiore di un messaggio è diviso in 5 sezioni (alcune delle quali sono vuote in certi casi):

    +---------------------+
| Header |
+---------------------+
| Question | la domanda per il name server
+---------------------+
| Answer | RR che rispondono alla domanda
+---------------------+
| Authority | RR che puntano verso un'autorità
+---------------------+
| Additional | RR contenenti informazioni aggiuntive
+---------------------+

Descrizioni delle sezioni:

  • Header: Sempre presente. Include campi che specificano quali sezioni rimanenti sono presenti e se il messaggio è una query o una risposta, una query standard o altro opcode, ecc.

  • Question: Contiene campi che descrivono una domanda a un name server. Questi campi sono un tipo di query (QTYPE), una classe di query (QCLASS) e un nome di dominio di query (QNAME).

  • Answer: Contiene RR che rispondono alla domanda.

  • Authority: Contiene RR che puntano verso un name server autoritativo.

  • Additional: Contiene RR che si riferiscono alla query, ma non sono strettamente risposte alla domanda.

Le ultime tre sezioni hanno lo stesso formato: un elenco possibilmente vuoto di resource record (RR) concatenati.


4.1.1. Header Section Format (Formato sezione header)​

L'header contiene i seguenti campi:

                                    1  1  1  1  1  1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ID |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|QR| Opcode |AA|TC|RD|RA| Z | RCODE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QDCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ANCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| NSCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ARCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

Descrizioni dei campi​

ID (16 bit):

  • Un identificatore a 16 bit assegnato dal programma che genera qualsiasi tipo di query
  • Questo identificatore viene copiato nella risposta corrispondente
  • Può essere utilizzato dal richiedente per abbinare le risposte alle query in sospeso

QR (1 bit):

  • Flag Query/Response
  • Specifica se questo messaggio è una query (0) o una risposta (1)

OPCODE (4 bit):

  • Specifica il tipo di query in questo messaggio
  • Impostato dall'iniziatore di una query e copiato nella risposta
  • Valori:
    • 0 - Query standard (QUERY)
    • 1 - Query inversa (IQUERY)
    • 2 - Richiesta di stato del server (STATUS)
    • 3-15 - Riservato per uso futuro

AA (1 bit):

  • Risposta autoritativa (Authoritative Answer)
  • Valido nelle risposte
  • Specifica che il name server che risponde è un'autorità per il nome di dominio nella sezione question
  • Nota: La sezione answer può avere più nomi di proprietari a causa degli alias. Il bit AA corrisponde al nome che corrisponde al nome della query, o al primo nome del proprietario nella sezione answer.

TC (1 bit):

  • Troncamento (TrunCation)
  • Specifica che questo messaggio è stato troncato a causa di una lunghezza maggiore di quella consentita sul canale di trasmissione

RD (1 bit):

  • Ricorsione desiderata (Recursion Desired)
  • Può essere impostato in una query e viene copiato nella risposta
  • Se RD è impostato, indica al name server di perseguire la query in modo ricorsivo
  • Il supporto delle query ricorsive è opzionale

RA (1 bit):

  • Ricorsione disponibile (Recursion Available)
  • Impostato o cancellato in una risposta
  • Indica se il supporto delle query ricorsive è disponibile nel name server

Z (3 bit):

  • Riservato per uso futuro
  • Deve essere zero in tutte le query e risposte

RCODE (4 bit):

  • Codice di risposta
  • Impostato come parte delle risposte
  • Valori:
    • 0 - Nessuna condizione di errore
    • 1 - Errore di formato - Il name server non è stato in grado di interpretare la query
    • 2 - Guasto del server - Il name server non è stato in grado di elaborare questa query a causa di un problema con il name server
    • 3 - Errore di nome - Significativo solo per le risposte da un name server autoritativo, questo codice indica che il nome di dominio referenziato nella query non esiste
    • 4 - Non implementato - Il name server non supporta il tipo di query richiesto
    • 5 - Rifiutato - Il name server rifiuta di eseguire l'operazione specificata per motivi di politica
    • 6-15 - Riservato per uso futuro

QDCOUNT (16 bit):

  • Un intero senza segno a 16 bit che specifica il numero di voci nella sezione question

ANCOUNT (16 bit):

  • Un intero senza segno a 16 bit che specifica il numero di resource record nella sezione answer

NSCOUNT (16 bit):

  • Un intero senza segno a 16 bit che specifica il numero di resource record del name server nella sezione dei record di autorità

ARCOUNT (16 bit):

  • Un intero senza segno a 16 bit che specifica il numero di resource record nella sezione dei record aggiuntivi

4.1.2. Question Section Format (Formato sezione question)​

La sezione question viene utilizzata per trasportare la "domanda" nella maggior parte delle query, cioè i parametri che definiscono cosa viene chiesto.

La sezione contiene QDCOUNT (di solito 1) voci, ciascuna nel seguente formato:

                                    1  1  1  1  1  1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| |
/ QNAME /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QTYPE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QCLASS |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

Descrizioni dei campi​

QNAME (variabile):

  • Un nome di dominio rappresentato come una sequenza di etichette
  • Ogni etichetta consiste di un ottetto di lunghezza seguito da quel numero di ottetti
  • Il nome di dominio termina con l'ottetto di lunghezza zero per l'etichetta nulla della radice
  • Nota: Questo campo può avere un numero dispari di ottetti; non viene utilizzato alcun padding

QTYPE (16 bit):

  • Un codice a due ottetti che specifica il tipo della query
  • I valori per questo campo includono tutti i codici validi per un campo TYPE, insieme ad alcuni codici più generali che possono corrispondere a più di un tipo di RR

QCLASS (16 bit):

  • Un codice a due ottetti che specifica la classe della query
  • Ad esempio, il campo QCLASS è IN per Internet

4.1.3. Resource Record Format (Formato resource record)​

Le sezioni answer, authority e additional condividono tutte lo stesso formato: un numero variabile di resource record, dove il numero di record è specificato nel campo di conteggio corrispondente nell'header.

Ogni resource record ha il seguente formato:

                                    1  1  1  1  1  1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| |
/ /
/ NAME /
| |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| TYPE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| CLASS |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| TTL |
| |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| RDLENGTH |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|
/ RDATA /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

Descrizioni dei campi​

NAME (variabile):

  • Un nome di dominio a cui questo resource record appartiene

TYPE (16 bit):

  • Due ottetti contenenti uno dei codici di tipo RR
  • Questo campo specifica il significato dei dati nel campo RDATA

CLASS (16 bit):

  • Due ottetti che specificano la classe dei dati nel campo RDATA

TTL (32 bit):

  • Un intero senza segno a 32 bit che specifica l'intervallo di tempo (in secondi) per cui il resource record può essere memorizzato nella cache prima che debba essere scartato
  • I valori zero sono interpretati nel senso che l'RR può essere utilizzato solo per la transazione in corso e non deve essere memorizzato nella cache

RDLENGTH (16 bit):

  • Un intero senza segno a 16 bit che specifica la lunghezza in ottetti del campo RDATA

RDATA (variabile):

  • Una stringa di lunghezza variabile di ottetti che descrive la risorsa
  • Il formato di queste informazioni varia in base al TYPE e alla CLASS del resource record
  • Ad esempio, se il TYPE è A e la CLASS è IN, il campo RDATA è un indirizzo Internet ARPA a 4 ottetti

4.1.4. Message Compression (Compressione dei messaggi)​

Per ridurre le dimensioni dei messaggi, il sistema di dominio utilizza uno schema di compressione che elimina la ripetizione dei nomi di dominio in un messaggio.

Metodo di compressione​

In questo schema, un nome di dominio completo o un elenco di etichette alla fine di un nome di dominio viene sostituito con un puntatore a un'occorrenza precedente dello stesso nome.

Formato del puntatore:

Il puntatore assume la seguente forma:

    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| 1 1| OFFSET |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  • I primi due bit sono uno
  • Questo consente di distinguere un puntatore da un'etichetta, poiché le etichette devono iniziare con due bit zero
  • Il campo OFFSET specifica un offset dall'inizio del messaggio (cioè, il primo ottetto del campo ID nell'header del dominio)
  • Un offset zero specifica il primo byte del campo ID, ecc.

Regole di compressione​

Lo schema di compressione consente a un nome di dominio in un messaggio di essere rappresentato come:

  1. Una sequenza di etichette che termina con un ottetto zero
  2. Un puntatore
  3. Una sequenza di etichette che termina con un puntatore

Restrizioni importanti:

  • I puntatori possono essere utilizzati solo per le occorrenze di un nome di dominio in cui il formato non è specifico per la classe
  • Se così non fosse, un name server o resolver dovrebbe conoscere il formato di tutti gli RR che gestisce
  • Finora, non ci sono tali casi, ma potrebbero verificarsi in futuri formati RDATA

La compressione è consentita:

  • Nel campo NAME dei resource record
  • Nel campo QNAME delle voci question
  • Ogni volta che un nome di dominio appare nel campo RDATA (solo per certi tipi RR dove il formato è noto)

La compressione NON è consentita:

  • Nell'RDATA dei tipi RR dove il formato RDATA è sconosciuto o variabile

Esempio​

Se una query contiene:

www.example.com
mail.example.com

La seconda occorrenza di "example.com" può essere sostituita con un puntatore alla prima occorrenza, risparmiando byte.


4.2. Transport (Trasporto)​

I messaggi DNS possono essere trasportati da diversi protocolli di trasporto:

4.2.1. UDP Usage (Uso UDP)​

  • Trasporto predefinito: UDP è il trasporto preferito per le query e le risposte DNS
  • Dimensione massima: I messaggi DNS inviati tramite UDP non dovrebbero (SHOULD NOT) superare i 512 ottetti
  • Troncamento: Se una risposta supera i 512 ottetti, il bit TC (Troncamento) dovrebbe (SHOULD) essere impostato nell'header
  • Ripetizione: Quando TC=1, il client dovrebbe (SHOULD) riprovare la query utilizzando TCP

Vantaggi di UDP:

  • Overhead inferiore
  • Più veloce per query piccole
  • Nessuna configurazione di connessione richiesta

4.2.2. TCP Usage (Uso TCP)​

  • Quando usare: TCP dovrebbe (SHOULD) essere utilizzato quando:
    • La dimensione della risposta supera i 512 ottetti
    • È richiesta una consegna affidabile
    • Vengono eseguiti trasferimenti di zona
  • Formato del messaggio: Quando si utilizza TCP, un campo di lunghezza a 16 bit precede ogni messaggio
  • Gestione della connessione: Le connessioni possono essere persistenti o chiuse dopo ogni coppia query-risposta

Formato del messaggio TCP:

    +---------------------+
| Length (16 bits) |
+---------------------+
| |
| DNS Message |
| |
+---------------------+

4.3. Standard Query Example (Esempio di query standard)​

Ecco un esempio di query standard per il record A di www.example.com:

Struttura del messaggio di query:

Header:
ID: 0x1234
QR: 0 (Query)
OPCODE: 0 (Standard Query)
RD: 1 (Recursion Desired)
QDCOUNT: 1
ANCOUNT: 0
NSCOUNT: 0
ARCOUNT: 0

Question:
QNAME: www.example.com
QTYPE: A (1)
QCLASS: IN (1)

Struttura del messaggio di risposta:

Header:
ID: 0x1234
QR: 1 (Response)
OPCODE: 0 (Standard Query)
AA: 1 (Authoritative Answer)
RD: 1 (Recursion Desired)
RA: 1 (Recursion Available)
RCODE: 0 (No Error)
QDCOUNT: 1
ANCOUNT: 1
NSCOUNT: 0
ARCOUNT: 0

Question:
QNAME: www.example.com
QTYPE: A (1)
QCLASS: IN (1)

Answer:
NAME: www.example.com
TYPE: A (1)
CLASS: IN (1)
TTL: 3600
RDLENGTH: 4
RDATA: 93.184.216.34

Successivo: 5. Master Files (File Master)