以具體的例子描述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控制器的工作流程如下: