Guida Tecnica del Protocollo DNS (RFC 1035)
Questo documento è una guida tecnica dettagliata di RFC 1035, che include formato dei messaggi, tipi di record di risorse, esempi pratici e istruzioni sull'uso degli strumenti. Per le traduzioni dei capitoli ufficiali RFC, consultare i documenti di ciascun capitolo.
Informazioni sul documento
- Numero RFC: 1035
- Titolo: Domain Names - Implementation and Specification
- Titolo (Italiano): Nomi di dominio - Implementazione e specifica
- Data di pubblicazione: Novembre 1987
- Autore: P. Mockapetris (USC/Information Sciences Institute)
- Stato: INTERNET STANDARD (STD 13)
Riepilogo
Questo RFC definisce i dettagli di implementazione del DNS (Domain Name System), inclusi formato dei messaggi, formato dei record di risorse e specifiche di comportamento per name server e resolver. Questo documento è complementare a RFC 1034 (Concetti e strutture DNS), dove RFC 1034 definisce i concetti e questo documento definisce l'implementazione specifica.
Concetto centrale: RFC 1035 è la specifica di implementazione DNS, che definisce formato dei messaggi, tipi di record e dettagli di implementazione.
Relazione con RFC 1034
RFC 1034 (Concetti) RFC 1035 (Implementazione)
───────────────── ─────────────────
✓ Cos'è DNS → ✓ Formato messaggi
✓ Struttura nomi → ✓ Formato record risorse
✓ Architettura server → ✓ Algoritmi risoluzione
✓ Strategia cache → ✓ Meccanismo compressione
✓ Tipi di query → ✓ Dettagli protocollo
Raccomandazione:
Prima leggere RFC 1034 per comprendere i concetti
Poi RFC 1035 per comprendere l'implementazione
Formato dei messaggi DNS
Struttura del messaggio
Tutti i messaggi DNS utilizzano lo stesso formato:
+---------------------+
| Header | 12 byte, fisso
+---------------------+
| Question | Sezione domande (lunghezza variabile)
+---------------------+
| Answer | Sezione risposte (lunghezza variabile)
+---------------------+
| Authority | Sezione autorità (lunghezza variabile)
+---------------------+
| Additional | Sezione aggiuntiva (lunghezza variabile)
+---------------------+
Formato dell'intestazione
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 |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
Lunghezza totale: 12 byte
Dettagli dei campi
ID (16 bit): Corrispondenza query/risposta. Intervallo: 0-65535
QR (1 bit): 0 = Query, 1 = Response (Risposta)
Opcode (4 bit): 0 = QUERY (query standard), 1 = IQUERY (obsoleto), 2 = STATUS
AA (1 bit): Authoritative Answer - Flag risposta autoritativa
TC (1 bit): Truncation - Flag troncamento (superamento UDP 512 byte)
RD (1 bit): Recursion Desired - Ricorsione desiderata
RA (1 bit): Recursion Available - Ricorsione disponibile
Z (3 bit): Riservato (deve essere 0)
RCODE (4 bit): Response Code
| RCODE | Significato | Descrizione |
|---|---|---|
| 0 | NOERROR | Successo |
| 1 | FORMERR | Errore di formato |
| 2 | SERVFAIL | Errore del server |
| 3 | NXDOMAIN | Nome di dominio inesistente |
| 4 | NOTIMP | Non supportato |
| 5 | REFUSED | Query rifiutata |
Formato sezione Question
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| |
/ QNAME /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QTYPE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QCLASS |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
QNAME: Nome di dominio da interrogare (lunghezza variabile)
QTYPE: Tipo di query (16 bit)
QCLASS: Classe di query (16 bit, di solito 1=IN)
Codifica QNAME
Nome di dominio: www.example.com
Codifica:
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|03| w w w |07| e x a m p l e |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|02| c o m |00|
+--+--+--+--+--+
Formato:
- Lunghezza prima di ogni etichetta (1 byte)
- Contenuto etichetta (caratteri ASCII)
- Termina con 0
Esempio: "www.example.com" = 3 "www" 7 "example" 3 "com" 0
Nome di dominio radice: 0 (singolo byte 0)
QTYPE (Tipo di query)
| Valore | Tipo | Descrizione |
|---|---|---|
| 1 | A | Indirizzo IPv4 |
| 2 | NS | Name server |
| 5 | CNAME | Nome canonico (alias) |
| 6 | SOA | Inizio autorità |
| 12 | PTR | Puntatore (risoluzione inversa) |
| 15 | MX | Scambio posta |
| 16 | TXT | Record di testo |
| 28 | AAAA | Indirizzo IPv6 |
| 255 | ANY | Tutti i record (non consigliato) |
Dettagli dei tipi di record di risorse
Record A - Indirizzo IPv4
TYPE = 1
RDLENGTH = 4 (byte)
RDATA = Indirizzo IPv4 a 32 bit
Esempio:
NAME: example.com
TYPE: A (1)
CLASS: IN (1)
TTL: 3600
RDLENGTH: 4
RDATA: 93.184.216.34
Codifica (RDATA):
93.184.216.34 → 0x5DB8D822
Record NS - Name server
TYPE = 2
RDATA = Nome di dominio del name server
Esempio:
NAME: example.com
TYPE: NS (2)
TTL: 86400
RDATA: ns1.example.com
Significato: Il server autoritativo per example.com è ns1.example.com
Record CNAME - Alias
TYPE = 5
RDATA = Nome canonico
Esempio:
NAME: www.example.com
TYPE: CNAME (5)
TTL: 3600
RDATA: example.com
Significato: www.example.com è un alias per example.com
Flusso di query:
Query www.example.com A
→ Restituisce CNAME example.com
→ Continua query example.com A
→ Restituisce 93.184.216.34
Record SOA - Inizio autorità
TYPE = 6
Formato RDATA:
MNAME: Name server primario
RNAME: Casella di posta responsabile
SERIAL: Numero di serie
REFRESH: Intervallo di aggiornamento
RETRY: Intervallo di nuovo tentativo
EXPIRE: Tempo di scadenza
MINIMUM: TTL minimo
Esempio:
NAME: example.com
TYPE: SOA (6)
TTL: 86400
RDATA:
MNAME: ns1.example.com
RNAME: admin.example.com ([email protected])
SERIAL: 2024010101
REFRESH: 3600
RETRY: 600
EXPIRE: 604800
MINIMUM: 86400
Scopo:
- Identificare informazioni autorità zona
- Controllare trasferimenti zona
- Impostare politiche cache
Record MX - Scambio posta
TYPE = 15
Formato RDATA:
PREFERENCE: Priorità (16 bit)
EXCHANGE: Nome di dominio del server di posta
Esempio:
NAME: example.com
TYPE: MX (15)
TTL: 3600
RDATA:
PREFERENCE: 10
EXCHANGE: mail1.example.com
Più record MX:
example.com MX 10 mail1.example.com
example.com MX 20 mail2.example.com
example.com MX 30 mail3.example.com
Elaborazione:
- Priorità a valori numerici inferiori
- Selezione casuale per stessa priorità
- Provare il successivo in caso di errore
Compressione messaggi DNS
Per comprimere nomi di dominio duplicati, DNS utilizza puntatori:
Formato di compressione:
Lunghezza etichetta nome di dominio:
- 00-3F: Lunghezza etichetta normale (0-63)
- C0-FF: Puntatore (11xxxxxx xxxxxxxx)
Formato puntatore:
11 <offset 14 bit>
Esempio:
Messaggio originale:
Offset 12: 3 "www" 7 "example" 3 "com" 0
Offset 30: 7 "example" 3 "com" 0
Dopo compressione:
Offset 12: 3 "www" 7 "example" 3 "com" 0
Offset 30: C0 0x11 (punta a offset 12+4="example")
Risparmio:
30: "example.com" (12 byte)
Compresso: C0 0x11 (2 byte)
Risparmio: 10 byte
Strumenti pratici
Comando dig dettagliato
# Query di base
dig example.com
# Specificare tipo di record
dig example.com A # IPv4
dig example.com AAAA # IPv6
dig example.com MX # Server di posta
dig example.com NS # Name server
dig example.com TXT # Record di testo
# Specificare server DNS
dig @8.8.8.8 example.com
# Tracciare percorso query
dig +trace example.com
# Output breve
dig +short example.com
# Risoluzione inversa
dig -x 93.184.216.34
# Query TCP
dig +tcp example.com
Uso di nslookup
# Modalità interattiva
nslookup
> example.com
> set type=MX
> example.com
> exit
# Modalità riga di comando
nslookup example.com
nslookup -type=MX example.com
nslookup -type=NS example.com
Comando host
# Query semplice
host example.com
# Output dettagliato
host -v example.com
# Specificare tipo di record
host -t MX example.com
host -t NS example.com
Riferimenti
RFC di base:
- [RFC 1034] Domain Names - Concepts and Facilities
- [RFC 1035] Domain Names - Implementation and Specification ← Questo documento
Estensioni e aggiornamenti:
- [RFC 2181] Clarifications to the DNS Specification
- [RFC 2308] Negative Caching of DNS Queries (DNS NCACHE)
- [RFC 4033-4035] DNSSEC
- [RFC 6891] Extension Mechanisms for DNS (EDNS(0))
Protocolli correlati:
- [RFC 8484] DNS Queries over HTTPS (DoH)
- [RFC 7858] DNS over TLS
Riepilogo: RFC 1035 definisce i dettagli di implementazione del DNS ed è un documento chiave per comprendere i principi di funzionamento del protocollo DNS. Dal formato dei messaggi ai record di risorse, dal flusso di query al meccanismo di compressione, questo RFC fornisce specifiche dettagliate per tutte le implementazioni DNS. Insieme a RFC 1034, comprenderete completamente il sistema DNS!