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 的工作流程如下:
- 先查询本地主机的 ARP 缓存表,看有没有IP - MAC的映射记录,有就直接封装以太网帧发送数据
- 若没有记录,则发送 ARP Request(广播帧),同一广播域内所有主机都会收到请求,但只有 IP 匹配的设备返回 ARP Reply(单播)
- 收到 ARP 响应后,源主机先缓存 MAC 地址,再封装以太网帧发送数据
PING 介绍:
PING 属于一个工具,这个工具是借助 ICMP 的 Echo Request/Reply 报文来实现对网络层连通性探测的。PING 的工作流程是这样的
- 发起 PING 请求:例如:ping 10.0.28.11,此时系统生成 ICMP Echo Request 报文
- 网络层路由决策:IP 层根据本地路由表查找 "目标IP" 对应的 下一跳(next hop)地址。目标 IP 在直连网段(同网段),下一跳就是目标主机;非直连 时,下一跳就是本机配置的 默认网关地址。
- ARP 协议将 下一跳 IP地址 按自己的工作流程解析为目的MAC地址,源MAC地址就是出接口(出口网卡)的MAC地址。
- MAC 帧发出后,待目标主机收到 Echo Request 类型的报文,会以 Echo Reply 报文进行回复,会儿实现对网络的连通性探测。
PING 不通时,怎么判断是否是本地主机问题
-
查物理链路:确认网卡与交换机之间物理连接是否正常
-
查本地路由:确认是否存在到目标网络的路径,经济是否存在到目标网络的下一跳
-
查 ARP 解析:确认下一跳 IP 是否能解析为 MAC
-
查 ICMP 是否发出:通过抓包确认 ICMP 请求是否真正从本机发出;已发包(本机正常),没发包就是本机问题。
例如:Linux 操作系统中的排查流程
-
通过
ethtool <NIC_name>,关注:Link detected 是不是 Yes,Yes 表示网线是正常接入的。 -
通过
ip r或route -n查看本地路由表 -
通过
ip neigh或arp -n查看是ARP否能解析出下一跳的MAC地址 -
通过
sudo tcpdump -i <NIC_name> arp查看 arp 的请求和响应状态 -
通过
sudo tcpdump -i icmp查看 ICMP 数据包是否发出
浙公网安备 33010602011771号