A 开头那个简称 A 根,是主根,其他 12 个(B、C、D、E、F、G、H、I、J、K、L、M)是辅根。
为什么根 DNS 只有 13 台?
本节看不懂没关系(一般人都看不懂),你只需要知道,由于历史原因和技术原因,对于 IPv4 而言,根 DNS 只能有 13 个 IP。
正宗答案是:DNS 主要使用 UDP 数据报传送报文,不含前面的各种头部,DNS 报文要求被控制在 512 字节之内( RFC1035 ),主要考虑是这个大小几乎可以在互联网上畅通无阻,不会因为路径中某个 MTU 太小( MTU 通常总会 >= 576,见 RFC791 )而导致 IP 分片,从而预防了各种不可预期的后果 3。
而每一个根 DNS 在 DNS 报文中都要占用一定的字节数,比如根的名称、TTL、IP 地址等。这样,13 个根域名服务器基本上就把空间占差不多了,剩余的字节还要用于包装 DNS 报头以及其它协议参数,所以根域名服务器不易太多,13 个算是比较合适的数目。具体可以看一下 “Why 13 DNS root servers?” 这篇文章。4
再介绍一下最常见的两种域名服务器:权威 DNS:负责对请求作出权威的回答。权威 DNS 中存储着记录,最常见的 3 种:A 记录(记录某域名和其 IP 的对应),NS 记录(记录某域名和负责解析该域的权威 DNS),CNAME 记录(负责记录某域名及其别名)。权威能直接回答的,就回 A 记录;需要其他权威 DNS 回答的,就回 NS 记录,然后 LDNS 再去找其他权威 DNS 问;如果该记录是别名类型的,就回 CNAME,LDNS 就会再去解析别名。递归 DNS:通常就是 LDNS,它接受终端的域名查询请求,负责在网上问一圈后,将答案返回终端。现在举一个具体的例子:比如终端请求 www.baidu.com 这个域名的 IP。在没有缓存时,LDNS 会从根 DNS 问起:1、LDNS 问根 DNS 说:“www.baidu.com 的 IP 是多少啊?”。2、根 DNS 说:“我哪有时间管你这么细的问题,你去问 com 顶级域的 DNS 吧,我只管到顶级域,喏,这些是 com 顶级域 DNS 的名字和 IP,你去问它们吧”。(以 NS 记录回应)3、LDNS 又忙问 com 的权威 DNS,com 权威 DNS 说:“你问的这是三级域名,我不管这么多,你去问 baidu.com 的权威 DNS 吧,它的名字是 ns.baidu.com,他的 IP 是 XXX(这里可能给出多个权威 DNS)”。4、LDNS 继续问 baidu.com 的权威 DNS,这次痛快,因为 www.baidu.com 正是它管的,它可能直接给出 A 记录,也可能给出 CNAME 记录,如果是前者,就直接得到 IP,如果是后者,就需要对别名再做查询。5、最终,LDNS 得到 www.baidu.com 的 IP,并将其返回给终端。细心的人会问,在第 1 步中,LDNS 问根 DNS 的时候,他是怎么知道根 DNS 的 IP 的?这 13 个 IP 通常是预先配置在 LDNS 里面的。在 LDNS 初始化 DNS 缓存或者缓存失效的时候,LDNS 向自己被预先配置的这些 IP 中的一个,发起对根的查询(也即询问。的 NS 记录),获得最新的根 DNS 的信息 6。
根镜像承担起和根一样的功能。根 DNS 中,最重要的文件就是根区文件(Root Zone file)。所有顶级域名记录都存在根区文件中。辅根从主根同步数据,根镜像从根同步数据。最终,所有根和镜像都有着同样的根区文件。而且最有意思的是,根镜像和根有着同样的 IP。我们知道,全球有一千多个根镜像,但是大多数人不知道,它们一起共享 13 个 IP! 对的。因为只有 13 个根。这是如何做到的?答案是任播(Anycast,又译泛播)技术。不关心技术细节的,请直接看本节的最后一句。任播最初由 RFC1546 提出,主要用在 DNS 根服务器上。
任播是指在 IP 网络上通过一个 IP 地址标识一组提供特定服务的主机,服务访问方并不关心提供服务具体是哪一台主机提供的,访问该地址的报文可以被 IP 网络路由到 “最近” 的一个(最好也只是一个,别送到多个)服务器上。这里 “最近” 可以是指路由器跳数、服务器负载、服务器吞吐量、客户和服务器之间的往返时间( RTT,round trip time )、链路的可用带宽等特征值。
根 DNS 目前由 12 家机构管理。A 根是主根,由美国公司 Verisign 管理。根 DNS 中最重要的文件,根区文件,由 ICANN 管理。ICANN(The Internet Corporation for Assigned Names and Numbers,互联网名称与数字地址分配机构)是成立于 1998 年的一家注册在美国的非营利性组织。根 DNS 管理的历史变迁过程还是比较复杂的。这里简要说一下。DNS 最初的技术开发者与管理者是美国南加州大学的 Jon Postel 博士,他掌管互联网初期根 DNS 的管理和分配。1988 年,美国政府要求 Jon Postel 采取更安全和更合理的措施来保证互联网核心资源的分配和管理 7。于是,大名鼎鼎的 IANA(The Internet Assigned Numbers Authority,互联网数字分配机构)被组建,并在 DARPA 和南加州大学信息科学研究所(ISI)的合同下管理。