一、划分子网
1. 从两级IP地址到三级IP地址
在ARPANET早期,IP地址的设计不合理。
(1) IP地址空间的利用率有时很低
一个A类地址可连接主机数超过1000万,一个B类也超过6万。例如:一个公司申请一个B类,但是连接到主机数并不多,但是却不愿意申请一个C类地址,理由是为了考虑以后的发展。
(2) 给每一个物理网络分配一个网络号会使路由表变得太大使得网络性能变坏
每一个路由器都应该能够从路由表中查出应该怎样到达其他网络的下一跳路由器。因此,网络数越多,路由器的路由表项目数也越多。这会增加路由器成本(需要更多的存储空间)以及耗费更多的时间等。
(3) 两级IP地址不够灵活
例如:有时一个单位需要在一个新的地点马上开通一个新的网络,情况紧急。但是在申请到一个新的IP地址之前,新增加的网络不能连接到互联网上工作。
因此希望有一种方法,使一个单位可以随时灵活的增加本单位的网络,不必事先到互联网管理机构去申请。
---------------------------------------------------------------------------------------------------------------------------------
为了解决上诉三个问题,在1985年起在IP地址中又增加了一个“子网号字段”,使两级IP地址变为三级。这种做法叫做划分子网或子网寻址或子路由选择。
划分子网的基本思路:
(1) 一个拥有许多物理网络的单位,可以将所属的物理网络划分为若干个子网。
划分子网属于一个单位内部的事。
本单位以外的网络看不见这个网络有多少个子网组成,这个单位对外仍然表现为一个网络。
(2) 划分子网是从网络的主机号借用若干位作为子网号,主机号就会减少相同的位数。
两级IP地址变为三级IP地址:网络号、子网号、主机号:
IP地址 ::= {<网络号>, <子网号>, <主机号>}
(3) 凡是从其他网络发往本单位某台主机的IP数据报,依旧是根据IP数据报的目的网络号找到连接在本单位网络上的路由器。
然后该路由器在收到IP数据报后,再根据目的网络号和子网号找到目的子网。
最后将IP数据报直接交付给目的主机。
2. 子网掩码
现在问题是:当一个数据报发送到了路由器,路由器应该如何转发到相应的子网。也就是说如何找到IP地址对应的子网。
从IP数据报的首部无法看出源主机或目的主机所连接的网络是否进行了子网划分。
因此引入子网掩码来解决这个问题。
子网掩码的规则:
子网掩码长度=IP地址长度=32位
子网掩码某位=1:IP地址中对应的那一位是网络号或子网号
子网掩码某位=0:IP地址中对应的那一位是主机号
不规定子网掩码中1必须是连续的,但是极力推荐子网掩码选用连续的1.
用 IP 地址与子网掩码进行“与”运算,就可以得出所要找的子网。
不管有没有划分子网,只要把子网掩码和IP地址进行“与”运算,就立即得出网络地址来。这样路由器在处理到来的I分组时,无论是划分不划分都采用相同的算法。
默认子网掩码:
不划分子网时,没有子网,理应不适用子网掩码。但是为了统一以及便于查找路由器。互联网标准规定:所有网络都必须使用子网掩码,同时在路由器的路由表中也必须有子网掩码这一栏。
因此,当一个网络不划分子网时,那么该网络就是用默认子网掩码:
子网掩码是一个网络或一个子网的重要属性:
路由器和相邻路由器交换路由信息时,必须把自己所在网络(或子网)的子网掩码告诉相邻路由器。
在路由器表中的每一个项目,除了要给出目的网络地址外,还必须同时给出该网络的子网掩码。
若一个路由器连接在两个子网上就拥有两个网络地址和两个子网掩码。
3. 子网的划分
有固定长度子网和变长子网两种子网划分方法。
(1) 固定长度子网
采用固定长度子网时,所划分的所有子网的子网掩码都是相同的。
根据RFC 950协议,子网号不能全为1或者全为0。但是随着无分类域间路由选择CIDR 的广泛使用,全1和全0也可以使用了。但是要谨慎使用,要弄清路由器软件是否支持。
用一个B类网络说明子网的划分:
表中的划分都是按照连续1的方式划分的。
表中没有子网位数为0、1、15、16四种情况,因为没有意义。
0位表示没有划分,1位和15是因为不能全为1或0,16位全部为子网就没有主机了。
可以得出:
划分子网增加了灵活性。
但是减少了能够连接在网络上的主机总数。
举例:
已知IP地址为141.14.72.24,子网掩码是255.255.192.0,试求网络地址:
(2) 变长子网
变长子网就是不同子网使用不同的子网掩码。这对于网络内部不同网段需要不同大小子网的情形来说很有效,这种划分子网的方式叫变长子网划分。
其实变长子网划分就是在等长子网的划分上,分别取不同等分子网中的一个或者多个子网。
二、使用子网时分组的转发
使用子网划分后,路由表必须包含三项内容:目的网络地址、子网掩码和下一跳地址。
在划分子网的情况下,路由器转发分组算法:
(1) 从收到的分组的首部提取目的 IP 地址 D。
(2) 先用各网络的子网掩码和 D 逐位相“与”,看是否和相应的网络地址匹配。若匹配,则将分组直接交付。否则就是间接交付,执行 (3)。
(3) 若路由表中有目的地址为 D 的特定主机路由,则将分组传送给指明的下一跳路由器;否则,执行 (4)。
(4) 对路由表中的每一行,将子网掩码和 D 逐位相“与”。若结果与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器;否则,执行 (5)。
(5) 若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器;否则,执行 (6)。
(6) 报告转发分组出错。
可以对比没有划分子网时的转发算法以及特定路由和默认路由定义。
下图可以当作例子:
三、无分类编址CIDR(构造超网)
划分子网在一定程度上缓解了互联网在发展中遇到的苦难,提高了网络地址的使用率。但是,在1992年互联网依旧面临三个问题必须尽快解决:
(1) B类地址在1992年已经分配了近一半,很快就将全部分配。
(2) 互联网主干网上的路由表中的项目数急剧增长(从几千增长到几万个)。
(3) 整个IPv4的地址空间最终将全部耗尽。2011年2月3日,IANA宣布IPv4地址已经耗尽了。
1. 网络前缀
RFC 1009 就指明了在一个划分子网的网络中可同时使用几个不同的子网掩码。
使用变长子网掩码 VLSM 可进一步提高 IP 地址资源的利用率。
在 VLSM 的基础上又进一步研究出无分类编址方法,它的正式名字是无分类域间路由选择 CIDR。
同时,IETF成立了IPv6工作组负责解决新版本IP协议问题。下面依旧介绍IPv4.
CIDR的主要特点:
(1) CIDR规则
CIDR 消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念,因而可以更加有效地分配 IPv4 的地址空间。这样可以在新的IPv6使用前容许互联网的规模继续增长。
CIDR使用各种长度的“网络前缀”来代替分类地址中的网络号和子网号,后面部分用来指明主机。
IP地址从三级又变回了二级。
记法:
① IP地址 ::= {<网络前缀>, <主机号>}
② 使用斜线记法,或称为CIDR记法,即在IP地址后面加上斜线“/”,然后写上网络前缀 所占的位数(这个数值对应于三级编址中子网掩码中 1 的个数)。例如: 220.78.168.0/24
③ 地址块 10.0.0.0/10 可以简写成10/10,也就是把点十进制中低位连续的0省略。
④在网络前缀后面加一个星号“*”。例如:0000101000*,星号*之前是网络前缀,星号* 表示任意也就是主机号。
(2) CIDR地址块
CIDR 把网络前缀都相同的连续的 IP 地址组成“CIDR 地址块”。
128.14.32.0/20 表示的地址块共有 2^12 个地址(因为斜线后面的 20 是网络前缀的位数,所以这个地址的主机号是 12 位)。
这个地址块的起始地址是 128.14.32.0。
在不需要指出地址块的起始地址时,也可将这样的地址块简称为“/20 地址块”。 128.14.32.0/20 地址块的最小地址:128.14.32.0
128.14.32.0/20 地址块的最大地址:128.14.47.255
全 0 和全 1 的主机号地址一般不使用。
---------------------------------------------------------------------------------------------------------------------------------
为了更方便进行路由选择,CIDR使用32位的地址掩码。
对于 /20 地址块,它的掩码是 20 个连续的 1 和 12 个连续的0。 斜线记法中的数字就是掩码中1的个数。
超网:
一个 CIDR 地址块可以表示很多地址,这种地址的聚合常称为路由聚合,它使得路由表中的一个项目可以表示很多个(例如上千个)原来传统分类地址的路由。
路由聚合有利于减少路由器之间的路由选择信息的交换,从而提高了整个互联网的性能。 路由聚合也称为构成超网 。
常用的CIDR地址块:
从表中可以知道:
CIDR 地址块中的地址数一定是 2 的整数次幂。
前缀长度不超过 23 位的 CIDR 地址块都包含了多个 C 类地址,这也是"构成超网"的来源。
网络前缀越短,其地址块所包含的地址数就越多。而在三级结构的IP地址中,划分子网是使网络前缀变长。
CIDR 的一个好处是:可以更加有效地分配 IPv4 的地址空间,可根据客户的需要分配适当大小的 CIDR 地址块。
2. 最长前缀匹配
使用CIDR时,由于采用网络前缀的这种记法,IP地址由网络前缀和主机号这两个部分组成,因此在路由表中的项目也要有相应的改变。
这时,每个项目由“网络前缀”和“下一跳地址”组成。
但是在查找路由表时可能会得到不止一个匹配结果。这样就带来一个问题:从这些匹配结果中如何选择正确的路由?
应当从匹配结果中选择具有最长网络前缀的路由,这叫做最长前缀匹配,又称为最长匹配或最佳匹配。这是因为网络前缀越长,地址块越小,因为路由就越具体。
举例:
3. 使用二叉线索查找路由
当路由表的项目数很大时,怎样设法减小路由表的查找时间就成为一个非常重要的问题。
为了进行更加有效的查找,通常是将无分类编址的路由表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。这里最常用的就是二叉线索。
IP 地址中从左到右的比特值决定了从根结点逐层向下层延伸的路径,而二叉线索中的各个路径就代表路由表中存放的各个地址。
为了提高二叉线索的查找速度,广泛使用了各种压缩技术。