Condividi tramite


Formati di messaggio DNS

Questo articolo illustra la struttura e il formato dei messaggi DNS (Domain Name System) negli ambienti Windows e Windows Server. Comprendere i formati di messaggi DNS è essenziale per gli amministratori del server DNS che devono analizzare il traffico DNS, risolvere i problemi di risoluzione dei nomi e ottimizzare le prestazioni DNS.

DNS usa formati di messaggio standardizzati per la comunicazione tra client e server. Tutti i messaggi DNS, che si tratti di query, risposte o aggiornamenti, seguono una struttura comune con campi specifici che determinano come vengono elaborate le informazioni. Questo articolo illustra i tre tipi principali di messaggi DNS e ne suddivide i componenti per comprendere il funzionamento della comunicazione DNS a livello di protocollo.

Protocolli e standard DNS

DNS in Windows e Windows Server rispetta gli standard e i protocolli di settore definiti dalla Internet Engineering Task Force (IETF). Il protocollo DNS principale è specificato in RFC 1035, che descrive il formato dei messaggi DNS, incluse query e risposte. Altri standard, ad esempio RFC 2136 per gli aggiornamenti dinamici e RFC 4033 per DNS Security Extensions (DNSSEC), migliorano le funzionalità e la sicurezza del DNS.

Il protocollo DNS è costituito da diversi tipi di messaggi DNS elaborati in base alle informazioni nei relativi campi messaggio. Questa sezione illustra i tipi di messaggi DNS e i campi in ogni tipo di messaggio.

Esistono tre tipi di messaggi DNS:

  • Queries

  • Responses

  • Updates

Le query e le risposte sono definite nello standard DNS originale e gli aggiornamenti sono definiti in RFC 2136. Tutti e tre i tipi seguono un formato di messaggio comune.

Per altre informazioni sui formati di messaggio, espandere le sezioni seguenti.

Formato del messaggio di query DNS

Il formato comune dei messaggi DNS ha un'intestazione a lunghezza fissa, a 12 byte e una posizione variabile riservata per i record di domande, risposte, autorità e risorse DNS aggiuntive. Il formato di messaggio comune può essere illustrato come segue:

Formato del messaggio di query DNS standard

  • Intestazione DNS (lunghezza fissa)
  • Voci di domanda (lunghezza variabile)
  • Rispondere ai record delle risorse (lunghezza variabile)
  • Record di risorse autoritative (lunghezza variabile)
  • Record di risorse aggiuntivi (lunghezza variabile)

Intestazione del messaggio di query DNS

L'intestazione del messaggio DNS contiene i campi seguenti, nell'ordine seguente:

Campi dell'intestazione del messaggio di query DNS

  • ID transazione:
    Campo a 16 bit che identifica una transazione DNS specifica. L'ID transazione viene creato dall'originatore del messaggio e viene copiato dal risponditore nel messaggio di risposta. Usando l'ID transazione, il client DNS può associare le risposte alle richieste.

  • Flags:
    Un campo a 16 bit contenente vari flag di servizio comunicati tra il client DNS e il server, tra cui:

    • Richiesta/risposta: campo a 1 bit impostato su 0 per una richiesta o 1 per una risposta.
    • Codice operazione: campo a 4 bit che rappresenta l'operazione del servizio dei nomi del pacchetto; 0x0 è una query.
    • Risposta autorevole: campo a 1 bit che indica che il risponditore è autorevole per il nome di dominio sottoposto a query.
    • Troncamento: campo a 1 bit impostato su 1 se il numero totale di risposte supera le dimensioni del datagramma UDP. A meno che non siano abilitati datagrammi UDP superiori a 512 byte o EDNS0, vengono restituiti solo i primi 512 byte della risposta UDP.
    • Ricorsione desiderata: campo a 1 bit impostato su 1 per una query ricorsiva e 0 per le query iterative. Se impostato su 0, il server DNS restituisce un elenco di altri server DNS dai dati della cache locale.
    • Ricorsione disponibile: campo a 1 bit impostato da un server DNS su 1 se può gestire query ricorsive. Se la ricorsione è disabilitata, il server imposta il campo in modo appropriato.
    • Riservato: campo a 3 bit riservato e impostato su 0.
    • Codice restituito: campo a 4 bit contenente il codice restituito:
      • 0: risposta riuscita (la risposta alla query è nella risposta).
      • 0x3: errore del nome, che indica che un server DNS autorevole ha risposto che il nome di dominio non esiste. Per altre informazioni sui codici restituiti, vedere RCODE DNS IANA.
  • Conteggio record risorsa domanda:
    Campo a 16 bit che rappresenta il numero di voci nella sezione della domanda del messaggio DNS.

  • Conteggio record di risposta:
    Campo a 16-bit che rappresenta il numero di voci presenti nella sezione della risposta del messaggio DNS.

  • Conteggio record di risorsa autoritaria:
    Campo a 16 bit che rappresenta il numero di record di risorse dell'autorità nel messaggio DNS.

  • Conteggio record risorse aggiuntivo:
    Campo a 16 bit che rappresenta il numero di record di risorse aggiuntivi nel messaggio DNS.

Voci di richiesta delle query DNS

La sezione delle domande del messaggio DNS contiene il nome di dominio su cui viene eseguita una query e include i tre campi seguenti:

  • Nome domanda:
    Nome di dominio sottoposto a query. I nomi di dominio DNS sono espressi come una serie di etichette (ad esempio, microsoft.com). Nel campo Nome domanda il nome di dominio viene codificato come una serie di coppie di valori di lunghezza: un campo a 1 byte che indica la lunghezza dell'etichetta, seguita dall'etichetta stessa. Ad esempio, microsoft.com viene codificato come 0x09microsoft0x03com0x00, dove le cifre esadecimali rappresentano le lunghezze delle etichette, i caratteri ASCII sono le etichette e l'ultima 0 indica la fine del nome.

  • Tipo di domanda:
    Intero a 16 bit che rappresenta il tipo di record di risorsa da restituire. I valori comuni includono:

    • 0x01: record host (A)
    • 0x02: record del server dei nomi (NS)
    • 0x05: record alias (CNAME)
    • 0x0C (12): record di reverse-lookup (PTR)
    • 0x0F (15): Record MX (Mail Exchange)
    • 0x21 (33): Record del servizio (SRV)
    • 0xFB (251): Trasferimento di zona incrementale (IXFR) record
    • 0xFC (252): Trasferimento dello standard di zona (record AXFR)
    • 0xFF (255): Tutti i record
  • Classe Question:
    Rappresenta la classe di domande IN (Internet), in genere impostata su 0x0001.

Messaggio di risposta della query DNS

Le sezioni di risposta, autorità e informazioni aggiuntive di un messaggio di risposta DNS possono contenere record di risorse che rispondono alla sezione della domanda del messaggio di query. I record delle risorse vengono formattati come segue:

  • Record di risorsa: il nome di dominio DNS registrato come campo a lunghezza variabile seguendo la stessa formattazione del campo Nome della query.
  • Tipo di record di risorsa: valore del tipo di record della risorsa.
  • Classe record di risorse: il codice della classe del record di risorse, la classe Internet 0x0001.
  • Durata :TTL espresso in secondi come campo senza segno a 32 bit.
  • Lunghezza dati risorsa: campo a 2 byte che indica la lunghezza dei dati della risorsa.
  • Dati risorsa: dati a lunghezza variabile corrispondenti al tipo di record della risorsa.

Il campo Nome record risorsa viene codificato nello stesso modo del campo Nome domanda, a meno che il nome non sia già presente altrove nel messaggio DNS, nel qual caso viene usato un campo a 2 byte al posto di un nome codificato con valore di lunghezza e funge da puntatore al nome già presente.

Formato del messaggio di query per il nome

Un formato di messaggio Query nome è identico al formato del messaggio DNS descritto in precedenza. In un tipico messaggio di Query dei nomi i campi del messaggio DNS vengono impostati come segue:

  • Identificatore di query (ID transazione):
    Impostare su un numero univoco per consentire al sistema di risoluzione del client DNS di trovare la corrispondenza con la risposta alla query. L'ID transazione di risposta alla query corrisponde sempre all'ID transazione della richiesta di query.

  • Flags:
    Impostare per indicare una query standard con ricorsione abilitata.

  • Conteggio domande:
    Impostare su 1.

  • Immissione domanda:
    Imposta il nome di dominio sottoposto a query e il tipo di record di risorsa da restituire.

Formato del messaggio di risposta alla query del nome

Un messaggio di risposta a una query di nome ha lo stesso formato del messaggio DNS descritto in precedenza. In un tipico messaggio di query dei nomi, i campi del messaggio DNS vengono impostati come segue:

  • Identificatore di query (ID transazione):
    Impostare su un numero univoco per consentire al sistema di risoluzione del client DNS di trovare la corrispondenza con la risposta alla query.

  • Flags:
    Impostare per indicare una query standard con ricorsione abilitata.

  • Conteggio domande:
    Impostare su 1.

  • Immissione domanda:
    Imposta il nome di dominio sottoposto a query e il tipo di record di risorsa da restituire.

Formato del messaggio di query inversa del nome

I messaggi di query con nome inverso usano il formato di messaggio comune con le differenze seguenti:

  • Il sistema di risoluzione del client DNS costruisce il nome di dominio nel dominio in-addr.arpa in base all'indirizzo IP su cui viene eseguita una query.

  • Viene eseguita una query su un record di risorse pointer (PTR) anziché su un record di risorse host (A).

Aggiornare il formato del messaggio

Il formato del messaggio di aggiornamento DNS usa un'intestazione che definisce l'operazione di aggiornamento da eseguire e un set di record di risorse che contiene l'aggiornamento. Il formato del messaggio di aggiornamento DNS include i campi seguenti:

  • Identification. Identificatore a 16 bit assegnato dal richiedente client DNS. Questo identificatore viene copiato nella risposta corrispondente e può essere usato dal richiedente per trovare le risposte alle richieste in sospeso o dal server per rilevare richieste duplicate da parte di un richiedente.

  • Flags. Campo flag di messaggio di aggiornamento DNS a 16 bit. Per una descrizione di ogni flag, vedere il campo "Dns Update Message Flags" di seguito.

  • Numero di voci di zona. Numero di record di risorse nella sezione Voce zona.

  • Numero di record di risorse prerequisiti. Numero di record di risorse nella sezione Record delle risorse prerequisiti.

  • Numero di record di risorse di aggiornamento. Il numero di record nella sezione di aggiornamento dei record di risorse.

  • Numero di record di risorse aggiuntivi. Numero di record di risorse nella sezione Record di risorse aggiuntivi.

  • Voce zona. Indica la zona dei record da aggiornare. Tutti i record da aggiornare devono trovarsi nella stessa zona e pertanto la sezione zona può contenere esattamente un record. Ha tre valori: ZNAME è il nome della zona, ZTYPE deve essere SOA e ZCLASS è la classe della zona.

  • Record di risorse prerequisiti. Contiene un set di prerequisiti del record di risorse che devono essere soddisfatti al momento della ricezione del messaggio di aggiornamento dal server DNS master. Esistono cinque possibili set di valori che possono essere espressi:

    • Il set di record di risorse esiste (indipendente dal valore). Deve esistere almeno un record di risorse con un nome e un tipo specificati (nella zona e nella classe specificata dalla sezione Zona).

    • Il set di record di risorse esiste (dipendente dal valore). Esiste un set di record di risorse con un nome e un tipo specificati e ha gli stessi membri con gli stessi dati del set di record di risorse specificato in questa sezione.

    • Il set di record di risorse non esiste. Non esistono record di risorse con un nome e un tipo specificati (nella zona e nella classe indicati dalla sezione Zone).

    • Il nome è in uso. Esiste almeno un record di risorsa con un nome specificato (nella zona e nella classe specificata dalla sezione Zone). Questo prerequisito non è soddisfatto da non terminali vuoti.

    • Il nome non è in uso. Nessun record di risorse di alcun tipo è di proprietà di un nome specificato. Questo prerequisito è soddisfatto da non terminali vuoti.

  • Aggiornare i record delle risorse. Contiene i record di risorse da aggiungere o eliminare dalla zona. Una delle quattro operazioni viene eseguita durante l'aggiornamento:

    • Aggiungere record di risorse a un set di record di risorse.

    • Eliminare un set di record di risorse.

    • Eliminare tutti gli insiemi di record delle risorse associati a un nome.

    • Eliminare un record di risorsa da un set di record di risorse.

  • Record di risorse aggiuntivi. Contiene record di risorse correlati all'aggiornamento o ai nuovi record di risorse aggiunti dall'aggiornamento.

Campo flag del messaggio di aggiornamento DNS

Il campo Flag di messaggio di aggiornamento DNS usa i flag seguenti:

  • Request/response. Campo a 1 bit impostato su 0 per rappresentare una richiesta di aggiornamento e 1 per rappresentare una risposta di aggiornamento.

  • Codice dell'operazione. Campo a 4 bit impostato su 0x5 per gli aggiornamenti DNS.

  • Reserved. Campo riservato a 7 bit impostato su 0.

  • Codice restituito. Campo a 4 bit contenente codici per rappresentare il risultato della query di aggiornamento. I codici sono i seguenti:

    • 0 (NOERROR): nessun errore; aggiornamento riuscito.
    • 1 (EXR): Errore di formato; Il server DNS non ha compreso la richiesta di aggiornamento.
    • 0x2 (SERVFAIL): si è verificato un errore interno del server DNS, ad esempio un timeout di inoltro.
    • 0x3 (NXDOMAIN): nome che deve esistere.
    • 0x4 (NOTIMP): il server DNS non supporta il codice operazione specificato.
    • 0x5 (RIFIUTATO): il server DNS rifiuta di eseguire l'aggiornamento.
    • 0x6 (YXDOMAIN): nome che non deve esistere.
    • 0x7 (YXRRSET): set di record di risorse che non deve esistere.
    • 0x8 (NXRRSET): set di record di risorse che deve esistere non esiste.
    • 0x9 (NOTAUTH): il server DNS non è autorevole per la zona denominata nella sezione Zona.
    • 0xA (NOTZONE): un nome usato nelle sezioni Prerequisiti o Aggiornamento non si trova all'interno della zona specificata dalla sezione Zona.

Formato del messaggio di risposta di aggiornamento dinamico

Il messaggio di risposta di aggiornamento dinamico segue lo stesso formato del messaggio di aggiornamento DNS, ad eccezione dei flag DNS. I flag di intestazione del messaggio di risposta all'aggiornamento dinamico indicano se l'aggiornamento sia riuscito includendo il codice di risposta riuscito o uno dei codici di errore descritti nei flag del messaggio di aggiornamento DNS.