DNS 与常用工具
掌握 DNS 解析原理与几款常用命令行工具,是日常网络排查与性能调优的基本功。
DNS 解析过程
DNS(Domain Name System)采用层次化的分布式数据库,从根服务器、顶级域(TLD)到权威域名服务器组成一棵倒置的树。
解析 www.example.com 的大致流程:
- 浏览器缓存:先查浏览器自身是否有解析记录。
- 系统缓存:读取操作系统 hosts 文件与缓存。
- 本地 DNS 解析器(LDNS):由 ISP 或公共 DNS(8.8.8.8、1.1.1.1)提供。
- 递归查询:LDNS 代替客户端完成全部查询。
- 迭代查询:LDNS 依次访问根、TLD、权威域名服务器:
- 根服务器返回
.com的 NS 记录。 .com服务器返回example.com的 NS 记录。- 权威服务器返回最终 A/AAAA 记录。
- 根服务器返回
递归查询与迭代查询的区别在于「由谁替谁问到底」,LDNS 默认对客户端递归,对外迭代。
常用记录类型
| 记录 | 含义 | 示例 |
|---|---|---|
| A | 将域名指向 IPv4 地址 | example.com. A 93.184.216.34 |
| AAAA | 将域名指向 IPv6 地址 | example.com. AAAA 2606:2800:220:1::1 |
| CNAME | 别名,指向另一个域名 | www.example.com. CNAME example.com. |
| MX | 邮件交换记录 | example.com. MX 10 mail.example.com. |
| NS | 权威域名服务器 | example.com. NS ns1.example.com. |
| TXT | 文本记录,常用于 SPF、DKIM、域名验证 | example.com. TXT "v=spf1 -all" |
| SOA | 起始授权记录,包含主 DNS、管理员邮箱、序列号等 | — |
| PTR | 反向记录,由 IP 查域名 | 34.216.184.93.in-addr.arpa. PTR example.com. |
常用工具
dig
最强大的 DNS 查询工具,可指定服务器与记录类型:
dig example.com A
dig @8.8.8.8 example.com MX
dig +trace example.com # 显示完整迭代过程
nslookup
交互式 DNS 查询,适合快速诊断:
nslookup example.com
nslookup -type=AAAA example.com
ping
使用 ICMP Echo 探测主机可达性,统计 RTT 与丢包率:
ping -c 4 example.com
ping -c 4 8.8.8.8
注意:部分云厂商默认防火墙或安全组会屏蔽 ICMP,导致 ping 失败但 TCP/HTTP 正常。
traceroute / tracert
通过递增 TTL 打印路径上的路由器,定位网络瓶颈:
traceroute -n example.com # Linux / macOS
tracert -d example.com # Windows
-n 表示不反向解析 IP,加速输出。
curl
HTTP 调试利器,支持多种协议与详细信息:
curl -I https://example.com # 只看响应头
curl -v https://example.com # 显示握手与首部
curl -o /dev/null -s -w '%{http_code} %{time_total}\n' https://example.com
tcpdump 简介
tcpdump 是命令行抓包工具,捕获链路层原始流量:
sudo tcpdump -i en0 port 80 -nn -A
sudo tcpdump -i any host 8.8.8.8 and tcp
sudo tcpdump -i eth0 -w capture.pcap port 443 # 写入 pcap,可用 Wireshark 打开
常用选项:
-i:指定网卡接口。-n:不解析域名与端口。-A:以 ASCII 打印报文内容。-w:写入文件供后续分析。-X:同时显示 hex 与 ASCII。
通过抓包可以直观看到 TCP 三次握手、TLS 握手、HTTP 请求等真实交互,结合 Wireshark 分析,几乎能定位所有应用层与传输层的问题。