嵌入式产品开发中使用网络功能时常要使用PING命令来测试网络连接是否正常。那么发送PING命令时,电脑发送的到底是什么数据呢?
例如ping 192.168.1.179
电脑会先发送一个ARP数据包
FF FF FF FF FF FF 00 24 1D B8 D8 1D 08 06
是以太网帧的头部,总共14字节,前6个字节为以太网的目的MAC地址,因为开始PING命令时,电脑并不知道IP为179的设备的MAC地址,所以PING命令会先通过广播的方式把ARP请求数据包发送出去,FF FF FF FF FF FF就是广播地址,同一网段上的所有以太网接口都会接收到广播的数据包。00 24 1D B8 D8 1D 08 06是以太网源地址,也就是发送PING命令的电脑的MAC地址。
08 06是帧类型,表示当前是ARP包。
后面的28字节为ARP数据包,各个字段的意思在上图中可以看到。因为电脑现在还不知道179 ip设备的MAC地址,所以接收方以太网地址的数据为00 00 00 00 00.
设备接收到ARP广播包后,把自己的MAC地址返回给电脑。电脑就会把IP地址192.168.1.179和179返回的MAC地址对应起来,放到ARP缓存表。
接下来ping命令不再发送ARP包,而是发送ICMP包。不好截IP141的ARP请求包,IP141的ARP请求包和IP179类似。
下图是电脑发送给IP192.168.1.141的ICMP包。
00 55 E1 21 10 63 00 24 1D B8 D8 1D 08 00
这14个字节是以太网帧的首部,共14字节。
00 55 E1 21 10 63就是IP 141设备的MAC地址。
00 24 1D B8 D8 1D是发送ping命令电脑的MAC地址
08 00表示当前是IP数据包,ICMP协议是IP协议的一种。
ICMP数据包各个字段的定义见上图。
如果电脑停止和IP 192.168.1.141的设备通讯。超过10分钟后,电脑的ARP缓存表会丢掉IP141的MAC地址。此时如果再PING 192.168.1.141,会再发送ARP广播请求命令,得到ip141的MAC地址后,再不断发送ICMP命令。