深入解析DNS查询:从dig命令看域名解析的全过程
个人名片
🎓作者简介:java领域优质创作者
🌐个人主页:码农阿豪
📞工作室:新空间代码工作室(提供各种软件服务)
💌个人邮箱:[2435024119@qq.com]
📱个人微信:15279484656
🌐个人导航网站:www.forff.top
💡座右铭:总有人要赢。为什么不能是我呢?
- 专栏导航:
码农阿豪系列专栏导航
面试专栏:收集了java相关高频面试题,面试实战总结🍻🎉🖥️
Spring5系列专栏:整理了Spring5重要知识点与实战演练,有案例可直接使用🚀🔧💻
Redis专栏:Redis从零到一学习分享,经验总结,案例实战💐📝💡
全栈系列专栏:海纳百川有容乃大,可能你想要的东西里面都有🤸🌱🚀
深入解析DNS查询:从dig命令看域名解析的全过程
引言
在互联网世界中,域名系统(DNS,Domain Name System)扮演着至关重要的角色。它负责将人类可读的域名(如 example.com)转换为机器可识别的IP地址(如 93.184.216.34),使得网络通信成为可能。
在日常运维和网络故障排查中,dig(Domain Information Groper)是一个强大的DNS查询工具,能够提供详细的域名解析信息。本文将通过一个实际的 dig 查询案例,深入解析DNS查询的各个部分,帮助读者理解DNS的工作原理,并掌握如何使用 dig 进行高效的网络诊断。
1. 什么是dig命令?
dig 是一个用于查询DNS记录的命令行工具,它比传统的 nslookup 更强大,能提供更详细的解析信息。它的基本语法如下:
dig [选项] [域名] [记录类型]
例如:
dig example.com A # 查询 example.com 的 A 记录(IPv4 地址)
dig example.com MX # 查询 example.com 的 MX 记录(邮件服务器)
2. 实战分析:一个完整的dig查询
让我们回到最初的 dig 查询示例:
dig jcq-hb-yd-001-manager-nlb-FI.jvessel-open-hb.jdcloud.com
并逐部分解析其输出。
2.1 命令执行环境
[root@VM-12-12-centos ~]# dig jcq-hb-yd-001-manager-nlb-FI.jvessel-open-hb.jdcloud.com
- 该命令在 CentOS 7 系统上执行,用户具有
root权限。 - 查询的域名是
jcq-hb-yd-001-manager-nlb-FI.jvessel-open-hb.jdcloud.com。
2.2 dig版本信息
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.16 <<>> jcq-hb-yd-001-manager-nlb-FI.jvessel-open-hb.jdcloud.com
- 使用的
dig版本是BIND 9.11.4(一个广泛使用的DNS服务器软件)。 - 运行环境是 RedHat/CentOS 7。
2.3 全局选项
;; global options: +cmd
+cmd表示显示完整的dig输出,包括元数据(如查询时间、DNS服务器等)。
2.4 DNS响应头部
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50978
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
这部分包含DNS响应的关键元信息:
| 字段 | 含义 |
|---|---|
opcode: QUERY | 表示这是一个标准的DNS查询 |
status: NOERROR | 查询成功,没有错误 |
id: 50978 | DNS查询的唯一ID,用于匹配请求和响应 |
flags: qr rd ra | qr(响应)、rd(递归查询请求)、ra(服务器支持递归查询) |
QUERY: 1 | 查询部分有1条记录 |
ANSWER: 1 | 应答部分有1条记录 |
AUTHORITY: 0 | 无权威DNS服务器记录 |
ADDITIONAL: 0 | 无额外记录 |
2.5 问题部分(QUESTION SECTION)
;; QUESTION SECTION:
;jcq-hb-yd-001-manager-nlb-fi.jvessel-open-hb.jdcloud.com. IN A
- 表示查询的域名是
jcq-hb-yd-001-manager-nlb-fi.jvessel-open-hb.jdcloud.com。 IN表示 Internet 类记录(最常见的DNS记录类型)。A表示查询的是 IPv4 地址。
2.6 应答部分(ANSWER SECTION)
;; ANSWER SECTION:
jcq-hb-yd-001-manager-nlb-fi.jvessel-open-hb.jdcloud.com. 120 IN A 100.72.13.171
这是最重要的部分,包含了实际的DNS解析结果:
| 字段 | 含义 |
|---|---|
jcq-hb-yd-001-manager-nlb-fi.jvessel-open-hb.jdcloud.com. | 查询的完整域名 |
120 | TTL(Time To Live),表示该记录缓存有效时间为120秒(2分钟) |
IN | Internet 类记录 |
A | 记录类型(A记录 = IPv4地址) |
100.72.13.171 | 解析出的IP地址 |
2.7 查询统计信息
;; Query time: 36 msec
;; SERVER: 183.60.83.19#53(183.60.83.19)
;; WHEN: Mon Jul 14 19:42:39 CST 2025
;; MSG SIZE rcvd: 90
这部分提供了查询的统计信息:
| 字段 | 含义 |
|---|---|
Query time: 36 msec | 查询耗时36毫秒 |
SERVER: 183.60.83.19#53 | 使用的DNS服务器(IP: 183.60.83.19,端口: 53) |
WHEN: Mon Jul 14 19:42:39 CST 2025 | 查询时间(2025年7月14日,中国标准时间) |
MSG SIZE rcvd: 90 | 接收到的DNS响应数据大小(90字节) |
3. DNS解析过程详解
3.1 DNS查询的基本流程
- 本地缓存查询:检查本地DNS缓存(如
/etc/hosts或系统DNS缓存)。 - 递归查询:向配置的DNS服务器(如
183.60.83.19)发送请求。 - 迭代查询:如果DNS服务器没有缓存,它会向根DNS服务器、顶级域(TLD)服务器、权威DNS服务器逐级查询。
- 返回结果:最终返回A记录(IPv4地址)或其他记录。
3.2 递归查询 vs. 迭代查询
- 递归查询(Recursive Query):DNS服务器必须返回最终结果(如
dig +recurse)。 - 迭代查询(Iterative Query):DNS服务器可能返回部分结果,客户端需要继续查询(如
dig +norecurse)。
4. 进阶dig用法
4.1 查询不同类型的DNS记录
dig example.com A # IPv4 地址
dig example.com AAAA # IPv6 地址
dig example.com MX # 邮件服务器记录
dig example.com NS # 域名服务器记录
dig example.com CNAME # 别名记录
dig example.com TXT # 文本记录(如SPF、DKIM)
4.2 跟踪DNS解析过程
dig +trace example.com
该命令会显示完整的DNS解析链,从根域名服务器(.)到最终权威DNS服务器。
4.3 指定DNS服务器查询
dig @8.8.8.8 example.com # 使用 Google DNS (8.8.8.8) 查询
4.4 检查DNS缓存时间(TTL)
dig +ttlunits example.com
显示TTL(Time To Live)以更易读的格式(如 2h30m 而不是秒数)。
5. 实际应用场景
5.1 排查DNS解析问题
如果某个域名无法访问,可以:
- 检查是否能解析出IP:
dig example.com - 检查是否DNS服务器故障:
dig @8.8.8.8 example.com # 使用备用DNS服务器测试 - 检查是否有DNS污染:
dig +trace example.com # 查看完整解析路径
5.2 分析CDN或负载均衡
如果域名指向多个IP(如CDN或NLB):
dig google.com
可能会返回多个A记录,表示负载均衡。
6. 总结
通过本文的分析,我们了解了:
dig是一个强大的DNS查询工具,能够提供详细的解析信息。- DNS查询的完整流程,包括递归查询和迭代查询。
- 如何通过
dig排查网络问题,如DNS解析失败、CDN解析等。 - 进阶用法,如
+trace、指定DNS服务器、查询不同记录类型等。
掌握 dig 的使用,能够帮助运维人员、开发者和网络工程师更高效地诊断网络问题,优化DNS解析性能。


浙公网安备 33010602011771号