【计算机网络】一文带你弄懂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.com、baidu.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地址缓存起来。

相关推荐
晒太羊的猫9 分钟前
hot100子串
java·算法·leetcode
开开心心就好33 分钟前
本地文件搜索工具,双击Ctrl就能呼出搜索
java·服务器·前端·支持向量机·ffmpeg·音视频·模拟退火算法
独隅38 分钟前
Claude 高效使用指南深度评测
java·开发语言·claude·claude code
ByteCoder.1 小时前
班前十分钟的清单,按体检引导单来写
java·服务器·前端·助播虾
海的透彻1 小时前
如何让docker容器启动时用自定义的用户
java·docker·dubbo
疯狂学习GIS1 小时前
将谷歌地球引擎账号升级为Contributor与Partner层级的方法
java·数据库·人工智能
GG.WinGel1 小时前
质数数目(蓝桥杯练习题)
java·数据结构·算法·青少年编程·蓝桥杯
泡泡糖的中文规格书1 小时前
HDLbits 2.2 学习笔记 · 多路复用器
java·开发语言
John_Hui1 小时前
第 3 篇:配置 JDK 17 环境
java·开发语言·ubuntu
秋天的怀念_David1 小时前
算法一千零一夜 · 第十七夜 长街点灯
java·程序人生·算法