接續前文,這次將說明Group Table的組成要素、Group種類、交換機與Controller溝通的方式,並介紹如何透過Controller來設定Group Table內容,以及在設定過程中非常重要的Liveness機制。
軟體定義網路(SDN)的彈性化設計,讓網路管理人員能夠更輕鬆地管理大型網路。OpenFlow協定是軟體定義網路中最主要的網路協定,這個協定定義了如何讓網路設備運用軟體定義網路的設計,達到網路控制虛擬化的技術。
先前已經介紹過OpenFlow協定的主要元件以及運作過程,這篇文章將接著說明Group Table的組成要素、Group種類、交換機與Controller溝通的方式,透過Controller來設定Group Table內容,並講解何謂Liveness機制。
認識Group Table
一個Group Table會包含多筆Group Entry,而Flow Entry會指向一個Group,這種設計可以讓OpenFlow協定提供更多轉發的額外方式。
看到這裡,大家可能還是似懂非懂,先來看看一個Group Entry到底包含哪些資料:
· Group Identifier
· Group Type
· Counters
· Action Buckets List
其中,Group Identifier是一個32位元的Unsigned Integer,用以辨識屬於哪一個Group。Counters當然就是計數器,與一般其他OpenFlow協定的元件雷同,當這個Group Entry被處理的時候,便會更新這個計數器以便於做個紀錄。
一個Group Entry也會包含一整個由Action Buckets組成的清單,這清單中的Action Buckets有先後順序。而每一個Action Bucket當然也包含一組多個執行動作。至於第二個Group Type稍微複雜一點,這裡多加解釋一下。
分辨Group種類
Group的種類(Type)主要有All、Select、Indirect以及Fast Failover等四種,以下分別加以介紹:
·All:執行所有Action Buckets中的動作
·Select:執行一個Action Bucket中的動作
·Indirect:執行既有定義的某個Action Bucket中的動作
·Fast Failover:執行第一個Live Action Bucket中的動作
這裡刻意先寫出四種不同Group的差異,很明顯地就是看要如何執行Action Buckets的方式。All這種型態的Group通常使用在Multicast,或是Broadcast的Forwarding封包。
而Select的話,是透過特定的演算法來決定要執行哪一個Action Bucket的動作,有可能是使用者自行定義的演算法,也有可能直接使用Round Robin的方式,不過無論是使用怎樣的演算法,這個部分與OpenFlow協定無關。
但要注意的是,透過演算法選擇出來的動作如果在執行上遇到某些問題的話,最好看看如何從剩下的Action Buckets中選出另外一組出來執行,而不是直接丟棄封包,這點管理者可能要注意一下。
Indirect則是只會執行某個指定的Action Bucket的動作,這種方式的效率比較高一些。最後的Fast Failover則會選擇第一組擁有Live Port/Group對應的Action Bucket,如果都找不到,就會丟棄封包。倘若選用Fast Failover,必須要製作Liveness Mechanism,這個部分稍後會做介紹。
交換機不見得需要支援所有以上這幾種Group種類,但All和Indirect是必須支援的,至於Select以及Fast Failover,Controller可以詢問交換機是否支援這兩種。
何謂OpenFlow Channel
在解釋Controller如何與交換機溝通之前,要先了解的是OpenFlow Channel。
簡單來說,OpenFlow Channel是Controller與所有OpenFlow交換機的溝通介面,透過這個介面,Controller可以傳遞訊息給交換機,可對交換機做設定,能夠從交換機身上取得事件資訊等等。
因為透過這個OpenFlow Channel的訊息都是為OpenFlow協定所設計的,當然這些訊息也都必須符合OpenFlow協定的規範。一般來說,這些資料都會採用TLS加密,並且使用TCP方式來傳輸。
對於在OpenFlow Channel裡面傳輸的訊息(Message)來說,OpenFlow協定支援Controller-to-Switch、Asynchronous以及Symmetric等三種不同的訊息類型,而每一種訊息類型又細分很多不同的子類型。
Controller-to-Switch類型的訊息是由Controller來發起,通常都用來管理交換機的訊息。Asynchronous類型的訊息則由交換機來發起,內容通常是要把網路相關資訊更新或是交換機的資訊改變傳送給Controller,而Symmetric訊息可以由交換機或Controller兩者來發起。