计算机网络 DNS的解析流程

一、引言​

        在互联网的庞大体系中,用户通常通过方便记忆的域名(如baidu.com)来访问各种网络资源。然而,计算机网络通信实际上是基于 IP 地址进行的。DNS(Domain Name System,域名系统)的主要功能就是将用户输入的域名转换为对应的 IP 地址,这个转换过程被称为 DNS 解析。DNS 解析流程是互联网运行的关键机制之一,理解它有助于深入认识网络通信原理以及排查网络故障等。​此外,DNS还具备负载均衡、网络安全保障和缓存提高访问速度等功能。

二、DNS 解析流程详细步骤​

域名结构解析

        如上图所示,域名结构是树状结构,树的最顶端代表根服务器,根的下一层就是由我们所熟知的.com、.net、.cn等通用域和.cn、.uk等国家域组成,称为顶级域。网上注册的域名基本都是二级域名,比如http://baidu.comhttp://taobao.com等等二级域名,它们基本上是归企业和运维人员管理。接下来是三级或者四级域名,这里不多赘述。总体概括来说域名是由整体到局部的机制结构。

(一)浏览器缓存查询​

        当用户在浏览器地址栏中输入一个域名并按下回车键后,浏览器首先会在自身的缓存中查找该域名对应的 IP 地址。浏览器缓存是浏览器为了提高访问速度而存储的一些最近访问过的域名和 IP 地址映射关系。不同浏览器的缓存策略和缓存时间有所不同。例如,Chrome 浏览器会根据资源的过期时间等因素来管理缓存。如果在浏览器缓存中找到了匹配的 IP 地址,浏览器就会直接使用该 IP 地址向对应的服务器发起请求,整个 DNS 解析过程到此结束。若未找到,则进入下一步。​

(二)操作系统缓存查询​

        若浏览器缓存中没有找到目标域名的 IP 地址,操作系统会介入查询。操作系统也维护着自己的 DNS 缓存。在 Windows 系统中,可以通过在命令提示符中输入 “ipconfig /displaydns” 命令来查看当前系统的 DNS 缓存记录。这些记录包含了近期系统访问过的域名及其对应的 IP 地址。在 Linux 系统中,不同的发行版查看 DNS 缓存的方式略有差异,例如在基于 systemd 的系统中,可以使用 “systemd-resolve --statistics” 命令查看相关缓存信息。如果操作系统缓存中有该域名的 IP 地址记录,操作系统会将其提供给浏览器,从而完成 DNS 解析。若仍未找到匹配记录,则继续下一步。​

(三)本地域名服务器查询​

        当操作系统缓存中也没有目标域名的 IP 地址时,操作系统会向本地配置的域名服务器发送 DNS 查询请求。本地域名服务器通常由网络服务提供商(ISP)分配给用户,或者是企业内部网络自行搭建的 DNS 服务器。本地域名服务器接收到查询请求后,会首先在自身的缓存中查找是否有该域名的记录。如果有,本地域名服务器会立即将对应的 IP 地址返回给操作系统,进而操作系统将 IP 地址提供给浏览器,DNS 解析完成。若本地域名服务器缓存中没有该域名的记录,它还会查询自己的区域数据库。区域数据库存储着本地网络中一些域名的权威信息。如果在区域数据库中找到了匹配的记录,同样会将 IP 地址返回给操作系统。若区域数据库中也没有相关记录,本地域名服务器就需要向其他域名服务器寻求帮助。​

(四)根域名服务器查询​

        本地域名服务器在自身缓存和区域数据库都未找到目标域名的 IP 地址时,会向根域名服务器发送查询请求。根域名服务器是全球 DNS 系统的最顶层服务器,目前全球共有 13 组根域名服务器(实际上是通过任播技术在全球多个地点部署,以提高可靠性和性能)。根域名服务器并不直接存储所有域名的详细信息,但它知道所有顶级域名服务器的地址。当根域名服务器收到本地域名服务器的查询请求后,会根据域名的顶级域名部分(如.com、.net、.org 等),返回负责该顶级域名的顶级域名服务器的地址信息给本地域名服务器。​

(五)顶级域名服务器查询​

        本地域名服务器收到根域名服务器返回的顶级域名服务器地址后,会向对应的顶级域名服务器发送查询请求。顶级域名服务器负责管理特定顶级域名下的所有二级域名等信息。例如,.com 顶级域名服务器管理着所有以.com 结尾的域名相关信息。顶级域名服务器接收到查询请求后,会根据域名的二级域名部分,查找并返回负责该二级域名的权威域名服务器的地址信息给本地域名服务器。​

(六)权威域名服务器查询​

        本地域名服务器获取到权威域名服务器的地址后,会向权威域名服务器发送查询请求。权威域名服务器是对特定域名具有最终解释权的服务器。它保存着该域名的详细解析记录,包括域名对应的 IP 地址、MX 记录(邮件交换记录)等。当权威域名服务器接收到查询请求后,会根据域名精确查找对应的 IP 地址,并将其返回给本地域名服务器。​

(七)结果返回与缓存​

        本地域名服务器收到权威域名服务器返回的 IP 地址后,会将该 IP 地址依次返回给操作系统和浏览器。在返回结果的过程中,本地域名服务器、操作系统和浏览器都会将这次查询结果进行缓存。这样,下次用户再访问相同域名时,就可以在各级缓存中快速获取到对应的 IP 地址,大大提高了 DNS 解析的效率,减少了网络延迟。​

可以将上述流程进行简化方便记忆(面试或考试)

  1. 首先本机查看自身缓存,看是否存储对应的ip
  2. 如果有的话,就直接发送,没有的话,就请求本地域名服务器
  3. 如果有的话,返回本机,发送请求,没有的话,就请求根域名服务器
  4. 之后看是递归还是迭代,顶级域名服务器,权限域名服务器(可能有很多)去请求返回就行
  5. 最后解析到域名的ip返回本机,本机再去请求。

事例:

如上图所示,我们将详细阐述DNS解析流程:

  1. 1、首先客户端位置是一台电脑或手机,在打开浏览器以后,比如输入http://www.zdns.cn的域名,它首先是由浏览器发起一个DNS解析请求,如果本地缓存服务器中找不到结果,则首先会向根服务器查询,根服务器里面记录的都是各个顶级域所在的服务器的位置,当向根请求http://www.zdns.cn的时候,根服务器就会返回.cn服务器的位置信息。
  2. 2、递归服务器拿到.cn的权威服务器地址以后,就会寻问cn的权威服务器,知不知道http://www.zdns.cn的位置。这个时候cn权威服务器查找并返回http://zdns.cn服务器的地址。
  3. 3、继续向http://zdns.cn的权威服务器去查询这个地址,由http://zdns.cn的服务器给出了地址:202.173.11.10
  4. 4、最终才能进行http的链接,顺利访问网站。
  5. 5、这里补充说明,一旦递归服务器拿到解析记录以后,就会在本地进行缓存,如果下次客户端再请求本地的递归域名服务器相同域名的时候,就不会再这样一层一层查了,因为本地服务器里面已经有缓存了,这个时候就直接把http://www.zdns.cn的A记录返回给客户端就可以了。

三、总结​

        DNS 解析流程是一个复杂但有序的过程,通过多个环节的查询和协作,实现了从域名到 IP 地址的转换。在这个过程中,浏览器缓存、操作系统缓存和本地域名服务器缓存起到了加速解析的作用,而根域名服务器、顶级域名服务器和权威域名服务器则确保了能够准确找到域名对应的 IP 地址。理解 DNS 解析流程对于网络工程师进行网络配置、故障排查以及网站管理员优化网站访问性能等都具有重要意义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值