客户端PC通过UDP向DNS服务器53端口发送域名解析
客户端PC向DNS服务器发起域名解析的全流程解析
DNS系统基础架构
1 域名系统层级结构
层级 | 示例 | 功能说明 |
---|---|---|
根域名服务器 | .(如A根服务器) | 全球13组,负责顶级域解析 |
顶级域名服务器 | .com/.cn/.org | 管理二级域名授权 |
权威域名服务器 | dns.example.com | 存储具体域名的A/AAAA记录 |
2 DNS记录类型对比
记录类型 | 功能说明 | 示例 |
---|---|---|
A | 主机名>IPv4地址映射 | www.baidu.com → 123.125.114.144 |
AAAA | 主机名>IPv6地址映射 | ipv6.google.com → 2a00:1450:4009:80b::200e |
CNAME | 别名指向另一个域名 | mail.example.com → alias.example.net |
MX | 邮件交换记录 | @.example.com → mail.example.com |
NS | 命名服务器记录 | example.com → ns1.example.com |
TXT | 文本记录(常用于验证) | google.com → googlesiteverification=... |
客户端发起DNS查询的完整流程
1 操作系统层面的初始化配置
-
Windows系统:
- 配置文件:
C:\Windows\System32\drivers\etc\hosts
+%windir%\System32\drivers\etc\dnscache.bin
- 默认DNS:运营商分配(如中国电信114.114.114.114)
- 配置文件:
-
Linux系统:
- 主配置文件:
/etc/resolv.conf
- 典型配置:
nameserver 8.8.8.8 nameserver 8.8.4.4
- 主配置文件:
2 浏览器发起域名解析请求
当用户在浏览器地址栏输入www.example.com
时,触发以下动作:
-
本地缓存检查:
- 操作系统维护的DNS缓存(TTL未过期的条目)
- Chrome/Firefox浏览器进程内缓存
-
hosts文件查询:
- 检查
/etc/hosts
(Linux)或hosts
文件(Windows) - 示例条目:
0.0.1 localhost 220.181.38.148 proxy.example.com
- 检查
-
路由器本地DNS缓存:
- 家庭网关设备通常内置DNS缓存功能
- 常见品牌缓存策略: | 品牌 | 默认缓存时间 | 最大缓存条目 | |||| | TPLink | 10分钟 | 500条 | | DLink | 30分钟 | 1000条 |
3 递归查询流程详解
当本地缓存未命中时,触发递归查询流程:
-
客户端发送DNS查询:
- 目的端口:UDP 53(失败后切换TCP 53)
- 查询报文结构:
[Header: 12 bytes] [Question Section: QNAME(www.example.com)+QTYPE(A)]
-
递归解析器处理流程:
- 步骤1:查询根服务器(如A根服务器198.41.0.4)
- 步骤2:获取.com顶级服务器地址(如F根服务器192.5.6.30)
- 步骤3:查询权威服务器(如dns.example.com的NS记录)
-
权威服务器响应:
- 返回A记录:
www.example.com → 192.0.2.1
- 附带TTL值(如3600秒)
- 返回A记录:
4 DNS应答数据包分析
典型的DNS应答报文结构:
+++++
| Header | Question Sec. | Answer Sec. | Authority Sec. |
+++++
| 12B | QNAME+QTYPE | Name+Type+TTL+RDDATA | ... |
+++++
关键字段说明:
- AA标志位:Authoritative Answer标志(权威服务器置1)
- TC标志位:Truncated报文指示(超过512字节时置1)
- RD标志位:Recursion Desired(递归查询请求)
DNS缓存与优化机制
1 多级缓存体系
缓存层级 | 平均命中率 | 典型存活时间 |
---|---|---|
浏览器缓存 | 35%45% | 530分钟 |
OS本地缓存 | 25%35% | 1060分钟 |
路由器缓存 | 15%25% | 14小时 |
ISP缓存 | 5%15% | 624小时 |
2 TTL(生存时间)机制
-
标准值范围:
- 常规网站:3003600秒
- CDN资源:通常设置较短TTL(如60秒)
- MX记录:较长TTL(如86400秒)
-
特殊处理:
- 负缓存(NF_NODATA):当权威服务器返回NXDOMAIN时,可设置负缓存TTL
- 最小TTL限制:某些递归服务器强制最低60秒TTL
DNS安全与防护机制
1 常见攻击类型
攻击类型 | 原理说明 | 防护手段 |
---|---|---|
DNS劫持 | 篡改中途传输的DNS报文 | DNSSEC + HTTPS |
DDoS攻击 | 海量查询请求淹没服务器 | Anycast部署 + 流量清洗 |
缓存投毒 | 伪造权威服务器响应 | DNSSEC签名验证 |
2 现代安全防护技术
-
DNSSEC:
- 数字签名算法:RRSIG记录使用SHA256+RSA/ECDSA
- 验证链:从根KSK到ZSK的逐级验证
- 部署现状:.gov/.edu等顶级域已普遍启用
-
DoT/DoH:
- DoT(DNS over TLS):RFC 7858标准,端口853
- DoH(DNS over HTTPS):使用HTTPS加密通道传输DNS查询
- 性能对比: | 指标 | 传统DNS | DoT | DoH | ||||| | 延迟增加 | 0ms | +515ms | +2050ms | | 安全性 | ★☆☆☆☆ | ★★★★☆ | ★★★★★ |
问题与解答
Q1:什么是DNS污染?如何检测和应对?
A:DNS污染(DNS Censorship)指网络中间节点故意篡改DNS响应,将特定域名解析到错误地址,检测方法包括:
- 使用
dig
命令对比不同DNS服务器的解析结果 - 通过
nslookup
验证TXT/MX记录完整性 应对措施:使用公共DNS服务(如Google 8.8.8.8)、配置DoH服务。
Q2:CDN服务商如何实现智能DNS解析?
A:CDN通过以下技术实现智能解析:
- 地理IP定位:根据请求源IP判断地理位置
- 负载均衡:基于LBS算法选择最近节点
- 实时监控:动态调整故障节点的解析权重 典型案例:阿里云CDN会根据用户IP自动解析到北京/上海/深圳等