这里的“互相查”可以理解为两种主要场景:
1、DNS服务器之间的协作查询:一台DNS服务器如何向其他DNS服务器询问它不知道的答案。
2、用户对DNS系统的查询:我们如何主动去查询DNS记录,以进行检查或排错。
我会从这两个方面为你详细解释。
场景一:DNS服务器之间如何“互相查”(协作查询流程)
当你访问www.google.com
时,你的电脑不会直接知道它的IP地址,它需要问DNS服务器,这个过程通常是递归查询和迭代查询的结合。
下图直观地展示了DNS服务器之间协作查询的完整流程:
flowchart TD A[用户电脑<br>Stub Resolver] -->|递归查询| B[本地DNS递归解析器<br>ISP/114/Google DNS] B -->|迭代查询| C[根域名服务器] C -->|返回顶级域服务器地址| B B -->|迭代查询| D[.com 顶级域服务器] D -->|返回权威服务器地址| B B -->|迭代查询| E[google.com 权威服务器] E -->|返回最终IP地址| B B -->|返回最终结果| A
流程步骤如下:
1、递归查询(Recursive Query):
* 你的电脑(称为DNS客户端 或Stub Resolver)向一个预先配置好的DNS服务器(称为递归解析器,如你的路由器、ISP的DNS、114.114.114.114 或 Google的8.8.8.8)发出一个递归查询请求。
“递归”的意思是“我(客户端)把这个任务全权交给你(递归解析器),你必须给我一个最终的答案(IP地址),而不是告诉我再去问谁。”
2、迭代查询(Iterative Query):
* 递归解析器收到任务后,它自己可能也不知道答案,于是它就开始代表用户在全球的DNS服务器链中进行迭代查询。
迭代的意思是“我问你(另一个服务器),如果你不知道答案,那你必须告诉我下一步我应该去问谁。”
迭代查询的顺序如下
a.询问根域名服务器递归解析器首先会问13个根域名服务器之一:“www.google.com
的IP是多少?”根服务器不负责具体地址,但它会回答说:“我不知道,但我知道所有.com
的服务器,你去问它们吧”,并返回一个.com顶级域(TLD)服务器的地址列表。
b.询问顶级域(TLD)服务器递归解析器接着去问.com TLD服务器,TLD服务器管理所有以.com
结尾的域名,它回答说:“我不知道www.google.com
的具体IP,但我知道google.com
这个域的权威服务器是谁,你去问它们吧”,并返回google.com
的权威服务器地址列表。
c.询问权威域名服务器递归解析器去问google.com
的权威服务器,这台服务器才是真正管理google.com
这个域名下所有记录的“官方发言人”,它查询自己的数据库,然后回答说:“www.google.com
的IP地址是142.251.42.196
”。
3、返回最终答案:
* 递归解析器终于拿到了最终的IP地址,它会把这个答案缓存起来一段时间(遵循记录的TTL值),以便下次有人问同样问题时可以快速回复。
* 然后它把最终答案返回给你的电脑。
4、建立连接:
* 你的电脑拿到IP地址,就可以开始和谷歌的服务器建立TCP连接并传输数据了。
总结一下服务器间的“互相查”:这是一个精巧的、分层级的、协同工作的过程,客户端只问一个对象(递归解析器),递归解析器则代表客户端按“根→顶级域→权威”的顺序依次询问,直到得到最终答案。
场景二:用户如何主动查询DNS(排查工具)
作为用户或网络管理员,我们经常需要主动“查一下DNS”来排查问题,常用的命令工具有:
一个经典的网络工具,几乎所有操作系统都有。
基本查询
nslookup www.google.com
这会使用系统默认的DNS服务器来查询。
指定特定DNS服务器查询(这是“互相查”的直接体现,你可以让任何一台DNS服务器帮你查)
nslookup www.google.com 8.8.8.8 # 让Google的DNS服务器查 nslookup www.baidu.com 114.114.114.114 # 让114的DNS服务器查
查询特定类型的记录(如MX邮件记录)
nslookup -type=MX google.com
2.dig
(Domain Information Groper)
Linux、macOS上更强大、更专业的工具,现在Windows也有,它输出的信息更详细。
基本查询
dig www.google.com
指定特定DNS服务器查询
dig @8.8.8.8 www.google.com # 让Google的DNS服务器查
显示详细的查询过程(类似于模拟递归解析器的迭代查询过程)
dig +trace www.google.com
这个命令非常有用,它会一步步显示它从根服务器→TLD服务器→权威服务器的整个查询过程,让你清晰地看到DNS是如何“互相查”的。
虽然不直接查询DNS记录,但它用于查询“这个域名是谁注册的?它的管理联系人是谁?它的权威DNS服务器是哪几台?”,这是在查域名注册信息,是另一个层面的“互相查”。
whois google.com
DNS服务器之间的“互相查”是一个通过递归查询和迭代查询相结合、按照根域→顶级域→权威域的层次结构协同工作的分布式查询过程。
用户对DNS的“互相查”是通过使用像nslookup
、dig
和whois
这样的工具,主动向任何公开的DNS服务器发起查询,以获取域名信息或排查网络问题。
希望这个解释能帮助你彻底理解DNS是如何“互相查”的!
文章摘自:https://idc.huochengrm.cn/dns/15080.html
评论