Ping 不通分层排障流程与 ARP/ICMP 协议分析

ICMP 协议:

ICMP(网际控制报文协议)属于网络层的辅助协议,用于在IP网络中实现网络层的控制与差错报告。

ICMP 有独立的报文结构,但是没有寻址能力,所以需要封装在 IP 数据报中传输,整个 ICMP 报文做为 IP数据报的数据部分,然后在 IP 数据报的头部协议字段中,通过 1 来标识数据部分是 ICMP。

PING 工具使用到的就是 ICMP 中 Echo 类型的报文(Echo Request 和 Echo Reply),发送 PING 请求时使用的是 Echo Request 报文,对端主机收到 PING 请求后,通过 Echo Reply 报文就行回复。


ARP 协议:

数据链路层负责相邻两个节点之间帧的透明传输,在以太网中,构建 MAC 帧需要提供 目的MAC地址 和 源MAC地址,这样才能将帧发给同一链路上的目标主机。

ARP(地址解析协议)工作在网络层与数据链路层之间,用于实现 IP 地址到 MAC 地址的解析,是网络层与数据链路层之间的关键协议。

ARP 在解析IP地址时,这个IP地址是网络层通过路由表确定“下一跳 IP”(ARP 只解析下一跳 IP,不关心最终目标 IP)。如果是直连网络(同网段),下一跳就是目标主机。若为非直连网络,下一跳是配置的默认网关地址。

ARP 的工作流程如下:

  1. 先查询本地主机的 ARP 缓存表,看有没有IP - MAC的映射记录,有就直接封装以太网帧发送数据
  2. 若没有记录,则发送 ARP Request(广播帧),同一广播域内所有主机都会收到请求,但只有 IP 匹配的设备返回 ARP Reply(单播)
  3. 收到 ARP 响应后,源主机先缓存 MAC 地址,再封装以太网帧发送数据

PING 介绍:

PING 属于一个工具,这个工具是借助 ICMP 的 Echo Request/Reply 报文来实现对网络层连通性探测的。PING 的工作流程是这样的

  1. 发起 PING 请求:例如:ping 10.0.28.11,此时系统生成 ICMP Echo Request 报文
  2. 网络层路由决策:IP 层根据本地路由表查找 "目标IP" 对应的 下一跳(next hop)地址。目标 IP 在直连网段(同网段),下一跳就是目标主机;非直连 时,下一跳就是本机配置的 默认网关地址。
  3. ARP 协议将 下一跳 IP地址 按自己的工作流程解析为目的MAC地址,源MAC地址就是出接口(出口网卡)的MAC地址。
  4. MAC 帧发出后,待目标主机收到 Echo Request 类型的报文,会以 Echo Reply 报文进行回复,会儿实现对网络的连通性探测。

PING 不通时,怎么判断是否是本地主机问题

  1. 查物理链路:确认网卡与交换机之间物理连接是否正常

  2. 查本地路由:确认是否存在到目标网络的路径,经济是否存在到目标网络的下一跳

  3. 查 ARP 解析:确认下一跳 IP 是否能解析为 MAC

  4. 查 ICMP 是否发出:通过抓包确认 ICMP 请求是否真正从本机发出;已发包(本机正常),没发包就是本机问题。


例如:Linux 操作系统中的排查流程

  1. 通过 ethtool <NIC_name> ,关注:Link detected 是不是 Yes,Yes 表示网线是正常接入的。

  2. 通过 ip r 或 route -n 查看本地路由表

  3. 通过 ip neigh 或 arp -n 查看是ARP否能解析出下一跳的MAC地址

  4. 通过 sudo tcpdump -i <NIC_name> arp 查看 arp 的请求和响应状态

  5. 通过 sudo tcpdump -i icmp 查看 ICMP 数据包是否发出

posted on 2026-07-06 11:49  一直小爪子  阅读(49)  评论(0)    收藏  举报