Nekoč smo zapisali: »Imamo 13 zapisov o korenskih strežnikih, ki so na rezervirani domeni root-servers.net. Strežniki so poimenovani po abecedi od A.root-servers.net do M.root-servers.net.« Pod opombami pa navedli: »Zapisov o korenskih strežnikih je 13 zaradi originalne omejitve velikosti paketa DNS. Ta je 512 B, in če želimo odgovor shraniti v en datagram UDP, je največje število »povezav« do strežnikov, ki so lahko v odgovor vključene, 13.«

Dobro poučeni o sistemu DNS radi pokažejo, da obvladajo zgornje argumentiranje. Pa poglejmo, ali omenjena interpretacija sploh drži.

O 512 bajtih

Ker ne želimo, da bi se paketki na poti po internetu fragmentirali, omejimo največjo velikost UDP-datagrama na dovolj nizko vrednost, da jo bodo lahko prenesli vsi mediji po internetu v enem kosu. Tako so velikost DNS-ja po protokolu UDP določili na 512 B.

Standard RFC 791 iz leta 1981 namreč določa največjo predpisano velikost paketka, ki se mora po omrežju prenesti brez drobljenja – torej v enem kosu – kot 576 B. 576 B seveda vsebuje tudi velikost režijskih podatkov (glav protokola IP(v4) in UDP). Glava protokola IP je tipično velika 20 B, protokola UDP pa 8 B. 576 minus 28 je 548. Ostalo pa za rezervo (512 je vseeno lepa številka: potenca števila 2, če ne drugo). Ah, saj imamo v IP-glavi tudi opcijska polja. V IP-glavi lahko vsota vseh opcijskih polj znaša 40 B, torej imamo lahko IP-glave velike tudi po 60 B. Prištejemo 8 bajtov UDP-glave. 576 minus 68 pa znaša 508. Ojoj, pravkar smo dokazali, da mit o največji dolžini DNS UDP-paketa, vsaj po teoriji, ne drži!

Nekoč jih nismo prešteli 13

Internet, pa tudi protokol DNS, sta na začetku civilne uporabe bila predvsem domena raziskovalnih ustanov. Korenski DNS-strežniki so takrat tekli v domenah ameriške vojske, v domenah agencij, ki iščejo Nezemljane, in seveda tudi v raziskovalnih ustanovah, natančneje v nekaj domenah ameriških univerz. Število imenskih strežnikov korenske domene je hitro raslo (pred letom 1995 jih je bilo 9) in obstajala je nevarnost, da bo DNS-odgovor za korensko domeno presegel magično mejo 512 B. Zato so bili leta 1995 vsi korenski strežniki preimenovani in postavljeni v domeno root-servers.net. Prav tako je bilo število v DNS-sporočilu objavljenih korenskih strežnikov fiksno zastavljeno na 13, ker je menda to največje mogoče število, ki ga še lahko spravijo v 512 B.

Gremo »štrikat«

Teorijo lahko seveda preizkusimo tudi sami, saj je korenska cona na internetu javno dostopna za prenos. Lahko jo prenesemo s spleta in namestimo v lastni DNS-strežnik.

Vprašanje, ki ga zastavimo, je vprašanje po vseh imenskih strežnikih za korensko domeno. V odgovoru bomo prejeli vseh 13 zapisov o imenskih strežnikih, poleg tega pa še njihove IP-naslove – slednjim zapisom pravimo lepljivi zapisi (angl. glue records).

V preneseni korenski coni najprej odstranimo vse IPv6-lepljive zapise (v nadaljevanju je pojasnjeno, zakaj) ter dodamo še 1 zapis o imenskih strežnikih (n.root-servers.net) in zanj IPv4-lepljivi zapis. Vprašamo 'dig ns . @127.0.0.1'. Odgovor je manjši od 512 bajtov. Ker vidimo, da je v odgovoru še dovolj prostora, dodamo še en zapis o imenskih strežnikih (o.root-servers.net) in zanj IPv4-lepljivi zapis. Ponovno uporabimo 'dig ns . @127.0.0.1' in v manj kot 512 B odgovora dobimo 15 korenskih DNS-strežnikov z navedenimi vsemi petnajstimi pripadajočimi IPv4-lepljivimi zapisi.

Med proslavljanjem se spomnimo vprašanja po SOA-zapisu. Gre za zapis, ki ga ima vsaka cona, vsebuje pa informacije o primarnem DNS-strežniku, elektronskem naslovu upravljavca cone in čase osveževanja datoteke cone na sekundarnih DNS-strežnikih. Odgovor na to vprašanje poleg zapisa SOA vrne tudi vse imenske strežnike z vsemi pripadajočimi lepljivimi zapisi. In je večji od 512 B, če število korenskih strežnikov presega število 13.

Razočarani, da nismo odkrili pravzaprav ničesar, vseeno razmišljamo naprej. Če igramo po pravilih sistema, ne moremo iz njega. Če so jih hoteli 13, so že zastavili tako, da bodo našli sto in še en razlog, da jih mora biti 13. Spomnimo pa se še elektronskega naslova v zapisu SOA-domene. Zakaj ne bi bil kar na domeni root-servers.net, na primer dns@root-servers.net? Po tem posegu dobimo želeni rezultat, saj je zdaj odgovor na SOA-zapis po domeni root-servers.net velik 506 B. Dokazali smo, da lahko v 512 B spravimo tudi 14 korenskih strežnikov, le še malo bolj varčevati je treba!


IPv6 in DNSSEC

Omejitev na 13 zapisov o DNS-strežnikih je bila tehnično bistvena, dokler korenski strežniki niso začeli delovati tudi po protokolu IPv6. Če zdaj vprašate 'dig ns .', boste v odgovoru sicer dobili navedenih vseh 13 zapisov o korenskih DNS-strežnikih, lepljivih zapisov pa boste prejeli manj (kolikor je še sprejemljivo, da odgovor ne preseže 512 B).

Uporaba varnostne razširitve protokola DNS – DNSSEC je velikost odgovorov še bistveno povečala. Internet je že dovolj dorasel, da UDP-fragmenti ne predstavljajo tolikšnega problema, poleg tega pa protokol DNS ponuja možnost uporabe razširitve EDNS0, ki omogoča večje DNS-pakete UDP od 512 B (če je DNS-paket prevelik za UDP, se sicer uporabi transportni protokol TCP).

Od vpeljave tehnologij IPv6 in DNSSEC v sistem DNS se »omejitev« na 13 zapisov o korenskih DNS-strežnikih uporablja zgolj še iz zgodovinskih, nostalgičnih in morda celo organizacijsko-političnih razlogov.

Moj mikro, marec - april 2014 | Dušan Kozic in Matej Breznik, Arnes |