今天使用wireshark调试一个PING功能,使用icmp过滤串,发现ping本地子网一个不存在的IP地址,wireshark没有捕获到任何的icmp数据包。而当ping另外一个子网不存在的IP地址,wireshark捕获到了ICMP数据。分析如下:
一. ping本地子网的IP地址
1. 获取目标IP的Mac地址(ARP协议),若没有获取到目标IP的Mac地址,Ping失败
2. 若获取目标IP的Mac地址成功,设置以太网头的源mac地址及目的mac地址分别为源IP的mac地址和目标IP的mac地址,发送ICMP数据包。
二. ping不同子网的IP地址
1. 获取网关IP的Mac地址(ARP协议),若没有获取到目标IP的Mac地址,Ping失败
2. 若获取网关IP的Mac地址成功,设置以太网头的源mac地址及目的mac地址分别为源IP的mac地址和网关IP的mac地址,发送ICMP数据包。
因为ping本地子网一个不存在的IP地址时首先发送ARP获取Mac地址,而我设置wireshark的过滤串为icmp,所以没有察觉到arp数据。而获取mac地址失败,故不会再发送icmp数据。另外需要记住icmp协议也为ip协议,与tcp、udp为同级协议。