Linux 学习笔记(五十二):网络探路者——DNS 域名解析与 ICMP 诊断协议

发布时间:2026/11/4 2:25:13
Linux 学习笔记(五十二):网络探路者——DNS 域名解析与 ICMP 诊断协议

📌 核心结论(TL;DR):

  1. DNS:将域名翻译为 IP。解析顺序:浏览器缓存 -> hosts 文件 -> 本地 DNS -> 根服务器 -> 顶级域 -> 权威域。

  2. ICMP:网络层协议,用于报告差错和网络探测(ping、traceroute)。

  3. 面试大坑:ping命令没有端口!它直接工作在 IP 层,基于 ICMP 协议。

  4. traceroute:利用 IP 报文中TTL(生存时间)递减机制,配合 ICMP 超时报文,实现路径追踪。

一、 DNS 域名解析系统


在浏览器输入网址后,系统需要获取对应的 IP 地址。解析过程是一个逐级问路的过程:

  1. 先查本地缓存(浏览器缓存、系统 hosts 文件)。

  2. 请求本地 DNS 服务器(运营商提供)。

  3. 本地 DNS 若没有缓存,则向根域名服务器发起请求。

  4. 根服务器指引去找顶级域名服务器(如.com),顶级域再指引去找权威域名服务器(如baidu.com),最终返回 IP 地址。

二、 ICMP 协议:网络层的哨兵

IP 协议只负责尽力而为地发送,丢包了也不知道。ICMP(Internet Control Message Protocol)是为了辅助 IP 而生的,主要用来传递差错报文和探测网络状态。

三、 面试避坑:ping 的端口是什么?


ping命令常常被误认为有端口号。实际上,ping工作在网络层,直接封装在 IP 报文里,用的是ICMP 协议。而端口是传输层(TCP/UDP)的概念。所以,ping 根本没有端口!

四、 实战:网络排查命令

# 查看详细 DNS 解析结果 dig www.baidu.com # 追踪网络路由路径 traceroute -n baidu.com
  • dig可以看到域名的 CNAME 别名和最终的 A 记录(IP)。

  • traceroute利用 TTL 机制,每次把 TTL 设为 1、2、3…… 故意让路由器超时并返回 ICMP 报文,从而清晰画出数据包从你机器到目标主机所经过的“地图”。这对于排查网络在哪一跳卡住非常有用。

自我实战操作

cd ~/linux_study/network_test

实战 1:使用dig追踪 DNS 解析

bash

# 安装 dig 工具 sudo apt install dnsutils -y # 查询百度域名的解析详情 dig www.baidu.com

👉看点:找到ANSWER SECTION,你会看到www.baidu.com可能先解析成了一个别名(CNAME),最终解析成了两个真实的 IP 地址。这比ping给出的信息详细得多。

实战 2:使用traceroute追踪网络路径

# 安装 traceroute sudo apt install traceroute -y # 追踪到百度的路由(-n 表示不解析域名,只看IP) traceroute -n baidu.com

👉看点:屏幕上会一行行跳出 1、2、3…… 代表数据包经过的每一个路由器 IP。如果某行是* * *,说明那个路由器为了安全,关闭了 ICMP 响应。