本篇结构:
- 前言
- 划分子网
- 无分类编址CIDR(构造超网)
一、前言
接着上一篇,继续分享网际协议IP的内容--划分子网和构造超网。
那么,为什么要划分子网和构造超网?
我们知道,分类的IP地址主要有A类、B类、C类三类(D类为多播地址),其中:
- A类拥有超过65535台主机
- B类拥有介于255~65535台主机
- C类拥有小于255台主机
这种分类却又几个很明显的缺陷:
- IP地址空间的利用率有时候很低,地址浪费大;
只有两、三台主机的网络,也至少要一个C类IP地址,A、B类浪费更严重,少有达上万台主机的大型IP网络。
- 路由表太大,影响网络性能
路由器需要能够从路由表中找出怎样到达其他网络的下一跳地址,而一个物理网络对应一个网络号,如果网络越多,则路由表越大,路由器的存储空间就需要越大,查找也更耗时,但使用构造超网,则能减少网络数,提升性能。
- 不够灵活
企业有很多部门,每个部门可能需要各自独立的网络,这怎么办呢?再申请网络?可是人数又不多,怎么办呢?划分子网刚好可以解决这个问题,而且便于管理。
二、划分子网
划分子网是指将IP类网划分为若干个子网。一般是从网络的主机号用若干位作为子网号(当然用来分配的主机号就相应减少),于是二级网络便成了三级网络。
划分子网后,发送到子网某台主机的IP数据报,仍是根据IP数据报的目的网络号找到连接到路由器,然后路由器根据IP数据报的目的网络号和子网号找到子网,再把IP数据报交付主机。
并且,划分了子网后,ip地址的网络号是不变的,因此在局域网外部看来,这里仍然只存在一个网络,即网络号所代表的那个网络;但在网络内部却是另外一个景象,因为我们每个子网的子网号是不同的,当用化分子网后的ip地址与子网掩码做'与'运算时,每个子网将得到不同的子网地址,从而实现了对网络的划分。
2.1、子网掩码
假如互联网的一个数据报(目的地址是子网154.13.3.10)到达路由器R(154.13.0.0),那它是如何到达子网1(154.13.3.0)的呢?
我们知道,从IP数据报中是无法知道目的主机所连接的网络是不是已经划分了子网,因为IP数据报中并没有这些信息,这就用到了子网掩码。
1.子网掩码的概念
子网掩码是一个应用于TCP/IP网络的32位二进制值,它可以屏蔽掉ip地址中的一部分,从而分离出ip地址中的网络部分与主机部分,基于子网掩码,管理员可以将网络进一步划分为若干子网。
2.为什么需要使用子网掩码
前面说过,在使用TCP/IP协议的两台计算机之间进行通信时,IP数据报中是没有子网的相关信息,这时可以通过将本机的子网掩码与接受方主机的ip地址进行'与'运算,即可得到目标主机所在的网络号,又由于每台主机在配置TCP/IP协议时都设置了一个本机ip地址与子网掩码,所以可以知道本机所在的网络号。
通过比较这两个网络号,就可以知道接受方主机是否在本网络上。如果网络号相同,表明接受方在本网络上,那么可以通过相关的协议把数据包直接发送到目标主机;如果网络号不同,表明目标主机在远程网络上,那么数据包将会发送给本网络上的路由器,由路由器将数据包发送到其他网络,直至到达目的地。在这个过程中你可以看到,子网掩码是不可或缺的!
3.如何用子网掩码得到网络/主机地址
既然子网掩码这么重要,那么它是如何分离出ip地址中的网络地址和主机地址的呢?
过程如下:
- 将ip地址与子网掩码转换成二进制;
- 将二进制形式的ip地址与子网掩码做'与'运算,将答案化为十进制便得到网络地址;
- 将二进制形式的子网掩码取'反';
- 将取'反'后的子网掩码与ip地址做'与'运算,将答案化为十进制便得到主机地址。
具体演示一下:
假设有一个I P 地址:192.168.0.1
子网掩码为:255.255.255.0
化为二进制为:IP地址11000000.10101000.00000000.00000001
子网掩码11111111.11111111.11111111.00000000
将两者做'与'运算得:11000000.10101000.00000000.00000000
将其化为十进制得:192.168.0.0
这便是上面ip的网络地址,主机地址以此类推。
4.子网掩码的分类
- 缺省子网掩码:
即未划分子网,对应的网络号的位都置1,主机号都置0。
A类网络缺省子网掩码:255.0.0.0
B类网络缺省子网掩码:255.255.0.0
C类网络缺省子网掩码:255.255.255.0
- 自定义子网掩码:
将一个网络划分为几个子网,需要每一段使用不同的网络号或子网号,实际上我们可以认为是将主机号分为两个部分:子网号、子网主机号。 形式如下:
未做子网划分的ip地址:网络号+主机号
做子网划分后的ip地址:网络号+子网号+子网主机号
也就是说ip地址在化分子网后,以前的主机号位置的一部分给了子网号,余下的是子网主机号。
5.划分子网的利弊
我们明白局域网是广播通信的,而广播传输,是向本网段中的所有节点都发送同样的数据包,这会占用很多的网络资源(因为每个广播数据包硬件设备都要对它进行分析),特别是带宽资源。但是在这些广播传输中对终端真正有用的只是所有广播接收用户中的一个,因为广播的目的就是查询目标用户的MAC地址,这样也就是在所有广播传输中,绝大多数都是没有任何作用的,纯粹是资源的浪费。而且网络规模越大,广播数据包发送所占用的资源就越多(因为广播中要传输的次数越多),很可能就形成广播风暴,正常的网络通信可能被中断,致使网络瘫痪。
利:
- 划分子网一个最为重要意义就在于减少广播所带来的负面影响,提高性能的整体性能。因为广播数据包只能在同一网段中传输,网络规模小了,网络中用户数少了,当然所占用的资源也就少了。
- 节省了IP地址资源。
- 由于不同子网之间是不能直接通信的(但可通过路由器或网关进行),在网络安全形势不容乐观的今天,网络越小,安全性就相对越高,因为入侵的途经小了。
- 便于维护。
弊:
- 可连接的主机数减少。
- 至于各子网间不能直接通信,可以说是既是它的利,又是它的害,会带来诸多的不便。
PS:省了IP地址资源与连接主机数减少看上去相互矛盾,其实这要看具体的对象来定。对本身规模就较大(200个用户以上)的网络,划分子网后,可用的IP地址数是减少了,但是如果对于那些很小的小型企业网络来说,划分子网后又可节省大量IP地址资源。因为几个小网络可以共用一个大的网络地址范围,而且同样可以取到隔离的作用。
2.2、使用子网时分组的转发
使用子网划分后,路由表必须包含以下三项内容:目的网络地址、子网掩码和下一跳地址。
在划分子网的情况下,路由转发分组的算法如下:
- 从收到的数据报的首部提取目的IP地址D。
- 先判断是否为直接交付。对路由器直接相连的网络逐个进行检查:用各网络的子网掩码和D逐位相“与”(AND操作),看结果是否和相应的网络地址匹配。若匹配,则把分组进行直接交付(还需把D转换成物理地址,把数据报封装成帧发送出去),转发任务结束。否则就是间接交付,执行(3)。
- 若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行(4)。
- 对路由表中的每一行(目的网络地址、子网掩码、下一跳地址),用其中的子网掩码和D逐位相“与”(AND),其结果为N。若N与该行的目的网络地址匹配,则把数据报传送给该行指明的下一跳路由器;否则,执行(5)。
- 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行(6)。
- 报告转发分组出错。
Ps:可以和没划分子网的情况比较下,发现大体的流程是不变的:提取IP地址、判断是否在同一网络、判断是否有特定路由、判断间接交付、判断是否有默认路由。
三、无分类编址CIDR(构造超网)
最初的因特网设计者没有预想到网络会有如此快速地发展,因此现在网络面临的问题都可以追溯到因特网发展的早期决策上,IP地址的分配更能体现这点。目前使用的IPv4地址使用32位的地址,即在IPv4的地址空间中有2的32次幂(4,294,967,296,约为43亿)个地址可用。
这样的地址空间在因特网早期看来几乎是无限的,于是便将IP地址根据申请而按类别分配给某个组织或公司,而很少考虑是否真的需要这么多个地址空间,没有考虑到IPv4地址空间最终会被用尽。
因此,IPv4地址是按照网络的大小(所使用的IP地址数)来分类的,它的编址方案使用“类”的概念。A、B、C三类IP地址的定义很容易理解,也很容易划分,但是在实际网络规划中,它们并不利于有效地分配有限的地址空间。对于A、B类地址,很少有这么大规模的公司能够使用,而C类地址所容纳的主机数又相对太少。所以有类别的IP地址并不利于有效地分配有限的地址空间,不适用于网络规划。
在这种情况下,人们开始致力于下一代因特网协议——IPv6的研究。由于现在IPv6的协议并不完善和成熟,需要长期的试验验证,因此,IPv4到IPv6的完全过渡将是一个比较长的过程,在过渡期间我们仍然需要在IPv4上实现网络间的互连。而在90年代初期引入了变长子网掩码(VLSM)和无类域间路由(CIDR)等机制,作为目前过渡时期提高IPv4地址空间使用效率的短期解决方案起到了很大的作用。
CIDR(无类型域间选路,Classless Inter-Domain Routing)主要是为了解决以下三个问题而诞生的。
- 大小比较适中的B类IP地址的严重匮乏。
- 因特网主干网上的路由表中的项目数急剧增长。
- Ipv4地址迟早被分配完,到时候再无IP地址可以分配。
3.1、CIDR特点
CIDR最主要有两个以下特点:
- 消除传统的A,B,C地址和划分子网的概念,更有效的分配IPv4的地址空间,CIDR使IP地址又回到无分类的两级编码。记法:IP地址::={<<网络前缀>,<<主机号>}。CIDR还使用“斜线记法”即在IP地址后面加上“/”然后写网络前缀所占的位数(192.198.80.72/22)。
- CIDR把网络前缀都相同的连续IP地址组成一个“CIDR地址块”,即强化路由聚合(构成超网)。一个CIDR地址块中有很多地址,所以在路由表中就利用CIDR地址块来查找目的网络。这种地址的聚合常称为路由聚合,它是的路由表中的一个项目可以表示原来传统分类地址的很多个理由。路由聚合也称为构成超网。路由聚合有利于减少路由器之间的路由选择信息的交换,从而提高了整个因特网的性能。
PS:
- 子网是把网络拆分,而超网则是把网络聚合。
- 为了更方便地进行路由选择,CIDR使用32位的地址掩码。地址掩码是一串1和一串0组成,而1的个数就是网络前缀的长度。虽然CIDR不使用子网了,但由于目前仍有一些网络还使用子网划分和子网掩码,因此CIDR使用的地址掩码也可以继续称为子网掩码。斜线记法中,斜线后面的数字就是地址掩码中1的个数。
3.2、CIDR路由查询
1.最长网络前缀
在使用使CIDR时,由于采用了网络前缀这种记法,IP地址由网络前缀和主机号这两个部分组成,因此在路由表中的项目也要有相应的改变。这时,路由表中的每个项目由“网络前缀”和“下一跳地址”组成。但是在查找路由表时可能会得到不止一个匹配结果。这样就带来一个问题:我们应当从这些匹配结果中选择哪一条路由呢?
这个时候我们应当从匹配结果中选择具有最长网络前缀的路由,这叫作最长前缀匹配。
可以参考《计算机网络》书中的一个例子:
假定某ISP已拥有地址块206.0.64.0/18。
现在该ISP给某大学分配一个地址块206.0.68.0/22,然后这个大学再对本校的各系分配地址块,例如四系206.0.71.128/25。
假定四系希望ISP把转发给四系的数据报直接发给四系而不要经过大学的路由器,但又不愿意改变自己使用的IP地址块。
于是ISP路由器有以下两个项目,即206.0.68.0/22(大学)和206.0.71.128/25(四系)。
现在假定ISP收到一个数据报,其目的IP地址为D=206.0.71.130,把D分别和路由表中这两个项目的掩码逐位相”与”(AND操作)。
不难想,这个这两个项目肯定都是符合的,于是ISP选择具有最长网络前缀的IP地址进行转发(即选择两个匹配结果中地址更具体的一个)。
2.二叉线索树
最长前缀匹配会使查询变得复杂,当路由表很大时,查询效率会是个问题,为了加快路由器对路由表的查找,通常是使用二叉线索树进行查找。
步骤如下:
- 找出每一个IP地址的唯一前缀;
- 用IP地址的唯一前缀构造出一棵二叉线索树;
- 然后对二叉线索树进行搜索.
由于唯一前缀一般都小于32位,于是树的深度一般都小于32层。事实上在实际应用中,当你搜索到一个叶节点时,还必须将寻找匹配的目的地址和该叶节点的子网掩码进行逐位”与”运算,看结果是否与对应的网络前缀相同。若匹配,就按下一条的接口转发该分组。否则,就丢弃该分组。
3.3、构成超网的几个规则
- 构成超网的地址块数必须是2的N(N=1、2、3……)次幂。
- 构成超网的地址块(超块)必须是连续的地址块。
- 超块的第一个地址的第三字节必须能够被块数均匀的分开(开始地址必须能被地址数N整除)