跳到主要内容

DNS 与常用工具

掌握 DNS 解析原理与几款常用命令行工具,是日常网络排查与性能调优的基本功。

DNS 解析过程

DNS(Domain Name System)采用层次化的分布式数据库,从根服务器、顶级域(TLD)到权威域名服务器组成一棵倒置的树。

解析 www.example.com 的大致流程:

  1. 浏览器缓存:先查浏览器自身是否有解析记录。
  2. 系统缓存:读取操作系统 hosts 文件与缓存。
  3. 本地 DNS 解析器(LDNS):由 ISP 或公共 DNS(8.8.8.8、1.1.1.1)提供。
  4. 递归查询:LDNS 代替客户端完成全部查询。
  5. 迭代查询: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 分析,几乎能定位所有应用层与传输层的问题。