计算机网络(TCP/IP原理)|32、路由聚合

通过上节的学习,我们知道了路由器收到数据包后是根据匹配自己路由表的条目来把数据包进行相应地转发的。那么试想,在今天如此大规模的网络互联环境下,尤其是负责核心网建设的运营商,处在核心网的路由器要处理海量的数据,必然它就要存储特别长的路由表(可能会包含几万条路由项),路由表过长就会引起匹配条目的时间过长,也就导致了数据转发延迟过长,造成网络质量差的效果,为了解决这个问题,提出了路由聚合的技术,也称为超网。
VLSM和CIDR VLSM是指“可变长子网掩码”,这个概念我们在前面其实已经了解到,但没有正式提出这个术语。可变长的意思是根据实际的需求,打破A/B/C类标准的子网掩码。例如,在一个公司的不同部门,技术部要求100台电脑,财务部要求30台电脑,研发部要求10台电脑,此时公司申请到一个C类地址块,该怎样划分子网来符合这样的需求,就是应用可变长的掩码来进行划分子网的。
虽然在这里VLSM并不是一个新概念,但是在这里提出是为了更好的引出CIDR的概念,因为CIDR是在VLSM的基础上发展而来的。
CIDR是指“无类别域间路由”,只看这个定义中的“无类”两个字,就能知道提出CIDR的概念之后,传统的A/B/C等有类的IP地址和子网掩码的概念就不存在了。CIDR有自己独特的表示IP地址和掩码的形式,事实上,现在我们更多用的是这种CIDR的表示形式,因为它更简洁。
因为有了CIDR概念之后,不再区分传统的A/B/C类的地址,所以也就不必在乎到底哪一类的IP地址的网络位有几位,主机位有几位的问题了。
用CIDR表示IP地址和掩码的方式是这样的:(IP地址/网络前缀)。这个形式也被称为“斜线记法”,斜线前面是IP地址,后面是网络前缀。网络前缀就可以理解成以前的网络号,比如192.168.5.0/24,这就代表着此IP地址的前24位是网络位,那自然后8位就是主机位了。可以看出来,这种记法比传统的写IP地址,再写子网掩码的表示形式简洁多了。
CIDR地址块 通过上面用CIDR记法举的例子,我们会发现,CIDR把网络前缀都相同的连续的IP地址组成一个“CIDR地址块”,在这个块内的所有IP地址的网络位都是相同的。(其实跟传统有类IP地址的网段的概念,以及子网掩码必须是连续的0和1,有异曲同工之妙)。
我们只要知道了一个给定的CIDR地址块中的任何一个地址,都能够推算出来这个地址块里面包含多少个IP地址,并且能推算出这个地址块的最小地址和最大地址。
比如,给定一个地址块:192.168.123.7/20,现在要算出该地址块的范围:
第一步,先把IP地址转换为二进制,然后根据“/20”可知前20位是网络位:
11000000.10101000.01111011.00000111(其中橙色为网络位,紫色为主机位)
第二步,最小地址即为:把主机位全部为0。最大地址即为:把主机位全部为1:
11000000.10101000.01110000.00000000(192.168.112.0即为最小地址)
11000000.10101000.01111111.11111111(192.168.127.255即为最大地址)
但是要注意的是,因为我们说过主机位是全0和全1都是属于特殊IP地址,一般不用。那么,我们在做题目的时候,如果题目中要求算出“可用的地址范围”的话,那么就要把最小地址加1,最大地址减1,即:可用的地址范围是192.168.112.1~192.168.127.254。
通过这个简单的例子,就能充分解释CIDR地址块的灵活性,因为我例子给的是“/20”,当然实际情况下,可能会出现各种比如“/13、/14、/23、/27……”,根据网络前缀的位数不同,可包含的主机数就不同,就能灵活地根据需求来组织网络规模的大小。
由于一个CIDR地址块中有很多地址,所以在路由表中就利用CIDR地址块来查找目的网络,这就是路由聚合的核心思想,它使得路由表中的一个条目可以表示原来传统的有类IP地址的很多个条目,所以路由聚合也称为超网,尤其在大规模的网络中,使路由表缩减的效果极其明显。
现在我们做一个路由聚合成超网的例题,感受路由表缩减的效果:
使用CIDR技术把4个C类网络202.15.145.0/24、202.15.147.0/24、202.15.149.0/24、202.15.150.0/24汇聚成一个超网,得到的地址是?(此题选自2017下半年网络工程师考试真题)
做这种题目的方法就是,把这几个IP转换成二进制,观察它们最后的相同位,就确定出了网络前缀的长度,接着再把后面的位数写成0就可以了。
观察这四个IP,会发现它们都是202.15开头的,只有第三段不一样,所以我们只把每个IP的第三段转换二进制(用橙色把它们四个IP的相同的位数标出来):
145:10010001
147:10010011
149:10010101
150:10010110
可以看出这四个数的二进制,前5位是一样的。再加上前面的202.15这16个二进制位,可知汇聚之后的网络前缀是5+16=21,接着再把“10010”后面的位数全为0,即为10010000,转为十进制是144,所以最后的结果是202.15.144.0/21。汇聚完成,原路由表中的四个表项合并成了一个。
最长前缀匹配 最长前缀匹配指的是使用CIDR技术之后路由器收到数据包之后,根据数据包目的IP地址来匹配自身路由条目的原则。上节我们学习过的路由器中会存储一个(目的网络,掩码,下一跳)这样的路由表。那么使用CIDR之后,路由表就可以变成(目的网络,前缀,下一跳)这样的格式。
但是这样又存在一个问题,即根据数据包的目的IP来匹配路由表条目,可能会有多个条目都符合结果,这时候路由器应该怎么决定此数据包走哪一个下一跳,所以提出了“最长前缀匹配”原则,如果多个条目都符合结果,那就要比较哪个条码匹配的前缀最长,前缀越长,匹配的结果就越精准。
例如,假定现在路由器中的路由表是这样的:

目的网络 前缀 下一跳
206.0.68.0 /22 180.15.2.5
206.0.71.128 /25 190.16.6.2
而现在此路由器收到一个目的IP为206.0.71.130的数据包,首先数据包目的IP和本路由表的两个条目的前缀进行“AND”运算(不懂AND运算的话,请回看第29节):
206.0.71.130和11111111.11111111.11111100.00000000(前22位是1),得出结果是206.0.68.0/22
206.0.71.130和11111111.11111111.11111111.10000000(前25位是1),得出结果206.0.71.128/25
可以看出路由表的两个条目都匹配,到底应该交给哪个下一跳,比较前缀的长度,发现第二条明显前缀要比第一条长,所以应该按照第二条路径,下一跳应该交给190.16.6.2。
本节介绍路由聚合到此为止,原理比较好理解,主要是汇聚路由条目的计算方法以及最长前缀的匹配。下一节,我们将学习NAT技术。
【计算机网络(TCP/IP原理)|32、路由聚合】参考教材:谢希仁《计算机网络》第七版

    推荐阅读