無類別域間路由
無類別域間路由(英語:Classless Inter-Domain Routing,簡稱CIDR/ˈsaɪdə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主要是一個按位的、基於前綴的,用於解釋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地址塊。
例如,在90年代末,IP地址208.130.29.33是被www.freesoft.org (頁面存檔備份,存於網際網路檔案館)使用的。後來,分配發生了變化。208.128.0.0/11,這個包含兩百萬地址的塊被ARIN(北美的RIR)分配給了MCI通信。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,依此類推。這有效地減少了要對外顯示的網絡數,防止了路由表爆炸,也遏制了互聯網進一步擴大。
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中使用的地址大小允許在每個站點實現全球路由摘要並能保證足夠的地址池。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-2,EIGRP,IS-IS和OSPF等,而相對的,原來的系統被叫做分類路由。
可變長子網掩碼(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
參考文獻
- ^ Y. Rekhter; T. Li. An Architecture for IP Address Allocation with CIDR. September 1993. RFC 1518.
- ^ V. Fuller; T. Li; J. Yu; K. Varadhan. Classless Inter-Domain Routing (CIDR): an Address Assignment and Aggregation Strategy. September 1993. RFC 1519.
- ^ 3.0 3.1 J. Mogul. Broadcasting Internet Datagrams in the Presence of Subnets. October 1984: sec. 7. RFC 922.
- ^ 4.0 4.1 F. Baker. Requirements for IP Version 4 Routers. June 1995: sec. 4.2.3.1. RFC 1812.
- ^ RFC 4862
- ^ IAB/IESG Recommendation on IPv6 Address Allocations to Sites. IAB/IESG. September 2001. RFC 3177.
- ^ 7.0 7.1 T. Narten; G. Huston; L. Roberts. IPv6 Address Assignment to End Sites. March 2011. RFC 6177.
- ^ ARIN IPv6 Addressing Plans. Getipv6.info. 2016-03-25 [2018-03-12]. (原始內容存檔於2013-01-12).
- ^ RIPE IP Allocation Rates. (原始內容存檔於2011-02-03).
- ^ IANA IPv6 unicast address assignments. Iana.org. [2018-03-12]. (原始內容存檔於2011-05-24).