Aoang
2020-01-12 23:21:26 +08:00
DNS 根服务器只有 13 个
DNS 协议使用了 UDP 和 TCP 协议。UDP 通常用于查询和响应,TCP 用于主服务器和从服务器之间的区域传送。
在所有 UDP 实现中能保证正常工作的最大包是 512 字节, 对于在每个包中必须含有数字签名的一些 DNS 新特性(例如,DNSSEC )来说实在是太小了。
512 字节的限制还影响了根服务器的数量和名字。 要让所有的根服务器数据能包含在一个 512 字节的 UDP 包中, 根服务器只能限制在 13 个,而每个服务器要使用字母表中的单个字母命名
以太网数据的长度必须在 46-1500 字节之间,这是由以太网的物理特性决定的
事实上,这个 1500 字节就是网络层 IP 数据包的长度限制,理论上,IP 数据包最大长度是 65535 字节。这是由 IP 首部 16 比特总长度所限制的,去除 20 字节 IP 首部和 8 个字节 UDP 首部,UDP 数据包中数据最大长度为 65507 字节。
在 Internet 数据传输中,UDP 数据长度控制在 576 字节( Internet 标准 MTU 值), 而在许多 UDP 应用程序设计中数据包被限制成 512 字节或更小。这样可以防止数据包的丢失。
许多解析器首先发送一条 UDP 查询,如果它们接收到一条被截断的响应,则会用 TCP 重新发送该查询。 这个过程绕过了 512 字节的限制,但是效率不高。
或许你会认为 DNS 应该避开 UDP,总是使用 TCP,但是 TCP 连接的开销大得多。 一次 UDP 名字服务器交换可以短到两个包:一个查询包、一个响应包。 一次 TCP 交换则至少包含 7 个包:三次握手初始化 TCP 会话、一个查询包、一个响应包以及最后一次握手来关闭连接。