OpenFlow
控制網上交換器的數據鏈路層
OpenFlow是一個解決重新設計網際網路的實驗環境問題網路項目。
隨著網際網路的發展,今天的網際網路業務對網際網路提出了越來越高的傳輸質量要求,如何修改網際網路以滿足新業務的需求,出現了改良派和改革派兩種不同的做法。改良派認為可以在原有的基礎設施上添加新的協議來解決問題,改革派則認為必須推到一切重來。改革派向自己提出這樣的兩個問題:“就自己目前掌握的知識,如果我從一個全新的開始設計網際網路,我會怎麼做”和“15年後的網際網路應該是什麼樣子”。為此,改革派們開始了一系列新的設計方案,OpenFlow就是改革派提出的一種新型網路交換模型,與此相應的,他們還成立了0penFlow交換機論壇(The OpenFlow Switch Consorlium,後文簡稱0penFlow論壇)。
與那些動輒成立多年的論壇相比,0penFlow論壇只是於2008年剛剛成立的新興組織。0penFlow論壇起源於斯坦福大學的“Clean slate”計劃(斯坦福大學的“Clean slate ”計劃是一個致力於研究重新設計網際網路的項目,這個計劃目前支持了大約10個不同方向致力於重新設計網際網路的項目),最早的成員只有斯坦福大學的高性能網路研究組(The High Perfomance Networking Group)。隨著論壇的發展,目前0penFlow論壇已經變成一個由大學的研究者和網路管理者共同組成的開放論壇,吸引了來自麻省理工學院、加州理工學院等著名高校的教授以及Deutsche Telekom這樣的大型電信公司的網路一線工程師加盟。論壇歡迎任何希望對網路進行革新的人加入,但有一個前提是加入者不能為任何網路設備製造商工作。作為未來網際網路的設計者之一,0penFlow論壇希望防止製造商的利益衝突被引入論壇。
0penFlow論壇主要解決的是重新設計網際網路的實驗環境問題。在純的實驗網上總難以有足夠多的實際用戶或者足夠大的網路拓撲來測試新協議的性能和功能,最好的方法是將運行新協議的實驗網路嵌入實際運營的網路,利用實際的網路環境來檢驗新協議的可行性和存在的問題。
傳統的解決方案有兩種,要求設備製造商完全開放平台介面或實驗者自行製造設備。設備製造商完全開放平台介面讓研究者可以使用商用網路設備進行二次開發,尋找實驗協議與傳統協議並存的方法。但是,直接開放網路設備的開發介面對設備提供商而言是一場噩夢,一方面與商用平台的封閉性相衝突,開放開發的二次介面無疑會有暴露自身技術細節的風險,為競爭對手提供了機會,或者為新興廠家提供了進入行業的門檻。
OpenFlow的特點
開發者自行製造設備的方法一般是使用PC伺服器或專用硬體搭建自己的交換路由設備,受限於主機能裝備的網卡數量,這種方法不能獲得足夠大密度的埠(一般交換機很容易達到48或者更多的埠,而主機即使插上多塊網卡也很難有這麼多的埠),而且研究設備的交換性能一般也遠不如同價格的商用設備。在這種情況下,0penFlow論壇提出新的交換設備解決方案必須具有以下四點性質:
第一,設備必須具有商用設備的高性能和低價格的特點;
第二,設備必須能支持各種不同的研究範圍;
第三,設備必須能隔絕實驗流量和運行流量;
第四,設備必須滿足設備製造商封閉平台的要求。
由於OpenFlow對網路的創新發展起到了巨大的推動作用,因此受到了廣泛的關注和支持。由美國科學基金會(NSF)支持的Global Environment for Network Investigations (GENI)計劃對OpenFlow進行了資金支持並已開始實施“GENI Enterprise”計劃
從07年提出到現在,OpenFlow已經在硬體和軟體支持方面取得了長足的發展。從OpenFlow推出開始,日本NEC就對OpenFlow的相關硬體進行了跟進性的研發,NEC的IP8800/S3640-24T2XW和IP8800/S3640-48T2XW兩款交換機是支持OpenFlow的最成熟的交換機之一。CISCO,Junifer,Toroki,pronto也相繼推出了支持OpenFlow的交換機、路由器、無線網路接入點(AP)等網路設備。此外,具有OpenFlow功能的AP也已在斯坦福大學進行了部署,標誌著OpenFlow已不再局限於固網。2009年12月,OpenFlow規範發布了具有里程碑意義的可用於商業化產品的1.0版本,而且支持規範1.0的軟體indigo也已發布了Beta版本。OpenFlow相應的支持軟體,如OpenFlow在Wireshark抓包分析工具上的支持插件、OpenFlow的調試工具( liboftrace )、“OpenFlow虛擬計算機模擬”(OpenFlowVMS)等也已日趨成熟。
OpenFlow分別於2008年和2009年連續兩年獲得了sigcomm的最佳演示獎,並且享有聲望的MIT Technology Review雜誌把OpenFlow選為十大未來技術,認為其具有實力改變未來的日常生活。此外,喬治亞工學院、哥倫比亞大學、多倫多大學以及漢城國立大學分別以講座和工程實踐的方式開設了OpenFlow。目前,OpenFlow已經在美國斯坦福大學、Internet2、日本的JGN2plus以及其他的10-15個科研機構中部署,並將在國家科研骨幹網以及其他科研和生產中應用。OpenFlow的國際覆蓋已經包括日本、葡萄牙、義大利、西班牙、波蘭和瑞典等。
由於現在的網路暴露出了越來越多的弊病以及人們對網路性能需求的提高,於是研究人員不得不把很多複雜功能加入到路由器的體系結構當中,例如OSPF,BGP,組播,區分服務,流量工程,NAT,防火牆,MPLS等等。這就使得路由器等交換設備越來越臃腫而且性能提升的空間越來越小。
然而與網路領域的困境截然不同的是,計算機領域實現了日新月異的發展。仔細回顧計算機領域的發展,不難發現其關鍵在於計算機領域找到了一個簡單可用的硬體底層(x86指令集)。由於有了這樣一個公用的硬體底層,所以在軟體方面,不論是應用程序還是操作系統都取得了飛速的發展。現在很多主張重新設計計算機網路體系結構的人士認為:網路可以複製計算機領域的成功來解決現在網路所遇到的所有問題。在這種思想的指導下,將來的網路必將是這樣的:底層的數據通路(交換機、路由器)是“啞的、簡單的、最小的”,並定義一個對外開放的關於流表的公用的API,同時採用控制器來控制整個網路。未來的研究人員就可以在控制器上自由的調用底層的API來編程,從而實現網路的創新。
OpenFlow正是這種網路創新思想的強有力的推動者。OpenFlow交換機將原來完全由交換機/路由器控制的報文轉發過程轉化為由OpenFlow交換機(OpenFlow Switch)和控制伺服器(Controller)來共同完成,從而實現了數據轉發和路由控制的分離。控制器可以通過事先規定好的介面操作來控制OpenFlow交換機中的流表,從而達到控制數據轉發的目的。
因此,OpenFlow開啟了一條網路創新的道路。如果OpenFlow得到廣泛的應用和推廣,則未來的網路將如曾經的計算機一樣取得日新月異的發展。
流表由很多個流表項組成,每個流表項就是一個轉發規則。進入交換機的數據包通過查詢流表來獲得轉發的目的埠。流表項由頭域、計數器和操作組成;其中頭域是個十元組,是流表項的標識;計數器用來計數流表項的統計數據;操作標明了與該流表項匹配的數據包應該執行的操作。
OpenFlow的應用是很廣泛的,這裡我們只是列舉五個比較典型的應用。
OpenFlow在校園網路中的應用。如果我們可以讓校園網具有OpenFlow特徵,則可以為學生和科研人員實現新協議和新演演算法提供一個試驗平台。OpenFlow網路試驗平台不僅更接近真實網路的複雜度,實驗效果更好,而且可以節約實驗費用。現在已經有包括斯坦福大學在內的幾所高校部署了OpenFlow交換機,取得了很好的實驗效果。
OpenFlow在廣域網和移動網路中的應用。在廣域網和移動網路中添加具有OpenFlow特徵的節點,將帶來眾多的好處。例如,可以使得固網和移動網路實現無縫控制、使得VPN的管理更加靈活等。NEC 已經利用OpenFlow控制技術對快速、寬頻的移動網路進行高效、靈活的網路管理,並解決了兩個課題。首先,在多個移動通信方式實現動態切換。在移動通信混雜時以及通信環境惡化時,動態切換通信方式,將滿足通信服務所需的服務品質,提供給終端用戶。其次,移動迴環網路的節能。在一天當中通信量相對較少的夜晚時段,可以彙集網路路徑,關閉多餘的中轉基站的電源,從而節省能源。
OpenFlow在數據中心網路中的應用。在數據中心網路中使用OpenFlow交換機,可以使得網路和計算資源更加緊密的聯繫起來並實現有效的控制。數據中心的數據流量很大,如果不能合理分配傳輸路徑很容易造成數據擁塞,從而影響數據中心的高效運行。若在數據中心網路中添加OpenFlow交換機,則可以實現路徑優化以及負載均衡,從而使得數據交換更加迅速。
OpenFlow在網路管理和安全控制中的應用。如果網路是基於OpenFlow技術實現的,則經過OpenFlow交換機的每個新的數據流都必須由控制器來做出轉發決定。在控制器中可以對這些流按照預先制定的規則進行檢查,然後由控制器指定數據流的傳輸路徑以及流的處理策略,從而更好的控制網路。更為重要的是,在內部網路和外網的連接處應用OpenFlow交換機可以通過更改數據流的路徑以及拒絕某些數據流來增強企業內網的安全性。
基於OpenFlow實現SDN(Software Defined Network)。在SDN中,交換設備的數據轉發層和控制層是分離的,因此網路協議和交換策略的升級只需要改動控制層。OpenFlow在OpenFlow交換機上實現數據轉發,而在控制器上實現數據的轉發控制,從而實現了數據轉發層和控制層的分離。基於OpenFlow實現SDN,則在網路中實現了軟硬體的分離以及底層硬體的虛擬化,從而為網路的發展提供了一個良好的發展平台。
OpenFlow網路由OpenFlow交換機、FlowVisor和Controller三部分組成。OpenFlow交換機進行數據層的轉發;FlowVisor對網路進行虛擬化;Controller對網路進行集中控制,實現控制層的功能。OpenFlow網路的結構示意圖如下:
OpenFlow
OpenFlow交換機是整個OpenFlow網路的核心部件,主要管理數據層的轉發。OpenFlow交換機接收到數據包后,首先在本地的流表上查找轉發目標埠,如果沒有匹配,則把數據包轉發給Controller,由控制層決定轉發埠。
OpenFlow交換機的組成
OpenFlow交換機由流表、安全通道和OpenFlow協議三部分組成。
安全通道是連接OpenFlow交換機到控制器的介面。控制器通過這個介面控制和管理交換機,同時控制器接收來自交換機的事件並向交換機發送數據包。交換機和控制器通過安全通道進行通信,而且所有的信息必須按照OpenFlow協議規定的格式來執行。
OpenFlow協議用來描述控制器和交換機之間交互所用信息的標準,以及控制器和交換機的介面標準。協議的核心部分是用於OpenFlow協議信息結構的集合。
OpenFlow協議支持三種信息類型:Controller-to-Switch,Asynchronous和Symmetric,每一個類型都有多個子類型。Controller-to-Switch信息由控制器發起並且直接用於檢測交換機的狀態。Asynchronous信息由交換機發起並通常用於更新控制器的網路事件和改變交換機的狀態。Symmetric信息可以在沒有請求的情況下由控制器或交換機發起。
OpenFlow交換機的分類
按照對OpenFlow的支持程度,OpenFlow交換機可以分為兩類:專用的OpenFlow交換機和支持OpenFlow的交換機。
專用的OpenFlow交換機是專門為支持OpenFlow而設計的。它不支持現有的商用交換機上的正常處理流程,所有經過該交換機的數據都按照OpenFlow的模式進行轉發。專用的OpenFlow交換機中不再具有控制邏輯,因此專用的OpenFlow交換機是用來在埠間轉發數據包的一個簡單的路徑部件。
支持OpenFlow的交換機是在商業交換機的基礎上添加流表、安全通道和OpenFlow協議來獲得了OpenFlow特性的交換機。其既具有常用的商業交換機的轉發模塊,又具有OpenFlow的轉發邏輯,因此支持OpenFlow的交換機可以採用兩種不同的方式處理接收到的數據包。
按照OpenFlow交換機的發展程度來分,OpenFlow交換機也可以分為兩類:“Type0”交換機和“Type1”交換機。
“Type0”交換機僅僅支持十元組以及以下四個操作:轉發這個流的數據包給一個給定的埠(或者幾個埠);壓縮並轉發這個流的數據包給控制器;丟棄這個流的數據包;通過交換機的正常處理流程來轉發這個流的數據包。
顯然“Type0”交換機的這些功能是不能滿足複雜試驗要求的,因此我們將要定義“Type1”交換機來支持更多的功能,從而支持複雜的網路試驗。“Type1”交換機將具有一個新的功能集合。
支持網路虛擬化的FlowVisor
類比計算機的虛擬化,FlowVisor就是位於硬體結構元件和軟體之間的網路虛擬層。FlowVisor允許多個控制同時控制一台OpenFlow交換機,但是每個控制器僅僅可以控制經過這個OpenFlow交換機的某一個虛擬網路(即slice)。因此通過FlowVisor建立的試驗平台可以在不影響商業流的轉發速度的情況下,允許多個網路試驗在不同的虛擬網路上同時進行。FlowVisor與一般的商用交換機是兼容的,而不需要使用FPGA和網路處理器等可編程硬體。
Controller
OpenFlow實現了數據層和控制層的分離,其中OpenFlow交換機進行數據層的轉發,而Controller實現了控制層的功能。Controller通過OpenFlow協議這個標準介面對OpenFlow交換機中的流表進行控制,從而實現對整個網路進行集中控制。Controller的這一切功能都要通過運行NOX來實現,因此NOX就像是OpenFlow網路的操作系統。此外,在NOX上還可以運行Plug-n-serve、OpenRoads以及OpenPipes等應用程序。
Plug-n-Serve 通過規定數據傳輸路徑來控制網路以及伺服器上的負載,從而使得負載均衡並降低響應時間。OpenRoads 是支持OpenFlow無線網路移動性研究的框架。OpenPipes 可以在網路系統中通過移動每個子模塊來測試每個子模塊,並可以決定如何劃分設計單元。