無類別域間路由

無類別域間路由（Classless Inter-Domain Routing，簡稱CIDRˈ）是一個用於給使用者分配IP位址以及在網際網路上有效地路由IP數據包的對IP位址進行歸類的方法。

在域名系統出現之後的第一個十年裡，基於分類網絡進行地址分配和路由IP數據包的設計就已明顯顯得可擴充性不足（參見RFC 1517）。為了解決這個問題，網際網路工程工作小組在1993年發布了一新系列的標準——RFC 1518和RFC 1519——以定義新的分配IP位址塊和路由IPv4數據包的方法。

無類別域間路由是基於可變長子網掩碼（VLSM）來進行任意長度的前綴的分配的。在RFC 950（1985）中有關於可變長子網掩碼的說明。CIDR包括：

- 指定任意長度的前綴的可變長子網掩碼技術。遵從CIDR規則的地址有一個後綴說明前綴的位數，例如：192.168.0.0/16。這使得對日益缺乏的IPv4地址的使用更加有效。
- 將多個連續的前綴聚合成超網；在網際網路中，只要有可能，就顯示為一個聚合的網路，因此在總體上可以減少路由表的表項數目。聚合使得網際網路的路由表不用分為多級，並通過VLSM逆轉「劃分子網」的過程。
- 根據機構的實際需要和短期預期需要而不是分類網絡中所限定的過大或過小的地址塊來管理IP位址的分配的過程。

## 歷史背景

IP位址最初被描述為包含兩部分：網路地址和主機地址。這種區分用於IP網路之間的流量路由。

在歷史上，IP位址空間被分為三個分類網絡，這些類別有著固定長度的網路地址。一個網路的類別以及網路地址，還有該網路上的主機數目都可以從地址的最高位得出。由於分類路由協議不指定子網的掩碼或前綴長度，路由器必須使用路由通告中的地址類別去得出子網掩碼以建立路由表。

在分類網絡中，IP位址的分配把IP位址的32位按每8位為一段分開。這使得前綴必須為8，16或者24位。因此，可分配的最小的地址塊有256（24位前綴，8位主機地址，28=256）個地址，而這對大多數企業來說太少了。大一點的地址塊包含65536（16位前綴，16位主機，216=65536）個地址，而這對大公司來說都太多了。這導致不能充分使用IP位址和在路由上的不便，因為大量的需要單獨路由的小型網路（C類網路）因在地域上分得很開而很難進行聚合路由，於是給路由設備增加了很多負擔。

隨著原為實驗性的TCP/IP網路在80年代轉變為網際網路，對更靈活的尋址方法的需求日益迫切。這就導致了子網和CIDR的相繼發展。因為原來的類別已被忽略，所以現在的系統被叫做無類別路由。它為當今的路由協議所支持，例如RIP-2，EIGRP，IS-IS和OSPF等，而相對的，原來的系統被叫做分類路由。

1993年，網際網路工程任務組發布了一套新的標準和，以定義分配IP位址區塊和路由IPv4資料包的新原則。更新版本於2006年發佈。

## CIDR塊

<image>

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位匹配，後$32-N$位不匹配。這些位有$2^{(32-N)}$種不同的組合，即$2^{(32-N)}$個IPv4地址與CIDR地址塊的前綴匹配。前綴越短就能匹配越多的地址，越長就匹配得越少。一個地址可能與多個長度不同的CIDR前綴匹配。CIDR也用在IPv6中。因為位數的非常多，所以在IPv6中，前綴長度的範圍是從0到128。這裡也用同樣的方法來表示一個地址：前綴寫作一個IPv6的地址，後跟一個斜線，最後是前綴的位數。

## CIDR塊的分配

網際網路地址指派機構（IANA）向區域網際網路註冊管理機構（RIRs）分配數量多，前綴短的CIDR地址塊。例如，包含有一千六百多萬個地址的地址塊由RIPE NCC（歐洲的RIR）管理。這些RIR各自負責管理一個單一區域（例如歐洲或者北美），然後它們把這些地址塊分成小一些的地址塊再分配給公眾。這個細分的操作可能會由不同層次的團體進行多次。大型網路服務供應商（ISP）一般會從RIR申請CIDR地址塊，然後再向根據它們客戶的網路大小而分配更小的地址塊。網際網路工程工作小組鼓勵由單一ISP服務的網路直接向ISP申請地址。而由多個ISP提供服務的，則經常會向適當的RIR申請獨立的CIDR地址塊。

<image>

例如，在90年代末，IP位址是被 www.freesoft.org 使用的。後來，分配發生了變化。這個包含兩百萬地址的塊被ARIN（北美的RIR）分配給了MCI通信。MCI又將分配給了從MCI租用網際網路連接的Automation Research Systems。ARS則用了這個地址塊，其中就包含這個地址。這些CIDR前綴會在不同的地方使用。在MCI的網路之外，這個前綴會用於路由MCI的數據流。這些數據流不僅會去到，也會去到其他那些前11位相同的近兩百萬的地址裡。在MCI的網路裡，則會被用於路由到屬於ARS租用的連接。最後，只有在ARS自己的網路內這個前綴才會被使用。

## 子網掩碼

可變長子網掩碼（VLSM）和CIDR並非相同的概念。1985年8月，RFC 950首次提及VLSM，當時仍然採用分類網絡。最早期的網路是「兩層架構」，頂層是網際網路整體，底層是個別網路。VLSM容許企業自行建立子網，擴展為「三層架構」。

子網掩碼把前綴編成一種與IP位址相似的形式的掩碼。網路遮罩在950中曾允許指定非連續的位元，直到規定遮罩必須從左側開始連續排列。在CIDR標記法中，前綴位元（prefix bits）總是連續的。有鑑於此限制，子網路遮罩和CIDR標記法的功能現在完全相同。

雖然CIDR和VLSM的表達方式相同，但目的和功能相反。CIDR把多個小網路合併成一個大網路（超網），VLSM則把一個大網路分割成多個小網路（子網）。

## 前綴聚合

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個。在/30子網可提供的4個地址中，可用的主機地址只有2個。主機標識符只有1位元長度的網路變成沒有可用的主機地址。

創建了一個例外，將網路僅有的2個地址直接分配到2台主機，以供點對點連結使用。地址（單主機網路）必須通過明確的路由規則訪問，因為在這種網路中沒有網關的空間。

在大於或的子網中，可用的主機地址數目通常減少2個，即保留作為廣播地址的最大地址和標識網路本身的最小地址。

## IPv6的CIDR塊

<image>

IPv6中使用的地址大小允許在每個站點實現全球路由摘要並能保證足夠的地址池。IPv6網路的標準子網大小是一個塊，這是運行靜態地址的自動配置所必需的。

最初，IETF在中提出建議，所有終端站點都應得到一個地址分配。但對實際需要和做法的批評和重新評價導致在中提出了更靈活的分配建議，即建議一些站點的分配要小得多，例如用於家庭網絡的塊。

不同類型的網路線路可能需要不同的子網大小。子網掩碼將網路標識符前綴的位數與接口標識符的位數分開。如果選擇較小的前綴，所覆蓋的網路數量就會減少，但每個網路中的地址會變的更多。

```
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   非常有限的[[6rd]]部署(/60 = 16 /64块)
|||| |||| |||| |56   最小的端口分配<ref name="RFC 6177"/>：例如家庭网络(/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额外分配给区域因特网登记册表<ref></ref>
|8
4
```

## 外部連結

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