轻知 | 为什么全球只有13组根域名服务器?
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~
本文由9527发表
根域名服务器是域名解析系统(dns)中最为*的域名服务器,它们负责管理*域的权威域名服务器地址。作为互联网基础设施的重要部分,所有域名的解析操作均离不开它们。下面我们将从 dns 协议实现的角度分析为什么全球只有13组根域名服务器。
13组根域名服务器的信息
其中,13组根域名服务器以英文字母 a 到 m 顺序命名,域名格式为“a~m.root-servers.net”,如“b.root-servers.net”。
dns 数据包的大小限制
我们知道 dns 协议是应用层协议,大多数情况下依赖传输层的 udp 协议进行数据的传输(仅在重试的情况下可能使用 tcp 协议)。根据rfc 791规定,未保证 udp 数据包传输成功率,尽量数据包控制在 571 字节以使数据包不会被分片传输。
除去 udp 数据包自身包头占用的字节数,dns 数据包被设计为不超过512字节。
dns 协议格式
下面我们从根域名解析的返回数据包截图:
我们假设根域名由 n 组,计算数据包各部分字节占用的情况如下:
- header 部分占用12个字节,包括 transaction id (2字节),flags (2字节),questions (2字节),answer rrs (2字节),authority rrs (2字节),additional rrs (2字节);
- question section 部分占用5个字节,包括根标签(1字节),class (2字节,基本取值都是in),查询类型(2字节);
- answer section 部分占用的字节数为所有记录字节数之和,每条记录包括根标签(1字节),ttl (4字节),class (2字节,基本取值都是in),查询类型(2字节),域名存储占用的字节数;因为域名在 dns 解析协议当中按照长度(2字节)+数据的形式存储,其中数据部分是分段存储的,存储格式如下所示,所以第一条记录的域名存储占用22个字节,继而第一条记录总共占用31个字节;而从第二条记录开始,因为记录中出现的域名存在部分内容与第一条记录重复,即“root-servers.net”部分,这部分可以利用 dns 指针压缩存储,只需要存储2个字节的指针,指向第一条记录出现的部分,而不需要存储实际的内容,所以第二条记录~n条记录占用的字节数分别为11+4=15个字节;
- additional section 部分占用的字节数为所有记录字节数之和,每条记录包括域名,ttl (4字节),class (2字节,基本取值都是in),查询类型(2字节),ip 地址(2字节长度+4字节内容);因为 additional section 记录的域名都在 answer section 中出现过,所以这部分都可以利用 dns 指针压缩存储,只需要存储2个字节的指针即可表示对应的域名,所以additional section 部分的记录占用的字节数为2+4+2+2+6=16个字节;
综上所述,数据包总长度为12+5+(31+(15(n-1))+16n,再根据前述 dns 大小限制不超过512字节的要求,可以得 n 不超过15组,再加上早期设计的时候考虑到预留一些 buffer 于是就有了现在全球13组根域名服务器的结果。
此文已由作者授权腾讯云+社区发布,更多原文请点击
搜索关注公众号「云加社区」,第一时间获取技术干货,关注后回复1024 送你一份技术课程大礼包!
上一篇: 夫妻性爱技巧你知道哪些
下一篇: 为爱就要在一起吗,在一起电影唯解读困惑