Openflow協議和SDN控制器工作流程舉例

以具體的例子描述OpenFlow交換機在工作時,收到一個未知數據包後與控制器交互的過程。網絡拓撲如圖所示;若主機1需要與主機2進行通信,需要進行如下五個步驟:

(1) 主機1向OpenFlow交換機1發送數據包;
(2) OpenFlow交換機1查詢流表,無法找到與數據流相匹配的轉發規則;將來自主機1的數據包封裝在Packet-In消息中上發給控制器;
(3) 控制器收到Packet-In消息後,根據使用的路由算法,計算得到該數據流的轉發策略,並通過Packet-Out消息下發相應流規則給OpenFlow交換機1和2;
(4) OpenFlow交換機1執行控制器下發的轉發策略,按照策略將數據包轉發給交換機2;
(5) OpenFlow交換機2查詢流表,若存在與數據流匹配的流規則(即剛剛安裝的流規則還未過期),則按照流規則的規則進行轉發;否則執行步驟(2)-(4);最終將來自主機1的數據包轉發給主機2。


從上面OpenFlow交換機轉發數據包的過程中,可以看出,對於未知數據包,交換機會將其上發給控制器,由控制器根據自身的策略制定轉發規則。若該數據流從未在網絡中出現過,則對於轉發路徑中的所有交換機都需要與控制器進行通信來獲取轉發所需的流規則。

在以上步驟中,Packet-In消息和Packet-Out消息起到了重要作用。在OpenFlow協中,Packet-In消息的功能是將到達OpenFlow交換機的數據包發送給OpenFlow控制器。根據OpenFlow協議,有兩種情況可能在網絡中產生Packet-In消息。第一種是數據流與流表中的所有匹配規則都不一致;另一種是匹配的流表規則執行的行爲是發送到OpenFlow控制器。OpenFlow交換機將數據包發送到控制器時,可以選擇緩存或者不緩存數據包兩種方式。

 

SDN控制器的工作流程如下:

20150302SDN控制器的工作流程

 

1)控制器與交換機建立ofchannel通道,控制器通過ofchannel控制和管理交換機。

2)當交換機收到一個數據包且流表中沒有匹配條目,交換機會將數據包封裝在packet_in消息發送給控制器,此時數據包會緩存在交換機中等待處理。

3)控制器收到packet_in消息後,可以發送flow_mod消息向交換機寫一個流表項,並且將flow_mod消息中buffer_id字段設置爲packet_in消息中的buffer_id值。從而控制器向交換機寫入了一條與數據包相關的流表項,並且指定該數據包按照該流表項的action列表處理。

     但是並不是所有的數據包都需要向交換機中添加一條流表項來匹配處理,網絡中還存在多種數據包,它出現的數量很少(如ARP,IGMP等),以至於沒有必要通過流表項來指定這一類數據包的處理法,此時控制器可以使用packet_out消息,告訴交換機某一個數據包如何處理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章