APNIC文摘— 你可能已經忘了的基本路由概念:第一集〈前綴〉

本APNIC文摘原標題為Routing concepts you may have forgotten, part 1: Prefixes,由George Michaelson撰文。

現在的網路營運人員工作需要的資訊遠比過去還多,有些基本概念有時可能因此變得含糊。有鑑於此,本文作者George Michaelson,也是APNIC資深研發科學家,決定透過一系列文章,與讀者一同重溫幾個路由的核心觀念。

在網際網路協定(Internet Protocol,IP)中,網路「前綴」(prefix)可以幫助有效使用IPv4和IPv6的網際網路位址空間。前綴也是了解網路位址配置、路由系統運作的重要基本概念。

前綴負責解決的路由問題,一言以蔽之,是如何最快速、最有效地在網際網路中傳送封包。答案是「清單」:設法在清單中最快找到目的地,就是路由的功用。

理論上,只要提供主機(這個主機可能是任何裝置,如你的智慧型手機)一個IP位址,然後給它一份列出網路中所有其他主機及相應號碼的清單,主機就可以從清單中找到IP位址。

但這種方法,就像為同一個街區的所有不同房子都指定不同的路名,而不是在為同一條路上的房子編號。如果是後者,只要先找到那條路,再找號碼就能輕易找到目標房子了。

但在網際網路中,這條路上可能不只有幾十棟房子,而是數百萬、甚至數十億幢房子。如果這些房子沒有依某種邏輯順序排列,那到達目的地是不可能的任務。更別說列出這些房子號碼的「清單」會有多長了!

如果有一份清單,不僅列出路名,還分區列出每條路上的房子號碼,就可省下不少功夫。這種分區列法,就很像路由使用的前綴。

網際網路發展初期,即使清單過於龐大且沒有排序,由於整體規模不大,也還是可以勉強找到目的地。但如今的網際網路規模已非過去可同日而語,如果這份紀錄所有主機號碼的清單沒有依前綴分類整理出子清單,所有路由的記憶體都會因此爆炸。

區域網際網路註冊管理機構(Regional Internet Registry,RIR)的重要工作,就是依順序以區塊(block)發派位址空間。這些區塊就是所謂的前綴,他們必須遵守一個簡單的規則:前綴下的所有位址都必須有部份長得一樣。

如前所述,前綴只是一種以順序排列IP位址的方式。但這個「順序」不是任何隨便的順序;72、84、101、103也是一種「數字以小而大」的順序,但以分類查找來說並不實用。

網際網路使用二進位制,意思是所有數字的本體,其實都是1和0位元的組合。如果以二進位制顯示上述數字序列的話,會變成這樣:

數字 二進位制
72 1001000
84 1010100
101 1100101
103 1100111

 

從二進位制來看,這些數字彼此之間重複的部份太少,缺乏可以有效排序的模式。如果追求更有效的排序,在數字選擇上就要更嚴格,像這樣:

數字 二進位制 重複部份
72 1001000 10010XX
73 1001001 10010XX
74 1001010 10010XX
75 1001011 10010XX

 

這些數字的開頭都是10010,只有最後兩個位元不同。這樣就是前綴了!這是「長度五」的前綴,因為這些數字總共有5個相同的位元。在這個前綴下有4組數字,而且只會代表這4組數字,不會包括接下來的數字如76、77、78、79(1001100、1000101、1001110、1001111)。當然,如果需要,還是可以把72-75這組數字和76-79分進一組;兩組數字都以1001開頭,這就變成長度四的前綴。

可以把同一區塊中的所有位址當成一個物件,就是前綴的魔法所在。但使用時必須注意前綴所代表的區塊大小:前綴越小,涵蓋的「道路」就越多,越大則相反。換句話說,前綴的長度越長,包含的位址就越少,要找到目的地也就更容易。

一般而言,目前所有RIR的位址發放政策中,發放位址的最小前綴單位是/24。一個IPv4位址有32位元,/24的意思就是這個位址區塊中,所有數字的前24個位元都相同,只有最後8個位元有變化;這代表一個/24的前綴下,總共會有256筆位址。IPv6的長度比IPv4更長,因此慣用的最小前綴也長一點,是/32;前綴下所有位址的128個位元中,只有前32個位元相同。換句話說,同樣的/32前綴下,IPv6涵蓋的位址數量遠多於IPv4。

有了前綴,在位址清單中找到目的地就簡單多了。尋找方式就是簡單的比對過程:清單中有符合我手中前綴位元和長度的前綴嗎?若有,再往符合的前綴清單下找;若無,就要往別的地方找。

這個用來查找的清單,是利用一種叫做「基數樹」(radix tree)的方式整理羅列。BSD版本UNIX作業系統、Linux核心,以及大部份通用硬體上的邊界閘道協定(Border Gateway Protocol,BGP),都是利用基數樹儲存路由資料。速度更快的路由會使用三元內容定址記憶體(Ternary Content-Addressable Memory,T/CAM)。這種特殊的記憶體晶片把前綴作為位址記錄,因此可以更快速的抓取內容。但T/CAM要價不斐,等於是用金錢換取高效能。

無論是基本的基數樹或昂貴的T/CAM,只要有了前綴,都能大幅降低尋找位址的成本。

前面有稍微提到,一筆IPv6位址的位元(128)比IPv4(32)多很多,IPv6因此也長得和IPv4不太一樣。192.168.0.0是一個IPv4位址,用英文句點分隔4組數字。IPv6位址則會長這樣「2401:2000:6660::1」,用冒號分隔以十六進制轉譯的4組數字;末端的兩個冒號「::」不是打錯,是用來代表一連串的0。

IPv6主機通常會用前64個位元標記本機指派的主機位址。這表示,網際網路上路由宣告的IPv6位址,其實通常不是單指一筆IPv6位址,而是/64前綴下的一小組IPv6位址。有了IPv6,我們有更多位址可用,但前綴的運用邏輯仍跟以前一樣。未來的路由應該也仍會維持這個簡單有效的運用邏輯。

說到底,前綴就是個簡單好用的算術小花招。

*台灣網路資訊中心(TWNIC)與亞太網路資訊中心(APNIC)合作,定期精選APNIC Blog文章翻譯摘要,提供中心部落格讀者了解目前亞太地區網路發展之最新趨勢。原文標題為Routing concepts you may have forgotten, part 1: Prefixes

圖片來源:APNIC Blog

Scroll to Top