Classless And Subnet Address Extensions (CIDR)
无分类和子网地址扩展(CIDR)
1. 第四章我们学习了因特网最初的编址方案,并介绍了A类、B类和C类单播地址。本章研究IP编址方案的四种扩展形式。它们是为了节省网络前缀而设计的,包括:异步点对点链路、代理ARP、子网编址、无分类编址。其中子网编址和无分类编址两种技术特别重要,因为它们目前广泛用于整个因特网中。
2. 在最初的IP编址方案中,每个物理网络都被指派了一个唯一的网络地址;一个网络上每个主机的地址都把网络地址作为各个主机地址的前缀。
3. 代理ARP:指的是把一个网络前缀用于两个物理网络时用到的技术。我们将原来的网络标记为“主网络H1”,把后来添加的网络标记为“隐藏网络H2”。路由器R连接这两个网络,通过配置得知哪个主机在哪个物理网络上。
由于R运行代理ARP软件,它捕获H1中主机广播的ARP请求(H1广播目的是获得目的主机的物理地址),判断ARP请求所询问的主机是否位于另一个物理网络上,并通过发送路由器R自己的物理地址来响应这个ARP请求(所以H1中的主机获得的H2中的主机的目的物理地址被路由器R给代理了、替换了,因为路由器R返回的是自己的物理地址)。H1收到ARP响应后,把地址映射存放到自己的ARP表中,然后使用这个映射把目的地址站为H4的数据报发送给R。当R接收到数据报时,它搜索一个特殊的路由表,以确定如何转发给数据报。R必须把目的站为H4的数据报转发到隐藏网络上。
代理ARP的主要缺点是:除非网络使用ARP进行地址解析,否则代理ARP就无法适用于该网络。此外它不能推广到更复杂的网络拓扑。依赖于管理员手工维护机器和地址的表格,容易出错。
4. 子网编址(subnet addressing)
子网编址是最通用的,而且已经被标准化了,所以它成为三种技术中应用最广泛的一种。事实上,划分子网是IP编址中不可缺少的一部分。
我们知道最初的IP编址所形成的IP地址,分成了网络前缀和主机后缀。子网编址的核心就是:在主机后缀中再分出来若干位,结合原理的网络网络前缀构成了:用于本地物理子网的“网络部分”,原来的主机后缀剩余的若干位用于标识本地物理子网中的主机。所以:子网编址把32比特IP地址分成网络部分(network portion)和本地部分(local portion),而不是网络前缀和主机后缀。
这样原来的一个B类网络地址 128.10.0.0,就可以通过“子网编址”在本地用于多个物理网络。比如,我们用该地址的第三个字节来区分本地网络的多个物理网络。管理员可以给一个物理网络分配形式为128.10.1.X的地址,给另一个物理网络上的机器分配形式为128.10.2.X的地址。把16比特的本地部分划分成一个8位的网络标志符和一个8位的主机标志符,最多允许有256个网络,每个网络最多有256台主机。(实际上是254个网络,每个网络254台主机,全0全1地址用于广播。这样原来的一个B类地址,就可以当成254个网络地址来使用!)
因特网中的路由器在做出转发决策时,照常只查看网络前缀,地址的本地部分的解释留给了本地网点。
5. 子网编址的实现——掩码
使用子网编址的网点必须为每个网络选择一个32位的子网掩码(subnet mask)。来标识出IP地址的网络部分。将网络部分对应的位,设置为1。通过IP地址与子网掩码的“与操作”,就可以得出该IP地址的网络部分。
6. 子网转发——子网编址时的转发
标准IP转发算法必须进行修改,才能适用于子网地址。传统的路由表的表项如下:
(网络地址,下一跳地址)
其中网络地址是目的网络的IP地址(网络前缀),下一跳地址字段指明了一个直接相连的路由器的物理地址。标准算法知道地址是如何划分成网络部分和本地部分的。因为前3个比特对地址类型个格式进行了编码(即类型A,B,C,D)。使用子网编址时,但从地址上不可能判断出哪些比特对应网络部分,哪些比特对应主机部分。
因此,修改过的用于子网的算法要在路由表中维护一些附加信息,每个表项都包括一个附加的字段,指明该表项中的网络所使用的地址掩码:
(地址掩码,网络地址,下一跳地址)
在路由选择时,修改过的算法使用地址掩码(address mask)提取目的地址的一些比特,与表项中的相应字段进行比较。若相等,则把数据报转发到该表项中下一跳地址字段指明的地址(路由器或目的主机)。
7. 统一的转发算法
因为我们允许使用任意的掩码,所以子网选路算法就能涵盖标准算法的所有特例。只要使用同样的子网掩码技术,就能处理到每个主机的路由、默认路由以及到直接相连网络的路由。同时,掩码还能处理传统的分类地址的路由。也就是说以前的路由表项“(网络地址,下一跳地址)”所能表示的现在新的路由表项“(地址掩码,网络地址,下一跳地址)”都能够表述出来。所以这里称为“统一的转发算法”:
Route_IP_Datagram(datagram, routing_table)
{
从数据报中提取出目的IP地址 ID;
if ID的前缀匹配某直接相连的网络的地址
then 通过该网络把数据报发送到目的站
else
for 路由表中的每一向 do
N = ID与子网掩码的“与”操作;
if N等于表项中的网络地址字段
then 将本数据报发往表项中对应的下一跳地址所指定的路由器
endforloop
if 没有找到匹配的表项
then 宣布选路出错
}
8. 子网掩码的维护
主机在启动是获得子网掩码信息,路由器在使用路由转发协议交换路由信息时,把子网掩码信息传递给其它路由器。
9. 匿名的点对点网络
10. 无分类编址和构造超网
子网编址和匿名点对点等待这些技术并不能满足因特网的增长。于是开始设计引入IPv6,但是在IPv6被采用之前,任命涉及了一个临时的解决办法——无分类编址(classless addressing),它抛弃了最初的分类编址的方案,没有对IP地址进行分类,所以称为“无分类编址”。它允许任意长度的网络前缀,对应新的编址模型,还提出了新的转发和路由传播技术,由此形成的技术整体称为“无分类域间路由选择”(Classless Inter-Domain Routing,简称CIDR)。
要理解CIDR,需要先明白三个事实:
1)分类编址方案没有把网络地址分成相同大小的三类,B类网络号只有2^14个,但C类网络号有2^21个。
2)因为C类前缀足够小型网络使用,并且不怎么手划分子网的影响,C类前缀的需求比B类前缀的需求少得多。
3)B类前缀很快就会用完。
11. 构造超网(supernetting)
一种无分类编址的最初用法称为“构造超网”。一个中等规模的单位,请求一个B类前缀。构造超网的方案允许一个ISP给该单位分配一块C类地址,而不是分配一个B类网络号。这块地址必须躲到足够给单位中的所以网络号。
12. 把CIDR看成是用多个C类地址替代一个B类地址的方法时,比较容易理解提出CIDR的动机。但是CIDR的提议者设计它的目的,是为了把它应用在更广泛的场合中。构想一种分层编址模型:其中每个ISP可以得到一大块因特网地址,然后ISP再把这些地址分配给用户。CIDR允许某个ISP根据每个用户的需求给用户分配一个或多个地址。
与子网编址类似,CIDR使用一个32比特的地址掩码(address mask)来指明前缀和后缀的边界。
13. 地址块和CIDR记法
CIDR记法用斜线记法来表示掩码位数。
比如:128.211.168.0/21 其中/21表示掩码中有21个比特置“1”。
/8,/16,/24前缀对应于传统的A类,B类,C类划分。
一个ISP拥有一个N比特的CIDR块(意思是掩码为N位),那么它可以给客户分配大于N比特的任意地址块(意思是分配掩码大于N位的地址)。
14. 无分类编址路由所用的数据结构和算法
1)最长前缀匹配(longest prefix match,简称LPM):无分类编址时,ISP给他的用户分配的地址块,它的掩码总是比ISP自己拥有的地址块长。因此,路由查找的目标是最长前缀匹配,也就是说,给出了一个目的地址D,在路由表中查找出某个表项,该表项必须含有与D的比特匹配的最长比特前缀。
2)无分类查找使用一种分层的数据结构,使用最广泛的数据结果是一种二叉树的变形。
阅读(1965) | 评论(0) | 转发(0) |