Every name you type is answered by a system designed in 1983 to fix one specific problem: a single text file that the whole network had to copy. How names turn into addresses today is in networks · DHCP & DNS. This chapter is the story behind it: the file, the tree that replaced it, the handful of people who kept the names, the summer of 2008 when forged answers became everyone's problem, the signing of the root, and the move to sealed envelopes. Every date here comes with the document that records it.
Common mix-up: ICANN does not "run the DNS." It coordinates what goes into the root zone (the IANA functions). The root servers themselves are 13 named authorities run by 12 independent organizations, from Verisign, which runs two of them, to NASA, the US Army, RIPE NCC and the WIDE Project. Everything below the root, which is almost all of the DNS, is run by the millions of organizations that own the names.
Before the Domain Name System, the ARPANET had a phone book, and there was exactly one of it. The Network Information Center at SRI International, in Menlo Park, California, kept a text file called HOSTS.TXT that listed every host on the network: its name, its address, the kind of machine and the services it offered. If you wanted your computer to reach another one by name, your computer needed a recent copy of that file.
The format was written down in RFC 810, the "DoD Internet Host Table Specification," in March 1982, and revised in RFC 952 in October 1985. Each line was a record: NET, GATEWAY or HOST, then fields separated by colons. Changes went to the NIC by mail or telephone; the NIC edited the master copy; and every host on the network fetched the whole file again by FTP. A companion document, RFC 953, defined a small "hostname server" that let a machine ask the NIC for the table over the network.
; illustrative host table in the RFC 952 format ; (names and addresses are documentation examples, not historical entries) NET : 192.0.2.0 : EXAMPLE-NET : HOST : 192.0.2.10 : NIC.EXAMPLE,NIC : DEC-2060 : TOPS20 : TCP/TELNET,TCP/FTP : HOST : 192.0.2.25 : MAIL.EXAMPLE : VAX-11/780 : UNIX : TCP/SMTP : HOST : 192.0.2.40 : LAB-3.EXAMPLE,LAB3 : SUN-2 : UNIX : TCP/TELNET :
That design is easy to love. There is one source of truth, lookups never touch the network, and anyone can read the whole thing. Your computer still has its descendant: /etc/hosts on Linux and macOS, C:\Windows\System32\drivers\etc\hosts on Windows, checked before the DNS on most systems. It is the reason a single line in that file can still override the whole internet for one machine.
RFC 1034 opens with the reasons the file could not last, and they are worth reading in the original. The first is arithmetic:
"The total network bandwidth consumed in distributing a new version by this scheme is proportional to the square of the number of hosts in the network, and even when multiple levels of FTP are used, the outgoing FTP load on the NIC host is considerable. Explosive growth in the number of hosts didn't bode well for the future."RFC 1034, section 2.1, "The history of domain names" (November 1987)
The second was organizational. The ARPANET's big time-shared machines were being replaced by local networks full of workstations, and the organizations that owned them were already managing their own names and addresses. They had to wait for the NIC before a change was visible to anyone else, and they wanted structure of their own, not one flat list. The third was that applications, mail above all, needed a general-purpose way to look things up, not just "name to address."
The square law deserves a moment, because it is the whole story in one line. If there are n hosts and each entry is about b bytes, the file is n·b bytes. Every one of the n hosts needs a copy of every new version. So one round of updates moves n × n·b bytes: double the network and the traffic quadruples. Meanwhile the number of changes per day also grows with n, and every one of them passes across the same desk. Instrument 1 lets you put numbers on it.
RFC 1034 credits several earlier proposals for a hierarchical name space: IEN 116 (a simple name server), RFC 799 by David Mills ("Internet Name Domains," September 1981), RFC 819 by Zaw-Sing Su and Jon Postel ("The Domain Naming Convention for Internet User Applications," August 1982) and RFC 830 ("A Distributed System for Internet Name Service," October 1982). What they shared, in RFC 1034's words, was "the idea of a hierarchical name space, with the hierarchy roughly corresponding to organizational structure, and names using '.' as the character to mark the boundary between hierarchy levels."
Mockapetris's contribution was to turn that idea into a working distributed database with general record types, caching and delegation, and then to build the first server for it.
This is a model, not a measurement: the inputs are yours, and the two assumptions (about 80 bytes per host entry, about 300 bytes for one DNS question and its answer across the wide area) are stated in the formulas. Slide the number of hosts up and watch the file's line on the chart bend upward on the log axes, while the DNS line barely moves, because a site only ever asks for the names it actually uses, and only once per TTL.
Take 10,000 hosts and a new file every day. The file is 10,000 × 80 = 800,000 bytes. Every host fetches it, so one day moves 10,000 × 800 kB = 8 GB. With the same 10,000 hosts spread over 500 sites, each looking up 1,000 names a day with a one-day TTL, DNS moves about 500 × 1,000 × 300 = 150 MB a day across the wide area: about 53 times less, and the gap widens with every host you add.
Staleness tells the same story from the other side. With the file, a change sits in a queue until the next version and then waits for each host's next fetch; on average that is half the publishing interval or more, for everyone, and it depends on one desk keeping up. With DNS, the owner edits their own zone, and the worst anyone waits is the TTL the owner chose (the caching chapter explains how to plan it).
"Multiple levels of FTP," in RFC 1034's phrase, meant hosts fetching from a nearby mirror rather than the NIC. That relieves the NIC (its outgoing load becomes sites × file size) but not the network: every host still needs every byte of every version.
In November 1983 Paul Mockapetris of USC's Information Sciences Institute published two documents: RFC 882, "Domain Names: Concepts and Facilities," and RFC 883, "Domain Names: Implementation and Specification." They described the system you use today in outline: names arranged in a tree, the tree cut into zones, each zone served by the organization that owns it, and resolvers that walk from the top of the tree down, caching what they learn. No one keeps the whole list. A server only knows its own names, and where to send you for the rest. The details of that walk are in Chapter 1 and Chapter 3.
A design needs a server. According to the BIND project's own history, the first working name server, called Jeeves, was written in 1983 and 1984 by Mockapetris himself, for DEC TOPS-20 machines at ISI and at SRI-NIC. A server for Unix followed soon after: the Berkeley Internet Name Domain, BIND, written by a group of graduate students at the University of California, Berkeley under a DARPA grant. Douglas Terry, Mark Painter, David Riggle and Songnian Zhou made up the first team, and the Computer Systems Research Group at Berkeley maintained it through version 4.8.3.
A tree also needs a top. In October 1984 Jon Postel and Joyce Reynolds published RFC 920, "Domain Requirements," an official policy statement that named the first top-level domains. The BIND history treats this as the moment the DNS "officially" began. From 1984 to 1987 the ARPANET was the testbed, and in November 1987 Mockapetris published RFC 1034 and RFC 1035, rewritten from that experience. They made RFC 882 and 883 obsolete and they are still the core of the standard, amended by many later documents but never replaced.
| Top-level domain | RFC 920's description (1984) |
|---|---|
| ARPA | "The current ARPA-Internet hosts." Meant to be temporary: hosts were to move to another domain |
| GOV | Government |
| EDU | Education |
| COM | Commercial |
| MIL | Military |
| ORG | Organization: "any other domains" |
| Countries | "The English two letter code (alpha-2) identifying a country" from ISO 3166 |
| Multiorganizations | A large organization made of other organizations that fits no category |
Two details in that table have aged well. .arpa never went away: it survives as the home of infrastructure such as reverse lookups (Chapter 7). And .net is not on the list; by RFC 1591 in 1994 the generic list had become EDU, COM, NET, ORG, GOV, MIL and INT.
RFC 1034 describes itself as the system "evolved" from RFC 882 and 883 "based on experience with several implementations." The 1987 pair is the version that fixed the message format, the master-file (zone file) syntax and the familiar record types that later chapters take for granted, and it spelled out the design goals: a consistent name space with no network addresses baked into the names, a database too big and too busy to keep in one place, and therefore distributed maintenance with local caching. The byte-level message is the subject of Chapter 2.
A tree with one top needs someone to decide what hangs from it. For most of the DNS's first fifteen years that was, to a remarkable degree, one person. Jon Postel edited the RFC series from its early days and kept track of the protocol numbers, addresses and names the network depended on. Vint Cerf's memorial, RFC 2468, describes how "Jon volunteered to be the Numbers Czar and later the IANA once the Internet was in place." The Internet Assigned Numbers Authority, IANA, was that job given a name: the registry of the root zone, address blocks and protocol parameters.
Postel also wrote the rules for the top. RFC 1591, "Domain Name System Structure and Delegation," in March 1994, set out how top-level and country-code domains were delegated to managers who serve their community as trustees. It also contained a sentence that has become famous for the wrong reason:
"It is extremely unlikely that any other TLDs will be created."Jon Postel, RFC 1591, section 2 (March 1994)
The 1990s changed the scale of everything. In 1994, the year of RFC 1591, the Internet Software Consortium (now Internet Systems Consortium, ISC) was founded by Paul Vixie, Carl Malamud and Rick Adams to keep BIND maintained; Vixie had become BIND's caretaker while at DEC. BIND 8 shipped in May 1997 and BIND 9, a near-total rewrite, in September 2000.
In 1998 the coordination role moved to a new non-profit, the Internet Corporation for Assigned Names and Numbers, ICANN, which performed the IANA functions under a contract with the US government's National Telecommunications and Information Administration. Postel died in October 1998, the year ICANN was founded; Vint Cerf's RFC 2468 is his memorial. The contract lasted until 1 October 2016, when NTIA let it expire and the IANA stewardship transition handed oversight to the global multistakeholder community.
And the "extremely unlikely" new top-level domains arrived in bulk. ICANN's New gTLD Program opened its application window on 12 January 2012 and received 1,930 applications. By ICANN's statistics for that round, 1,241 became live top-level domains. IANA's list of top-level domains, as of the version published on 22 October 2026, holds 1,437 entries.
| Who | What they did | Recorded in |
|---|---|---|
| Paul Mockapetris (USC/ISI) | Designed the DNS; wrote RFC 882/883 and 1034/1035; wrote Jeeves, the first server | RFC 882, 883, 1034, 1035; BIND history |
| Jon Postel (USC/ISI) | RFC Editor; the IANA; co-wrote RFC 920 and wrote RFC 1591 | RFC 920, 1591, 2468 |
| Joyce Reynolds (USC/ISI) | Co-author of RFC 920 | RFC 920 |
| Terry, Painter, Riggle, Zhou (UC Berkeley) | The first BIND team | BIND history |
| Paul Vixie; ISC | BIND's caretaker from 4.9; co-founded ISC in 1994; wrote EDNS0 (RFC 2671) | ISC about; BIND history; RFC 2671 |
| Dan Kaminsky (IOActive) | Showed in 2008 how practical cache poisoning had become | CERT VU#800113 |
| Daniel J. Bernstein | Credited by CERT with the original idea of randomizing the resolver's source port | CERT VU#800113 |
The root zone's content (which top-level domains exist and which servers answer for them) is managed through IANA. Serving it is a separate job. IANA's root-server page lists 13 named authorities, a.root-servers.net to m.root-servers.net, operated by 12 organizations: Verisign (A and J), USC's Information Sciences Institute (B), Cogent (C), the University of Maryland (D), NASA Ames (E), ISC (F), the US Department of Defense (G), the US Army Research Lab (H), Netnod (I), RIPE NCC (K), ICANN (L) and the WIDE Project (M). Behind those 13 names sit hundreds of machines worldwide, reached by anycast; Chapter 9 explains how.
The B root's operator is the same institute where Mockapetris and Postel worked: a thread from 1983 that is still connected.
Drag the slider, use the arrow keys on it, or click the timeline. The card shows the nearest dated event and the document that records it; the diagram underneath shows how a lookup actually worked in that year, animated: copy the file and read it locally, walk the tree in plain text, walk it with random ports, walk it with signatures you can check, and finally reach your resolver inside a sealed envelope. The names in the diagram are reserved examples.
The original DNS trusted the network more than it should have. A resolver sends a question over UDP and accepts the first reply that matches it: the right question, from the right address, carrying the same 16-bit query ID. Sixteen bits is 65,536 possibilities. Anyone who could make a resolver ask a question, and then quickly send it a crowd of fake replies with guessed IDs, had a real chance of getting a forged answer into its cache, where every user of that resolver would then receive it. This is cache poisoning, and it was a known weakness for years.
On 8 July 2008 the CERT Coordination Center published Vulnerability Note VU#800113, "Multiple DNS implementations vulnerable to cache poisoning" (CVE-2008-1447). It thanked Dan Kaminsky of IOActive "for identifying the effectiveness and practicality of DNS cache poisoning," and Paul Vixie of ISC "for raising the urgency of these issues." What had been a theoretical weakness was shown to be practical, and resolvers everywhere needed patching at once.
The patch was simple and old. Resolvers had often sent their questions from one fixed UDP port, so the ID was the only secret. The fix was to choose a random source port for every question as well, which multiplies the number of guesses a forger needs by the number of ports in use. CERT credits Daniel J. Bernstein with the original idea and implementation. In January 2009 the IETF wrote the lessons down as RFC 5452, "Measures for Making DNS More Resilient against Forged Answers." Instrument 3 does the arithmetic. The defenses in detail, and how to check your own resolver, are in Chapter 13.
With one fixed port, 100 fake replies per question gives p = 100 ÷ 65,536, about 1 in 655. Over a few thousand triggered questions that is close to certain. Spread the questions over the 64,512 ports above 1023 and the space becomes 65,536 × 64,512 = 4,227,858,432, so the same 100 replies give about 1 in 42 million per question.
That is a large improvement, bought with no change to the protocol. But it is still odds, and odds can be ground down by an attacker with enough bandwidth and patience, or defeated by a network device that rewrites source ports into a predictable sequence. The lasting fix had already been written: make the answer itself checkable, so a forgery fails no matter how lucky the guess. That is DNSSEC, the next section.
The DNS Security Extensions took a long time. The first specification, RFC 2065, appeared in January 1997. It was revised more than once; the version deployed today was published in March 2005 as three documents, RFC 4033, 4034 and 4035. Each zone signs its records, and each parent publishes a fingerprint of its child's key, so a resolver can follow a chain of trust from a key it already holds all the way down. Chapter 11 walks that chain record by record.
A chain needs a first link, and for five years after the 2005 specifications the root zone was not signed. That changed in 2010. IANA's published trust-anchor file lists the first root key-signing key, key tag 19036, as valid from 15 July 2010. From that day a validating resolver needed exactly one built-in key, the root's trust anchor, to check any signed answer on the internet.
Signatures made answers larger, which collided with a 1987 limit: DNS over UDP was capped at 512 bytes. The fix was EDNS0, the extension mechanism Paul Vixie specified in RFC 2671 in August 1999 and the IETF revised as RFC 6891 in April 2013, which lets a resolver advertise that it can take bigger replies. Without it, DNSSEC would have pushed far more traffic onto TCP. The byte-level details are in Chapter 2.
Keys are replaced on a schedule, and the root's has been replaced twice. ICANN performed the first root KSK rollover on 11 October 2018, replacing KSK-2010 with KSK-2017. The second took place on 11 October 2026, when KSK-2024 began signing the root zone; ICANN reported on 15 October 2026 that it was completed as planned, while still assessing reports of issues on a limited number of systems, with the old key's revocation to follow. Here is the public record of those keys, from IANA's trust-anchor file:
; root zone trust anchors, from data.iana.org/root-anchors/root-anchors.xml ; (key tag, algorithm 8 = RSA/SHA-256, and the dates IANA publishes) KSK-2010 tag 19036 alg 8 validFrom 2010-07-15 validUntil 2019-01-11 KSK-2017 tag 20326 alg 8 validFrom 2017-02-02 KSK-2024 tag 38696 alg 8 validFrom 2024-07-18 ; signing the root since 11 October 2026
Every validating resolver in the world has the root's public key configured in it, usually shipped with the software or the operating system. Replacing that key means every one of those resolvers must learn the new one before the old one stops being used, or it will start failing every signed answer. ICANN published KSK-2017 in the DNS in July 2017, more than a year before the 2018 switch, and the rollover itself was postponed once, in 2017, while operators caught up. Resolvers that follow RFC 5011's automated trust-anchor updates learn the new key from the DNS itself; the ones that do not must be updated by hand.
The 2026 rollover's resolver guidance from ICANN asked operators of validating resolvers to verify that KSK-2024, key tag 38696, was present in their trust-anchor configuration.
DNSSEC proves an answer is genuine. It does nothing to hide the question. For most of its life every DNS query crossed the network in plain text, so anyone on the path, from the café's Wi-Fi to the ISP, could read the list of names you looked up. The last decade has been about closing that gap.
The first step was to send less. QNAME minimisation, published as experimental RFC 7816 in March 2016 and updated as RFC 9156 in November 2021, has a resolver tell each server only as much of the name as that server needs: the root learns you want something under .com, not the full name.
Then came encryption between you and your resolver. DNS over TLS (DoT), RFC 7858, May 2016, wraps queries in TLS on a dedicated port. DNS over HTTPS (DoH), RFC 8484, October 2018, sends them as ordinary HTTPS requests, indistinguishable on the wire from web traffic. DNS over QUIC (DoQ), RFC 9250, May 2022, uses the QUIC transport for lower setup cost. All three protect the hop from your device to the resolver; the resolver itself still sees everything. Chapter 12 compares them and asks who each one hides you from.
| Year | Document | What it protects | What it does not |
|---|---|---|---|
| 2005 / 2010 | DNSSEC (RFC 4033–4035); signed root | Integrity: a forged or altered answer fails validation | Privacy: queries and answers are still readable |
| 2016 | QNAME minimisation (RFC 7816, now 9156) | Leaks less of the name to root and TLD servers | The resolver and the final server see the full name |
| 2016 | DoT (RFC 7858) | Confidentiality between you and your resolver | The resolver sees everything; its upstream queries may still be plain |
| 2018 | DoH (RFC 8484) | Same, carried inside HTTPS | Same |
| 2022 | DoQ (RFC 9250) | Same, over QUIC | Same |
Many of these have been replaced. When an RFC is obsoleted, the newer one is the one to read; both are listed so you can follow the line.
| Date | Document | Status today |
|---|---|---|
| Mar 1982 | RFC 810, DoD Internet Host Table Specification | Obsoleted by RFC 952 (Oct 1985) |
| Nov 1983 | RFC 882 / 883, Domain Names: Concepts and Facilities / Implementation and Specification | Obsoleted by RFC 1034 / 1035 |
| Oct 1984 | RFC 920, Domain Requirements | Historic policy statement |
| Nov 1987 | RFC 1034 / 1035 | Current, with many updates |
| Mar 1994 | RFC 1591, DNS Structure and Delegation | Still cited for ccTLD delegation |
| Jan 1997 | RFC 2065, first DNS Security Extensions | Obsoleted; today's DNSSEC is RFC 4033–4035 |
| Aug 1999 | RFC 2671, EDNS0 | Obsoleted by RFC 6891 (Apr 2013) |
| Mar 2005 | RFC 4033 / 4034 / 4035, DNSSEC | Current, with updates |
| Jan 2009 | RFC 5452, resilience against forged answers | Current |
| Mar 2016 | RFC 7816, QNAME minimisation | Obsoleted by RFC 9156 (Nov 2021) |
| May 2016 | RFC 7858, DNS over TLS | Current |
| Oct 2018 | RFC 8484, DNS over HTTPS | Current |
| May 2022 | RFC 9250, DNS over QUIC | Current |