本文是对网络连通性测试的常用工具ping命令较为详细的介绍
1. ping命令简介
Ping是因特网包探测器,是使用ICMP回显请求报文和ICMP回显应答报文来测试主机之间连通性,用来诊断网络的工具。
Ping使用的是ICMP回显请求报文和ICMP回显应答报文,那么,
ICMP回显请求报文和回显应答格式如下:
类型(8) |
代码(8) |
校验和(16) |
标识符(16) |
序号(16) |
|
选项数据 |
不同类型的ICMP报文由报文中的类型和代码共同决定
Ping命令中使用到ICMP报文中类型字段为0和8的询问报文,其中,8表示请求报文,0表示应答报文,代码字段均为0。
ICMP报文作为IP数据报的数据部分,加上IP数据报首部组成IP数据报发送出去。
2.实验部分
拓扑结构如图1(路由器:左边端口设为1,右边端口设为2)
图1
- PC1能Ping通PC2
进入PC1 DOS界面,键入:ping 10.1.20.101,结果如下图2:
可以看到默认情况下win XP是发出四个Ping包,由图中可知网络状态良好,并无丢包。
主机PC1发送IP数据报给不同网段的PC2,得通过与PC1连接在同一网段的路由器Router来转发。但是PC1发现自己的arp高速缓存中并不存在路由器Router的ip与MAC映射关系,于是广播一个arp请求,如图3。在图4展现了此广播的具体信息,目的MAC为广播地址,源MAC为PC1的MAC地址,发送端MAC,发送端IP,以及目的端ip,目的端待填写的MAC(全零)。
图3.PC1上的抓包
图4.PC1抓包的第一帧
路由器Router(linux搭建的)接收到此arp广播请求,查看目的端ip发现是自己的ip,则会将PC1的ip和MAC对应关系更新到自己的arp表中,如图5,并且会将自己端口1的MAC地址填充到发送端MAC,发送端ip变为路由器Router端口1对应的ip,目的端MAC和ip分别填写PC1的MAC和ip,如图5,然后以arp单播形式应答给PC1,PC1接着发送ICMP请求报文到ICMP。
图5.Router中的arp表
图6.Router端口1上抓包
端口2上抓包如图7,由第一帧可知路由器Router由端口2送一个arp广播请求,收到一个arp应答包(路由器收到PC1的ICMP回显请求报文,转发前查看自己的ARP表项,没有找到目的端对应的ARP表项,因此发送ARP请求),并将PC2的ip和MAC地址更新到自己的arp表中,如图5,第二行。
图7.Router端口2上抓包
PC1收到Router的arp应答后,将Router所对应的ip和MAC映射关系写入arp表中,如图8。接着向PC2发送ICMP回显请求报文,如图9,由数据链路层进行数据封装,目的MAC是路由器Router端口1的MAC地址,源MAC是PC1的MAC地址,目的ip是PC2 的ip,源IP是PC1的ip。
图8.PC1上arp表
图9.Client上抓包第三帧
PC2收到Router的arp广播后,将Router端口2对应的ip与MAC映射关系写入arp表中,如图10。路由器Router在收到PC1发来的ICMP回显请求报文后,通过查找路由表,发现有到达PC2的路由,查看arp表,然后把数据帧进行重新封装,目的MAC地址变为PC2的MAC,源MAC变为端口2对应MAC,目的ip与源ip不变,然后由端口2,将此数据报发给PC2,如图11。
图10.PC2上arp表
图11.端口2上抓包第三帧
PC2收到ICMP回显请求报文,返回一个ICMP回显应答报文,如图12,经过路由器后送到PC1(数据帧进入路由器后具体变化与上面类似,这儿不再讨论),PC1收到回显应答后,又继续发送ICMP请求报文。
- PC2关机状态
当PC2关机状态,PC1发送四个ping包,收到了四个目的主机不可达报文,如图13
图13.PC2关机
PC1 ping PC2过程,首先广播arp请求获得端口1对应ip与MAC映射关系,写入PC1 的arp表,路由器arp表中也将PC1的ip与MAC映射关系写入自己的arp表(这个过程与上面PC1能ping通PC2过程一致),如图14、15。
图14.路由器arp表
图15.PC1的arp表
但是路由器端口2广播arp请求,并未收到来自PC2的arp应答包,然后每隔一定时间广播一个arp请求,抓包查看大约时间间隔为1s(不同系统不一样),如图16、17(后续未截图,已经查看)
图16.端口2抓包第二帧
图17.端口2抓包第三帧
PC1向路由器发送ICMP回显请求报文,由于arp表中并不能找到PC2的ip与MAC对应关系,大约三秒左右(不同系统处理不一样)由路由器向PC1回一个ICMP主机不可达报文,如图18、19(后续未截图,已经查看)。
图18.端口1抓包第三帧
图19.端口1抓包第四帧