Passa al contenuto principale

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)

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

RCODESignificatoDescrizione
0NOERRORSuccesso
1FORMERRErrore di formato
2SERVFAILErrore del server
3NXDOMAINNome di dominio inesistente
4NOTIMPNon supportato
5REFUSEDQuery 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)

ValoreTipoDescrizione
1AIndirizzo IPv4
2NSName server
5CNAMENome canonico (alias)
6SOAInizio autorità
12PTRPuntatore (risoluzione inversa)
15MXScambio posta
16TXTRecord di testo
28AAAAIndirizzo IPv6
255ANYTutti 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!