测试网络连通性的PING命令

时间:2024-04-05 18:20:42

本文是对网络连通性测试的常用工具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)

测试网络连通性的PING命令测试网络连通性的PING命令

                                                                                                                       图1

  • PC1能Ping通PC2

进入PC1 DOS界面,键入:ping 10.1.20.101,结果如下图2:

测试网络连通性的PING命令测试网络连通性的PING命令

                                                      图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(全零)。

测试网络连通性的PING命令测试网络连通性的PING命令

                                                                    图3.PC1上的抓包

测试网络连通性的PING命令测试网络连通性的PING命令

                                                                  图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。

测试网络连通性的PING命令测试网络连通性的PING命令

                                                                图5.Router中的arp表

测试网络连通性的PING命令测试网络连通性的PING命令

                                                           图6.Router端口1上抓包

 

端口2上抓包如图7,由第一帧可知路由器Router由端口2送一个arp广播请求,收到一个arp应答包(路由器收到PC1的ICMP回显请求报文,转发前查看自己的ARP表项,没有找到目的端对应的ARP表项,因此发送ARP请求),并将PC2的ip和MAC地址更新到自己的arp表中,如图5,第二行。

测试网络连通性的PING命令

测试网络连通性的PING命令                                                     

                                                                        图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。

测试网络连通性的PING命令测试网络连通性的PING命令

                                              图8.PC1上arp表

测试网络连通性的PING命令测试网络连通性的PING命令

                                                             图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。

测试网络连通性的PING命令
测试网络连通性的PING命令

                                               图10.PC2上arp表

测试网络连通性的PING命令测试网络连通性的PING命令

                                                                  图11.端口2上抓包第三帧

PC2收到ICMP回显请求报文,返回一个ICMP回显应答报文,如图12,经过路由器后送到PC1(数据帧进入路由器后具体变化与上面类似,这儿不再讨论),PC1收到回显应答后,又继续发送ICMP请求报文。

测试网络连通性的PING命令测试网络连通性的PING命令

                                                             图12.Server上抓包

  • PC2关机状态

当PC2关机状态,PC1发送四个ping包,收到了四个目的主机不可达报文,如图13

测试网络连通性的PING命令

 测试网络连通性的PING命令                                            

                                              图13.PC2关机

PC1 ping PC2过程,首先广播arp请求获得端口1对应ip与MAC映射关系,写入PC1 的arp表,路由器arp表中也将PC1的ip与MAC映射关系写入自己的arp表(这个过程与上面PC1能ping通PC2过程一致),如图14、15。

测试网络连通性的PING命令测试网络连通性的PING命令

                                                      图14.路由器arp表

测试网络连通性的PING命令测试网络连通性的PING命令

                                                         图15.PC1的arp表

但是路由器端口2广播arp请求,并未收到来自PC2的arp应答包,然后每隔一定时间广播一个arp请求,抓包查看大约时间间隔为1s(不同系统不一样),如图16、17(后续未截图,已经查看)

测试网络连通性的PING命令测试网络连通性的PING命令

                                                       图16.端口2抓包第二帧

测试网络连通性的PING命令测试网络连通性的PING命令

                                               图17.端口2抓包第三帧

PC1向路由器发送ICMP回显请求报文,由于arp表中并不能找到PC2的ip与MAC对应关系,大约三秒左右(不同系统处理不一样)由路由器向PC1回一个ICMP主机不可达报文,如图18、19(后续未截图,已经查看)。

测试网络连通性的PING命令测试网络连通性的PING命令

                                                     图18.端口1抓包第三帧

测试网络连通性的PING命令测试网络连通性的PING命令

                                                     图19.端口1抓包第四帧