不算太久以前的基础知识
DNS 是一种层次结构,在整个互联网中形成树状系统。顶层是系统的根域名,下层是TLD和二级域名。这些叶子构成了所谓的FQDN(完全限定域名)。根域名通常用“.”表示,实际上是由域名组成的。目前全球共有13组域名根节点,由少数国家管理,而中国仅有少数根节点镜像。
例如查询www.im.qq.com时,简单描述一下DNS流程就是先查询com域名的nameserver,然后选一项继续查询子域名qq的nameserver,然后选择一项继续查询im域名。子域名的名称服务器有哪些? www 不是域名。查询结束。此查询的结果是google.com 域名。所谓的名称服务器其实就是一个dns服务器,用来解析域名。
万物起始之风——Root Servers
上述查询过程的一个问题是,程序应该在哪里向服务器查询com、gov等顶级域名?
这就是根服务器的作用,它是用来查询上述顶级域名的名称服务器的。
思考如何获取根服务器的地址?请注意,此处没有可用的动态域名(DNS)。获取地址实际上就是获取IP。如果我们实现一个DNS 服务器,这一步你会做什么?
事实上,这种做法是非常明显和容易看到的。编写程序的直觉是这样的:
编写一个配置文件并放入程序中,记录所有Root服务器的IP地址列表,并定期从互联网上更新配置文件(可以使用域名);或者当程序启动时,直接从互联网获取这些信息,保存并定期更新; DNS也是如此,上面提到的“配置文件”位于https://www.internic.net/domain/named.root,其中包含了所有“Root Servers”信息:
;此文件包含初始化Internet 域名服务器缓存所需的根名称服务器信息;(例如,在BIND 域名服务器的“缓存.文件”配置文件中引用此文件)。 3602019年7月30日;相关版本rootzone:2019073000;FORMERLYNS.INTERNIC.NET;3600000NSA.ROOT-SERVERS.NET.A.ROOT-SERVERS.NET.3600000A198.41.0.4A.ROOT-SERVERS.NET.3600000AAAA2001:5 03333 60ba3e:2:30;FORMERLYNS1.ISI。 EDU;3600000NSB .ROOT-SERVERS.NET.B.ROOT-SERVERS.NET.3600000A199.9.14.201B.ROOT-SERVERS.NET.3600000AAAA2001:500:200:b;FORMERLYC.PSI.NET;3600000 NSC.ROOT-SERVERS.NET.C .NET.3600000A192.33.4.12C.ROOT-SERVERS.NET.3600000AAAA2001:500:2:c;原TERP.UMD.EDU;3600000NSD.ROOT-SERVERS.NET.D.ROOT-SERVERS.NET.36 00000A199.7.91。 13D.根服务器.NET.3600000AAAA2001:500:2d:d;3600000NSM.根服务器.NET.M.根服务器.NET.3600000A202.12.27.33M.根服务器.NET.3600000AAAA2 001 :dc3:35文件中服务器太多,所以我删除了其中一些。
Priming Query!
按照我的风格,没有权威资料怎么可能写不出这样的文章。
使用启动查询初始化DNS 解析器[1] 是由互联网工程任务组(IETF) 编写的关于启动查询[2] 的BCP(最佳当前实践)文档。
本文档描述了DNS 解析器应发出以初始化其缓存的查询。结果是解析器获得根区域的当前NS RRSet 以及到达根服务器所需的地址信息。
上面提到的列表信息可能不是最新的,所以第一次启动DNS解析器时,并不会读取这个文件,而是直接查询有哪些服务器(从下面提到的文章来看,我对这个说法存有疑问,因为文件的大小应该和查询出来的相差不大,需要验证)。
有关启动查询的更多知识,请参阅下面的补充。
启动查询是普通的DNS 查询。因此,根名称服务器无法将启动查询与根NS RRset 的任何其他查询区分开。因此,根服务器的响应也将是正常的DNS 响应。
解析器软件应该将对启动查询的响应视为正常的DNS 响应,就像它使用馈送到其缓存的任何其他数据一样。解析器软件不应期望恰好有13 个NS RR,因为历史上某些根服务器返回的数量较少。
为什么是13,还重要吗?
是不是感觉没那么重要了?
是这样的。在DNS设计之初,在慢速网络下,我们当然希望通过Prime Query来检查根服务器是最划算的。
DNS使用UDP来传输数据,设计上规定DNS查询时,一个包中最多可以放入512Bytes的数据。为什么是512字节?为什么域名根服务器只能有13个? ——车小胖的回答——知乎[3]给出了完整的回答,摘录如下:
互联网上的大多数网络接口都是MTU512,即使DNS数据包+UDP+IP=512+8+20=540,这个大小也可以在互联网上几乎畅通无阻地流动,不会产生IP碎片。
为什么IP 碎片不好?一个UDP数据包由于MTU的大小,会被IP层分成两块,但只有一块有端口号。由于其他块没有端口号,所以能否通过防火墙完全取决于防火墙。脸,所以沟通能否成功还是个未知数。
如果防火墙打开并且不检查端口号,则所有片段都可以通过并在目的地组装在一起。 IP层提交给UDP/DNS没有任何问题。然而,防火墙的安全功能却大大降低。如何防止外部非法攻击报文?
如果防火墙严格检查端口号,所有没有端口号的分片都会被丢弃,造成通信障碍。
因此,选择合适的UDP 大小以避免碎片至关重要。
有同学说,MTU 512物理接口的DNS怎么处理?这其实很容易处理。这些只是接入层接口,用于访问最终用户。用户的DNS请求是请求其上级DNS服务器做一次递归查询(告诉我最终的查询结果)
然后是数字13的果实。
为了进行Prime Query,请检查Root Server以达到最高的性价比。你必须将尽可能多的东西放入一个包中,因此将根服务器的所有结果都放入其中。它可以容纳14 个。如果您不全部使用它们,只需放入13 个即可。留下一些内容以供以后扩展。
好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!
本文采摘于网络,不代表本站立场,转载联系作者并注明出处:https://www.iotsj.com//kuaixun/7182.html
用户评论
这个话题真的很酷!我一直很好奇域名系统是怎么运作的。
有20位网友表示赞同!
我以前没想过会有这么有限的根服务器数量,这真的很有意思啊。
有10位网友表示赞同!
这样设计的目的是为了保证系统的稳定性和安全性吗?
有20位网友表示赞同!
如果只有13台服务器,到时候要是哪几台出问题岂不是就全网站瘫痪了?
有15位网友表示赞同!
为什么不增加更多根服务器呢?容量太小的话会不会影响网络效率?
有15位网友表示赞同!
听说这些根服务器是分布在世界各个地方的吗?
有8位网友表示赞同!
13个名字好难记住,能不能用更简单的方法记忆一下?
有13位网友表示赞同!
我之前只知道域名有 .com 和 .cn 一类东西,不知道还有根服务器这一层级。
有5位网友表示赞同!
希望这篇文章能解释清楚为什么要这么设计,还有未来的发展方向。
有17位网友表示赞同!
技术太复杂了,我现在只是有点理解了根服务器的作用。
有7位网友表示赞同!
感觉这篇文章能开拓我的视野,让我对互联网的底层结构有更深入的了解。
有6位网友表示赞同!
这些根服务器的维护工作很繁琐吧?
有11位网友表示赞同!
学习一下这些知识真的很重要,可以让我们更好地理解网络世界运作方式。
有11位网友表示赞同!
文章链接是什么?我想看看这篇文章的内容!
有19位网友表示赞同!
有没有人知道关于这13个根服务器的名字吗?
有6位网友表示赞同!
我猜想这个数量肯定有很特别的意义吧。
有19位网友表示赞同!