“.由于每个IPv4地址需要32个字节,13个服务器使用416字节,剩下的协议信息最多为96个字节。”
DNS协议从不只传输普通的IP地址,而是由DNS资源记录组成的格式正确的查询和答案。
"IPv4地址需要32个字节“可能并不是指普通IP地址的大小,而是指为在DNS协议中传输而格式化的A资源记录的大小。
当所有根DNS服务器都有唯一的、非系统的名称时,这个值看起来应该是准确的,但是由于根名称服务器现在已经被重新命名为x.ROOT-SERVERS.NET格式,所以当前的状态要复杂一些。
我刚刚在一个tcpdump DNS服务器启动时运行了BIND9,看起来第一个A记录所花费的字节略多于32个字节,因为它包括:
全名a.root-servers.net (每个名称组件的长度为一个字节,结尾为一个零字节,总计为20个字节)16位记录类型代码(2字节)16位记录类代码(2字节)32位TTL值(4个字节)16位数据长度值(2字节)32位IP地址(4字节)因此,如果您请求根DNS服务器的A记录,那么第一个应答记录实际上需要34个字节。
同一DNS消息中的任何后续应答记录都可以引用任何前面提到的名称或部分,因此,如果完整地提到了a.root-servers.net,那么b.root-servers.net可以仅用4个字节表示( b部分是2个字节,后面是两个字节-引用root-servers.net后缀)。因此,根服务器的任何其他A记录都只需要17个字节。
BIND9的实际启动查询相当于dig . NS,并且是在TCP而不是UDP上发生的。
因此,第一个应答记录是一个31字节的NS记录,列出了第一个具有全名的根DNS服务器。其他根服务器的后续NS记录每个只需要15个字节。由于作为附加信息提供的A记录将能够完整地引用每个根服务器主机名,因此根DNS服务器的每个A记录只需16个字节。响应还包括根名称服务器的IPv6 AAAA记录。即使如此,DNS响应的总长度仅为1097字节。