原标题:为何根域名服务器只有13个?
来自公众号:车小胖谈网络
两个月之前更新文章曾经说过,过一段时间会更新最终版。这篇文章是献给一直关注公众号的忠实读者一份福利,请尽快阅读!
熟悉DNS域名解析的同学应该知道,当主机想访问某个网站时,会使用本机配置的DNS服务器来将网站的域名解析成IP地址。获得了网站的IP地址,就可以使用IP报文与服务器进行通信了。
Q1:主机是如何知道DNS服务器IP地址的?
这个问题难不住大家,一般是通过DHCP动态获得,或者手工配置获得。
Q2: DNS服务器如何知道网站域名、IP地址的映射关系?
DNS服务器上通常也配置有自己的DNS服务器,为了区别起见,称后者为“树干DNS服务器”,前者为“叶子DNS服务器”。
Q3:树干DNS服务器天生就知道“网站域名、IP地址的映射关系”答案吗?
这里的天生是指,当树干DNS服务器从上电启动,完成DNS进程加载,这个时候树干DNS服务器如初生的婴儿,大脑一片空白。需要告诉这个小婴儿,一旦遇到不会的DNS查询问题,需要去求助大神,这个大神的名字就叫“树根DNS服务器”!
DNS查询原理
互联网的DNS域名查询系统如同一棵树一样,叶子问主干,主干问根,根将一级主干返回给主干,主干问一级主干,一级主干将结果返回给主干,主干将结果返回给叶子,叶子将最终查询结果返回给主机!
Q4:小婴儿(树干DNS服务器)如何找到大神呢?
如果婴儿事先知道大神的IP地址,不就可以找到了吗?这个主意很好!
只要让小婴儿在初始化DNS进程时,读取这个配置文件,这个配置文件提供了大神的联系方式。大神的名字分别为:A、B、C、D、E、F、G、H、I、J、K、L、M,一共13个大神。以及13个大神对应的IPv4、IPv6地址。如下图所示,该图受限于屏幕尺寸,不能囊括13个大神完整的信息,有兴趣的同学可以前往下载(http://www.internic.net/domain/named.root)。
到目前为止,小婴儿已经获得了13位大神的联系方式,可以求助任意一位大神来回答DNS查询问题,然后再把DNS查询答案告诉叶子DNS服务器。这个故事到这里仿佛要结束了。。。
但是有一个问题,婴儿的配置文件是一个静态文件,不是实时更新的!如果其中有些大神的IP地址发生了变动,那么意味着婴儿拿着过期的配置信息,可能找不到大神!
婴儿一旦读取配置文件完成初始化,需要立马去任意一位大神,更新13位大神的实时联系方式!好累,终于讲到本文的主题了!
婴儿需要向大神发送DNS NS(Name Server) Query,大神将返回13位大神的实时联系方式,如下图所示,受限于图片尺寸,图中只包括A、B大神。他们的全名分别为“a.root-servers.net.”、 “b.root-servers.net.”
Q5:每一个大神的联系方式占据多大的尺寸呢?
如下图所示,每一个大神占据的字节数 = 1 + 4 + 2 +2 + 2 + 20 = 31 个字节!
13位大神一共占据的字节数= 13 * 31 = 403 个字节!由于运输DNS查询结果的是UDP,由于历史原因,UDP被IETF限制最大发送尺寸为512字节。留给DNS其它协议字段的空间只有512-403 =109个字节,这109个字节用来运输DNS其它协议字段,最终剩下几十个字节的空闲空间,足够容纳第14位大神。但是,IETF最终决定不再加入新的大神,空闲的空间保留给DNS协议的扩展!
需要指出的是,13位大神并不意味13个物理服务器,而是13个IP地址。每个IP地址都有几十甚至上百台物理服务器同时提供服务,记得6月份更新文章时,全球只有999个实例(Instance),到今天已经扩容到1011个实例了。
关于为何IETF要限制UDP的最大报文发送尺寸,请参阅这篇文章 !
●编号951,输入编号直达本文
责任编辑: