掩码配置错误时,ping 的测试结果分析

一、目标及知识准备

    很多客户和朋友都问过我这样的一个问题:如果掩码配置错误,比如针对 192.168.101.113 这个 ip,本来应当配置为 255.255.255.0 的被配置成了 255.255.0.0 或 255.255.255.240,那么我们在 ping 测试网络连通时能不能 ping 通,为什么不能又或为什么不能 ping 通勒?

    本文就是通过试验、包分析、总结的方式解决这个疑惑的,如果大家知道为什么,就不用继续看,如果不知道为什么,那么在看下去之前,请确认具备以下知识:

    1、 能识别 3000 不同的汉字,简单语法知识具备,会用鼠标
    2、 能敲 a~z 共计 27 个字母,会用金山词霸等翻译工具,语法知识没有也没关系;
    3、 网络子网划分计算(基础即可)、简单的协议知识;

    主机连通原理

      两台主机之间能否进行通讯,关键是看目标主机的 IP 地址是否通源主机在同一网段,在发送通讯包之前,源主机将用目标主机的 IP 地址同本机的子网掩码进行位与操作,在同一网段则能通讯,不在同一网段则无法通讯。

    二、测试内容及工具

    我们将根据上面的基本拓扑图对各主机进行掩码、网关的配置,用 192.168.101.113 主机 ping192.168.101.101 主机,查看不同的结果,设置、测试内容如下:

    

    在 ping 测试过程中,我们将使用 EtherPeekNX 来进行包的截取,以便对结果进行分析。为什么用 EtherPeekNX?因为我在网吧里面做的测试,机器有还原卡,装 sniffer 会要机器重启,EtherPeekNX 提示要重启,但是不启也是一样用的。而且发现针对不同的地址选择不同的协议来监听:比如可以只监听 A—本机的 ARP广播包,B—本机的 ICMP 的包?

    而且我们主要是进行协议分析学习,不是对某个工具的学习。三、测试过程及结果分析

1、源和目的都是 24 位掩码(正常配置)

测试拓扑:

    测试过程(由于截图有误,没有截下 ping 192.168.101.101 的结果,大家将就一下,从包分析图中看啦!_

    测试结(Reply from 192.168.101.101: bytes=32 time<10ms TTL=128)

   测试分析

    由于我们先清除了本机的 arp 缓存,因此在 JF3 向 WORK1 发送 ping 请求包时,发现没有 WorK1(192.168.101.101) 的主机的 mac 地址,无法完成完整包的封装,因此首先发起一个 ARP请求包,寻找 WORK1 的 mac 地址,当收到目标 IP 的回应包后完成 PING 包的封装,向 work1 发送了 4 个 ping 请求包,并成功的收到 ping 回复。我们可以通过截取的包进行相应的了解:

    < 图中 IP 包头中的信息将在另外一篇文档中进行说明,此处没有涉及故没有进行相应说明 >

    源 192.168.101.113/24 将目标 192.168.101.101/24 的地址进行位与操作:

                        192.168.101.101

                        255.255.255.0

    目标工作站的网段为:192.168.101.0

    同自己所在的网段   :192.168.101.0 在同一网段,因此将包直接发给目标主机,通讯成功!2、源为 16 位掩码,目标为 24 位掩码(网段大于实际网段)

测试拓扑:

    测试过程

测试结果(Reply from 192.168.101.101: bytes=32 time<10ms TTL=128)

    测试分析

    此处获取的结果和数据包同“源和目的都是 24 位掩码”时一样,因此不作详细介绍。

    源 192.168.101.113/16 将目标 192.168.101.101/24 的地址进行位与操作:
                        192.168.101.101
                         255.255.0.0

    目标工作站的网段为:192.168.0.0

    同自己所在的网段   :192.168.0.0 在同一网段,因此将包直接发给目标主机,通讯成功!

    3、源位 28 位掩码 _ 无网关,目标为 24 位掩码无网关(网段小于实际网段)

测试拓扑:

   测试过程

    测试结果(Destination host unreachable)

    此处显示的时目标主机不可达,无可分析的数据包。

测试分析

    源 192.168.101.113/28 将目标 192.168.101.101/24 的地址进行位与操作:

                         192.168.101.101

                        255.255.255.240

    目标工作站的网段为:192.168.101.96  (该主机为该网段的广播地址――本人计算有误)

    同自己所在的网段   :192.168.101.112    不在同一网段,因此无法将包直接发给目标主机。根据通讯规则,在目标地址不在同一网段时,将把数据包发给网关,但是现在该主机没有配置正确的网关,因此通讯不成功!

   4、源位 28 位掩码 _ 有网关,目标位 24 位掩码有网关(网段小于实际网段)

测试拓扑:

    测试过程

    测试结果(Reply from 192.168.0.101: bytes=32 time<10ms TTL=128)

    测试分析

    上图中我不是很明确,ARP 的请求包中看到的目标地址怎么会是忽略 192.168.101.101 的 mac 地址,希望有兄弟能告诉俺一下。以下部分是论坛中的“lockets”对此疑问的解答,在此表示感谢:

    由于你在接口上配置了 192.168.101.113   255.255.255.240 的接口地址

    当接口物理态和管理态 UP 以后, 产生了一条

    192.168.101.112  255.255.255.240 出接口是 192.168.101.113 的直连路由

    ( 为了以后说明方便我们叫他 “路由A” )

    当你在 192.168.101.113   上 PING  192.168.101.101 的时候

    系统首先根据目的 IP 查找路由表, 根据前缀匹配规则是无法匹配到 "路由 A" 的

    ( 由于: 十进制的 112 是 "01110000" , 十进制 240 是 "11110000" , 说明要匹配前 4 个 BIT “0111”

    但是十进制 101 是 "01100101"  前 4 个 BIT 是 0110)

    所以最终退而求其次的匹配了 0.0.0.0 /0   192.168.101.1 的默认路由

    所以再发送ARP REQUEST 询问  192.168.101.1 的 MAC 用来构造帧.

    所以系统不关心 192.168.101.101 的 MAC 的原因是由于匹配不到路由.

    补充:

    如果匹配到了路由 A, 由于该路由没有下一跳信息, 那么系统会自动的

    认为 IP 包的 DESTINATION 就是下一跳, 这种情况下, 系统就会发送ARP 来请求

    192.168.101.101 的 MAC 地址信息了 ~

    后面的几个包都是 3、4、6 的重复。至此我们可以看到该包的走向:

    Jf3——(ping 请求)――网关—-(ping 请求转发)-—work1——(ping 回应)――jf3;

    源 192.168.101.113/28 将目标 192.168.101.101/24 的地址进行位与操作:

                        192.168.101.101
                        255.255.255.240

    目标工作站的网段为:192.168.101.96  (该主机为该网段的广播地址――本人计算有误)同自己所在的网段   :192.168.101.112    不在同一网段,因此无法将包直接发给目标主机。根据通讯规则,在目标地址不在同一网段时,将把数据包发给网关,同上一个环境不同,这次我们正确的配置勒网关,因此该 pi