曾经写过一个答案,两年之后的今天当再次看到那个答案时,发现并不是很满意。遵循着一贯的追根溯源的态度,查阅了多如牛毛的资料,最终顺藤摸瓜找到了问题的答案,这个答案依然不完美,也许有一天依然需要更新。
以上官方文献清清楚楚表明,最初的DNS域名查询默认使用UDP协议,而使用UDP传输的DNS查询响应(Query Response)报文,不希望任何形式的分片。换句话说,要求使用唯一的UDP报文传输DNS响应。
上文提到的任何形式的分片,包括DNS应用层的分片、以及IP层的分片。前者的分片只会造成DNS报文消息作废(Corrupted),IP的分片同样无法接受,因为那个时候很多原始的主机不具备IP分片的重组(Reassemble)。
再来回顾一下当时的互联网环境:
绝大多数的网络接口类型支持IP报文≥576 字节无需分片自由通行,考虑到以上诸因素,IETF决定将DNS报文体限制在512字节。每一个根域名服务器占用32字节,其中包括根域名的名称、IP地址、TTL(Time To Live)等参数。
13根域名服务器一共占用416字节,剩余的96字节用于包装DNS报文头以及其它协议参数。所以从空间上来说,没有多余的空间容纳第14个根域名服务器的32字节。
13个根域名服务器列表
容易被大众误解的是,这13个根域名服务器并不等于13台物理服务器,而是代表着13个全球IP地址,由12个机构来管理,其中美国最大电信运营商Verizon管理两个根域名全球IP地址。
截至到今天为止,全球一共有996台服务器实例(Instances),遍布5大洲4大洋。
既然根域名服务器只有13个全球IP,而物理服务器却有996台,到底怎么分配的?
BGP泛播技术(Anycast)
以Verizon管理的“IPv4: 198.41.0.4”为例,在全球一共分布在28个站点,每个站点的服务器都使用“198.41.0.4”这个全球IP。
IP地址在互联网上重复使用,会不会有什么问题?
记得我在讲企业局域网的时候,着重强调IP地址要唯一,不允许有重复使用IP地址的情况发生。
但是,在互联网上不同站点可以使用相同的IP地址,只要使用方是IP地址的合法使用者。
“198.41.0.4”就会在28个站点,通过BGP路由协议,28次扩散到Internet路由表。
全球的主机究竟挑选哪个“198.41.0.4”来使用呢?
当然是距离自己最近的,用BGP的专业术语表达就是最优路径。
泛播技术有哪些优点?
根域名服务器特别重要,曾经有黑客集中攻击它,差一点就成功了,因为13个服务器中某些依然没有被打趴下,源于服务器的全球式分布。
一朝被蛇咬,十年怕草绳。互联网管理机构发现对付DDoS攻击最有效的方法,就是分布式部署根域名服务器。于是,使用了泛播技术,全球有了996台实例。
如果有一天996台不够用,可以添加任意多台服务器,因为全球IP可以重复使用。
攻击方可以打趴其中的几十台、甚至几百台,但是永远打不趴所有台!
如果喜欢这篇文章,请转发给您喜欢的朋友阅读,谢谢!