网络层 | 网际协议IP(2) – 作者:noobsec

01 简介

在《网络层 | 网际协议IP(1)》中,我们讲了IPv4地址的格式、分类、特殊IP地址和私有地址,今天我们来讲一讲划分子网和构成超网。

之前也提到过,早期的IP地址是没有分类的。但随着IP地址资源枯竭问题的产生,后来出现了分类网络,划分子网,无类别域间路由(CIDR)(超网)。

02 划分子网

分类网络虽然缓解了IP地址资源消耗的速度,但还是存在不合理的地方。

以一个企业为例。如果申请一个C段,最多可分配2^8-2=254个地址;如果申请一个B段,最多可分配2^16-2=65534个地址。在两者的选择中,他们通常是选择申请B类地址,以应对后续企业的发展,这就造成了IP地址的浪费。因此,很有必要提高IP地址资源的利用率。

在提出划分子网这个概念的时候,那时候其实还没有分类网络。划分子网,将二级IP变成三级IP,更加灵活,减轻路由表负担;而且可以将一个网络划分为多个子网,而不用去获取一组网络,这样能够很好地满足组织内部需求,详情可查阅RFC950。

在划分子网之前,IP地址=网络号+主机号;划分子网后,IP地址=网络号+子网号+主机号。

注意,无论是否划分子网,IP地址都是32位二进制数,并不是说划分子网后,IP地址就变成了32位以上的二进制数。划分子网后,网络号是不变的,只是从主机号中借用若干位作为子网号而已。


1.jpg

另外,子网是相对组织内部而言的。对外部来说,IP“网络号”=网络号。


2.jpg

如上图,从外部来看,所有设备的网络号都是145.13.0.0。而当数据到达组织内部的时候,IP”网络号“=网络号+子网号。

3.jpg

这里要说的是,IP协议传输数据是通过IP数据报(后续会讲),但IP数据报和IP地址里并没有任何关于子网的信息。

那么当数据到达组织内部时,如何知道该将数据发往哪个子网呢?这个时候就要借助子网掩码了

子网掩码

子网掩码和IP地址一样,也是32位二进制数,也采用“点分十进制”记法,但子网掩码通常是由连续的1和0组成。1用来标记网络位,0用来标记主机位。

另外,互联网标准规定所有网络都要使用子网掩码。这样做有什么好处?不管网络有没有划分子网,只要把子网掩码和IP地址进行逐位的“与”运算就可以得出网络地址。

如果没有划分子网,则使用默认子网掩码。


4.jpg

如果划分了子网,则将网络号+子网号对应的位掩码置1,主机号对应的位掩码依然为0。

5.jpg

下面我们举个实例,来加深大家的理解。172.16.123.1是一个B类地址,未划分子网时网络号和主机号各16位,默认子网掩码为255.255.0.0。


6.jpg

如上图,我将位掩码设置为18位,也就是说有18-16=2位子网号位,那么子网掩码应该是由18个连续的1和14个连续的0组成。


7.jpg

然后我们把IP地址和子网掩码逐位“与”运算,我们就得出了该IP地址的网络地址为172.16.64.0。

“与”运算大家应该都学过吧,和小学的算术一样,将每一位对齐。只有两个1相“与”,结果才为1;两个数中有任何一个数为0,那么结果都为0。

得出了网络地址,那我们就很容易得出在172.16.64.0这个子网中可用的IP地址范围:172.16.64.1~172.16.127.254。

怎么得出来的?相信大家看了之前的《网络层 | 网际协议IP(1)》应该都能明白。如果还是不明白,那只能怪我讲的不清晰:主机号全0和全1我们一般都不使用。

另外大家有没有发现,截图中最大IP的第三个8位,两位子网号和六位主机号一同被转换为十进制的127了,所以大家不要以为点分十进制的每位数就是代表网络号或主机号。比如什么172.16.0.0是网络号,0.0.127.254是主机号;或者172.16.127.0是网络号,0.0.0.254是主机号。

点分十进制只是为了让我们人类方便查看和记忆而已,因此大家不要有:“欸,怎么把子网号和主机号合并成八位转换成十进制了呢?“这种想法;IP地址其实质是一个32位二进制数,要得出网络号和主机号,依赖于子网掩码。

03 构成超网

分类网络和划分子网等技术虽然缓解了IP地址资源消耗的速度,但依然没办法阻止IP地址资源的耗尽。因此,为了进一步提高IP地址的利用率,IETF研究出了无类别域间路由(CIDR)。详情可查阅RFC4632。

CIDR主要有三个特点:无类、前缀、地址块。

CIDR是基于可变长子网掩码的无类别编址方法,没有了ABC类地址,以及在主机号中借用若干位做为子网号的概念,所有IP地址都是无类别的。

CIDR将32位的IP地址分为前后两部分,前部分称为前缀,指明将32位IP地址中的哪些位解释为网络号,哪些位用于对内部的各个终端进行编号。IP=前缀+主机号,IP地址的网络号不再限定为8位、16位以及24位,更加灵活。

CIDR将前缀相同的连续的IP地址组成地址块,并采用“斜线记法”来表示IP地址,也称为CIDR记法。

“斜线记法”在“点分十进制”的IP地址后跟上一条斜线“/”,然后在斜线后写上前缀所占的位数。

128.14.35.7/20

如上所示,就是“斜线记法”。我们不仅能简单的识别出IP地址为128.14.35.7,网络前缀为20位(也就是网络号有20位),还可以计算出该IP属于哪个CIDR地址块,该CIDR地址块的IP地址范围。


8.jpg

把主机位全部置0,即可得出IP属于128.14.32.0/20这个地址块,同时可用的地址范围为128.14.32.1~128.14.47.254。

另外,CIDR没有了划分子网这个概念,是指没有在主机位中再借用若干位作为子网号而已,使用CIDR地址块的单位依然可以在内部划分出子网。具体的做法是,在主机位中借用若干位,延长前缀的位数,IP还是=前缀+主机号。

比如在128.14.32.0/20这个地址块中划分4个子网,那么我们需要在主机号中借用两位,将前缀延长到22位,这样128.14.32.0/20这个地址块就有了以下四个子网:


9.jpg

CIDR不仅提高了IP地址的利用率,同时实现了路由聚合,因为也被称为“构成超网”,路由的知识我会在后面介绍,这里我们只专注于IP地址的发展历程。

04 总结

划分子网:
1、二级IP变三级IP:网络号+子网号+主机号
2、网络号不变,从主机号中借用若干位做为子网号,主机号减少相同的位数
3、子网相对于内部而言,对外依然是二级IP,对内才是三级IP
4、根据子网掩码来判断该将数据发送到哪个子网
5、子网掩码与IP地址相与即可得出IP地址的网络号
构成超网:
1、无类、前缀、地址块
2、斜线记法

来源:freebuf.com 2019-05-06 10:46:58 by: noobsec

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论