一、目标及知识准备
很多客户和朋友都问过我这样的一个问题:如果掩码配置错误,比如针对 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
