OpenFlow是一種交換技術,剛開始它是2008年斯坦福大學的一個研究項目,但現在它已經引起了網絡設備供應商和大型交換網絡管理員的廣泛關注。使用OpenFlow協議建立軟件定義網絡,可以將網絡作為一個整體而不是無數的獨立設備進行管理。
傳統交換機使用生成樹協議或其他一些新標準(如多鏈路透明互連,TRILL)來確定數據包轉發路徑。而OpenFlow將轉發決策從各個交換機轉移到控制器上,這一般是服務器或工作站。
管理應用程序執行控制器,負責與所有網絡交換機進行交互,配置數據轉發路徑,從而提高帶寬利用率。這個應用程序與云管理軟件進行交互,保證有足夠的帶寬支持負載的創建和變化。
OpenFlow協議操作
OpenFlow標準定義了控制器與交換機之間的交互協議,以及一組交換機操作。這個控制器—交換機協議運行在安全傳輸層協議(TLS)或無保護TCP連接之上。控制器向交換機發送指令,控制數據包的轉發方式,以及配置參數,如VLAN優先級。交換機會在鏈路中斷或出現未指定轉發指令的數據包時,發送消息通知控制器。
轉發指令基于流,這個流由所有數據包共享的通用特性組成。定義流需要指定許多參數,其中可能包括:數據包到達的交換機端口、來源以太網端口、來源IP端口、VLAN標簽、目標以太網或IP端口及許多其他數據包特性。控制器會在交換機上設置一組參數,用于定義各個流,以及匹配流的數據包處理方式。
每一個交換機都維護著許多路由表,而每一個表又包含多個路由記錄。每一條路由記錄包含一個匹配域,它定義了流、計數器和指令集。匹配域中記錄的項目可能包含一個與到達數據包相對應的比較參數值,或者一個表示流的參數集中不存在此記錄的指示值。
路由表的編號從0開始,到達的數據包對表0的記錄進行比較。如果匹配,路由計數會增加,然后執行指定的指令集。如果到達的數據包不匹配任何路由表記錄,那么必須創建一個新流。有的交換機可能直接丟棄未定義的流,但是大多數情況下,數據包都會轉發到控制器上。然后,控制器為該數據包定義一個新流,并且創建一個或多個路由表記錄。然后,它會將記錄發送到交換機上,并增加路由表。最后,數據包會被送回交換機,使用新創建的路由記錄進行處理。
路由表指令會修改每一個數據包所設置的操作。一開始,數據包會使用空操作集進行處理。這些操作可能要求數據包通過指定的端口進行轉發,或者需要修改數據包TTL、VLAN、MPLS標簽或數據包QoS。
第一個路由表的指令可能會對數據包執行操作,或者增加一些將來執行的操作。這些指令會將數據包與其他路由表記錄進行比較,控制數據包的后續處理。后續路由表的記錄的指令可能會進一步增加操作,刪除或修改之前添加的操作,或者執行其他一些操作。
在將數據包發送到下一路由表之前,指令也可能會給數據包增加一個元素數據值。這個值就成為額外參數,它會與下一個路由表的記錄的元數據值進行匹配。數據包會逐個表地進行處理,直到所有指令都處理完,并且數據包成功轉發。
指令可能會指定一個組標識符。組是一種為數據包指定在多個流中執行相同操作集的高效方法。組操作定義在交換機的組表記錄。每一個記錄都包括標識符值、組類型、計數器和操作集。組類型規定是否所有操作集都會執行,這很適合用于實現廣播或多播,或者規定只執行某些特定的操作集。
本文闡釋了OpenFlow的工作原理,《初識OpenFlow協議:三種消息》將介紹組成OpenFlow的三種消息和OpenFlow的前景。