想象一下DNS是一个巨大的、分布式的全球电话簿。
域名就像一个人的名字,张三”。(例如www.google.com
)
IP地址就像这个人的电话号码,比如138.123.123.123
。(例如142.251.42.206
)
当你想给张三打电话(访问一个网站)时,你并不知道他的号码,你会怎么做?
1、查个人通讯录:你先在自己的手机通讯录里找“张三”,如果找到了,直接拨打。
* *这对应DNS中的本地DNS缓存。
2、问公司总机:如果通讯录里没有,你可能会打电话问公司的总机:“请问张三分机号是多少?”
* *这对应询问你的本地DNS解析器(通常由你的ISP,如电信、联通提供)。
3、总机查公司目录:总机可能自己有一个员工目录,如果能查到就直接告诉你,如果查不到,他可能会去问人事部。
* *这对应本地DNS解析器查询自己的缓存,或向根域名服务器 查询。
4、人事部指引:人事部说:“张三是销售部的,你问销售部的秘书吧。”
* *这对应根域名服务器告诉你负责.com
域的顶级域服务器 地址。
5、销售部秘书指引:总机又问销售部秘书,秘书说:“张三在销售一部,你问他们的经理。”
* *这对应顶级域服务器告诉你负责google.com
域的权威域名服务器 地址。
6、部门经理答复:总机问销售一部经理,经理给出了张三的准确分机号。
* *这对应权威域名服务器返回www.google.com
的最终IP地址。
7、完成呼叫:总机把号码告诉你,你存到通讯录,然后拨打电话。
* *这对应本地DNS解析器将IP地址返回给你的电脑,并缓存起来,然后你的浏览器向该IP地址发起连接。
我们来看真实世界中DNS查询的完整步骤,这通常被称为递归查询。
1、浏览器缓存查询
* 当你输入www.google.com
并回车后,浏览器首先检查自己的缓存里是否有这个域名对应的IP地址,如果有,直接使用。
2、操作系统缓存和Hosts文件查询
* 如果浏览器缓存没有,操作系统会检查自己的缓存(如Windows的DNS Client Service)和本地的hosts
文件。
3、向本地DNS解析器查询
* 如果前两步都没有结果,你的电脑会向预先配置好的本地DNS服务器 发起查询请求,这个服务器通常由你的网络服务提供商自动分配(如8.8.8.8
或114.114.114.114
)。
* 本地DNS服务器扮演了“递归解析器”的角色,它承诺会为你找到最终答案。
4、根域名服务器查询
* 本地DNS服务器首先查询根域名服务器,全球只有13组根服务器(逻辑上,实际有很多镜像)。
* 根服务器不直接知道www.google.com
的IP,但它知道谁能管.com
这个东西,于是它返回一个负责顶级域 的服务器列表。
5、顶级域服务器查询
本地DNS服务器接着去问.com
的顶级域服务器“你知道google.com
在哪吗?”
* 顶级域服务器负责管理所有以.com
结尾的域名,它检查自己的记录,然后返回负责google.com
这个域的权威域名服务器 的地址。
6、权威域名服务器查询
本地DNS服务器最后去问google.com
的权威域名服务器“请问www.google.com
的IP地址是什么?”
* 权威域名服务器是域名记录的最终来源,它掌握着最准确、最官方的信息,它查询自己的区域文件,然后将www.google.com
的A记录(即IP地址)返回给本地DNS服务器。
7、返回结果并缓存
* 本地DNS服务器终于拿到了IP地址(例如142.251.42.206
)。
* 它首先将这个结果在自己的缓存中保存一段时间(由结果的TTL值决定),以便下次有人查询时能快速响应。
* 它将最终的IP地址返回给你的电脑。
8、浏览器发起连接
* 你的电脑拿到IP地址后,也将其缓存起来。
* 浏览器使用这个IP地址,与Google的服务器建立TCP连接,开始传输数据,加载网页。
递归查询你的电脑向本地DNS解析器发出的查询,意思是:“我不管你用什么方法,请务必给我最终答案。”(像总机帮你跑腿)
迭代查询本地DNS解析器在向根、顶级域、权威服务器查询时进行的查询,这些服务器只返回它认为最好的下一步线索,而不是最终答案。(像总机被不同部门指引)
缓存为了极大提升效率、减少根服务器压力,DNS查询结果在每一级(浏览器、操作系统、本地DNS解析器)都会被缓存,TTL决定了缓存的有效时间。
记录类型DNS不只解析IP(A记录),还有:
A记录将域名指向一个IPv4地址。
AAAA记录将域名指向一个IPv6地址。
CNAME记录域名别名,将一个域名指向另一个域名。
MX记录邮件交换记录,指定负责接收邮件的服务器。
NS记录指定该域名由哪台权威服务器来解析。
DNS是互联网的基石,它充当了“翻译官”的角色,将人类可读的域名转换为机器可读的IP地址,没有DNS,我们就只能记住一串串数字来访问网站,互联网的易用性将大打折扣,它的分布式、层级化和缓存机制也保证了其惊人的 robustness 和效率。
文章摘自:https://idc.huochengrm.cn/dns/16895.html
评论