为什么根服务器只有 13 个地址?

一台根服务器的地址是固定的,全球真正的根服务器却不止十三台。地址表之所以停在十三个,原因出在域名系统早年给自己定下的一个报文长度上。

第 8 期讲过根服务器:域名解析从它开始,逐级往下问。这一级里的服务器组,正式数量是十三个,从 A 根排到 M 根。

这个数字不是运营方挑的。标准里规定,域名系统用传输层协议承载的报文被限制在 512 字节,超出的部分会被截断。根服务器的地址表必须装进一份这样的应答,十三是装得下的上限。这套算法的细节写在根服务器系统咨询委员会的文档里:应答头、压缩后的名称、每台服务器的地址逐项占用字节,算下来加上第 14 个就会超过 512。

1997 年加入 J、K、L、M 四台时,地址表已经贴着上限。当时的做法是把这批服务器的名称改到较短的那个域名之下,借域名系统自带的名称压缩省出空间,才把数量推到 13。

所以地址数量不是政策选择,而是被那 512 字节卡住的。后来域名系统有了扩展机制,可以把报文长度的上限往上抬,缓冲区的协商让大应答成为可能;根服务器系统咨询委员会也说明,这项限制如今已经不那么重要。但地址表一动,全球解析器的配置都要跟着改,十三这个数字就留了下来。

真正的扩容做在地址背后。第 18 期讲过任播:同一个地址可以在多地同时宣告,请求由网络就近送到其中一台。十三个地址因此对应着分布在全球的大量物理实例,各地解析器访问到的其实是离家最近的那一台。地址数量没变,实际承载的服务器数量翻了很多倍。国际号码分配机构的页面上写着,这套系统的实体服务器有数百台、分布在许多国家,而在根区里只登记为十三个名称。

结果是这份地址表小到可以硬编码进解析器,同时又能撑住全球的查询量。