一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情。
往期文章
前言
在之前的文章中,我们学习到了浏览器是如何解析网址并生成 HTTP 消息,并且会通过 DNS 服务器将域名解析成 IP 地址,供操作系统将消息发送到网络中使用。
今天我们就来具体学习下 DNS 服务器到底是如何工作的。
DNS 服务器的基本工作
DNS 服务器的基本工作就是接收来自客户端的查询消息,然后根据消息的内容返回响应。
其中,来自客户端的查询消息包含以下三种消息:
-
域名
- 服务器、邮件服务器(邮件地址中@后面的部分)的名称
-
Class
- 在最早设计 DNS 方案时,DNS 在互联网以外的其他网络中的应用也被考虑到了,而 Class 就是用来识别网络的信息。不过,如今除了互联网并没有其他的网络了,因此 Class 的值永远是代表互联网的 IN。
-
记录类型
-
表示域名对应何种类型的记录。常见类型由如下几种:
A:表示域名对应的是 IP 地址;MAX:表示域名对应的邮件服务器;PTR:根据 IP 地址反查域名;CNAME:查询域名相关别名;NS:查询 DNS 服务器的 IP 地址;SOA:查询域名属性信息;
-
DNS 服务器上会事先保留着包含上述数据的信息,如下:
| 域名 | Class | 记录类型 | 响应数据 |
|---|---|---|---|
| www.test.com | IN | A | 192.168.0.1 |
| 32342342@qq.com | IN | MAX | 10 192.168.0.2 |
| ... | ... | ... | ... |
- 根据 IP 地址反查域名的
PTR类型 - 查询域名相关别名的
CNAME类型 - 查询 DNS 服务器 IP 地址的
NS类型 - 查询域名属性信息的
SOA类型
域名的层次结构
DNS 域名是以层级树状结构划分的,域名通过 . 来进行分隔,比如 www.baidu.com。在域名中,越靠右的位置表示其层级越高。其命名方法如下:
…… . 三级域名 . 二级域名 . 顶级域名 . 根域
- 根域:位于域名空间最顶层,一般用一个
*表示;分配给根域 DNS 服务器的 IP 地址在全世界仅有 13 个,而且这些地址几乎不发生变化。 - 顶级域名:一般代表一种类型的组织结构或国家地区,如
net、com、org、edu、cn等; - 二级域名:用来标明顶级域内的一个特定的组织;
- 子域:二级域名下所创建的各级域统称为子域,各个组织或用户可以自由审核注册自己的域名;
通过域名查询 IP 过程
了解了域名的层次结构,我们再来看下客户端是如何通过域名来查询 IP 地址的。
- 客户端首先会访问最近的一台 DNS 服务器(也就是客户端的 TCP/IP 设置中填写的 DNS 服务器地址)
- 由于最近的 DNS 服务器中没有存放
www.wys.test.com这一域名对应的信息,所以我们需要从顶层开始向下查找。最近的 DNS 服务器中保存了根域 DNS 服务器的信息,因此它会将来自客户端的查询消息转发给根域 DNS 服务器。 - 根域服务器中也没有
www.wys.test.com这个域名,但根据域名结构可以判断这个域名属于com域,因此根域 DNS 服务器会返回它所管理的com域中的 DNS 服务器的 IP 地址。 - 最近的 DNS 服务器又会向
com域的 DNS 服务器发送查询消息。com域中也没有www.wys.test.com这个域名的信息,和刚才一样,com域服务器会返回它下面的test.com域的 DNS 服务器的 IP 地址。 - 以此类推,只要重复前面的步骤,就可以顺藤摸瓜找到目标 DNS 服务器,只要向目标 DNS 服务器发送查询消息,就能够的到我们需要的答案,也就是
www.wys.test.com的 IP 地址了。
在真实的互联网中,一台 DNS 服务器可以管理多个域的信息。在这种情况下,访问上级 DNS 服务器时就可以向下跳过一级 DNS 服务器,直接返回再下一级 DNS 服务器的相关信息。
此外,有时候并不需要从最上级的根域名开始查找,因为 DNS 服务器有一个缓存功能,可以记住之前查询过的域名,如果查询过的域名和相关信息已经在缓存中,那么就可以直接返回响应,接下来的查询可以从缓存的位置开始从缓存的位置开始向下进行。相比每次都从根域找起来说,缓存可以减少查询所需的时间。
并且,当要查询的域名不存在时,“不存在”这一响应结果也会被缓存。这样,当下次查询这个不存在的域名时,也可以快速响应。
这个缓存机制中有一点需要注意,那就是信息被缓存后,原本的注册信息可能会发生改变,这时缓存中的信息就有可能是不正确的。因此,DNS 服务器中保存的信息都设置有一个有效期,当缓存中的信息超过有效期后,数据就会从缓存中删除。而且,在对查询进行响应时,DNS服务器也会告知客户端这一响应的结果是来自缓存中还是来自负责管理该域名的 DNS 服务器。
总结
今天我们学习了 DNS 服务器中存储的数据结构、域名的层次结构,以及如何客户端是如何通过 DNS 服务器查询到域名的对应的 IP 地址,希望大家有所收获!
参考文档
- 《网络是怎样连接的》—— 户根勤