首页 > 代码库 > 【网络基础】子网划分、基于子网掩码的分组转发

【网络基础】子网划分、基于子网掩码的分组转发

为什么需要子网划分?

1、我们知道,Internet组织机构定义了五种IP地址用于主机的有A、B、C三类地址。其中A类网络有126个,每个A类网络可能有

16 777 214台主机,它们处于同一广播域。而在同一广播域中有这么多结点是不可能的,网络会因为广播通信而饱和,结果造成16 777 214个地址大部分没有分配出去,形成了浪费

2、随着互连网应用的不断扩大,IP地址资源越来越少。为了实现更小的广播域并更好地利用主机地址中的每一位,可以把基于类的IP网络进一步分成更小的网络,每个子网由路由器界定并分配一个新的子网网络地址,子网地址是借用基于类的网络地址的主机部分创建的。划分子网后,通过使用掩码,把子网隐藏起来,使得从外部看网络没有变化,这就是子网掩码。 


子网掩码概念:

子网掩码是一个32位的2进制数,其对应网络地址的所有位都置为1,对应于主机地址的所有位都置为0

由此可知,

A类网络的缺省的子网掩码是255.0.0.0,

B类网络的缺省的子网掩码是255.255.0.0,

C类网络的缺省的子网掩码是255.255.255.0。

将子网掩码和IP地址按位进行逻辑“与”运算,得到IP地址的网络地址,剩下的部分就是主机地址,

从而区分出任意IP地址中的网络地址和主机地址。子网掩码常用点分十进制表示,

我们还可以用网络前缀法表示子网掩码,即“/<网络地址位数>”。

如138.96.0.0/16表示B类网络138.96.0.0的子网掩码为255.255.0.0。


基于子网掩码的分组转发规则:

 上一篇我们学习了“路由表,分组转发算法”知道了路由转发分组的规则。

但是当引入了子网掩码概念之后,路由表相应的内容就需要增加“子网掩码”这一项。如下:

网掩码告知路由器,地址的哪一部分是网络地址,哪一部分是主机地址,使路由器正确判断任意IP地址是否是本网段的,从而正确地进行路由。

当进行子网划分之后,新的分组转发规则如下:(结合上面的路由表图分析)


(1) 从收到的分组的首部提取目的 IP 地址D
(2) 先用各网络的子网掩码和D逐位相“与”,看是否和
     相应的网络地址匹配。若匹配,则将分组直接交付。
     否则就是间接交付,执行(3)。
(3) 若路由表中有目的地址为D 的特定主机路由,则将
     分组传送给指明的下一跳路由器;否则,执行(4)。
(4) 对路由表中的每一行的子网掩码和D 逐位相“与”,
     若其结果与该行的目的网络地址匹配,则将分组传送
     给该行指明的下一跳路由器;否则,执行(5)。
(5) 若路由表中有一个默认路由,则将分组传送给路由表
     中所指明的默认路由器;否则,执行(6)。
(6) 报告转发分组出错。


对以上6条总结如下:直接交付 ≥ 特定路由匹配路由默认路由



基于子网掩码的分组转发规则的一个实例



(1) 从收到的分组的首部提取目的 IP 地址D
D:128.30.33.138

(2) 先用各网络的子网掩码和D 逐位相“与”。
255.255.255.128转化为2进制为:

255.255.255.10000000(前3个255表示为2进制时是全1,在此就简写)
而目的地址D表示为2进制为:
128.30.33.10001010(当子网掩码前3位均为255时,无论目的地址前3位是什么,都不改变。)

二者&(与)的结果为:
128.30.33.10000000
写成十进制为:
128.30.33.128
很明显 128.30.33.128 ≠ 128.30.33.0

故不是直接交付(接口0与主机不在同一子网内)
(3) 判断路由表中是否有目的地址为D 的特定主机路由

没有。

(4) 对路由表中的每一行的子网掩码和D 逐位相“与”,若其结果与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器;
由(2)可知,当子网掩码为255.255.255.128时,目的地址与子网掩码与的结果是:
128.30.33.128 == 接口1的网络地址。故转发分组到接口1对应的路由器.







本文由Cout_Sev 搜集整理并修改

转载请注明出处

谢谢!