陳世偉, 高 明
(浙江工商大學 a.組織部;b.信息與電子工程學院,杭州 310018)
盡管IPv4是當前網絡的基本形態,但是IPv6被認為是下一代互聯網的基礎備受關注[1]。路由轉發是IPv6網絡中路由器最為重要的功能,解決IPv6數據包如何從原主機到達目的主機的問題[2]。當前針對IPv6的實踐教學分為兩個層次,絕大多數學校采用組網工程的方式進行教學,基于現有的IPv6路由器產品組建一個規模不大的IPv6數據傳輸網絡,重點考察學生的設備操作和調試能力,基本不用編程,所以難度不大,不足的地方是實驗的“兩性”無法體現[3-4];對于一些學生能力強的學校則會采用基于二次代碼開發的方式進行教學,讓學生在已有的網絡函數庫基礎之上自行編寫代碼實現IPv6數據包的路由查表過程[5-7],這種方式一般不太強調IPv6組網的概念,更多關注的是單個路由器內IPv6數據包處理,重點考察學生的基礎理論知識和編程能力,難度大,并不適合全面推廣。
為了改變傳統IPv4網絡的“僵化”問題,近年來許多研究者嘗試對網絡進行體系結構方面的重新設計,雨后春筍般地出現一批新穎性的網絡設計,如主動網絡、開放可編程網絡、柔性可重構網絡、軟件定義網絡等[8-9,15]。作為一名網絡工程專業的學生了解網絡領域的這些新動態無疑是十分必要的[10]。
在全面考察各種網絡新設計之后,發現了一些很有趣的研究成果可用于平時的網絡教學,其中轉發與控制分離(Forwarding and Control Element Separation,ForCES)就是一個典型。ForCES是互聯網權威機構——互聯網工程任務組下面一個專門從事開放可編程IP路由器研究的工作組,創新性地提出網絡設備中的控制件(Control Element,CE)和轉發件(Forwarding Element,FE)應在物理上分離,彼此之間的通信協議應標準化、公開化[11],使得任意廠商的CE和FE可以無縫對接,降低網絡設備的研發門檻和成本。傳統上作為網絡設備“大腦”的CE對“軀干”FE的控制屬于不能說的“機密”,對外不開放。此外,ForCES還創造性地將FE解構成一系列邏輯功能塊(Logical Function Block,LFB)組合,每一個LFB都是對網絡設備內部對數據包加工處理的一個動作,且每個LFB的行為都受到CE的控制[12]。CE可以根據需要靈活配置LFB的組合方式,實現對數據包的不同處理流程,進而體現為不同功能的網絡設備,如IPv4路由轉發、IPv6路由轉發、防火墻、入侵檢測等。ForCES思想是有前瞻性的,特別是它提出的LFB動態拓撲的概念[12]和當下研究熱點微服務[13]和服務功能鏈[14]一脈相傳,對于學習網絡設備內部組成和原理意義具有十分重要的意義。
利用LFB動態拓撲構建不同功能的網絡設備的過程類似搭積木,每個LFB就像一個積木塊,搭建者需要了解每個LFB的功能、屬性以及輸入輸出約束。完成整個構建過程雖不需要大量的代碼編寫,卻要求操作者具有扎實的路由交換理論知識、熟悉網絡設備內部組成及原理,有趣不枯燥且具有良好的可操作性,用做網絡通信領域內“兩性”實驗的開發再適合不過。
FE模型由ForCES工作組提出,旨在描述FE內數據包從輸入到輸出的處理過程,將每個獨立的數據包處理功能建模為一個LFB,LFB根據事先約定的操作來處理數據包。一個完整的LFB拓撲可以實現諸如IPv4轉發的網絡服務,CE通過控制LFB修改FE的行為,如LFB的屬性。典型的FE模型如圖1所示。

圖1 FE模型
FE由若干個LFB組成,每個LFB包含的內容有輸入、輸出、屬性以及它的功能定義[5]。數據通道描述了數據包從輸入到輸出的中間過程,前一個LFB的輸出就是下一個LFB的輸入。LFB之間前后關系受到FE模型定義的約束,這種約束以LFB庫的形式被CE和FE共享,用戶在配置之前需要掌握這些信息。
每一種常見的網絡服務(例如IPv6路由轉發)都可被定義為一組LFB集合。實現圖2所示的基于ForCES的IPv6路由轉發服務,關鍵在于分析和設計與IPv6相關的LFB并構造具有合理拓撲的FE模型。

圖2 支持IPv6的FE轉發件模型
IPv6數據包轉發由以下3個階段組成[2]:
(1) 驗證階段。在此階段,首先IPv6包頭檢查確認數據包沒有任何標識錯誤,錯誤的包被發送到CE進行進一步處理或被FE直接刪除。
(2) 轉發階段。從提取目的IPv6地址、查詢轉發表,當查詢操作成功后獲得下一跳IPv6地址,輸出接口等;當查詢操作失敗后數據包被丟棄或發送到CE進行進一步處理。這個階段最重要的數據結構是轉發表,不同的實現可能在轉發表上有不同的組織,通常有兩種方案:統一表和分離表。本實驗采用分離表設計來表示IPv6單播轉發信息,如圖3所示。這兩個分開的數據實體被稱為前綴表和下一跳表。前綴表由包括前綴和下一跳表中的條目的下一跳索引組成。前綴表由包括下一跳索引和下一跳信息列表的條目組成[6]。

圖3 IPv6路由轉發表設計
(3)發送階段。數據包已經獲得正確的路由信息后,發送之前需要進行鏈路層的封裝,如添加以太網報頭。該階段維護了一個重要數據結構2層地址解析表,通過改變為路由后的數據包查找正確的2層地址。
根據上述3個轉發階段的討論,可以看出路由轉發表建模正是FE建模的關鍵。圖3中描述了每個表的條目以及路由轉發表和2等地址解析表之間的關系。這樣的分離表設計相較于統一表具有如下2個優勢:①當一組路由改變時,一些高性能網絡節點需要更新整個轉發信息表,工作量很大,而分離表則可以通過改變下一跳表項的子集來有效地更新轉發信息;②對于前綴相同的多條路由,可以共享同一個前綴表項,節省了路由表存儲空間。
一個滿足IPv6路由轉發的LFB連接關系如圖4,定義了以下LFB:包頭校驗、單播最長前綴匹配和下一跳應用 。圖3中的前綴表保存在單播最長前綴匹配LFB中,下一跳表保存在下一跳應用LFB中,2層地址解析表保存在以太單播封裝LFB中。
以太網接口(輸入)LFB:表示的是網絡接口,用戶接受外界輸入的數據包;
封裝/解封裝LFB:負責去除以太網的幀頭并進行簡單的數據包分類,主要用于分流IPv4和IPv6;
包頭校驗LFB:對IPv6數據包進行校驗,將正確的數據包輸入到單播最長前綴匹配LFB;
單播最長前綴匹配LFB:根據存儲的前綴表對IPv6數據包進行最長前綴匹配,進而確定下一跳索引;
下一跳應用LFB:根據前一個LFB所確定的下一跳索引,查詢下一跳表,獲得2層索引;
以太單播封裝LFB:以2層索引查找2層地址解析表,獲得下一跳地址等信息,完成IPv6數據包以太網幀封裝。
以太網接口(輸出)LFB:表示的是網絡接口,用于對外發送封裝后的以太網幀數據。

圖4 實現IPv6路由轉發的LFB連接關系
LFB是FE的基本構件,每一個LFB的實現包含了模型描述、輸入輸出及數據結構等內容,這里以下一跳應用LFB為例,詳細介紹LFB的設計思路。
如圖5所示,下一跳應用LFB對IPv6數據包執行下一跳操作,例如跳限增量和校驗和重計算。IPv6前綴表查找成功后,需要根據前綴表中的下一跳索引查找下一跳信息,因此從IPv6前綴表中檢索到的IPv6數據包和元數據成為LFB的輸入 。輸出有3種可能情況:①成功,滿足下一跳應用的數據包,它產生由下一跳應用LFB修改的新IPv6數據包和新的元數據,包括轉發件號,輸出端口號,2層索引,2層索引類型等;②異常,以下數據包被標識為異常:跳限為零、接口的最大傳輸單元小于報文大小、輸出端口與接收數據包的輸入出端口相同、數據包目的地址用于本地接口,這種情況下下一跳應用LFB將生成經過修改的IPv6數據包和新的元數據,包括輸入端口號和異常ID;③失敗,用于標識在下一跳操作中失敗的數據包,下一跳應用LFB刪除IPv6數據包并且不生成元數據。

圖5 下一跳應用LFB設計
實驗中CE基于Linux系統實現,硬件平臺為通用處理器,IPv6路由協議棧使用開源的路由軟件Zebra。FE硬件平臺是英特爾公司的網絡處理器,每個LFB基于微塊加工數據包。微塊是具有單個功能的物理組件,通常可以處理數據包,LFB是微塊的邏輯抽象和建模。通過圖形用戶界面可以動態地添加和刪除LFB,以及查詢和配置LFB的屬性和能力,如圖6所示。這種通過動態配置LFB拓撲定義IPv6轉發功能的過程就像在Linux內核中動態插入或刪除的模塊一樣,具有極大的靈活性。

圖6 實驗的圖形化操作接口
實驗中FE具有兩個100 MB端口,場景配置為跨兩個端口之間的IPv6轉發,使用SmartBits軟件來測量兩個100 MB端口的線速率下的零丟失吞吐量。測試生成7種大小的數據包,分別是:64,128,256,512,1 024,1 280和1 518 Byte,結果如圖7所示。
可以看出,吞吐量接近理論極限。在不犧牲任何性能的情況下,本實驗所設計實現的IPv6路由轉發平臺具有高度靈活性,可配置和可擴展。
一種基于模塊化的IPv6路由轉發實驗設計本質上就是利用ForCES LFB的模塊化和抽象化特征,用搭積木的方式構建一個支持IPv6報文轉發功能的LFB連接關系,當然使用這種方式可以構建的網絡功能遠不止IPv6報文轉發,其他還有防火墻、入侵檢測等。實驗設計具有明顯的“兩性”實驗特征,通過實驗的學習學生們有機會得以一窺網絡設備的內部結構,為以后從事該領域的研發工作打下了良好的基礎。