无类别域间路由

**無類別域間路由**（英語：Classless Inter-Domain Routing，簡稱 **CIDR**/ˈsaɪdər, ˈsɪ-/）是一個用於給使用者分配 IP 位址以及在網際網路上有效地路由 IP 封包的對 IP 位址進行歸類的方法。

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

一個 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 位址塊**。當用二進位表示這些位址時，它們有著在開頭部分的一系列相同的位。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 位址塊。例如，包含有一千六百多萬個位址的 _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，依此類推。這有效地減少了要對外顯示的網路數，防止了路由表爆炸，也遏制了網際網路進一步擴大。

通常來說，子網路中的第一個位址（主機識別碼中的所有二進位零的位址）都保留用於參照網路本身，而最後一個位址用作廣播位址用於網路；這樣可以將可用於主機的位址數量減少 2 個。結果，主機識別碼中只有一個二進位數字的 _/31_ 網路將無法使用，因為這樣的子網路在減少之後將不提供可用的主機位址。RFC 3021 為「全為一的主機」和「全為零的主機」規則建立了一個例外，以使 _/31_ 網路可用於對等連結。_/31_ 位址（單主機網路）必須通過明確的路由規則存取，因為在這種網路中沒有閘道器的空間。

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

## IPv6 的 CIDR 塊

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

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

不同類型的網路線路可能需要不同的子網路大小。子網路遮罩將網路識別碼字首的位數與介面識別碼的位數分開。如果選擇較小的字首，所覆蓋的網路數量就會減少，但每個網路中的位址會變的更多。

```
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   最小的端口分配：例如家庭网络(/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额外分配给区域因特网登记册表
|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

## 參考文獻