掩码配置错误时,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