DNS协议

目录

基本概念

DNS(Domain Name System,域名系统)是互联网的核心基础设施之一,它的主要作用是将人类易于记忆的域名如www.baidu.com转换为 计算机能够识别的IP 地址(如180.101.50.242),从而实现网络设备之间的通信。


根域名服务器:提供顶级域名服务器(TLD)的地址,不直接解析具体域名

顶级域名服务器:返回该顶级域名下二级域名对应的权威域名服务器地址

权威域名服务器:仅管理特定域名(如example.combaidu.com)及其子域名(如blog.example.com)的解析记录。

递归和迭代

域名缓存

  1. 浏览器缓存:有固定的缓存时间
  2. 操作系统缓存:hosts文件
    在浏览器中进行访问的时候,会优先查询浏览器缓存 ,如果未命中则继续查询操作系统缓存 ,最后再查询本地域名服务器 ,然后本地域名服务器会递归查找域名记录,最后返回结果。主机和本地域名服务器之间的查询方式是递归查询,也就是说主机请求本地域名服务器,那么本地域名服务器作为请求的接收者一定要给主机想要的答案。

域名解析过程

当本地 DNS 首次解析 www.qq.com

理论上:

本地 DNS 不知道 .com 服务器的地址,会先查询根服务器;

根服务器返回 .com 顶级域名服务器的地址列表;

本地 DNS 再向 .com 服务器查询 qq.com 的权威服务器地址,以此类推。

实际上:

本地 DNS 早已通过初始化配置或历史查询,缓存了所有顶级域名(.com、.cn 等)对应的根服务器返回结果(即 TLD 服务器的地址)

当解析域名时,本地 DNS 会直接使用缓存的 TLD 服务器地址,跳过 "查询根服务器" 这一步,直接向 TLD 服务器发起请求。

针对www.qq.com,对 TLD 发起 NS 查询的结果如下:

相当于是去问com. qq.com. 的权威服务器在哪里?

bash 复制代码
; <<>> DiG diggui.com <<>> @b.gtld-servers.net www.qq.com NS  # 使用 dig 工具,强制向 .com 顶级域名服务器之一(e.gtld-servers.net)发送查询,请求获取 www.qq.com 的 SOA 记录
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40384
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 17
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.qq.com.			IN	NS

;; AUTHORITY SECTION:
qq.com.			172800	IN	NS	ns1.qq.com.
qq.com.			172800	IN	NS	ns2.qq.com.
qq.com.			172800	IN	NS	ns3.qq.com.
qq.com.			172800	IN	NS	ns4.qq.com.

;; ADDITIONAL SECTION:
ns1.qq.com.		172800	IN	A	101.227.218.144
ns1.qq.com.		172800	IN	AAAA	2402:4e00:c050:7a00::3
ns2.qq.com.		172800	IN	A	111.230.158.42
ns2.qq.com.		172800	IN	AAAA	240e:9f:c600::8
ns3.qq.com.		172800	IN	A	117.184.232.216
ns3.qq.com.		172800	IN	A	120.233.255.187
ns4.qq.com.		172800	IN	A	125.39.202.11
ns4.qq.com.		172800	IN	A	170.106.32.66

;; Query time: 34 msec
;; SERVER: 2001:503:231d::2:30#53(2001:503:231d::2:30)
;; WHEN: Thu Jul 24 07:50:38 UTC 2025
;; MSG SIZE  rcvd: 391

告诉查询者:www.qq.com 属于 qq.com 的子域,qq.com 的权威服务器是 ns1.qq.comns4.qq.com,你应该去问它们

针对www.qq.com,对 权威服务器 ns1.qq.com 发起 A 查询的结果如下:

bash 复制代码
; <<>> DiG diggui.com <<>> @ns1.qq.com www.qq.com A
; (5 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49244
;; flags: qr rd ad; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 18
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.qq.com.			IN	A

;; AUTHORITY SECTION:
www.qq.com.		86400	IN	NS	ns-cnc1.qq.com.
www.qq.com.		86400	IN	NS	ns-tel1.qq.com.

;; ADDITIONAL SECTION:
ns-cnc1.qq.com.		3600	IN	A	157.255.6.102
ns-cnc1.qq.com.		3600	IN	AAAA	240e:e1:aa00:2002::3
ns-tel1.qq.com.		3600	IN	A	14.116.238.220
ns-tel1.qq.com.		3600	IN	AAAA	240e:e1:aa00:2002::3

;; Query time: 212 msec
;; SERVER: 2402:4e00:c050:7a00::3#53(2402:4e00:c050:7a00::3)
;; WHEN: Thu Jul 24 08:38:46 UTC 2025
;; MSG SIZE  rcvd: 446

告诉查询者:www.qq.com 的权威服务器是 ns-cnc1.qq.comns-tel1.qq.com,你应该去问它们 www.qq.com 的 A 记录

针对www.qq.com,对 权威服务器 ns-cnc1.qq.com 发起 A 查询的结果如下:

bash 复制代码
; <<>> DiG diggui.com <<>> @ns-tel1.qq.com www.qq.com A
; (4 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19965
;; flags: qr aa rd ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.qq.com.			IN	A

;; ANSWER SECTION:
www.qq.com.		300	IN	CNAME	www.qq.com.eo.dnse2.com.

;; Query time: 207 msec
;; SERVER: 240e:e1:aa00:2002::3#53(240e:e1:aa00:2002::3)
;; WHEN: Thu Jul 24 08:42:52 UTC 2025
;; MSG SIZE  rcvd: 73

告诉查询者:www.qq.com.的cname记录为www.qq.com.eo.dnse2.com

针对www.qq.com.eo.dnse2.com,对 TLD 发起 NS 查询,结果如下:

dnse2.com. 172800 IN NS ns1.qeodns.com.

针对www.qq.com.eo.dnse2.com,对权威服务器 ns1.qeodns.com 发起 A 查询的结果如下:

www.qq.com.eo.dnse2.com. 60 IN A 43.152.182.103


DNS安全问题

DNS是明文传输,容易被窃听、篡改和劫持。

DNS劫持:发送DNS请求被中间人拦截,并返回给你一个恶意网址的IP或者重定向到其他DNS服务器。

从DNS的请求路径来看,

第一步是浏览器,如果是不正经的浏览器,可以拦截DNS请求,并返回恶意网址的IP。

第二步是Hosts文件,如果被恶意修改了Hosts文件,也可以返回恶意网址的IP。

第三步是本地DNS服务器,比如连上了黑客的免费wifi,也可能会被劫持。

DDOS攻击

攻击者利用开放 DNS 解析器的功能产生大量流量,使目标服务器或网络不堪重负,导致服务器及其周围基础设施无法访问。

DNS缓存污染

攻击者可以仿冒权威DNS服务器向缓存DNS服务器发送伪造应答包,力争抢先完成应答以污染DNS缓存。

HTTPDNS

HTTPDNS是一种基于 HTTP 协议的域名解析服务,其核心原理是通过绕过本地 DNS 服务器,直接向云端 HTTPDNS 服务器发送解析请求,从而解决传统 DNS 协议在安全性、精准性和稳定性上的不足。

HTTPDNS 的核心工作流程

  1. 客户端初始化

    SDK 接入:移动应用集成 HTTPDNS SDK(如阿里云、腾讯云提供的 SDK),SDK 内置 HTTPDNS 服务器的初始 IP 列表(如http://httpdns.aliyun.com

    动态更新 IP 列表:SDK 首次运行时,通过 HTTP 请求从服务端获取最新的 HTTPDNS 服务器 IP 列表,并缓存到本地,确保后续请求能连接到可用节点

  2. 域名解析请求

    请求封装:客户端通过 SDK 发起 HTTP 请求,参数包含待解析的域名(如www.qq.com)和鉴权信息(如签名、Token)。

    协议选择:

    HTTP:默认使用 HTTP 协议,端口 80,适合对安全性要求较低的场景。

    HTTPS:通过 TLS 加密传输,端口 443,防止数据被窃听或篡改,适用于金融、政务等敏感场景

  3. 服务端智能调度

    HTTPDNS 服务器集群(通常部署在多运营商、多地域节点)执行以下操作:

    递归查询:通过自建 DNS 集群或权威 DNS 服务器获取域名的真实 IP 地址(如 A 记录、CNAME 记录)

    智能决策:

    IP 定位:根据客户端请求的源 IP,识别其地理位置(如中国广东深圳)、运营商(如中国移动)

    负载均衡:结合服务器负载、网络质量(如延迟、丢包率)和业务策略(如优先返回 CDN 节点 IP),筛选出最优 IP 地址

    动态调整:若某个节点故障或延迟过高,自动切换到备用节点,确保服务可用性

  4. 响应与缓存管理

    结果返回:HTTPDNS 服务器以 JSON/XML 格式返回解析结果

    客户端缓存:

    内存缓存:SDK 将解析结果缓存在内存中,有效期由服务端返回的 TTL 控制,下次查询直接命中缓存,实现 "0ms 解析延迟"。

    持久化存储:解析结果同时写入本地文件或数据库,APP 重启后可快速加载常用域名的 IP,减少重复请求。

    缓存更新策略:

    主动更新:当服务端检测到域名解析结果变更时,通过推送或定时任务通知客户端刷新缓存。

    懒更新:缓存过期后,客户端在下次请求时自动触发更新,确保解析结果的实时性

命令

sudo yum install bind-utils -y

dig @8.8.8.8 www.qq.com A

www.qq.com. 300 IN SOA ns-tel1.qq.com. webmaster.qq.com. 1380440321 300 600 86400 300

SOA (Start of Authority,起始授权记录)是 DNS 区域文件(权威服务器存储域名解析记录的配置文件)中的第一条记录,仅存在于权威 DNS 服务器中 ,用于标识 "这个服务器是该域名的权威管理者",并定义该域名的管理规则(如主从服务器同步机制、记录版本号等)。

当其他服务器(如递归 DNS 服务器)查询某个域名的解析记录时,若需要确认 "谁是该域名的权威服务器",或需要获取该域名的管理元数据(如版本号、刷新时间),会向权威服务器请求并获取 SOA 记录。

简单说:SOA 记录是权威服务器 "自证身份" 的凭证 ------ 通过 SOA 记录,其他服务器能确认 "这个服务器确实有权管理该域名",以及 "如何与它同步记录"。

主服务器是域名解析数据的 "原创者",其他 NS 服务器(主要是从服务器)是 "同步者" 和 "备份者"。它们通过 SOA 记录定义的规则(刷新时间、序列号等)保持数据一致,共同被 NS 记录声明为该域名的权威服务器,协作提供稳定、高效的解析服务。

---未完待续---