Linux 学习笔记(五十二):网络探路者——DNS 域名解析与 ICMP 诊断协议
📌 核心结论(TL;DR):
DNS:将域名翻译为 IP。解析顺序:浏览器缓存 -> hosts 文件 -> 本地 DNS -> 根服务器 -> 顶级域 -> 权威域。
ICMP:网络层协议,用于报告差错和网络探测(ping、traceroute)。
面试大坑:
ping命令没有端口!它直接工作在 IP 层,基于 ICMP 协议。traceroute:利用 IP 报文中
TTL(生存时间)递减机制,配合 ICMP 超时报文,实现路径追踪。
一、 DNS 域名解析系统
在浏览器输入网址后,系统需要获取对应的 IP 地址。解析过程是一个逐级问路的过程:
先查本地缓存(浏览器缓存、系统 hosts 文件)。
请求本地 DNS 服务器(运营商提供)。
本地 DNS 若没有缓存,则向根域名服务器发起请求。
根服务器指引去找顶级域名服务器(如
.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.comdig可以看到域名的 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 响应。