本文先簡單介紹何謂軟體定義網路,接著說明與其相關的OpenFlow協定、該協定的組成元件,然後詳細介紹OpenFlow協定中所有不同的埠,並說明它們彼此之間的差異。
前期文章介紹了軟體定義網路的基本架構、組成元件與歷史,也說明了控制平面與轉發平面的概念與相關背景知識,然而,在軟體定義網路的世界裡,有許多複雜的設計用於提供彈性化的方式,讓網路管理人員透過軟體的程式來管理並且維護網路。這篇文章預計講解在OpenFlow這個用於軟體定義網路的協定中有哪些埠(Port),以及它們的差異在哪裡等等。
何謂Software Defined Network
SDN全名為Software Defined Network,中文一般稱為「軟體定義網路」,是一種網路控制虛擬化的技術。簡單來說,SDN將路由器(Router)或是交換機(Switch)的控制方式與路由器或交換機分離,允許網路管理人員用遠端的方式,透過撰寫的軟體來控制路由器或交換機,藉此規劃網路,控制網路流量,而且整個過程不需要更改硬體的規劃。
何謂轉發平面
再來要知道的是轉發平面,或是轉發介面,英文就是Forwarding Plane。所謂的Forwarding Plane就是在路由器或交換機架構中處理送進來的網路封包,並且藉由查找資料庫來決定接下來要把網路封包轉發到哪一個網路介面。
Forwarding Plane有時也被稱為Data Plane或User Plane。而這個轉發平面只會處理Inbound介面進來的網路封包。OpenFlow協定用於控制路由器或交換機的轉發平面,達到以軟體來定義網路的目的。
OpenFlow協定介紹
OpenFlow是一種網路協定,運作於網路七層的第二層,也就是資料連結層(Data Link Layer)。這個網路協定主要允許由遠端去控制交換機或路由器的轉發平面(Forwarding Plane),改變網路封包轉送表格,進而遠端改變網路封包的網路路徑。
目前各家廠商製作的交換機和路由器包含很多廠商特有的技術,制定OpenFlow協定時其中一個很重要的目的,就是想把這些各種不同廠商的硬體中擷取出網路控制的部分,並且讓這些部分變成Open Source而不被各個廠商所佔據。目前已經有很多廠商宣稱支援OpenFlow協定,這些廠商包含Alcatel-Lucent、Big Switch Networks、Brocade Communications、Radisys、IBM、Huawei、Cisco、Juniper、NEC、HP以及其他多家廠商。
OpenFlow協定第一個版本是在2011年2月推出,第一個版本號碼為OpenFlow 1.1,隔年2月繼續推出OpenFlow 1.2版本,目前最新版本是OpenFlow 1.4。
OpenFlow協定主要包含元件
一般來說,一個支援OpenFlow協定的交換機包含幾個重要元件,如圖1所示。
|
▲圖1 支援OpenFlow協定之交換機所包含的重要元件。 |
這些包含的元件有一個Group Table以及多個Flow Table。而交換機會與圖1上方的Controller溝通,這個Controller再透過OpenFlow協定與OpenFlow Channel溝通。
在Flow Table中包含多筆所謂的Flow Entry資料,每一筆Flow Entry包含符合條件的內容、計數器以及針對符合的網路封包所要下達的指令(Instruction)等等。透過OpenFlow協定,Controller可以新增、修改以及刪除這些Flow Entry的內容。每個元件的基本介紹如下所示:
1. Flow Table
當網路封包抵達網路交換機時,就會開始根據Flow Table中的內容嘗試去比對符合的條件,Flow Table中的每一筆資料是有前後優先順序的,而Flow Table各個表格之間也會有優先順序。一旦找到相符的Flow Entry,就執行Flow Entry中所設定好的動作指令。
如果在某一個Flow Table中都沒有找到符合的Flow Entry,則會根據預先設定好的預設值執行動作指令,這預先設定好的動作可能是尋找下一個Flow Table的內容,或是直接丟棄,或者轉給OpenFlow Channel來處理。
2. 動作指令
剛才有提到每一筆Flow Entry都會有相對應的動作指令,一旦找到符合的Flow Entry,就會執行相對應的動作指令。而動作指令內容可以是一般的動作(Action)或是所謂的Pipeline Processing。一般的動作指令可能是轉發網路封包,或是修改網路封包內容,而Pipeline Processing代表的是讓下一個Flow Table來處理,當然網路封包相關的資訊也都會被傳到下一個Flow Table。如果Pipeline Processing並沒有指定下一個要處理的Flow Table,就不會丟到下一個Flow Table,通常這種時候都會直接針對這個網路封包做處理。