DNS 查询原理详解

你可能会问,难道 DNS 服务器(比如 1.1.1.1)保存了世界上所有域名(包括二级域名、三级域名)的 IP 地址?

当然不是。DNS 是一个分布式系统,1.1.1.1 只是用户查询入口,它也需要再向其他 DNS 服务器查询,才能获得最终的 IP 地址。

要说清楚 DNS 完整的查询过程,就必须了解 域名是一个树状结构。

最顶层的域名是根域名(root),然后是顶级域名(top-level domain,简写 TLD),再是一级域名、二级域名、三级域名。

DNS 查询原理详解

(1)根域名

所有域名的起点都是根域名,它写作一个点 .,放在域名的结尾。因为这部分对于所有域名都是相同的,所以就省略不写了,比如 example.com等同于 example.com.(结尾多一个点)。

你可以试试,任何一个域名结尾加一个点,浏览器都可以正常解读。

(2)顶级域名

根域名的下一级是顶级域名。它分成两种:通用顶级域名(gTLD,比如 .com 和 .net)和国别顶级域名(ccTLD,比如 .cn 和 .us)。

顶级域名由国际域名管理机构 ICANN 控制,它委托商业公司管理 gTLD,委托各国管理自己的国别域名。

(3)一级域名

一级域名就是你在某个顶级域名下面,自己注册的域名。比如, ruanyifeng.com就是我在顶级域名 .com下面注册的。

(4)二级域名

二级域名是一级域名的子域名,是域名拥有者自行设置的,不用得到许可。比如, es6 就是 ruanyifeng.com 的二级域名。

四、域名的逐级查询

这种树状结构的意义在于,只有上级域名,才知道下一级域名的 IP 地址,需要逐级查询。

每一级域名都有自己的 DNS 服务器,存放下级域名的 IP 地址。

所以,如果想要查询二级域名 es6.ruanyifeng.com 的 IP 地址,需要三个步骤。

第一步,查询根域名服务器,获得顶级域名服务器.com(又称 TLD 服务器)的 IP 地址。

第二步,查询 TLD 服务器 .com,获得一级域名服务器 ruanyifeng.com 的 IP 地址。

第三步,查询一级域名服务器 ruanyifeng.com,获得二级域名 es6 的 IP 地址。

下面依次演示这三个步骤。

五、根域名服务器

根域名服务器全世界一共有13台(都是服务器集群)。它们的域名和 IP 地址如下。

DNS 查询原理详解

根域名服务器的 IP 地址是不变的,集成在操作系统里面。

操作系统会选其中一台,查询 TLD 服务器的 IP 地址。

$ dig @192.33.4.12 es6.ruanyifeng.com

上面示例中,我们选择 192.33.4.12,向它发出查询,询问 es6.ruanyifeng.com的 TLD 服务器的 IP 地址。

dig 命令的输出结果如下。

DNS 查询原理详解

因为它给不了 es6.ruanyifeng.com 的 IP 地址,所以输出结果中没有 ANSWER SECTION,只有一个 AUTHORITY SECTION,给出了 com.的13台 TLD 服务器的域名。

下面还有一个 ADDITIONAL SECTION,给出了这13台 TLD 服务器的 IP 地址(包含 IPv4 和 IPv6 两个地址)。

六、TLD 服务器

有了 TLD 服务器的 IP 地址以后,我们再选一台接着查询。

$ dig @192.41.162.30 es6.ruanyifeng.com

上面示例中,192.41.162.30 是随便选的一台 .com 的 TLD 服务器,我们向它询问 es6.ruanyifeng.com 的 IP 地址。

返回结果如下。

DNS 查询原理详解

它依然没有 ANSWER SECTION 的部分,只有 AUTHORITY SECTION,给出了一级域名 ruanyifeng.com 的两台 DNS 服务器。

下面的 ADDITIONAL SECTION 就是这两台 DNS 服务器对应的 IP 地址。

七、一级域名的 DNS 服务器

第三步,再向一级域名的 DNS 服务器查询二级域名的 IP 地址。

$ dig @172.64.32.123 es6.ruanyifeng.com

返回结果如下。

DNS 查询原理详解

这次终于有了 ANSWER SECTION,得到了最终的二级域名的 IP 地址。

至此,三个步骤的 DNS 查询全部完成。

八、DNS 服务器的种类

总结一下,上面一共提到了四种服务器。

1.1.1.1
根域名服务器
TLD 服务器
一级域名服务器

它们都属于 DNS 服务器,都用来接受 DNS 查询。但是作用不一样,属于不同的类别。

8.1 递归 DNS 服务器

后三种服务器只用来查询下一级域名的 IP 地址,而 1.1.1.1 则把分步骤的查询过程自动化,方便用户一次性得到结果,所以它称为递归 DNS 服务器(recursive DNS server),即可以自动递归查询。

我们平常说的 DNS 服务器,一般都是指递归 DNS 服务器。它把 DNS 查询自动化了,只要向它查询就可以了。

它内部有缓存,可以保存以前查询的结果,下次再有人查询,就直接返回缓存里面的结果。所以它能加快查询,减轻源头 DNS 服务器的负担。

8.2 权威 DNS 服务器

一级域名服务器的正式名称叫做权威域名服务器(Authoritative Name Server)。

“权威”的意思是域名的 IP 地址由它给定,不像递归服务器自己做不了主。我们购买域名后,设置 DNS 服务器就是在设置该域名的权威服务器。

8.3 四种 DNS 服务器

综上所述,DNS 服务器可以分成四种:

根域名服务器
TLD 服务器
权威域名服务器
递归域名服务器

它们的关系如下图。

DNS 查询原理详解

知道了 DNS 查询的原理,完全可以自己写一个 DNS 的递归服务器,这是不难的。网上有很多参考资料,有兴趣的话,大家可以试试看。

DNS 查询原理详解

九、参考网址

(完)

作者: 阮一峰

Original: https://www.cnblogs.com/88223100/p/Detailed-explanation-of-DNS-query-principle.html
Author: 古道轻风
Title: DNS 查询原理详解

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/611344/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • IE浏览器各版本的CSS Hack

    IE浏览器各版本的CSS Hack 如下示例: .test{ color:black;/W3C/ color:red\9;/ IE6-IE10 / _color:black;/IE…

    数据库 2023年6月9日
    0160
  • BigDecimal 设置小数位数、小数比例转换整数

    控制小数位数 DecimalFormat decimalFormat = new DecimalFormat("0.00"); decimalFormat.fo…

    数据库 2023年6月6日
    090
  • MySQL实战45讲 6,7,8

    06 | 全局锁和表锁 :给表加个字段怎么有这么多阻碍? Connection连接与Session会话 通俗来讲,会话(Session)是通信双⽅从开始通信到通信结束期间的⼀个上下…

    数据库 2023年6月16日
    085
  • Linux 目录挂载服务

    Linux 服务器挂载文件目录通常有三种形式,手动挂载、自动挂载、Autofs 自动挂载,下面对这三个挂载做一下介绍,接受一下这三个区别以及使用场景: 准备服务器和客户端: ser…

    数据库 2023年6月14日
    0105
  • 使用Java刷评论为平台引流的经历

    场景:需要在一网站中批量评论留言。分析接口:列表接口获取idList,返回的是json数据直接用FastJson转就可以,如果返回的是HTML片段,则需要使用Jsoup进行提取,值…

    数据库 2023年6月14日
    0112
  • 2022蓝帽杯初赛wp(取证)

    战果 取证全解 misc出了1个 解其他题就像在坐牢 有那么一点思路,但不是完全有 手机取证_1 解压并打开阅读器,搜索627604C2-C586-48C1-AA16-FF33C3…

    数据库 2023年6月11日
    0101
  • 时序数据库InfluxDB的基本语法

    一 了解InfluxDB的必要性 Time series data is a series of data points each associated with a specif…

    数据库 2023年6月16日
    097
  • spring-boot-starter-actuator

    使用: HTTP方法 路径 描述 鉴权 GET /autoconfig 查看自动配置的使用情况 true GET /configprops 查看配置属性,包括默认配置 true G…

    数据库 2023年6月16日
    086
  • 几款ZooKeeper可视化工具,最后一个美炸了~

    首发于公众号:BiggerBoy欢迎关注,查看更多技术文章 ZooKeeper是我们工作中常用一个开源的分布式协调服务,提供分布式数据一致性解决方案,分布式应用程序可以实现数据发布…

    数据库 2023年6月11日
    098
  • idea启动 org.springframework.boot.web.server.PortInUseException: Port XXX is already in use

    win+r,输入cmd,进入命令行窗口查询占用端口号所在进程:netstat -ano|findstr 8001杀死进程:taskkill -f -pid 进程号 作者:crazy…

    数据库 2023年6月16日
    074
  • 使用REST风格完成MVC前后端分离

    一个具有REST风格项目的基本特征: 使用REST框架实现前后端分离架构,我们需要首先确定返回的JSON响应结构是统一的,也就是说,每个REST请求将返回相同结构的JSON响应结构…

    数据库 2023年6月11日
    0110
  • pm2 常用命令

    写一篇文章帮助自己记忆整理一下pm2的常用命令 先说一些废话 之前学习 Nodejs项目的时候使用了 pm2作为生产环境的进程管理工具,最近服务器崩了需要重启一些服务,发现有些命令…

    数据库 2023年6月11日
    0124
  • 实验:非GTID 一主多从变级联架构

    个个原创文章 欢迎讨论https://www.cnblogs.com/konggg/欢迎转载收藏,转载请注明来源,谢谢支持! Original: https://www.cnblo…

    数据库 2023年6月16日
    0120
  • Mysql8+数据库安装和使用

    一、Mysql的版本选择 Mysql目前分文社区版和企业版,社区版在技术方面会加入许多新的未经严格测试的特性,而企业版经过严格测试认证,更加稳定、安全、可靠,性能也比社区版好。社区…

    数据库 2023年6月14日
    080
  • 实现线程的两种方式

    实现Runnable接口如果当前类 不仅要继承其他类( 非Thread类), 还要实现多线程,那么 只能通过当前类实现 Runnable接口来 创建Thread类对象。 实现Run…

    数据库 2023年6月16日
    0116
  • 使用MobaXterm发布服务器项目文件

    注:笔记旨在记录 一、使用MobaXterm登录服务器 二、后端发布 三、前端发布 一、使用MobaXterm登录服务器 打开MobaXterm,点击左上角Session->…

    数据库 2023年6月16日
    0114
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球