目录
基本概念
DNS(Domain Name System,域名系统)是互联网的核心基础设施之一,它的主要作用是将人类易于记忆的域名 (如www.baidu.com)转换为 计算机能够识别的IP 地址(如180.101.50.242),从而实现网络设备之间的通信。
根域名服务器:提供顶级域名服务器(TLD)的地址,不直接解析具体域名
顶级域名服务器:返回该顶级域名下二级域名对应的权威域名服务器地址
权威域名服务器:仅管理特定域名(如example.com、baidu.com)及其子域名(如blog.example.com)的解析记录。
递归和迭代

域名缓存
- 浏览器缓存:有固定的缓存时间
- 操作系统缓存: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.com 到 ns4.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.com 到 ns-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 的核心工作流程
-
客户端初始化
SDK 接入:移动应用集成 HTTPDNS SDK(如阿里云、腾讯云提供的 SDK),SDK 内置 HTTPDNS 服务器的初始 IP 列表(如http://httpdns.aliyun.com)
动态更新 IP 列表:SDK 首次运行时,通过 HTTP 请求从服务端获取最新的 HTTPDNS 服务器 IP 列表,并缓存到本地,确保后续请求能连接到可用节点
-
域名解析请求
请求封装:客户端通过 SDK 发起 HTTP 请求,参数包含待解析的域名(如www.qq.com)和鉴权信息(如签名、Token)。
协议选择:
HTTP:默认使用 HTTP 协议,端口 80,适合对安全性要求较低的场景。
HTTPS:通过 TLS 加密传输,端口 443,防止数据被窃听或篡改,适用于金融、政务等敏感场景
-
服务端智能调度
HTTPDNS 服务器集群(通常部署在多运营商、多地域节点)执行以下操作:
递归查询:通过自建 DNS 集群或权威 DNS 服务器获取域名的真实 IP 地址(如 A 记录、CNAME 记录)
智能决策:
IP 定位:根据客户端请求的源 IP,识别其地理位置(如中国广东深圳)、运营商(如中国移动)
负载均衡:结合服务器负载、网络质量(如延迟、丢包率)和业务策略(如优先返回 CDN 节点 IP),筛选出最优 IP 地址
动态调整:若某个节点故障或延迟过高,自动切换到备用节点,确保服务可用性
-
响应与缓存管理
结果返回: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 记录声明为该域名的权威服务器,协作提供稳定、高效的解析服务。
---未完待续---