ping原理介绍

Ping的实质

Ping程序的实质是利用了ICMP请求回显和回显应答报文,但ARP请求和应答报文也在其中起了非常重要的作用。

Ping的逻辑过程

以从PC1 ping PC2(命令:ping 11.1.1.2 -I 10.1.1.1)为例说明Ping的逻辑过程。

10.1.1.1/24        10.1.1.2/24    11.1.1.1/24       11.1.1.2/24
   a                    b     c                       d
PC1---------------------------------RTA---------------------------------------PC2

1、ping程序生成一个ICMP请求回显报文。

ICMP报文沿协议栈向下传输到ip层,封装ip头,包含源地址IP与目的地址IP。在此封装过程中,IP层已经根据IP地址和掩码判断出了源IP与目的IP不属于同一网段(网段判断的规则为:把IP地址的高XX位保留,其余位置0,IP地址共有四段,每段8位,共32位,顺序为左高右低。比如PC1的IP:10.1.1.1,掩码24,IP所属的网段为10.1.1.0-10.1.1.255),如图1所示。

图1 ICMP报文 



2、ICMP报文再向下传到链路层,准备进行以太帧头的封装,但由于无法知道目的mac地址,暂时无法进行封装,如图2所示。

图2 ICMP报文封装



3、由于已经知道了源IP与目的IP不属于同一网段,故主机要查找FIB表,找自己的下一跳,分以下两种情况:

如果没找到下一跳,则得不到下一跳的ip,自然也得不到下一跳的mac地址,以太帧头无法进行封装,于是就ping不通。

如果找到了下一跳,得到了下一跳的ip,但此时还不知道下一跳的mac,故要发送ARP广播请求。ARP的请求或应答分组格式如图3所示,参数如表1所示。

图3 ARP分组格式


表1 参数说明

参数名

参数值

说明

以太网目的地址

ff:ff:ff:ff:ff:ff

为全1

以太网源地址

PC1的mac地址,即10.1.1.1/24对应的mac地址

OP

1

表示ARP请求

发送端以太网地址

PC1的mac地址,即10.1.1.1/24对应的mac地址

-

发送端IP地址

PC1的IP地址,即10.1.1.1/24

-

目的以太网地址

以0填充

-

目的IP地址

下一跳PC1 to RTA 的IP地址10.1.1.2/24

-


说明:
    • 以太首部中的以太网目的地址与ARP请求中的目的以太网地址是不一样的,前者为全1,表示广播,这样才能被所有直连设备接收到。
    • 后者是下一跳的mac地址,因为未知,所以填充为全0。但以太首部中的以太网源地址和ARP请求中的发送端以太网地址是一样的,为重复信息。
    • FIB(Forward Information Base)表:即路由表。
3、下一跳(RTA b口 10.1.1.2/24)收到此请求以后,发现请求所对应的IP地址是自己,于是回复一个ARP单播应答给PC1,此应答包含了10.1.1.2/24所对应的mac地址,按图3所示对应的ARP参数如表2所示。

表2 参数说明

参数名

参数值

说明

以太网目的地址

PC1的mac地址,即10.1.1.1/24对应的mac地址

-

以太网源地址

RTA to PC1的mac地址,即10.1.1.2/24对应的mac地址

-

OP

2

表示ARP应答

发送端以太网地址

RTA to PC1的mac地址,即10.1.1.2/24对应的mac地址

-

发送端IP地址

RTA to PC1的IP地址,即10.1.1.2/24

-

目的以太网地址

PC1的mac地址,即10.1.1.1/24对应的mac地

-

目的IP地址

PC1的IP地址,即10.1.1.1/24

-

说明:

在ARP应答中,以太首部中的源地址和目的地址与ARP应答报文中的发送端地址和目的地址完全相同。

以ARP Request为例说明ARP分组格式的参数填写,界面如图4所示。

图4 ARP分组格式界面显示


    • 00 01为硬件类型,值为1表示以太网地址。
    • 08 00为协议类型,值为8表示IP地址。
    • 06表示硬件地址长度为6字节。
    • 04表示协议地址长度为4字节。
    • 00 01表示OP,值为1表示是ARP请求。
    • 00 e0 fc 01 a5 03表示发送端以太网地址。
    • c0 a8 62 01表示发送端IP地址。
    • 00 00 00 00 00 00表示目的以太网地址为未知。
    • c0 a8 62 02表示目的IP地址。
5、PC1此时已经收到ARP应答,得到了下一跳的mac地址,进行以太帧头的封装。然后将数据报发送给RTA。

说明:

以后很可能RTA也要向PC1进行数据传送,为避免总是发送ARP请求及应答,减少网络上的通信量采取以下做法:

    • 当PC1向RTA发送ARP请求时,就已经将自己的IP地址到物理地址的映射写入ARP请求中。
    • 当RTA收到PC1的ARP请求后,RTA就将PC1的这一映射写入到了自己的ARP缓存中。
6、RTA收到数据报后,拆掉以太帧头,上送到IP层,发现IP首部中的目的IP地址11.1.1.2/24不是自己,需要转发,故查找自己的路由表,重新进行数据报的封装。

7、当封装到以太帧头时,发现目的mac地址(11.1.1.2/24对应的mac地址)未知,故也要发ARP广播请求。在此ARP请求中:

    • 以太网源地址为RTA to PC2的mac地址,即11.1.1.1/24对应的mac地址。
    • OP为1,表示ARP请求。
    • 发送端以太网地址为RTA to PC2的mac地址,即11.1.1.1/24对应的mac地址。
    • 发送端IP地址为RTA to PC2的IP地址,即11.1.1.1/24。
    • 目的以太网地址为未知,以全0填充。
    • 目的IP地址为PC2的IP地址11.1.1.2/24。
8、PC2收到此请求以后,发现请求所对应的IP地址是自己,于是回复一个ARP单播应答给RTA,此应答包含了11.1.1.2/24所对应的mac地址。在此ARP应答中:

    • 以太网目的地址为RTA to PC2的mac地址,即11.1.1.1/24对应的mac地址。
    • 以太网源地址为PC2的mac地址,即11.1.1.2/24对应的mac地址。
    • OP为2,表示ARP应答。
    • 发送端以太网地址为PC2的mac地址,即11.1.1.2/24对应的mac地址。
    • 发送端IP地址为PC2的IP地址,即11.1.1.2/24。
    • 目的以太网地址为RTA to PC2的mac地址,即11.1.1.1/24对应的mac地址。
    • 目的IP地址为RTA to PC2的IP地址,即11.1.1.1/24。

说明:

与前面RTA学习PC1的ARP映射一样,PC2也相应地在自己的ARP缓存中记录了RTAc口的IP地址到物理地址的映射。

9、RTA此时已经收到ARP应答,得到了PC2的mac地址,进行以太帧头的封装。然后将数据报发送给PC2。

10、PC2回应PC1的ICMP包。

11、PC2收到此数据报后,拆封以太帧头,拆封IP首部后发现是个ICMP请求回显报文,于是会回复一个ICMP回显应答报文给PC1。此时的源IP地址变成了PC2的IP地址11.1.1.2/24,目的IP地址变成了PC1的IP地址10.1.1.1/24。由于目的IP与源IP不在同一网段,所以PC2也要查找FIB表,经查找得知下一跳为RTA c口 11.1.1.1/24。如前所述,PC2的ARP缓存中已经记录了RTA c口的映射信息,故不需要再向RTA发送ARP请求,直接在ARP缓存中读到RTA 11.1.1.1/24的mac地址进行封装,将数据报发给RTA。同理RTA也不用向PC1发送ARP请求,直接在自己的ARP缓存中读到PC1的mac地址,将数据报转发给PC1。

12、PC1收到数据报后,逐层拆封以太帧头、IP首部,得到ICMP回显应答,显示ping通。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值