Software Defined Network Data Plane OpenFlow 軟體定義網路 SDN

區分OpenFlow定義各Port 弄懂軟體定義網路交換器

2016-07-14
本文先簡單介紹何謂軟體定義網路,接著說明與其相關的OpenFlow協定、該協定的組成元件,然後詳細介紹OpenFlow協定中所有不同的埠,並說明它們彼此之間的差異。
這裡的動作甚至可以把網路封包轉給Group來處理。一個Group可以包含多個複雜的處理過程,這些處理過程可能是Flooding、Multi-path Forwarding、Fast Reroute,或是Link Aggregation等等。Group甚至可以將多個不同的Flow Entry透過同樣的處理過程來對網路封包做相同的處理動作。

這種設計方式可以讓Flow Entry與所要處理的過程再次地分開來,這樣一來,如果希望針對多個不同的Flow Entry一次性地更改相對應的處理動作,就會方便非常多。

3. Group Table
和Flow Table一樣,Group Table包含許多Group Entry。而每一個Group Entry包含多個Action Bucket,這些Action Bucket會組成一個清單,而這些Action Bucket會根據不同的Group種類而不同。一旦網路封包送到指定的Group,一個或多個相對應的Action Bucket中的動作就會被執行。

4. 埠的處理
Flow Entry的動作中可能會指定要轉發到指定的「埠」(Port),這裡的埠可以是實體在網路交換機上面的埠,也有可能是虛擬的埠,或是保留的埠。保留的埠可能可以執行網路封包的轉發,或是丟到Controller,或是轉發到所有其他的埠,也就是所謂的Flooding,或甚至是透過不是使用OpenFlow協定的方式來處理。以下會針對埠的部分做更多詳細的介紹。

OpenFlow埠的種類介紹

在OpenFlow協定中,有許多不同種類的埠類型,以下針對這些不同類型的埠做一些基本的介紹給各位。

1. OpenFlow Port
OpenFlow Port是用來處理使用OpenFlow協定的交換機內部與外面網路的封包。OpenFlow Port和實體交換機的埠並不是一對一的對應關係,事實上並沒有直接的關係,但是這些交換機是以邏輯性的方式透過OpenFlow Port彼此連結,在OpenFlow協定中彼此連結著。

也就是說,交換機透過實體的埠互相連結之外,也透過OpenFlow Port以軟體的方式連結著,而這些OpenFlow Port用來處理OpenFlow封包,這些封包會由Ingress Port傳入交換機,而透過稍早提到的Pipeline Processing,可能會轉發到某些Output Port。使用OpenFlow協定的交換機支援三種不同的OpenFlow Port,分別是Physical Port、Logical Port以及Reserved Port。

2. Standard Port
這種標準埠可以被定義成Physical Port、Logical Port或是另外一種稱為LOCAL Reserved Port保留埠。而且這種標準埠可以是Ingress Port或是Output Port。此外,標準埠支援Group的概念(這個之後會詳加說明),同時,標準埠也支援「計數器」的概念,OpenFlow協定的計數器使用非常廣泛,不只是埠有支援計數器,連Flow Table、Flow Entry、Group,還有很多其他的元件也都支援,這些計數器都是用軟體的方式來維護。

在軟體中,這個計數器由Unsigned的數字來儲存(這是軟體程式設計的範疇,由於與此篇文章主軸差異較大,筆者假設大家都了解,因此不在這裡多加解釋)而且控制成不會Overflow,一旦使用了不支援的計數器,預設上就會把這個數字設定成這個Unsigned Value的最大值,也就是等於-1,就不會跟既有的計數器數值搞混了。

表1列出OpenFlow協定在埠這方面所支援的計數器內容,可以看出並不是所有的計數器預設上都有開啟。另外,Duration指的是這個埠安裝在這個交換器上已經有多久的時間。

表1 OpenFlow協定在埠方面所支援的計數器

3. Physical Port
顧名思義,這種實體的埠就是對應到硬體上的實體埠。

4. Logical Port
這種邏輯性的埠指的是與硬體上無關,而是由軟體定義並且管理的埠,這些埠不見得都是由OpenFlow協定所建立,也可能是其他方式所產生的。

Logical Port與Physical Port其中一個不同點是,與Logical Port有關的網路封包會有一個額外的欄位稱為Tunnel ID。另外一個不同點是,Logical Port所收到的網路封包都會傳送給Controller。

剛才提到的Tunnel ID會被儲存在一個OXM_TUNNEL_ID欄位中,這個欄位大小為64個位元(bits),這個數值必須由製作並維護這個Logical Port的軟體所提供,如果沒有提供,或是相關的網路封包是由Physical Port所收到的,那麼這個欄位的數值就是零。

5. Reserved Port
最後一種就是Reserved Port保留埠。在OpenFlow協定中,定義了許多種不同的保留埠,可能用來做Flooding(也就是複製並且轉發到所有其他的埠),有可能直接傳送到Controller,甚至也有可能套用非OpenFlow協定的轉發方式等等。

針對以上的問題,表2簡單介紹了所有的保留埠種類。

表2 保留埠的種類與說明

結語

這篇文章從軟體定義網路出發,讓大家對於這裡所要講的背景有一個基本瞭解,然後是OpenFlow協定、組成元件,最後則詳細地介紹了在OpenFlow協定中所有不同埠的定義,這篇文章對於之後詳細介紹OpenFlow協定時極為重要,也對了解軟體定義網路有極大的幫助。

<本文作者:胡凱智,前在美商Mozilla擔任全球技術專案總監,同時擔任全球開放式網路設備(Open Web Device)協議審查董事會(Compliance Review Board)的技術主席(Technical Committee Chairman)。曾於趨勢科技任職七年多,有兩年美國矽谷工作經驗,在美國專利局擁有軟體專利。讀者交流建議:https://www.facebook.com/khu.page>


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!