OC网络学习02:DNS探索

张建 lol

DNS 是什么?

DNS,就是 Domain Name System 的缩写,翻译过来就是 域名系统。是互联网上作为 域名和IP地址相互映射的一个分布式数据库DNS 能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的 IP 数串。通过 域名,最终得到该域名对应的IP地址的过程叫做 域名解析(或主机名解析)。

举例:如果你要访问域名 www.bboyzj.cn ,首先要通过 DNS 查出它的 IP 地址是 113.31.107.233

查询过程

虽然只需要返回一个 IP 地址,但是 DNS 查询过程非常复杂,分成多个步骤

  1. 查询 IP 地址

终端执行:

1
mac@bogon ~ % dig www.bboyzj.cn

  • 第一部分:查询 参数和统计
1
2
3
4
5
; <<>> DiG 9.10.6 <<>> www.bboyzj.cn
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5433
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1
  • 第二部分:查询内容
1
2
3
4
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.bboyzj.cn. IN A

查询域名 www.bboyzj.cnA 记录,Aaddress 的缩写

  • 第三部分:DNS服务器的答复
1
2
3
4
5
6
;; ANSWER SECTION:
www.bboyzj.cn. 355 IN CNAME bboyzj.github.io.
bboyzj.github.io. 3355 IN A 185.199.111.153
bboyzj.github.io. 3355 IN A 185.199.109.153
bboyzj.github.io. 3355 IN A 185.199.108.153
bboyzj.github.io. 3355 IN A 185.199.110.153

注:
A地址记录(Address),返回域名指向的IP地址
CNAME: 记录主要用于 域名内部的跳转
NS域名服务器记录(Name Server),返回保存下一级域名信息的服务器地址。该记录只能设置为域名,不能设置为IP地址。

上面的结果表示:

www.bboyzj.cn 内部跳转指向 bboyzj.github.io,也就是说,用户查询 www.bboyzj.cn 的时候,实际上返回的是 bboyzj.github.ioIP 地址。即www.bboyzj.cnCNAME 记录指向 bboyzj.github.ioIP 地址。这样的好处是,变更服务器 IP 地址的时候,只需要修改 bboyzj.github.io 这个域名就可以了,用户的 www.bboyzj.cn 域名不用修改

bboyzj.github.io 有四个 A 记录,即四个IP地址,3355TTL 值(Time to live 的缩写),表示 缓存时间,即 3355秒 之内不用重新查询。

  • 第四部分:DNS服务器的一些传输信息
1
2
3
4
;; Query time: 65 msec
;; SERVER: 113.31.107.233#53(113.31.107.233)
;; WHEN: Thu Apr 06 11:34:49 CST 2023
;; MSG SIZE rcvd: 136

本机的 DNS 服务器是 113.31.107.233,查询端口号是 53(DNS服务器默认端口),以及回应长度是 136 字节。

  1. 如果不想看到这么多内容,可以是用 +short 参数
1
2
3
4
5
6
mac@bogon ~ % dig +short www.bboyzj.cn
bboyzj.github.io.
185.199.110.153
185.199.108.153
185.199.109.153
185.199.111.153

只返回 www.bboyzj.cn 对应的 四个 IP地址(即 A 记录)

域名的层次

DNS 服务器怎么知道每个域名的 IP 地址的呢?

答:分级查询

  • 根域名(.root)

举例:bboyzj.github.io 显示为 bboyzj.github.io. ,这不是疏忽,而是所有域名的尾部,实际上都有一个 根域名,实际上的域名是 bboyzj.github.io.root,简写成 bboyzj.github.io.。因为,根域名 .root 对于所有域名都是一样的,可以省略

  • 顶级域名(一级)

根域名的下一级是 顶级域名(top-level domain,缩写 TLD),比如 .com/.net/.cn

  • 次级域名(二级)

顶级域名的下一级叫 次级域名(second-level domain,缩写 SLD),比如 www.bboyzj.cn 中的 .bboyzj

  • 主机(三级)

次级域名的下一级叫 主机(host),比如: www.bboyzj.cn 中的 www,又称 三级域名

  • 总结

域名的层级结构:主机名.次级域名.顶级域名.根域名

1
host.sld.tld.root

分级查询

分级查询 就是从 根域名 依次查询每一级的 NS 记录,知道查到最终的 IP 地址。需要明确的是 NS记录域名服务器记录(Name Server),返回保存下一级域名信息的服务器地址。大致过程如下:

  1. 根域名服务器 查到 顶级域名服务器NS记录A记录
  2. 顶级域名服务器 查到 次级域名服务器NS记录A记录
  3. 次级域名服务器 查到 主机名IP 地址

从上面看到没有提及 根域名服务器NS记录A记录,因为 根域名服务器NS记录A记录 地址一般是 不会变化的内置在DNS服务器中

目前,世界上一共有十三组根域名服务器,从 A.ROOT-SERVERS.NETM.ROOT-SERVERS.NET

  • dig 命令 +trace 参数显示 DNS 的整个分级查询过程
1
mac@MacdeMacBook-Pro ~ % dig +trace www.bboyzj.cn

上面的命令列出了 根域名服务 器的所有 NS记录,即 所有根域名服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
; <<>> DiG 9.10.6 <<>> +trace www.bboyzj.cn
;; global options: +cmd
. 847 IN NS e.root-servers.net.
. 847 IN NS a.root-servers.net.
. 847 IN NS k.root-servers.net.
. 847 IN NS i.root-servers.net.
. 847 IN NS b.root-servers.net.
. 847 IN NS d.root-servers.net.
. 847 IN NS m.root-servers.net.
. 847 IN NS c.root-servers.net.
. 847 IN NS h.root-servers.net.
. 847 IN NS f.root-servers.net.
. 847 IN NS j.root-servers.net.
. 847 IN NS g.root-servers.net.
. 847 IN NS l.root-servers.net.
;; Received 239 bytes from 114.114.114.114#53(114.114.114.114) in 15 ms

然后,服务器跳转到 bboyzj.github.io

1
www.bboyzj.cn.		1	IN	CNAME	bboyzj.github.io.

最后,bboyzj.github.io 有4条A记录,即这四个IP地址都可以访问到网站。

1
2
3
4
5
6
www.bboyzj.cn.		1	IN	CNAME	bboyzj.github.io.
bboyzj.github.io. 3600 IN A 185.199.111.153
bboyzj.github.io. 3600 IN A 185.199.110.153
bboyzj.github.io. 3600 IN A 185.199.109.153
bboyzj.github.io. 3600 IN A 185.199.108.153
;; Received 136 bytes from 192.5.5.241#53(f.root-servers.net) in 78 ms

其他 DNS 工具

除了dig,还有一些其他小工具也可以使用。

  1. host 命令

host命令可以看作dig命令的简化版本,返回当前请求域名的各种记录。

1
2
mac@bogon ~ % host bboyzj.cn
bboyzj.cn has address 185.199.109.153
  1. nslookup 命令

nslookup命令用于互动式地查询域名记录。

  • Post title:OC网络学习02:DNS探索
  • Post author:张建
  • Create time:2023-04-06 11:22:53
  • Post link:https://redefine.ohevan.com/2023/04/06/OC网络/OC网络学习02:DNS原理/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.