DNS 实现原理介绍

发布时间: 更新时间: 总字数:1903 阅读时间:4m 作者: IP上海 分享 网址

域名系统(Domain Name System, DNS)是整个互联网的通讯录,它能够将容易识别的域名翻译成可被机器理解IP地址。

前言

DNS 可以理解为一个分布式的树状命名系统,它就像一个去中心化的分布式数据库,存储着从域名到IP地址的映射关系。

工作原理

本例采用一台机器访问xiexianbin.cn为例,详解DNS工作原理,如下图:

dns resolution

  1. 本地的DNS客户端向DNS解析器发出解析xiexianbin.cn域名的请求
  2. DNS解析器向就近的根DNS服务器.请求顶级域名DNS服务cn.的地址
  3. 拿到顶级域名DNS服务cn.的地址之后,DNS解析器会向顶级域名服务请求负责xiexianbin.cn.域名解析的命名服务Name Server
  4. 得到授权的DNS命名服务,就可以根据请求的具体的主机IP地址
  5. DNS解析器将IP地址返回本地的DNS客户端

DNS解析器有两种查询方式:

  • 迭代查询:依次返回DNS服务地址,直到最终查到
  • 递归查询:DNS服务器收到客户端结果时,若本地有缓存,直接返回;若无,就询问其他的服务器,并将结果返回客户端

域名层级

域名层级是一个层级的树形结构,树的最顶层是根域名,一般使用.来表示,域名xiexianbin.cn,该写法其实省略了最后的.,全称域名(FQDN)为xiexianbin.cn.

域名服务器

DNS 域名服务器大体分成三类:

  • 根域名服务
  • 顶级域名服务
  • 权威域名服务

域名的命名空间是树形的,决定了处理域名解析的DNS服务器也是树形的,只是在树的组织和每一层的职责上有一些不同。 DNS解析器根域名服务器查找到顶级域名服务器IP地址,又从顶级域名服务器查找到权威域名服务器IP地址,最终从权威域名服务器查出了对应服务的IP地址,如下:

dig -t A www.xiexianbin.cn +trace

; <<>> DiG 9.10.6 <<>> -t A www.xiexianbin.cn +trace
;; global options: +cmd
.			46	IN	NS	c.root-servers.net.    # 13 组根域名服务器
.			46	IN	NS	e.root-servers.net.
.			46	IN	NS	a.root-servers.net.
.			46	IN	NS	b.root-servers.net.
.			46	IN	NS	f.root-servers.net.
.			46	IN	NS	h.root-servers.net.
.			46	IN	NS	m.root-servers.net.
.			46	IN	NS	k.root-servers.net.
.			46	IN	NS	j.root-servers.net.
.			46	IN	NS	i.root-servers.net.
.			46	IN	NS	d.root-servers.net.
.			46	IN	NS	l.root-servers.net.
.			46	IN	NS	g.root-servers.net.
;; Received 239 bytes from 192.168.1.1#53(192.168.1.1) in 8 ms

cn.			172800	IN	NS	a.dns.cn.    # 名 DNS 服务器
cn.			172800	IN	NS	b.dns.cn.
cn.			172800	IN	NS	c.dns.cn.
cn.			172800	IN	NS	d.dns.cn.
cn.			172800	IN	NS	e.dns.cn.
cn.			172800	IN	NS	f.dns.cn.
cn.			172800	IN	NS	g.dns.cn.
cn.			172800	IN	NS	ns.cernet.net.
cn.			86400	IN	DS	57724 8 2 5D0423633EB24A499BE78AA22D1C0C9BA36218FF49FD95A4CDF1A4AD 97C67044
cn.			86400	IN	RRSIG	DS 8 1 86400 20210313050000 20210228040000 42351 . cNhKizxSK7mTGfToT6aneUHMvysGwD0BmdkpkrJG6LRTClIeFp6OxYv9 woofV06dpzrb4XrUCaZzedloaSiS5gz0NLRpUxu9LMWzPqugJ6mB5Nku Tzh7z6hWqI4P6RWm0jdUuV0UU8tHnLg+z0R9oTLgHZFzCZ2VWb5fbBws iZY0buc5Goq5okBoUQuYxJnYBbJs6jaZ6SgK57lueIkx6TW7rU69ZcWX 33CWOV3GoJ+cMS57dSWtwrQxfN8S32x5eWFM7P/PSh3qA8Pb5qdqVW9x Mzz6ll/lk2lpgLNWH2OZHM+x9q9+o/0DhjrkoRxsbmdZWPqaDscedVwV PSru4w==
;; Received 708 bytes from 198.41.0.4#53(a.root-servers.net) in 243 ms

xiexianbin.cn.		86400	IN	NS	dns27.hichina.com.    # 权威DNS服务器
xiexianbin.cn.		86400	IN	NS	dns28.hichina.com.
3qdaqa092ee5belp64a74ebnb8j53d7e.cn. 21600 IN NSEC3 1 1 10 AEF123AB 3QLMP0QRNQ96G5AFGOPNB7U7IJ4MBP4B  NS SOA RRSIG DNSKEY NSEC3PARAM
3qdaqa092ee5belp64a74ebnb8j53d7e.cn. 21600 IN RRSIG NSEC3 8 2 21600 20210314110243 20210212102103 38388 cn. JKhH8x1OG/7Caw+HOskaQeqa4HUkFl3y7iRA5yO3vCiaDpPB3vycUeIq BvuOtXUhatYpn9BeBeyrOlTHBt2VdTtAPDtTct771qUzyoptqeMbLu8D p+TJL8/QEiA9DPiiu8ijgGSq3dT5RE2NE8dzYPGVyVfGOvJ3l341FUG+ JFY=
lvmcu6rg30kg6ch8v95m5orojf1s15k3.cn. 21600 IN NSEC3 1 1 10 AEF123AB M00DET6UMAB8JVV453K3P4SRBR44G7RI  CNAME RRSIG
lvmcu6rg30kg6ch8v95m5orojf1s15k3.cn. 21600 IN RRSIG NSEC3 8 2 21600 20210314100107 20210212092032 38388 cn. LEX4+QruWCNZCcJk9i3RdXdnoQhLb85fp21R6bePmcuWnuBuDF/3hPyH CV6/2Y23p8ucFS12Wj0DBsIwPBEWuXuXvFBqv7eosiiGIic3cS5Wa+tF 5Wu9pvWLkfP9ngEALMzPcVvSiUSgLTH9KpeMPdT6f9M+90auGDZl1mf7 u+0=
;; Received 665 bytes from 2001:dc7:1000::1#53(d.dns.cn) in 25 ms

www.xiexianbin.cn.	600	IN	CNAME	www.xiexianbin.cn.w.cdngslb.com.    # 解析地址
;; Received 91 bytes from 106.11.141.120#53(dns28.hichina.com) in 43 ms

胶水记录

胶水记录(Glue Record)解决在出现循环依赖时,直接在上一级作用域返回 DNS 服务器的 IP 地址

dig +trace +additional www.xiexianbin.cn

; <<>> DiG 9.10.6 <<>> +trace +additional www.xiexianbin.cn
;; global options: +cmd
.			3512	IN	NS	h.root-servers.net.
.			3512	IN	NS	b.root-servers.net.
.			3512	IN	NS	e.root-servers.net.
.			3512	IN	NS	m.root-servers.net.
.			3512	IN	NS	k.root-servers.net.
.			3512	IN	NS	d.root-servers.net.
.			3512	IN	NS	j.root-servers.net.
.			3512	IN	NS	f.root-servers.net.
.			3512	IN	NS	l.root-servers.net.
.			3512	IN	NS	c.root-servers.net.
.			3512	IN	NS	g.root-servers.net.
.			3512	IN	NS	a.root-servers.net.
.			3512	IN	NS	i.root-servers.net.
;; Received 239 bytes from 192.168.1.1#53(192.168.1.1) in 7 ms

cn.			172800	IN	NS	a.dns.cn.
cn.			172800	IN	NS	b.dns.cn.
cn.			172800	IN	NS	c.dns.cn.
cn.			172800	IN	NS	d.dns.cn.
cn.			172800	IN	NS	e.dns.cn.
cn.			172800	IN	NS	f.dns.cn.
cn.			172800	IN	NS	g.dns.cn.
cn.			172800	IN	NS	ns.cernet.net.
cn.			86400	IN	DS	57724 8 2 5D0423633EB24A499BE78AA22D1C0C9BA36218FF49FD95A4CDF1A4AD 97C67044
cn.			86400	IN	RRSIG	DS 8 1 86400 20210313050000 20210228040000 42351 . cNhKizxSK7mTGfToT6aneUHMvysGwD0BmdkpkrJG6LRTClIeFp6OxYv9 woofV06dpzrb4XrUCaZzedloaSiS5gz0NLRpUxu9LMWzPqugJ6mB5Nku Tzh7z6hWqI4P6RWm0jdUuV0UU8tHnLg+z0R9oTLgHZFzCZ2VWb5fbBws iZY0buc5Goq5okBoUQuYxJnYBbJs6jaZ6SgK57lueIkx6TW7rU69ZcWX 33CWOV3GoJ+cMS57dSWtwrQxfN8S32x5eWFM7P/PSh3qA8Pb5qdqVW9x Mzz6ll/lk2lpgLNWH2OZHM+x9q9+o/0DhjrkoRxsbmdZWPqaDscedVwV PSru4w==
a.dns.cn.		172800	IN	A	203.119.25.1    # 返回IP地址
b.dns.cn.		172800	IN	A	203.119.26.1
c.dns.cn.		172800	IN	A	203.119.27.1
d.dns.cn.		172800	IN	A	203.119.28.1
e.dns.cn.		172800	IN	A	203.119.29.1
f.dns.cn.		172800	IN	A	195.219.8.90
g.dns.cn.		172800	IN	A	66.198.183.65
ns.cernet.net.		172800	IN	A	202.112.0.44
a.dns.cn.		172800	IN	AAAA	2001:dc7::1
d.dns.cn.		172800	IN	AAAA	2001:dc7:1000::1
;; Received 708 bytes from 192.58.128.30#53(j.root-servers.net) in 32 ms

xiexianbin.cn.		86400	IN	NS	dns27.hichina.com.
xiexianbin.cn.		86400	IN	NS	dns28.hichina.com.
3qdaqa092ee5belp64a74ebnb8j53d7e.cn. 21600 IN NSEC3 1 1 10 AEF123AB 3QLMP0QRNQ96G5AFGOPNB7U7IJ4MBP4B  NS SOA RRSIG DNSKEY NSEC3PARAM
3qdaqa092ee5belp64a74ebnb8j53d7e.cn. 21600 IN RRSIG NSEC3 8 2 21600 20210314110243 20210212102103 38388 cn. JKhH8x1OG/7Caw+HOskaQeqa4HUkFl3y7iRA5yO3vCiaDpPB3vycUeIq BvuOtXUhatYpn9BeBeyrOlTHBt2VdTtAPDtTct771qUzyoptqeMbLu8D p+TJL8/QEiA9DPiiu8ijgGSq3dT5RE2NE8dzYPGVyVfGOvJ3l341FUG+ JFY=
lvmcu6rg30kg6ch8v95m5orojf1s15k3.cn. 21600 IN NSEC3 1 1 10 AEF123AB M00DET6UMAB8JVV453K3P4SRBR44G7RI  CNAME RRSIG
lvmcu6rg30kg6ch8v95m5orojf1s15k3.cn. 21600 IN RRSIG NSEC3 8 2 21600 20210314100107 20210212092032 38388 cn. LEX4+QruWCNZCcJk9i3RdXdnoQhLb85fp21R6bePmcuWnuBuDF/3hPyH CV6/2Y23p8ucFS12Wj0DBsIwPBEWuXuXvFBqv7eosiiGIic3cS5Wa+tF 5Wu9pvWLkfP9ngEALMzPcVvSiUSgLTH9KpeMPdT6f9M+90auGDZl1mf7 u+0=
;; Received 665 bytes from 2001:dc7::1#53(a.dns.cn) in 28 ms

www.xiexianbin.cn.	600	IN	CNAME	www.xiexianbin.cn.w.cdngslb.com.
;; Received 91 bytes from 2400:3200:2000:47::1#53(dns28.hichina.com) in 9 ms

扩展

  • DNS 服务器
    • CoreDNS
    • bind9
    • unbound
    • PowerDNS(PDNS) 提供 权威认证DNS服务器递归认证DNS服务器官网
  • https://nip.io/ 解析指定 nip.io 格式的域名到指定的 IP
  • DNSSEC(DNS Security Extensions,域名系统安全扩展) 能有效防止DNS欺骗和缓存污染等攻击
    • 实现原理:通过数字签名来保证DNS应答报文的真实性和完整性,保护用户不被重定向到非预期地址,从而提高用户对互联网的信任,并保护您的核心业务
  • LLMNR(Link Local Multicast Name Resolution,本地链路组播名称解析)
    • 在DNS服务器不可用时,DNS 客户端计算机使用本地链路组播名称解析,通过UDP发送到组播地址224.0.0.252:5355,来解析本地网段上的名称,使用的也是普通DNS的数据包格式
  • mDNS(Multicast DNS,多播 DNS) 主要实现了在没有传统DNS服务器的情况下,使局域网内的主机实现相互发现和通信,使用的端口为5353,遵从DNS协议,使用现有的DNS信息结构、名语法和资源记录类型。并且没有指定新的操作代码或响应代码

F&Q

Temporary failure in name resolution

  • DNS 域名解析暂时失败
  • Linux /etc/resolv.confoptions 控制 DNS
    • options 参数说明
      • rotate 随机选取一个 nameserver 查询 dns 记录
      • timeout 查询 nameserver 的超时时间,单位是秒
        • 系统缺省是 5,最大可以设为30
      • attempts 查询尝试次数
    • options 参数可以通过 RES_OPTIONS 环境变量配置(如在程序中指定,参考),示例
      • RES_OPTIONS="rotate timeout:1 retries:1"
options timeout:1 attempts:1 rotate
nameserver 223.5.5.5
nameserver 1.1.1.1

参考

  1. https://www.iana.org/domains/root/servers
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数