【计算机网络】一文带你弄懂DNS解析过程(最强详解!!)

目录

首先了解一下什么是DNS协议吧

域名的结构

顶级域名

二级域名

根域名

DNS的查询方式

递归查询

迭代查询

完整域名解析系统


首先了解一下什么是DNS协议吧

DNS(Domain Name System)是一个用于将域名(例如www.example.com)转换为对应 IP 地址的协议。它起到了"互联网电话簿"的作用,让我们可以使用简单易记的域名来访问网站,而不需要记住复杂的数字 IP 地址。

通俗地说,DNS 协议就像是一个大型的电话簿系统,它帮助我们找到互联网上的网站。假设你想要访问一个网站,比如谷歌(google.com),你会在浏览器中输入这个域名。然后,浏览器会向你所使用的网络提供商的 DNS 服务器发送一个请求,询问:"你们知道谷歌的 IP 地址吗?"

接下来,DNS 服务器会开始进行查找。它首先会检查自己的记录,看是否已经有谷歌的 IP 地址缓存。如果有,它会立即返回给浏览器。如果没有,它会向其他 DNS 服务器询问,直到找到能提供谷歌 IP 地址的服务器。

一旦 DNS 服务器找到了谷歌的 IP 地址,它会将这个信息返回给浏览器。然后,浏览器就知道了谷歌的真实地址,可以开始建立连接,并向该 IP 地址发送请求,获取网页内容。

域名的结构

域名具有一定的层次结构,从上到下依次为:根域名、顶级域名(top level domain,TLD)、二级域名、(三级域名)

顶级域名

顶级域名是域名的最后一个部分,例如www.baidu.com的顶级域名就是.com。顶级域名可以分为两类:

  • 通用顶级域名,比如.com、.net、.edu、.org、.xxx等等
  • 国家顶级域名,代表不同的国家和地区,比如.cn(中国)、.io(英属印度洋领地)、.cc(科科斯群岛)等。

每个顶级域名有一个托管商,托管商负责管理该顶级域名的所有事项。

二级域名

二级域名在通用顶级域名和国家顶级域名下具有不同的意义:

  • 通用顶级域名下的二级域名:一般指域名注册人选择使用的网上名称,如yahoo.combaidu.com
  • 国家顶级域名下的二级域名:一般指类似于通用顶级域名的表示注册人类别和功能的标识。例如.com.cn域名中,.com是置于国家顶级域名.cn下的二级域名,表示中国的商业性组织。

三级域名 是形如www.baidu.com的域名,可以当作是二级域名的子域名,特征为域名包含两个.。对于域名所有者/使用者而言,三级域名都是二级域名的附属物而无需单独费用。三级域名甚至不能称为域名,一般称之为域名下的"二级目录"。

根域名

有时,www.xxx.com被写成www.xxx.com,即最后还会多出一个点,这个点就是根域名。

DNS的查询方式

DNS查询方式有两种:

  • 递归查询
  • 迭代查询

递归查询

  1. 客户端向本地DNS服务器发送查询请求,包含要解析的域名,比如"www.example.com"。

  2. 如果本地DNS服务器的缓存中已经有了对应的解析结果,它会直接返回解析结果给客户端,并结束查询过程。

  3. 如果本地DNS服务器的缓存中没有对应的解析结果,它会向根DNS服务器发送迭代查询请求。

  4. 根DNS服务器收到请求后,会根据请求的域名后缀(例如".com")告诉本地DNS服务器负责该域名后缀的顶级域名服务器的地址。

  5. 本地DNS服务器再向顶级域名服务器发送迭代查询请求。

  6. 顶级域名服务器收到请求后,根据请求的域名(例如"example.com")告诉本地DNS服务器负责该域名的权威域名服务器的地址。

  7. 本地DNS服务器再向权威域名服务器发送迭代查询请求。

  8. 权威域名服务器收到请求后,检查自己是否有该域名的解析记录。如果有,它会将解析结果返回给本地DNS服务器。

  9. 本地DNS服务器收到解析结果后,将其缓存,并将解析结果返回给客户端。

  10. 客户端接收到解析结果后,便可以使用该IP地址与目标服务器建立连接,并进行网站访问等操作。

迭代查询

  1. 客户端向本地DNS服务器发送查询请求,包含要解析的域名,比如"www.example.com"。

  2. 如果本地DNS服务器的缓存中已经有了对应的解析结果,它会直接返回解析结果给客户端,并结束查询过程。

  3. 如果本地DNS服务器的缓存中没有对应的解析结果,它会向根DNS服务器发送迭代查询请求。

  4. 根DNS服务器收到请求后,会根据请求的域名后缀(例如".com")告诉本地DNS服务器负责该域名后缀的顶级域名服务器的地址。

  5. 本地DNS服务器再向顶级域名服务器发送迭代查询请求。

  6. 顶级域名服务器收到请求后,根据请求的域名(例如"example.com")告诉本地DNS服务器负责该域名的权威域名服务器的地址。

  7. 本地DNS服务器再向权威域名服务器发送迭代查询请求。

  8. 权威域名服务器收到请求后,检查自己是否有该域名的解析记录。如果有,它会将解析结果返回给本地DNS服务器。

  9. 如果权威域名服务器没有该域名的解析记录,它会返回一个"域名不存在"的响应。

  10. 本地DNS服务器接收到解析结果或"域名不存在"的响应后,将其返回给客户端。

  11. 如果得到的是解析结果,客户端就可以使用该IP地址与目标服务器建立连接,并进行网站访问等操作。

完整域名解析系统

1、首先搜索浏览器中的DNS缓存,缓存中维护一张域名与IP地址的对应表

2、若没有命中,则继续搜索操作系统的DNS缓存。

3、若仍然没有命中,则操作系统将域名发送至本地域名服务器,本地域名服务器查询自己的DNS缓存,查找成功则返回结果。(主机和本地域名服务器之间的查询方式是递归查询)

4、若本地域名服务器的DNS缓存没有命中,则本地域名服务器向上级域名服务器进行查询,通过以下方式迭代查询(防止根域名服务器压力过大)

  • 首先本地域名服务器向根域名服务器发起请求,根域名服务器是最高层次的,它并不会直接指明这个域名对应的IP地址,而是返回顶级域名服务器的地址。
  • 本地域名服务器拿到这个顶级域名服务器的地址后,就向其发起请求,获取权限域名服务器的地址。
  • 本地域名服务器拿到这个权限域名服务器的地址后,就向其发起请求,最终得到该域名对应的IP地址。

5、本地域名服务器将得到的IP地址返回给操作系统,同时自己将IP地址缓存起来

6、操作系统将IP地址返回给浏览器,同时自己也将IP地址缓存起来

7、至此,浏览器就得到了域名对应的IP地址,并将IP地址缓存起来。

相关推荐
宇卿.2 分钟前
Java键盘输入语句
java·开发语言
浅念同学3 分钟前
算法.图论-并查集上
java·算法·图论
立志成为coding大牛的菜鸟.16 分钟前
力扣1143-最长公共子序列(Java详细题解)
java·算法·leetcode
鱼跃鹰飞16 分钟前
Leetcode面试经典150题-130.被围绕的区域
java·算法·leetcode·面试·职场和发展·深度优先
爱上语文2 小时前
Springboot的三层架构
java·开发语言·spring boot·后端·spring
serve the people2 小时前
springboot 单独新建一个文件实时写数据,当文件大于100M时按照日期时间做文件名进行归档
java·spring boot·后端
qmx_073 小时前
HTB-Jerry(tomcat war文件、msfvenom)
java·web安全·网络安全·tomcat
为风而战3 小时前
IIS+Ngnix+Tomcat 部署网站 用IIS实现反向代理
java·tomcat
技术无疆5 小时前
快速开发与维护:探索 AndroidAnnotations
android·java·android studio·android-studio·androidx·代码注入
Karoku0667 小时前
【网站架构部署与优化】web服务与http协议
linux·运维·服务器·数据库·http·架构