无类别域间路由

对IP地址进行归类的方法

无类别域间路由(英语:Classless Inter-Domain Routing,简称CIDR/ˈsdər, ˈsɪ-/)是一个用于给用户分配IP地址以及在互联网上有效地路由IP数据包的对IP地址进行归类的方法。

域名系统出现之后的第一个十年里,基于分类网络进行地址分配和路由IP数据包的设计就已明显显得可扩充性不足(参见RFC 1517)。为了解决这个问题,互联网工程工作小组在1993年发布了一新系列的标准——RFC 1518和RFC 1519——以定义新的分配IP地址块和路由IPv4数据包的方法。[1][2]

一个IP地址包含两部分:标识网络的前缀和紧接着的在这个网络内的主机地址。在之前的分类网络中,IP地址的分配把IP地址的32位按每8位为一段分开。这使得前缀必须为8,16或者24位。因此,可分配的最小的地址块有256(24位前缀,8位主机地址,28=256)个地址,而这对大多数企业来说太少了。大一点的地址块包含65536(16位前缀,16位主机,216=65536)个地址,而这对大公司来说都太多了。这导致不能充分使用IP地址和在路由上的不便,因为大量的需要单独路由的小型网络(C类网络)因在地域上分得很开而很难进行聚合路由,于是给路由设备增加了很多负担。

无类别域间路由是基于可变长子网掩码(VLSM)来进行任意长度的前缀的分配的。在RFC 950(1985)中有关于可变长子网掩码的说明。CIDR包括:

  • 指定任意长度的前缀的可变长子网掩码技术。遵从CIDR规则的地址有一个后缀说明前缀的位数,例如:192.168.0.0/16。这使得对日益缺乏的IPv4地址的使用更加有效。
  • 将多个连续的前缀聚合成超网,以及,在互联网中,只要有可能,就显示为一个聚合的网络,因此在总体上可以减少路由表的表项数目。聚合使得互联网的路由表不用分为多级,并通过VLSM逆转“划分子网”的过程。
  • 根据机构的实际需要和短期预期需要而不是分类网络中所限定的过大或过小的地址块来管理IP地址的分配的过程。

因为在IPv6中也使用了IPv4的用后缀指示前缀长度的CIDR,所以IPv4中的分类在IPv6中已不再使用。

CIDR块

 
如果我们指定一个CIDR块为10.10.1.32/27,则根据CIDR比特位比较,10.10.1.44是属于该块,但10.10.1.90则不是。

CIDR主要是一个按位的、基于前缀的,用于解释IP地址的标准。它通过把多个地址块组合到一个路由表表项而使得路由更加方便。这些地址块叫做CIDR地址块CIDR块CIDR区块IP段。当用二进制表示这些地址时,它们有着在开头部分的一系列相同的位。IPv4的CIDR地址块的表示方法和IPv4地址的表示方法是相似的:由四部分组成的点分十进制地址,后跟一个斜线,最后是范围在0到32之间的一个数字:A.B.C.D/N。点分十进制的部分和IPv4地址一样是一个被分成四个八位位组的32位二进制数。斜线后面的数字就是前缀长度,也就是从左到右,被地址块里的地址所共享的位的数目。当只需说明大概时,十进制部分有时会被省略,因此,/20就表示一个前缀长度是20的CIDR地址块。如果一个IP地址的前N位与一个CIDR地址块的前缀是相同的话,那么就说这个地址属于这个CIDR地址块,也可以说是与CIDR地址块的前缀匹配。所以,要理解CIDR,就要把地址写成二进制的形式。因为IPv4地址的长度总是32位,N位长的CIDR前缀就意味着地址里前N位匹配,后 位不匹配。这些位有 种不同的组合,即 个IPv4地址与CIDR地址块的前缀匹配。前缀越短就能匹配越多的地址,越长就匹配得越少。一个地址可能与多个长度不同的CIDR前缀匹配。CIDR也用在IPv6中。因为位数的非常多,所以在IPv6中,前缀长度的范围是从0到128。这里也用同样的方法来表示一个地址:前缀写作一个IPv6的地址,后跟一个斜线,最后是前缀的位数。

CIDR块的分配

互联网地址指派机构(IANA)向区域互联网注册管理机构(RIRs)分配数量多,前缀短的CIDR地址块。例如,包含有一千六百多万个地址的62.0.0.0/8地址块由RIPE NCC(欧洲的RIR)管理。这些RIR各自负责管理一个单一区域(例如欧洲或者北美),然后它们把这些地址块分成小一些的地址块再分配给公众。这个细分的操作可能会由不同层次的团体进行多次。大型网络服务供应商ISP)一般会从RIR申请CIDR地址块,然后再向根据它们客户的网络大小而分配更小的地址块。互联网工程工作小组鼓励由单一ISP服务的网络直接向ISP申请地址。而由多个ISP提供服务的,则经常会向适当的RIR申请独立的CIDR地址块。

 
借助超网聚合和前缀子网划分机制,我们可以通过MCI通信英语MCI Communications的子网块,找到Automation Research Systems的子网块,进而找到Automation Research Systems的公共主机子网块,进而找到freesoft.org的web网页主机,同样地,互联网路由系统也是根据这个子网归属来将IP包路由到主机处。

例如,在90年代末,IP地址208.130.29.33是被www.freesoft.org页面存档备份,存于互联网档案馆)使用的。后来,分配发生了变化。208.128.0.0/11,这个包含两百万地址的块被ARIN(北美的RIR)分配给了MCI通信英语MCI Communications。MCI又将208.130.28.0/22分配给了从MCI租用互联网连接的Automation Research Systems。ARS则用了208.130.29.0/24这个地址块,其中就包含208.130.29.33这个地址。这些CIDR前缀会在不同的地方使用。在MCI的网络之外,208.128.0.0/11这个前缀会用于路由MCI的数据流。这些数据流不仅会去到208.130.29.33,也会去到其他那些前11位相同的近两百万的地址里。在MCI的网络里,208.130.28.0/22则会被用于路由到属于ARS租用的连接。最后,只有在ARS自己的网络内208.130.29.0/24这个前缀才会被使用。

CIDR和掩码

子网掩码是一种把前缀编成一种与IP地址相似的形式的掩码。一个子网掩码一共有32位,被分为连续的两部分,高位部分的每一位都被设为二进制的1,其余部分的每一位均被设为二进制的0。其中为1的位的数目和前缀的长度相同。它也被写成点分十进制的形式。子网掩码的作用和前缀一样,但是掩码这种形式出现得比前缀要早。

CIDR用可变长子网掩码VLSM,Variable Length Subnet Masking),根据各人需要来分配IP地址,而不是按照一个全网络约定的规则。所以,网络/主机的划分可以在地址内的任意位置进行。这个划分可以是递归进行的,即通过增加掩码位数,来使一部分地址被继续分为更小的部分。整个互联网现在都在使用CIDR/VLSM网络地址。除此之外,CIDR也应用在其他方面,尤其是大型私人网络。在普通大小的局域网里则较少应用,因为这些局域网一般使用私有网络[来源请求]

前缀聚合

CIDR的另一个好处就是可以进行前缀路由聚合。例如,16个原来的C类(/24)网络现在可以聚合在一起,对外显示了一个/20的网络了(如果这些网络的的地址前20位都相同)。两个对齐的/20网络又可进一步聚合为/19,依此类推。这有效地减少了要对外显示的网络数,防止了路由表爆炸,也遏制了互联网进一步扩大。

CIDR
IP/CIDR Δ 与最后一个地址的差值 掩码 主机数 (*) 类别 备注
a.b.c.d/32 +0.0.0.0 255.255.255.255 1 1/256 C
a.b.c.d/31 +0.0.0.1 255.255.255.254 2 1/128 C d = 0 ... (2n) ... 254
a.b.c.d/30 +0.0.0.3 255.255.255.252 4 1/64 C d = 0 ... (4n) ... 252
a.b.c.d/29 +0.0.0.7 255.255.255.248 8 1/32 C d = 0 ... (8n) ... 248
a.b.c.d/28 +0.0.0.15 255.255.255.240 16 1/16 C d = 0 ... (16n) ... 240
a.b.c.d/27 +0.0.0.31 255.255.255.224 32 1/8 C d = 0 ... (32n) ... 224
a.b.c.d/26 +0.0.0.63 255.255.255.192 64 1/4 C d = 0, 64, 128, 192
a.b.c.d/25 +0.0.0.127 255.255.255.128 128 1/2 C d = 0, 128
a.b.c.0/24 +0.0.0.255 255.255.255.000 256 1 C
a.b.c.0/23 +0.0.1.255 255.255.254.000 512 2 C c = 0 ... (2n) ... 254
a.b.c.0/22 +0.0.3.255 255.255.252.000 1,024 4 C c = 0 ... (4n) ... 252
a.b.c.0/21 +0.0.7.255 255.255.248.000 2,048 8 C c = 0 ... (8n) ... 248
a.b.c.0/20 +0.0.15.255 255.255.240.000 4,096 16 C c = 0 ... (16n) ... 240
a.b.c.0/19 +0.0.31.255 255.255.224.000 8,192 32 C c = 0 ... (32n) ... 224
a.b.c.0/18 +0.0.63.255 255.255.192.000 16,384 64 C c = 0, 64, 128, 192
a.b.c.0/17 +0.0.127.255 255.255.128.000 32,768 128 C c = 0, 128
a.b.0.0/16 +0.0.255.255 255.255.000.000 65,536 256 C = 1 B
a.b.0.0/15 +0.1.255.255 255.254.000.000 131,072 2 B b = 0 ... (2n) ... 254
a.b.0.0/14 +0.3.255.255 255.252.000.000 262,144 4 B b = 0 ... (4n) ... 252
a.b.0.0/13 +0.7.255.255 255.248.000.000 524,288 8 B b = 0 ... (8n) ... 248
a.b.0.0/12 +0.15.255.255 255.240.000.000 1,048,576 16 B b = 0 ... (16n) ... 240
a.b.0.0/11 +0.31.255.255 255.224.000.000 2,097,152 32 B b = 0 ... (32n) ... 224
a.b.0.0/10 +0.63.255.255 255.192.000.000 4,194,304 64 B b = 0, 64, 128, 192
a.b.0.0/9 +0.127.255.255 255.128.000.000 8,388,608 128 B b = 0, 128
a.0.0.0/8 +0.255.255.255 255.000.000.000 16,777,216 256 B = 1 A
a.0.0.0/7 +1.255.255.255 254.000.000.000 33,554,432 2 A a = 0 ... (2n) ... 254
a.0.0.0/6 +3.255.255.255 252.000.000.000 67,108,864 4 A a = 0 ... (4n) ... 252
a.0.0.0/5 +7.255.255.255 248.000.000.000 134,217,728 8 A a = 0 ... (8n) ... 248
a.0.0.0/4 +15.255.255.255 240.000.000.000 268,435,456 16 A a = 0 ... (16n) ... 240
a.0.0.0/3 +31.255.255.255 224.000.000.000 536,870,912 32 A a = 0 ... (32n) ... 224
a.0.0.0/2 +63.255.255.255 192.000.000.000 1,073,741,824 64 A a = 0, 64, 128, 192
a.0.0.0/1 +127.255.255.255 128.000.000.000 2,147,483,648 128 A a = 0, 128
0.0.0.0/0 +255.255.255.255 000.000.000.000 4,294,967,296 256 A

通常来说,子网中的第一个地址(主机标识符中的所有二进制零的地址)都保留用于引用网络本身,而最后一个地址用作广播地址用于网络;这样可以将可用于主机的地址数量减少2个。结果,主机标识符中只有一个二进制数字的/31网络将无法使用,因为这样的子网在减少之后将不提供可用的主机地址。[3][4]RFC 3021为“全为一的主机”和“全为零的主机”规则创建了一个例外,以使/31网络可用于点对点链接。/31地址(单主机网络)必须通过明确的路由规则访问,因为在这种网络中没有网关的空间。

在大于/31/32的路由子网中,可用主机地址的数目通常减少两个,即保留作为广播地址的最大地址和标识网络本身的最小地址。[3][4]

IPv6的CIDR块

 
IPv6的CIDR前缀表,显示了每个前缀对应的等效子网数以及主机标识符位数。

IPv6中使用的地址大小允许在每个站点实现全球路由摘要并能保证足够的地址池。IPv6网络的标准子网大小是一个/64块,这是运行静态地址的自动配置所必需的。[5]

最初,IETF在RFC 3177中提出建议,所有终端站点都应得到一个/48地址分配。[6]但对实际需要和做法的批评和重新评价导致在RFC 6177[7]中提出了更灵活的分配建议,即建议一些站点的分配要小得多,例如用于家庭网络的/56块。

不同类型的网络线路可能需要不同的子网大小。[8]子网掩码将网络标识符前缀的位数与接口标识符的位数分开。如果选择较小的前缀,所覆盖的网络数量就会减少,但每个网络中的地址会变的更多。[9]

2001:0db8:0123:4567:89ab:cdef:1234:5678
|||| |||| |||| |||| |||| |||| |||| ||||
|||| |||| |||| |||| |||| |||| |||| |||128     单端口和回环
|||| |||| |||| |||| |||| |||| |||| |||127   路由器间点对点链接
|||| |||| |||| |||| |||| |||| |||| ||124
|||| |||| |||| |||| |||| |||| |||| |120
|||| |||| |||| |||| |||| |||| |||| 116
|||| |||| |||| |||| |||| |||| |||112
|||| |||| |||| |||| |||| |||| ||108
|||| |||| |||| |||| |||| |||| |104
|||| |||| |||| |||| |||| |||| 100
|||| |||| |||| |||| |||| |||96
|||| |||| |||| |||| |||| ||92
|||| |||| |||| |||| |||| |88
|||| |||| |||| |||| |||| 84
|||| |||| |||| |||| |||80
|||| |||| |||| |||| ||76
|||| |||| |||| |||| |72
|||| |||| |||| |||| 68
|||| |||| |||| |||64   单个LAN;SLAAC的默认前缀大小
|||| |||| |||| ||60   非常有限的第6次部署(/60 = 16 /64块)
|||| |||| |||| |56   最小的端口分配[7]:例如家庭网络(/56 = 256 /64块)
|||| |||| |||| 52   /52 = 4096 /64块
|||| |||| |||48   大型地址分配池的典型分配(/48 =65536 /64块)
|||| |||| ||44
|||| |||| |40
|||| |||| 36   未来可能的本地互联网注册的 (LIR) 超小分配
|||| |||32    LIR最小分配
|||| ||28   LTR典型分配
|||| |24   LTR大型分配
|||| 20   LTR额外分配
|||16
||12   IANA额外分配给区域因特网登记册表[10]
|8
4

历史背景

IP地址最初被描述为包含两部分:网络地址和主机地址。这种区分在IP网络里的路由中使用。

在历史上,IP地址空间被分为三个分类网络,这些类别有着固定长度的网络地址。网络的类别,以及网络地址,还有该网络上的主机数目都可以从地址的最高位得出。因为分类路由协议不指定子网掩码或前缀长度,路由器必须使用路由通告中的地址类别去得出子网掩码以建立路由表。

随着原为实验性的TCP/IP网络在80年代转变为互联网,对更灵活的寻址方法的需求日益迫切。这就导致了子网和CIDR的相继发展。因为原来的类别已被忽略,所以现在的系统被叫做无类别路由。它为当今的路由协议所支持,例如,RIP-2EIGRPIS-ISOSPF等,而相对的,原来的系统被叫做分类路由

可变长子网掩码(VLSM)和CIDR是相同的概念,不过一般只在历史上使用。它在RFC 950中首次被提及。

外部链接

  • RFC 1518 - An Architecture for IP Address Allocation with CIDR
  • RFC 4632 - Classless Inter-domain Routing (CIDR): The Internet Address Assignment and

参考文献

  1. ^ Y. Rekhter; T. Li. An Architecture for IP Address Allocation with CIDR. September 1993. RFC 1518. 
  2. ^ V. Fuller; T. Li; J. Yu; K. Varadhan. Classless Inter-Domain Routing (CIDR): an Address Assignment and Aggregation Strategy. September 1993. RFC 1519. 
  3. ^ 3.0 3.1 J. Mogul. Broadcasting Internet Datagrams in the Presence of Subnets. October 1984: sec. 7. RFC 922. 
  4. ^ 4.0 4.1 F. Baker. Requirements for IP Version 4 Routers. June 1995: sec. 4.2.3.1. RFC 1812. 
  5. ^ RFC 4862
  6. ^ IAB/IESG Recommendation on IPv6 Address Allocations to Sites. IAB/IESG. September 2001. RFC 3177. 
  7. ^ 7.0 7.1 T. Narten; G. Huston; L. Roberts. IPv6 Address Assignment to End Sites. March 2011. RFC 6177. 
  8. ^ ARIN IPv6 Addressing Plans. Getipv6.info. 2016-03-25 [2018-03-12]. (原始内容存档于2013-01-12). 
  9. ^ RIPE IP Allocation Rates. (原始内容存档于2011-02-03). 
  10. ^ IANA IPv6 unicast address assignments. Iana.org. [2018-03-12]. (原始内容存档于2011-05-24).