前期文章已經介紹了OpenFlow協定中「埠」這個元件,這裡所指的埠不一定是實體的埠,也可能是指軟體的埠,而這篇文章要介紹的則是OpenFlow協定的Pipeline處理方式。
Group Table
與Flow Table一樣,Group Table也包含許多Group Entry。每一個Group Entry包含多個Action Bucket,這些Action Bucket會組成一個清單,而這些Action Bucket會根據不同的Group種類而不同。一旦網路封包送到指定的Group,一個或多個相對應的Action Bucket中的動作就會被執行。
埠的處理
Flow Entry的動作中可能會指定要轉發到指定的「埠」(Port),這裡的埠可以是實體在網路交換機上面的埠,也有可能是虛擬的埠,或是保留的埠。保留的埠可能會執行網路封包的轉發,或丟到Controller,或者轉發到所有其他的埠,也就是所謂的Flooding,或甚至是透過不使用OpenFlow協定的方式來處理。
軟體定義網路與OpenFlow協定
知道網路交換機在網路中扮演的角色和運作方式之後,接著說明OpenFlow協定大致的內容,可是這些跟軟體定義網路有什麼關係呢?什麼又是軟體定義網路呢?
OpenFlow協定就是「軟體定義網路(Software Defined Network,SDN)」最主要的控制協定,是一種網路控制虛擬化的技術。
簡單來說,SDN將路由器或交換機的控制方式與路由器或交換機分離,允許網路管理人員用遠端的方式,透過撰寫的軟體來控制路由器或交換機,藉此規劃網路,控制網路流量,而且整個過程不需要更改硬體的規劃。
再來要知道的就是轉發平面,或是轉發介面,英文就是Forwarding Plane。所謂的Forwarding Plane就是在路由器或是交換機架構中處理送進來的網路封包,並且藉由查找資料庫來決定接下來要把網路封包轉發到哪一個網路介面。
Forwarding Plane有時候也被稱為Data Plane或是User Plane。而這個轉發平面只會處理Inbound介面進來的網路封包。OpenFlow協定用於控制路由器或是交換機的轉發平面,達到以軟體來定義網路的目的。
簡述Pipeline種類與交換機類型
接著,必須了解OpenFlow協定的Pipeline處理過程。一般來說,支援OpenFlow協定的交換機可以分為兩種類型:一種是只支援OpenFlow協定的處理方式,另外一種則是同時支援OpenFlow協定以及非OpenFlow協定的混合式(Hybrid)交換機。
只支援OpenFlow協定的網路交換機當然就只能處理OpenFlow協定的動作。而混合式網路交換機則可以處理OpenFlow協定的動作以及一般乙太網路(Ethernet)的處理動作,例如傳統式Level 2 Ethernet Switching、VLAN處理以及Level 3 Routing、ACL與QoS等等。
以混合式的網路交換機來說,這種交換機必須具備一種分辨機制(Clarification Mechanism)可以將網路封包導向OpenFlow的Pipeline處理過程或是一般網路(非OpenFlow)的Pipeline處理過程。
舉例來說,這種分辨機制可能是根據VLAN的Tag來辨識,或是根據所進來的埠(Input Port)來判斷是否應該要丟往OpenFlow協定的Pipeline。當然,也可能是直接把所有的封包都導向OpenFlow協定的Pipeline。
這種混合式網路交換機也可以透過保留埠(Reserved Port)把網路封包從OpenFlow協定的Pipeline轉向一般的Pipeline,只要標示成NORMAL或FLOOD即可。這方面相關細節筆者已經在前一篇文章中詳細解釋,這裡就不再多加解釋。
VLAN
也許有些人不是很了解何謂VLAN,這裡就稍微解釋一下,畢竟這是相當重要的知識。一個虛擬區域網路,也就是VLAN,是由一群終端機器組合而成,例如一些使用者的PC設備,而這些VLAN中的機器通常擁有相同的特性,而這特性並不需要與這些機器的所在位置有任何的關係。
此外,VLAN技術也允許把一台Switch設備的埠分成幾個群組,並可以針對每個不同的群組套用不同的設定。換句話說,VLAN是可以在邏輯上區分不同的廣播網域,而這樣的廣播網域可以延伸到多個實體區域網路區段,因此VLAN技術能夠增加網路組織的彈性。
舉例來說,現在要為一家大型企業組織整個網路設計,希望將整個大型網路區分成幾個小型的網段,而每個網段都是針對不同的使用者,例如工程師應該存取同一個網段的網路,而銷售人員可能會存取另一個不同的網段,而尷尬的是,工程師可能橫跨很多個樓層,同樣地,銷售人員的電腦位置也處於多個樓層。
此時,如果希望根據實體的電腦位置來區分不同的網段,想必是一件很累人的事情。因此必須使用VLAN技術來區分不同的網段,把工程師全部分到同一個VLAN中,將銷售人員都分到同一個VLAN,這樣就不用牽扯到實體的網路連線而達到網段區分的效果。當然,也可以根據公司裡的各個單位來區分網段,或者根據各種其他的區分條件。
VLAN的Trunk與Tag
當VLAN的資料要跨越多個Switch設備傳遞到其他Switch設備所連接的同一個VLAN時,就必須使用Trunk技術。因為Switch設備之間當然只會用一條網路線連接起來,而這條網路線就必須要能傳遞承載所有VLAN的資料,為了達到這種需求,在設定這種Switch設備之間的連線時,就必須設定成Trunk類型。
要稍微注意一下,只有FastEthernet等級以上才可以做Trunk。Trunk主要分成802.1Q和ISL這兩種協定。簡單來說,Trunk會在資料中增加一個標籤,也就是Tag,用來表示目前這份資料是屬於哪一個VLAN,貼上標籤後,再把這份資料傳到另一台設備,另一台設備收到之後,再根據這個標籤得知這份資料是屬於哪個VLAN,把這份資料送往所屬的VLAN,這就是Trunk主要的工作,所以這個Trunk必須要能夠傳送所有VLAN的資料,反正也不會搞混,因為都會在資料中貼上標籤。
所以,就OpenFlow協定的主題來說,也許可以透過VLAN的Tag來當作一個標示,用來指明應該要使用哪一種Pipeline來處理。
Pipeline處理流程說明
了解有哪些不同的Pipeline種類以及相對應的網路交換機後,接著針對OpenFlow協定的Pipeline多加介紹。首先必須瞭解,每個OpenFlow協定的網路交換機的OpenFlow Pipeline至少會包含一個或是以上的Flow Table,而OpenFlow Pipeline的目的在於定義網路封包如何與這些Flow Table做互動。
當然,如果OpenFlow交換機只有一個Flow Table,那這互動就變成相當簡單,這不是本文所要講述的重點,所以這裡會著重在多個Flow Table的情況。而每一個Flow Table裡面會有多個Flow Entry,用來比對網路封包,看要處理怎樣的網路封包。