KNOWLEDGE

Perché nel mondo esistono solo 13 gruppi di server root DNS?

Il vincolo rigido dei 512 byte UDP nel DNS fissa un tetto matematico di 13 gruppi: invariato dal 1997, oggi servito da ben oltre mille mirror anycast nel mondo.

In breve

Il protocollo DNS è stato progettato in origine per funzionare su IPv4 + UDP, dove il payload UDP massimo senza frammentazione è di 512 byte. L'elenco dei server root deve stare in un unico pacchetto di risposta UDP (per evitare il ripiego su TCP, che aggiunge latenza e complessità). Ricostruendo a ritroso il formato dei messaggi DNS, il numero massimo di server root che ci stanno è 13. Non è un numero scelto perché «bastava»: è un limite rigido del protocollo risalente al 1995, rimasto invariato da allora per compatibilità con miliardi di dispositivi.

1. Il vincolo rigido del protocollo: 512 byte

1.1 MTU IPv4 e UDP senza frammentazione

Le prime reti ARPANET / IPv4 imponevano un MTU minimo di 576 byte. Ogni host doveva poter ricevere pacchetti di queste dimensioni, altrimenti non si poteva garantire nemmeno la raggiungibilità di base (RFC 791).

RFC 791 — Internet Protocol, 1981, § 3.1 Total Length
Total Length is the length of the datagram, measured in octets,
including internet header and data.  This field allows the length of
a datagram to be up to 65,535 octets.  Such long datagrams are
impractical for most hosts and networks.  All hosts must be prepared
to accept datagrams of up to 576 octets (whether they arrive whole
or in fragments).  It is recommended that hosts only send datagrams
larger than 576 octets if they have assurance that the destination
is prepared to accept the larger datagrams.
  • 576 byte di lunghezza totale − 20 byte tipici di intestazione IP − 8 byte di intestazione UDP ≈ 548 byte utilizzabili (con le opzioni IP l'intestazione può arrivare a 60 byte, lasciando meno spazio)
  • La RFC 1035 § 4.2.1 ha scelto la potenza di due più prudente, 512 byte, come limite rigido per il DNS su UDP: un valore sicuro anche quando l'intestazione IP contiene tutte le opzioni
  • Se una risposta UDP supera i 512 byte deve essere troncata con il flag TC impostato, costringendo il client a ripiegare su TCP; e l'handshake TCP a tre vie moltiplica la latenza della prima risoluzione

In altre parole, «l'elenco completo dei server root deve stare in un unico pacchetto UDP da 512 byte»: altrimenti ogni query alla root nel mondo avrebbe dovuto passare su TCP, cosa che sull'hardware degli anni Ottanta sarebbe stata quasi catastrofica.

1.2 La struttura in byte del messaggio DNS

La struttura completa della risposta a una query dei record NS di . (il server restituisce tutti i record NS della root più i record glue A):

Header   (12 byte)

Formula della lunghezza totale:

L(N) = 12 + 5 + 31 + 15(N-1) + 16N = 31N + 33

Sostituendo il limite di 512 byte:

31N + 33 ≤ 512 ⇒ N ≤ 15.45

In teoria ci starebbero fino a 15 gruppi, ma serve margine per le firme DNSSEC, lo pseudo-record OPT di EDNS0 e il padding dei campi, quindi ci si è fermati a 13 gruppi: la RFC 2010 (1996) ha definito i criteri operativi dei server root e il numero non è più cambiato da quando, l'anno successivo, è entrato in servizio M-root.

1.3 Provalo tu stesso: <code>dig +noedns -t ns .</code> restituisce circa 490–510 byte

Questa è la teoria. Ora interroghiamo davvero un server root con dig e vediamo quanto è grande la risposta reale:

terminal — dig +noedns -t ns .
$ dig +noedns -t ns .

; <<>> DiG 9.10.6 <<>> +noedns -t ns .
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35973
;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 15

;; QUESTION SECTION:
;.                                IN      NS

;; ANSWER SECTION:
.                       430502  IN      NS      a.root-servers.net.
.                       430502  IN      NS      b.root-servers.net.
…  (13 record NS in totale, c–l omessi)
.                       430502  IN      NS      m.root-servers.net.

;; ADDITIONAL SECTION:
a.root-servers.net.     516909  IN      A       198.41.0.4
b.root-servers.net.     562547  IN      A       170.247.170.2
…  (ci stanno tutti i 13 record glue A)
m.root-servers.net.     516941  IN      A       202.12.27.33
a.root-servers.net.     516930  IN      AAAA    2001:503:ba3e::2:30
b.root-servers.net.     562547  IN      AAAA    2801:1b8:10::b
↑ ci stanno solo 2 record AAAA: il pacchetto è pieno

;; Query time: 8 msec
;; SERVER: 192.168.1.1#53
;; MSG SIZE  rcvd: 492

La riga chiave in fondo (una risposta totale di circa 490–510 byte, ben sotto i 512; il valore esatto dipende dalla root interrogata e da quanti record glue IPv6 vengono restituiti) corrisponde al budget di byte calcolato sopra. Nota il flag +noedns: per impostazione predefinita dig invia EDNS0, e la risposta supera abbondantemente gli 800 byte. È proprio per questo che i 512 byte hanno smesso di essere un limite rigido quando EDNS0 si è diffuso ovunque; ma a quel punto il 13 era già fissato.

2. Da dove viene il 13? Breve storia

Questo numero non è stato fissato fin dall'inizio. Il numero di server root è cresciuto in più fasi; dopo l'entrata in servizio di M-root (WIDE, Giappone) nel 1997 non è più cambiato:

AnnoNumeroEvento chiave
19844Progettazione iniziale del protocollo DNS, tutti i server negli Stati Uniti
19917Aggiunti nodi accademici e del Dipartimento della Difesa degli Stati Uniti
19959Entra RIPE NCC (K-root): il primo in Europa
199713Entra il WIDE Project (M-root): il primo in Asia, il numero viene fissato
200713Aggiunto il supporto dual stack IPv6, ma il «numero di gruppi» di IP resta invariato
202313USC-ISI sposta l'IP di B-root su 170.247.170.2 (il vecchio IP 199.9.14.201 viene dismesso)

Una volta fissato il 13, i nomi con le lettere dalla A alla M non cambiano mai: si aggiorna solo l'hardware e si aggiungono mirror anycast. Il file dei root hint di Internet (named.root) è da tempo incorporato nel codice di miliardi di resolver ricorsivi e client stub; cambiare un solo numero significherebbe aggiornare l'intera Internet.

3. Ma nel mondo ci sono davvero solo 13 macchine?

No. È l'equivoco più diffuso. «13 gruppi di server root» indica 13 nomi NS (a–m.root-servers.net), ciascuno associato a un indirizzo IPv4 e a uno IPv6, non 13 macchine fisiche.

Dietro ogni IP c'è un cluster anycast: lo stesso indirizzo IP viene annunciato via BGP contemporaneamente da centinaia di datacenter nel mondo e la query DNS dell'utente viene instradata al mirror più vicino in termini di RTT. Quando un server root «va giù», di solito significa solo che il mirror di una città è in manutenzione: la risoluzione globale non ne risente.

Stato dei 13 gruppi di server root nel 2024

LetteraGestoreIPv4IPv6Mirror anycast
AVerisign, Inc.198.41.0.42001:503:ba3e::2:3053
BInformation Sciences Institute (USC)170.247.170.22801:1b8:10::b6
CCogent Communications192.33.4.122001:500:2::c12
DUniversity of Maryland199.7.91.132001:500:2d::d187
ENASA Ames Research Center192.203.230.102001:500:a8::e254
FInternet Systems Consortium192.5.5.2412001:500:2f::f274
GUS DOD Network Information Center192.112.36.42001:500:12::d0d6
HUS Army Research Laboratory198.97.190.532001:500:1::5317
INetnod192.36.148.172001:7fe::5375
JVerisign, Inc.192.58.128.302001:503:c27::2:30168
KRIPE NCC193.0.14.1292001:7fd::1113
LICANN199.7.83.422001:500:9f::42218
MWIDE Project202.12.27.332001:dc3::3512
Totale mirror anycast (2024)1395

La Cina continentale (Pechino, Shanghai, Shenzhen, Canton, Hefei e altre città) ospita nodi mirror anycast di diversi server root, tra cui F / I / J / K / L; l'RTT misurato verso i server root dall'interno della Cina è in genere inferiore a 20ms.

4. Dopo EDNS0, i 512 byte hanno smesso di essere un vero limite

Potresti chiederti: oggi i pacchetti DNS da 4KB o più sono comuni, quindi perché non «superare il 13»?

  • EDNS0 (RFC 2671 nel 1999, oggi RFC 6891): negozia un payload UDP più grande (di solito 4096 byte) ed è supportato da tutti i resolver moderni
  • DNSSEC richiede obbligatoriamente EDNS0, perché i soli dati delle firme superano di gran lunga i 512 byte
  • Fallback su TCP: oggi l'handshake TCP a tre vie più TLS / cookie costa già poco

Ma l'elenco dei server root oggi è un consenso condiviso da tutta la rete: ogni resolver ricorsivo sulla Terra ha questi 13 gruppi scritti nel proprio file di hint (named.root), e dietro quei resolver ci sono miliardi di dispositivi. L'incentivo a cambiare è nullo e il rischio è una frattura di Internet a livello globale, quindi questo numero resterà quasi certamente 13 per sempre.

In sintesi: i «13 gruppi» sono superati da tempo sul piano fisico, ma impossibili da ribaltare sul piano ingegneristico.

5. Punti chiave

  1. Motivo storico: il limite di 512 byte del DNS su UDP → un tetto matematico di 15 gruppi → scelti 13 per avere margine, fissati con l'entrata in servizio di M-root nel 1997
  2. Inerzia del protocollo: aggiornare i file di hint su miliardi di dispositivi non è realistico, quindi non cambierà mai
  3. Capacità reale: 1395+ nodi mirror anycast, che rendono quasi nullo il rischio di un singolo punto di guasto
  4. Raggiungibili dalla Cina: diversi server root, tra cui F / I / J / K / L, hanno mirror nella Cina continentale, con un RTT misurato < 20ms

Approfondimenti

mimetic
mimetic
mimetic