之前说过,子网广播地址格式为 {subnetid, -1}。这里用 -1 表示主机位为全 1.
我们将用三个实验来观察现象。
1. 实验一
1.1 网络拓扑图
图1 网络拓扑
1.2 实验步骤
在主机 PC1 上 ping 广播地址 192.168.1.255,并在主机 PC1 上抓包。
图2 ping 命令结果
1.2 结果分析
图3 抓包结果
我们希望回答这样一个问题:主机 PC1 自己知道这是一个广播地址吗?
答:很明显,PC1 自己知道它是一个广播地址,并且还和自己在同一个网络。
既然如此,该广播还有被路由器转发的必要吗?完全没有,从图 3 中看到,目的地址被修改成 255.255.255.255 了!
在这里,被 PC1 修改成了 255.255.255.255,是因为 PC1 并不是真的一台主机(它是用路由器来模拟出来的,PC1 自己检测到该地址和自己在同一个网络,直接将目标地址修改成 255.255.255.255)。
实际上,我们在 Linux 上(位于 192.168.166.0/24 网络上) ping 192.168.166.255的时候,目的地址不会被修改掉,尽管发送知道目标网络和自己是同一个网络。
目标地址被修改成 255.255.255.255,是绝对不可能被路由器 R1 所转发出去的。
上面的过程可能有点难以理解,但是我希望你能从回答本小节第一个问题的角度尝试解释所有现象。
2. 实验二
2.1 网络拓扑图
图4 网络拓扑
2.2 实验步骤
从 PC3 上 ping 192.168.1.255.
2.2 实验结果
图5 PC1 上抓到的数据包
图6 PC3 上抓到的数据包
同样的,我们回答这个问题:主机 PC3 知道 192.168.1.255 是一个广播地址吗?
答:不知道!因为 PC3 将自己的子网掩码与 192.168.1.255 做与操作后,得到的网络号 192.168.3.0/24 这个网络,此时,PC3 仍然不认识这个网络(PC3 一脸懵逼,cao 这谁啊),然后也不管了,直接丢给网关 192.168.3.1 去了。
路由器 R2 收到这个目标地址为 192.168.1.255 的数据报后,我们再问,R2 知道这是广播地址吗? R2 同样的一脸懵逼,它根据自己的路由表,找到下一跳,转发给了路由器 R1.
很好,路由器 R1 认识它,因为 R1 自己就直连在 192.168.10/24 上啊!接下来,R1 在 192.168.1.1 这个接口上发送广播,将目标地址改成了 255.255.255.255(参考图5)。
3. 实验三
3.1 网络拓扑图
图7 网络拓扑图
3.2 实验步骤
从 PC4 ping 192.168.166.31
3.3 实验结果
图8 在 PC4 上抓取的报文
3.4 结果分析
再问一遍,PC4 知道 192.168.166.31 是广播地址吗?别说 PC4 了,可能你自己都不敢拍着胸脯说它是广播地址,特别是在你不知道网络拓扑图的情况下!
就好比说现在你的主机吧,假设你主机的 ip 地址是 192.168.166.107,你 ping 一个地址,192.168.10.31,你有把握就认定它一定是一台主机吗?不能!你有把握认定它是一个子网广播地址吗?还是不能!
我相信这个例子能让你深深的体会到这一点。接下来,我们还是拿着问题一步一步探索。
- 首先,PC4 没办法判断 192.168.166.31 是主机地址还是广播地址,因此它就认为这是一个主机地址吧,直接单播出去,到达 R2
- 同样,R2 也不知道 192.168.166.31 是广播地址,也单播出去了。
- 最后 R1 收到了这个数据报,R1 是认识这个网络的,并且 R1 还知道这是一个广播地址,并且是子网 192.168.166.16/28 上的广播地址,因此,路由器 R1 向子网 192.168.166.16 发子网定向广播(R1 会把目标地址改成 255.255.255.255,然后转发到 192.168.166.16/24 这个网络上)。
有一个很奇怪的现象是,我们发现路由器 R1 的接口 192.168.1.1/24 也回复了 ICMP echo 的请求。这个现象在图 6 中也存在。懂网络的同学可以来解释下^_^,我的理解是,路由器知道这是一个广播地址,代替了该网络中所有的主机统一进行了回复。因为默认情况下,路由器并不转发子网定向广播,但又怕请求者收不到回复,于是就主动响应了 ICMP echo request.
图 9 是在 PC4 上 ping 192.168.166.47,实际上这是发网子网 192.168.166.32 的广播。然而,路由器 R1 并不转发该子网的定向广播(因为这个功能被关闭!)
图9 路由器 R1 在接口 192.168.1.1 进行了回复
4. 总结
- 掌握定向子网广播
- 掌握子网定向广播转发流程,路由器什么时候转发,什么时候不转发?路由器是否察觉到地址是一个子网广播地址。