OpenFlow(一種 SDN 南向協定)
/ OPEN-flow /
假設總公司想直接控制數百家分行的收發室,但每家分行向不同廠商買分信機。它需要一種共通語言,好讓總公司能告訴任何品牌的任何機器,要怎麼分信。OpenFlow 就是網路裡的這種共通語言。它是一個標準協定,讓 SDN 控制器能對許多不同廠商的交換器的流表(flow table)進行程式化,使控制器裝設轉送規則時不必在意對方是誰家的硬體。
具體來說,OpenFlow 把一台交換器建模成一張或多張流表,每條表項是一條比對動作規則:對封包欄位(例如來源與目的 MAC、IP 位址、埠、VLAN 標籤)進行比對,再套用動作(從某埠轉送、丟棄、改寫某欄位、送給控制器,或推送到下一張表)。控制器對每台交換器開啟一條連線,用 OpenFlow 訊息來新增、修改、移除這些表項,查詢計數器,並在封包未匹配任何規則時收到 packet-in 事件。封包抵達時,交換器找出最高優先且匹配的表項並照辦——若沒有匹配,通常就問控制器。這條「先比對再動作」的迴圈,就是整個轉送模型。
為什麼重要:OpenFlow 是讓早期 SDN 變得具體的協定,證明了可以用一個廠商中立的介面把控制與轉送分開。但要誠實面對它的限制。OpenFlow 是針對一份固定、逐漸增長的已知標頭欄位清單做比對——它本身無法解析一個標準不認識的全新協定;正是這個限制催生了完全可程式化的資料平面與 P4 語言。所以 OpenFlow 是一個重要的南向介面,而不是 SDN 的定義,較新的設計常常超越它。
某控制器想擋掉所有發往 TCP 第 23 埠(Telnet)的流量。它透過 OpenFlow 在每台交換器裡裝上一條流表項:比對 TCP 目的埠 23,動作=丟棄。從此之後,交換器就在硬體裡默默丟棄那些封包,迴圈中沒有任何軟體——控制器再也不會看到那些被丟掉的流量。
一條 OpenFlow 規則,把一項政策(封鎖 Telnet)變成每台交換器上的硬體行為。
OpenFlow 是針對預先定義好的標頭欄位做比對;它不讓你自行發明封包該如何被解析。定義全新的封包格式與處理流程,是 P4 與可程式化資料平面所增加的能力——與 OpenFlow 不同的一層。