DNS域名解析协议

@wintry大约 4 分钟

DNS概述

DNS(Domain Name System-域名“系统”)是一种可以将域名和IP地址相互映射的以层次结构分布的数据库系统;整个 DNS 系统由分散在世界各地的很多台 DNS 服务器组成,每台 DNS 服务器上都保存了一些数据,这些数据可以让我们最终查到主机名对应的 IP。

DNS 服务器有三种

根 DNS 服务器(通常使用"."来表示,用于管理顶级DNS)

顶级域(Top-Level Domain, TLD) DNS 服务器(com、cn、edu等,提供权威DNS服务器的IP)

权威 DNS 服务器 (返回主机-IP的最终映射)

全世界目前有13个域名根节点,由少数几个国家进行管理,而中国仅有几台根节点镜像。

imggdom

域名解析记录方式

记录类型使用目的
A将域名指向一个 IP 地址(外网地址)。
CNAME将域名指向另一个域名,再由另一个域名提供 IP 地址(外网地址)。
MX设置邮箱,让邮箱能收到邮件。
NS将子域名交给其他 DNS 服务商解析。
SPF指向发送邮件的服务器。
AAAA将域名指向一个 IPv6 地址。
SRV用来标识某台服务器使用了某个服务,常见于微软系统的目录管理。
TXT对域名进行标识和说明,绝大多数的 TXT 记录是用来做 SPF 记录(反垃圾邮件)。
CAA授权指定 CA 机构为域名签发 SSL 证书,以防止 SSL 证书错误签发。

SPF记录以IP地址认证电子邮件发件人身份,是非常高效的垃圾邮件解决方案

域名解析过程

本地DNS服务器

本地DNS服务器(Local DNS)不属于DNS的层次结构,但是它对DNS的层次结构是至关重要的。

每个 ISP 都有一台本地 DNS 服务器,比如一个大学的 ISP、一个机构的 ISP,都有一台或多台本地 DNS 服务器。当终端主机发出 DNS 请求时,该请求被发往本地 DNS 服务器,本地 DNS 服务器负责将该请求转发到 DNS 服务器层次结构中。

解析过程图示

DNS查询是一个递归、迭代查询的过程

DNScx

1、终端主机向本地DNS发起域名请求

2、本地DNS获取到域名请求后,向根域名服务器发起解析请求,根DNS返回顶级域名服务器地址

3、随后本地DNS服务器向顶级DNS服务器发起解析请求,顶级DNS返回权威DNS服务器的地址

4、本地DNS服务器又向其中一台权威DNS服务器发送解析请求

6、权威DNS服务器返回查询域名-IP的映射,本地DNS将此映射缓存并返回给终端主机

百度解析过程

先向13个根域名服务器发送请求,依次是顶级DNS和权威DNS直到CNAME到www.a.shifen.com.解析出了IP地址。

[root@VM-4-5-centos ~]# dig +trace www.baidu.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> +trace www.baidu.com
;; global options: +cmd
.			172404	IN	NS	a.root-servers.net.
.			172404	IN	NS	b.root-servers.net.
.			172404	IN	NS	c.root-servers.net.
.			172404	IN	NS	d.root-servers.net.
.			172404	IN	NS	e.root-servers.net.
.			172404	IN	NS	f.root-servers.net.
.			172404	IN	NS	g.root-servers.net.
.			172404	IN	NS	h.root-servers.net.
.			172404	IN	NS	i.root-servers.net.
.			172404	IN	NS	j.root-servers.net.
.			172404	IN	NS	k.root-servers.net.
.			172404	IN	NS	l.root-servers.net.
.			172404	IN	NS	m.root-servers.net.
;; Received 239 bytes from 114.114.114.114#53(114.114.114.114) in 9 ms

com.			172800	IN	NS	e.gtld-servers.net.
com.			172800	IN	NS	b.gtld-servers.net.
com.			172800	IN	NS	j.gtld-servers.net.
com.			172800	IN	NS	m.gtld-servers.net.
com.			172800	IN	NS	i.gtld-servers.net.
com.			172800	IN	NS	f.gtld-servers.net.
com.			172800	IN	NS	a.gtld-servers.net.
com.			172800	IN	NS	g.gtld-servers.net.
com.			172800	IN	NS	h.gtld-servers.net.
com.			172800	IN	NS	l.gtld-servers.net.
com.			172800	IN	NS	k.gtld-servers.net.
com.			172800	IN	NS	c.gtld-servers.net.
com.			172800	IN	NS	d.gtld-servers.net.
com.			86400	IN	DS	30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766
com.			86400	IN	RRSIG	DS 8 1 86400 20221203050000 20221120040000 18733 . uQiKGKTUkEIeNVOYjx7vKrMtANmt2SnXpG02yRIQsAMO0UFc062pf6II quckovgjAGOxWGIk9EZg7QcTrhTzCiNRSJaY/wEX4oSwoYDSPUKPCkoG FucYziyiWG73iZlF8VOAXASAw2ZtH1qki11cgOwyJLb7b9UbYr6QVrix FAzfURkpLPqv0xMDWdxW1qAjq0nJ63NOhf1qFA9JsIXdqrcCb8aEj1NW wPnDu+QzlBXL5aZyJtP/BoIucszSmQThIjwH/kfwIre0KES7Clpzgrde Ztyy9wPBV7eRxCto54pbugu9tx76L3ZqZQ5zoOAT8AHuoalLVNdzx0bv c4qwMw==
;; Received 1173 bytes from 192.58.128.30#53(j.root-servers.net) in 191 ms

baidu.com.		172800	IN	NS	ns2.baidu.com.
baidu.com.		172800	IN	NS	ns3.baidu.com.
baidu.com.		172800	IN	NS	ns4.baidu.com.
baidu.com.		172800	IN	NS	ns1.baidu.com.
baidu.com.		172800	IN	NS	ns7.baidu.com.
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q2D6NI4I7EQH8NA30NS61O48UL8G5 NS SOA RRSIG DNSKEY NSEC3PARAM
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20221127052428 20221120041428 53929 com. SnVmAcktp+1bTm0p0l8zbWAgAsmntjN5RgRngxHv37sANfXnkOyXkcor jUYCXrf2r5KNli9HUQoWb+VHXXrG6hoSy+S/YvQXy8BPN3ilr8NypcT7 W0h07JhVZYz4h4JXJvgvFCyFIBEo3/GOfDUT+7UfRKlrTJiio3vOVmY6 ga8Ia/D3UVkcHl5HbLqjI10ipBFOYQ1SWlour/8bv3vqgQ==
HPVUVSGH5TFIA7CM6SS6SMPOS87OE0CE.com. 86400 IN NSEC3 1 1 0 - HPVV8SARM2LDLRBTVC5EP1CUB1EF7LOP NS DS RRSIG
HPVUVSGH5TFIA7CM6SS6SMPOS87OE0CE.com. 86400 IN RRSIG NSEC3 8 2 86400 20221127063741 20221120052741 53929 com. aG+AyWRIXoqfwvlPjl5tu+/1lj3EzgRFpqjkSdNaXAh36uX9zAY0U2ma zfhbXYQ9O31sk8bvnr74xFIrYZhtdFzkH1YQ4AHG3hXzkDcEzicT7e6R PUy0V0UTu7ZAfsOi1K9Hb/vwKqlAUiTQb7VVcd5HxuzpRqULHHLTOZzt x3NW/cbDrTJN6kDo1Wnu4hHJV7sfmKNZC5E6ySlpkzTFwA==
;; Received 849 bytes from 192.26.92.30#53(c.gtld-servers.net) in 239 ms

www.baidu.com.		1200	IN	CNAME	www.a.shifen.com.
;; Received 72 bytes from 220.181.33.31#53(ns2.baidu.com) in 28 ms

DNS为什么采用UDP协议

TCP通信过程太复杂并且开销大。

一次TCP交换需要9个包: 三个连接包,四个断开包,一个请求t包,一个响应包。

UDP通信过程简单,只需要一个查询包和一个响应包。