基本概念
-
DNS 域名解析服务
我们知道网络上的计算机被赋予了 IP 地址,通过这个 IP 地址就能访问到对应的计算机。但是为了便于记忆,人们更倾向于用包含字母数字的信息来访问,于是便有了域名,比如www.xinghunm.com。但是当通过域名访问时,我们怎么能知道该域名对应的是哪台计算机呢? 这就需要 DNS(Domain Name System)服务了,它提供域名到 IP 地址之间的解析服务,也就是说你给我域名,我还你 IP(想象一下电话簿)...
-
域名空间结构
实际上,域名是分层次的空间结构,以
www.xinghunm.com.为例(从右往左读):- 根:用点(·)表示,通常我们都会省略这个点
- 顶级域名:
com - 二级域名:
xinghunm - 三级域名:
www
其他低层级域名以此类推。
需要注意的是域名的层级并不是绝对的,比如顶级域名
.com,在.com.cn域名结构中.com就是在.cn这个国家顶级域名下的二级域名。顶级域主要包括两种类型: 通用顶级域:
通用顶级域 含义 .com 商业公司 .net 互联网服务供应商 .edu 教育机构 .org 非营利组织、国际机构等 ... ... 国家和地区顶级域:
国家和地区顶级域 含义 .cn 中国 .hk 中国香港 .us 美国 .jp 日本 ... ... -
根 DNS 服务器是是互联网域名解析系统(DNS)中最高级别的域名服务器(就像国家元首一样),负责返回顶级域的域名服务器地址。通常网络上传言根 DNS 服务器只有 13 台,这种说法并不准确,实际上根 DNS 服务器地址数量是 13 个,通过任播技术,分散在不同地理位置的多台服务器,可以使用相同的 IP 地址。当向这个 IP 地址发送数据时,路由协议会自动选择一个最近的节点,实际的根 DNS 服务器达上千台。 根 DNS 服务器包含了所有顶级域名服务器的名称和 IP, 就像图书馆中指向不同类型书籍的索引。 根 DNS 服务器查找,是将网址转换为 IP 的第一步(不考虑缓存),它将返回要继续查找的顶级域名服务器的 IP。
通过
dig . NS命令就能得到根服务器的名称:$ dig . NS . 12881 IN NS c.root-servers.net. . 12881 IN NS d.root-servers.net. . 12881 IN NS e.root-servers.net. . 12881 IN NS f.root-servers.net. . 12881 IN NS g.root-servers.net. . 12881 IN NS h.root-servers.net. . 12881 IN NS i.root-servers.net. . 12881 IN NS j.root-servers.net. . 12881 IN NS k.root-servers.net. . 12881 IN NS l.root-servers.net. . 12881 IN NS m.root-servers.net. . 12881 IN NS a.root-servers.net. . 12881 IN NS b.root-servers.net. -
TLD(Top-level domain)名称服务器
名称服务器是提供域名到 IP 地址间映射的服务器。 TLD 名称服务器,即顶级域名称服务器(就像国家元首下的各个省长一样),它负责管理注册在
.com、.cn、.org...等顶级域名下的二级域名。它将返回要继续查找的权威名称服务器的 IP。 -
权威名称服务器
管理一个区域的域名服务器,一般指顶级域下的二级、三级、四级等域名服务器, 就像省长下的市长、区长、乡长等。TLD 名称服务器也算是权威名称服务器,但是其相对特殊,一般单独划作一类。 权威名称服务器是名称服务器查询的最后一步,它将把请求地址的 IP 地址返回给发出初始请求的本地域名服务器。当然权威名称服务器查询有可能会查询多次,比如到三级、四级。
-
本地域名服务器
本地域名服务器像一个图书管理员,被请求在图书馆的某个地方找到一本特定的书。当客户端发送请求时,首先就向本地域名服务器查询,如果它回答不了,它会代替客户端发送查询的请求。
-
DNS 记录
DNS 记录是存在于 DNS 服务器上的指令集,对于 DNS 解析至关重要,一些常用记录包括:
-
A 记录
A 即 Address,比如将 xinghunm.com 域名指向一个 IPv4 地址(139.20.100.27):
主机记录 记录类型 记录值 xinghunm.com A 139.20.100.27 通常主机记录不直接用域名,而是用@,会直接解析为当前域名。
主机记录 记录类型 记录值 @ A 139.20.100.27 主机记录也可以用
*,泛解析,匹配其他所有域名*.xinghunm.com。 -
CNAME 记录
CNAME 即 Canonical Name,它的作用是将一个别名关联到真正的域名,当访问别名时就会解析到真正的域名。 假如我有一台 web 服务器(我申请到的域名为 xinghunm.com),需要在上边部署多个站点:
a.xinghunm.com b.xinghunm.com c.xinghunm.com
通过 A 记录指向 web 服务器 IP,然后再配置上述站点的 CNAME 记录,指向 xinghunm.com:
主机记录 记录类型 记录值 a.xinghunm.com CNANE xinghunm.com b.xinghunm.com CNANE xinghunm.com c.xinghunm.com CNANE xinghunm.com -
NS 记录
NS 即 Name Server,提供该域解析的权威 DNS 服务器,记录值为 DNS 服务器的域名。
比如我申请的域名 xinghunm.com, 通过 dnspod 解析,我需要配置 NS 记录指向 dnspod 服务器,这个 NS 记录,最终会被同步到 .com 顶级域名服务器。当查找 xinghunm.com 的 IP 时,.com 服务器就知道去 f1g1ns1.dnspod.net.或 f1g1ns2.dnspod.net.去进行进一步的查找了。
主机记录 记录类型 记录值 @ NS f1g1ns1.dnspod.net. @ NS f1g1ns2.dnspod.net.
-
DNS 查找流程
DNS 查找中客户端与浏览器、本地 DNS 之间的查询方式是递归查询;本地 DNS 服务器与根域及其子域之间的查询方式是迭代查询。
在浏览器输入 URL 回车后,首先有一个递归查找的过程:
- 首先在浏览器缓存中查找
- 在本地 hosts 文件中查找
- 在 DNS 解析器缓存查找
- 在本地 DNS 服务器查找
以上任何一个步骤找到了都会结束查询流程。如果没有查询到,则根据设置的转发器(为其他 DNS 服务器完成 DNS 查询的 DNS 服务器)进行查找,如果没有采用转发模式则进行迭代查找:
迭代查找最显著的特征在于,如果服务器没有关于待查域名的结果,它会告诉客户端应该去哪里查找,而不是直接回复查询结果。而递归查找不同,它需要准确的查询结果(这个域的 IP 是多少, 不是去哪里查找),如果没有则替客户端向其他 DNS 服务器发起请求,然后再把结果返回给客户端。
浏览器递归查询测试
我们知道浏览器在 dns 查询时首先会去找自己的缓存,下面来进行测试
-
在浏览器(chrome)地址栏中输入
chrome://net-internals/#dns通过该命令可以打开 dns 缓存管理界面:点击 Clear host cache 以清楚缓存。
-
在浏览器(chrome)中打开
www.baidu.com可以看到网络请求时有 DNS Lookup 的过程: -
再次在浏览器(chrome)中打开
www.baidu.com可以看到网络请求时已经没有 DNS Lookup 的过程了,说明浏览器对 dns 进行缓存了。
-
修改本地 hosts 将
www.baidu.com指向本地127.0.0.1mac 下 hosts 位于
/etc/hosts:/etc/hosts 127.0.0.1 www.baidu.com修改完成后在本地监听80 端口:
$ http-server --port 80 Starting up http-server, serving ./ http-server version: 14.0.0 http-server settings: CORS: disabled Cache: 3600 seconds Connection Timeout: 120 seconds Directory Listings: visible AutoIndex: visible Serve GZIP Files: false Serve Brotli Files: false Default File Extension: none Available on: http://127.0.0.1:80 http://192.168.1.155:80 http://10.8.0.22:80 Hit CTRL-C to stop the server再次打开百度,并没有跳转到
127.0.0.1,因为浏览器的 dns 缓存默认有一分钟,等待一分钟后再次访问,能够正确跳转:
迭代查询测试
在 mac 下通过dig 命令来追踪迭代查询 DNS 请求过程,以查询www.keyamedical.com为例:
//dig命令的+trace参数可以显示DNS的整个迭代查询过程
$ dig +trace www.keyamedical.com
依次输出以下结果:
- 首先从网络服务商(本地配置的是 114.114.114.114)获取根服务器的地址
// 类似命令:dig . NS
; <<>> DiG 9.10.6 <<>> +trace www.keyamedical.com
;; global options: +cmd
. 289 IN NS m.root-servers.net.
. 289 IN NS j.root-servers.net.
. 289 IN NS g.root-servers.net.
. 289 IN NS h.root-servers.net.
. 289 IN NS c.root-servers.net.
. 289 IN NS b.root-servers.net.
. 289 IN NS l.root-servers.net.
. 289 IN NS f.root-servers.net.
. 289 IN NS a.root-servers.net.
. 289 IN NS d.root-servers.net.
. 289 IN NS i.root-servers.net.
. 289 IN NS e.root-servers.net.
. 289 IN NS k.root-servers.net.
;; Received 327 bytes from 114.114.114.114#53(114.114.114.114) in 19 ms
可以看到根服务器的地址共 13 个,编号为 a 到 k。
- 选择一个根服务器地址(选择了
j.root-servers.net)来获取.com顶级域的地址。
可以看到,查询.com 域名应该去找 a.gtld-servers.net. 等顶级域名服务器。
//类似命令:dig @192.58.128.30 com
com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766
com. 86400 IN RRSIG DS 8 1 86400 20220828170000 20220815160000 20826 . bU+jvoNv4L20OBmXOpqsM9ZYrxKLPHvQEuafXFbcdvtMVTZrQl+FTl6+ qIH/rgYF0gICQeK+UfCdtb1Q2rPZQIvvsJmDW43ItlAzX9Sh/dkzGyDP kbs4hS+qfCxmNzNyddKLO2gpVZb0kuQ47z9+ADNiVDPNYt+nQmJ+7DGc Fufoy0wg1vBcnJUCsCj0ehNBFv2ub+M75XbGOQ46zPvBrI/8Qlb07iTt Nzi2Bp21oHEPs7CJwlt7Q1n6lesANIBh1S8bMH16XGNn1sJDwPsg6wrs omGz93xI5JOD4ZKBxamhCy+3zYQ3RUDaHT3/Oik5vcPffnxMH7mmFaAD H2FZhA==
;; Received 1179 bytes from 192.58.128.30#53(j.root-servers.net) in 62 ms
- 选择一个
.com顶级域名服务器地址(选择了h.gtld-servers.net)来获取keyamedical.com的地址。
可以看到,查询keyamedical.com 域名应该去找 dns23.hichina.com. 或dns24.hichina.com.这两个权威域名服务器。
//类似命令: dig @192.54.112.30 keyamedical.com
keyamedical.com. 172800 IN NS dns23.hichina.com.
keyamedical.com. 172800 IN NS dns24.hichina.com.
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q2D6NI4I7EQH8NA30NS61O48UL8G5 NS SOA RRSIG DNSKEY NSEC3PARAM
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20220819042341 20220812031341 32298 com. qllFbhUUxEno/kZAlwQFHwlZEsat15dJN1zshaz7drTWuTIh2dtM1ctK KdKmUST+ixD1GyHmcnomWC/vkSGF1GvO7KbRLEVshCBeTz0z4Rnib1I4 Dap0BpHb1ZrnxhrjsA9l6OFGRyCSD2bMuj1SVgIvyVRFwymcTKbX3/+d J0Je7ndJNCFb54O2gyFR63I8/BeltgrZq/RLC9/vEYsiow==
V8QJ3NUH1USOFQK3VH08EM8U0KES2LO8.com. 86400 IN NSEC3 1 1 0 - V8QJCLLEFP36SPU96SRH39114CENMVHP NS DS RRSIG
V8QJ3NUH1USOFQK3VH08EM8U0KES2LO8.com. 86400 IN RRSIG NSEC3 8 2 86400 20220821045437 20220814034437 32298 com. Vh7FxbMvZDZ0sYJvy5O9xnmRMZDbrzYGHAam/IcINi1krJJEzyiVxFTm d+UQwdojyhChUnJoloZafHpyh4aaD4XxEVNG2ZtGh8Sj1/mipnUcVHWz IIucNniHCChoisCXM2GIgX4TRiHpzqpGPLujRRUNDAsUEnIMVM54CpE+ ZDvDreggY5AMi2uuFPrNHZgs4tdbzziX2Kt2udteFVwAKQ==
;; Received 957 bytes from 192.54.112.30#53(h.gtld-servers.net) in 306 ms
- 选择一个权威域名服务器地址(选择了
dns24.hichina.com)来获取www.keyamedical.com的地址。
可以看到这一步返回了别名www.keyamedical.com.w.kunluncan.com.,dns 请求到别名时请求终止了。
//类似命令:dig @39.96.153.61 www.keyamedical.com
www.keyamedical.com. 600 IN CNAME www.keyamedical.com.w.kunluncan.com.
;; Received 97 bytes from 39.96.153.61#53(dns24.hichina.com) in 93 ms
我们对别名再用 dig 查询:
$ dig +trace www.keyamedical.com.w.kunluncan.com
同查询www.keyamedical.com步骤一样,结果返回如下:
可以看到www.keyamedical.com.w.kunluncan.com有多条 A 记录(顺序随机),也就是说www.keyamedical.com实际对应了多个(12) IP 地址,浏览器访问时通常选取返回的第一个地址。
; <<>> DiG 9.10.6 <<>> +trace www.keyamedical.com.w.kunluncan.com
;; global options: +cmd
. 95 IN NS f.root-servers.net.
. 95 IN NS j.root-servers.net.
. 95 IN NS e.root-servers.net.
. 95 IN NS h.root-servers.net.
. 95 IN NS b.root-servers.net.
. 95 IN NS a.root-servers.net.
. 95 IN NS l.root-servers.net.
. 95 IN NS c.root-servers.net.
. 95 IN NS m.root-servers.net.
. 95 IN NS d.root-servers.net.
. 95 IN NS i.root-servers.net.
. 95 IN NS g.root-servers.net.
. 95 IN NS k.root-servers.net.
;; Received 407 bytes from 114.114.114.114#53(114.114.114.114) in 34 ms
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766
com. 86400 IN RRSIG DS 8 1 86400 20220830220000 20220817210000 20826 . ElUvKaW9ddxuW7Pl7e84kh/dxcGPWYJoQaSXGnWjCZTpt+LZivJAEolu LDCZwgVTkOJnwxlI7LdbCcwfW2jUH3EYK4GqjoSe4L171tNrWrTaIQC6 AIxMzMP6HlDawEI7LQQXE36wBlA/kb4l+jjLZmA5nsXQ2hCFCCtcBkmb dknNqt2O6feytsUw9CHzvvx5q/dlMWp1CwgfjnarWVSU/4dmpmd5BKfm UdPHnw5z73wqwAHZ3jAI0H6ecCjcZVhWgSkg5MLrAIS+I6p1WpE+ROlc x5DNu+1VYG5dsRFOruituYunDgEf1UuSrq/jsdWTGjXJoNgobqZIR35v 5gCsGw==
;; Received 1198 bytes from 192.112.36.4#53(g.root-servers.net) in 245 ms
kunluncan.com. 172800 IN NS ns3.aliyun.com.
kunluncan.com. 172800 IN NS ns4.aliyun.com.
kunluncan.com. 172800 IN NS ns5.aliyun.com.
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q2D6NI4I7EQH8NA30NS61O48UL8G5 NS SOA RRSIG DNSKEY NSEC3PARAM
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20220823042413 20220816031413 32298 com. Enbw7kmsz48csnt/+2IImg9UXUMiORjdqjCbvReZvY+xnAS1HG8z6usT EK2Niky82goEJvdt9m7PPy50IR1c2UgLtDxP7RUjpjj5BsEJCxpZkrVI ZamykLOmdtYV1N9uw5HrLVi/tdFoFWWCXxx9Riqo6pQ/vou4o1QIjw8W eoeiv4WDVfVSFFZfroDth2pSZcE+on4uDcFdxUTXUNJ6fA==
47FLS55561T6TQE2S2KIKCM9C5DP5KAS.com. 86400 IN NSEC3 1 1 0 - 47FM6VRQR9U4PTLP3UH6F9HRRID4UCP3 NS DS RRSIG
47FLS55561T6TQE2S2KIKCM9C5DP5KAS.com. 86400 IN RRSIG NSEC3 8 2 86400 20220822050824 20220815035824 32298 com. NgtYilip85OLvzy85YwK8clautxpjxkT8tQbcmnNjBdx+LhCH7+CWF5J LI7U5/E0SQ4uA8DlS9+vEtT2VUSGngWTWPNbcm3GhZEnIG54wmduFkSQ Cvn8HeaIR/9tFseJy/ZYVarMjwbaiqsEM0BpcJ68hx6CjJFvnQ1yn2na DIRXZMUWa0rJJsnOqQFohc3UhQ6nttKrioKUw1XS+aAQbg==
;; Received 854 bytes from 192.54.112.30#53(h.gtld-servers.net) in 347 ms
w.kunluncan.com. 10800 IN NS ns4.kunluncan.com.
w.kunluncan.com. 10800 IN NS ns3.kunluncan.com.
w.kunluncan.com. 10800 IN NS ns5.kunluncan.com.
;; Received 329 bytes from 47.88.74.34#53(ns5.aliyun.com) in 199 ms
www.keyamedical.com.w.kunluncan.com. 60 IN A 117.59.124.226
www.keyamedical.com.w.kunluncan.com. 60 IN A 117.59.165.102
www.keyamedical.com.w.kunluncan.com. 60 IN A 125.62.38.84
www.keyamedical.com.w.kunluncan.com. 60 IN A 125.62.38.81
www.keyamedical.com.w.kunluncan.com. 60 IN A 125.62.38.79
www.keyamedical.com.w.kunluncan.com. 60 IN A 125.62.38.80
www.keyamedical.com.w.kunluncan.com. 60 IN A 117.59.165.105
www.keyamedical.com.w.kunluncan.com. 60 IN A 117.59.165.103
www.keyamedical.com.w.kunluncan.com. 60 IN A 117.59.165.99
www.keyamedical.com.w.kunluncan.com. 60 IN A 117.59.165.104
www.keyamedical.com.w.kunluncan.com. 60 IN A 117.59.165.98
www.keyamedical.com.w.kunluncan.com. 60 IN A 117.59.124.230
w.kunlunCan.com. 86400 IN NS ns3.kunlunCan.com.
w.kunlunCan.com. 86400 IN NS ns4.kunlunCan.com.
w.kunlunCan.com. 86400 IN NS ns5.kunlunCan.com.
;; Received 376 bytes from 121.43.18.41#53(ns3.kunluncan.com) in 73 ms