云計(jì)算的發(fā)展,是以虛擬化技術(shù)為基礎(chǔ)的。云計(jì)算服務(wù)商以按需分配為原則,為客戶提供具有高可用性、高擴(kuò)展性的計(jì)算、存儲(chǔ)和網(wǎng)絡(luò)等IT資源。虛擬化技術(shù)將各種物理資源抽象為邏輯上的資源,隱藏了各種物理上的限制,為在更細(xì)粒度上對(duì)其進(jìn)行管理和應(yīng)用提供了可能性。
近些年,計(jì)算的虛擬化技術(shù)(主要指x86平臺(tái)的虛擬化)取得了長足的發(fā)展;相比較而言,盡管存儲(chǔ)和網(wǎng)絡(luò)的虛擬化也得到了諸多發(fā)展,但是還有很多問題亟需解決,在云計(jì)算環(huán)境中尤其如此。
OpenFlow和SDN盡管不是專門為網(wǎng)絡(luò)虛擬化而生,但是它們帶來的標(biāo)準(zhǔn)化和靈活性卻給網(wǎng)絡(luò)虛擬化的發(fā)展帶來無限可能。希望通過本文對(duì)OpenFlow/SDN做一個(gè)初步介紹,以期幫助大家能夠進(jìn)一步深入了解和學(xué)習(xí)OpenFlow/SDN,歡迎批評(píng)和指正。
起源與發(fā)展
OpenFlow起源于斯坦福大學(xué)的Clean Slate項(xiàng)目組 。CleanSlate項(xiàng)目的最終目的是要重新發(fā)明英特網(wǎng),旨在改變?cè)O(shè)計(jì)已略顯不合時(shí)宜,且難以進(jìn)化發(fā)展的現(xiàn)有網(wǎng)絡(luò)基礎(chǔ)架構(gòu)。在2006年,斯坦福的學(xué)生 Martin Casado領(lǐng)導(dǎo)了一個(gè)關(guān)于網(wǎng)絡(luò)安全與管理的項(xiàng)目Ethane,該項(xiàng)目試圖通過一個(gè)集中式的控制器,讓網(wǎng)絡(luò)管理員可以方便地定義基于網(wǎng)絡(luò)流的安全控制策略,并將這些安全策略應(yīng)用到各種網(wǎng)絡(luò)設(shè)備中,從而實(shí)現(xiàn)對(duì)整個(gè)網(wǎng)絡(luò)通訊的安全控制。
受此項(xiàng)目(及Ethane的前續(xù)項(xiàng)目Sane)啟發(fā),Martin和他的導(dǎo)師Nick McKeown教授(時(shí)任Clean Slate項(xiàng)目的Faculty Director)發(fā)現(xiàn),如果將Ethane的設(shè)計(jì)更一般化,將傳統(tǒng)網(wǎng)絡(luò)設(shè)備的數(shù)據(jù)轉(zhuǎn)發(fā)(data plane)和路由控制(control plane)兩個(gè)功能模塊相分離,通過集中式的控制器(Controller)以標(biāo)準(zhǔn)化的接口對(duì)各種網(wǎng)絡(luò)設(shè)備進(jìn)行管理和配置,那么這將為網(wǎng)絡(luò)資源的設(shè)計(jì)、管理和使用提供更多的可能性,從而更容易推動(dòng)網(wǎng)絡(luò)的革新與發(fā)展。
于是,他們便提出了OpenFlow的概念,并且Nick McKeown等人于2008年在ACM SIGCOMM發(fā)表了題為OpenFlow: Enabling Innovation in Campus Networks的論文,首次詳細(xì)地介紹了OpenFlow的概念。該篇論文除了闡述OpenFlow的工作原理外,還列舉了OpenFlow幾大應(yīng)用場(chǎng)景,包括:
1)校園網(wǎng)絡(luò)中對(duì)實(shí)驗(yàn)性通訊協(xié)議的支持(如其標(biāo)題所示);
2) 網(wǎng)絡(luò)管理和訪問控制;
3)網(wǎng)絡(luò)隔離和VLAN;
4)基于WiFi的移動(dòng)網(wǎng)絡(luò);
5)非IP網(wǎng)絡(luò);
6)基于網(wǎng)絡(luò)包的處理。當(dāng)然,目前關(guān)于OpenFlow的研究已經(jīng)遠(yuǎn)遠(yuǎn)超出了這些領(lǐng)域。
基于OpenFlow為網(wǎng)絡(luò)帶來的可編程的特性,Nick和他的團(tuán)隊(duì)(包括加州大學(xué)伯克利分校的Scott Shenker教授)進(jìn)一步提出了SDN(Software Defined Network, 目前國內(nèi)多直譯為“軟件定義網(wǎng)絡(luò)”)的概念--其實(shí),SDN的概念據(jù)說最早是由KateGreene于2009年在TechnologyReview網(wǎng)站上評(píng)選年度十大前沿技術(shù)時(shí)提出。
如果將網(wǎng)絡(luò)中所有的網(wǎng)絡(luò)設(shè)備視為被管理的資源,那么參考操作系統(tǒng)的原理,可以抽象出一個(gè)網(wǎng)絡(luò)操作系統(tǒng)(Network OS)的概念—這個(gè)網(wǎng)絡(luò)操作系統(tǒng)一方面抽象了底層網(wǎng)絡(luò)設(shè)備的具體細(xì)節(jié),同時(shí)還為上層應(yīng)用提供了統(tǒng)一的管理視圖和編程接口。這樣,基于網(wǎng)絡(luò)操作系統(tǒng)這個(gè)平臺(tái),用戶可以開發(fā)各種應(yīng)用程序,通過軟件來定義邏輯上的網(wǎng)絡(luò)拓?fù)?,以滿足對(duì)網(wǎng)絡(luò)資源的不同需求,而無需關(guān)心底層網(wǎng)絡(luò)的物理拓?fù)浣Y(jié)構(gòu)。關(guān)于SDN的概念和原理,可以參考開放網(wǎng)絡(luò)基金會(huì)(Open NetworkingFoundation)于今年4月份發(fā)表的SDN白皮書Software Defined Networking:The New Norm forNetworks 。
從上面的描述中,可以看出OpenFlow/SDN的原理其實(shí)并不復(fù)雜,從嚴(yán)格意義上講也很難算是具有革命性的創(chuàng)新。然而OpenFlow /SDN卻引來了業(yè)界越來越多的關(guān)注,成為近年來名副其實(shí)的熱門技術(shù)。目前,包括HP、IBM、Cisco、NEC以及國內(nèi)的華為和中興等傳統(tǒng)網(wǎng)絡(luò)設(shè)備制造商都已紛紛加入到OpenFlow的陣營,同時(shí)有一些支持OpenFlow的網(wǎng)絡(luò)硬件設(shè)備已經(jīng)面世。
2011年,開放網(wǎng)絡(luò)基金會(huì)(Open Networking Foundation)在Nick等人的推動(dòng)下成立,專門負(fù)責(zé)OpenFlow標(biāo)準(zhǔn)和規(guī)范的維護(hù)和發(fā)展;同年,第一屆開放網(wǎng)絡(luò)峰會(huì) (OpenNetworking Summit)召開,為OpenFlow和SDN在學(xué)術(shù)界和工業(yè)界都做了很好的介紹和推廣。
第二屆峰會(huì)上,來自Google的Urs H lzle在以O(shè)penFlow@Google為題的Keynote演講中宣布Google已經(jīng)在其全球各地的數(shù)據(jù)中心骨干網(wǎng)絡(luò)中大規(guī)模地使用 OpenFlow/SDN,從而證明了OpenFlow不再僅僅是停留在學(xué)術(shù)界的一個(gè)研究模型,而是已經(jīng)完全具備了可以在產(chǎn)品環(huán)境中應(yīng)用的技術(shù)成熟度。最近,F(xiàn)acebook也宣布其數(shù)據(jù)中心中使用了OpenFlow/SDN的技術(shù)。
OpenFlow標(biāo)準(zhǔn)和規(guī)范
自2010年初發(fā)布第一個(gè)版本(v1.0)以來,OpenFlow規(guī)范已經(jīng)經(jīng)歷了1.1、1.2以及最近剛發(fā)布的1.3等版本。同時(shí),今年年初 OpenFlow管理和配置協(xié)議也發(fā)布了第一個(gè)版本(OF-CONFIG 1.0 &1.1)。下圖列出了OF和OF-CONFIG規(guī)范各個(gè)版本的發(fā)展歷程及變化,從圖中可以看到目前使用和支持最多的仍然是1.0和1.1版本。
在這里,我們將詳細(xì)介紹一下OpenFlow Switch的最新規(guī)范(即OF-1.3)。下圖選自Nick等人的論文OpenFlow:EnablingInnovation in Campus Networks 。這張圖常被用來說明OpenFlow的原理和基本架構(gòu)。其實(shí),這張圖還很好地表明了OpenFlow Switch規(guī)范所定義的范圍—從圖上可以看出,OpenFlow Switch規(guī)范主要定義了Switch的功能模塊以及其與Controller之間的通信信道等方面。
OF規(guī)范主要分為如下四大部分,
1. OpenFlow的端口(Port)
OpenFlow規(guī)范將Switch上的端口分為3種類別:
a) 物理端口,即設(shè)備上物理可見的端口;
b) 邏輯端口,在物理端口基礎(chǔ)上由Switch設(shè)備抽象出來的邏輯端口,如為tunnel或者聚合等功能而實(shí)現(xiàn)的邏輯端口;
c) OpenFlow定義的端口。OpenFlow目前總共定義了ALL、CONTROLLER、TABLE、IN_PORT、ANY、LOCAL、 NORMAL和FLOOD等8種端口,其中后3種為非必需的端口,只在混合型的OpenFlow Switch(OpenFlow-hybrid Switch,即同時(shí)支持傳統(tǒng)網(wǎng)絡(luò)協(xié)議棧和OpenFlow協(xié)議的Switch設(shè)備,相對(duì)于OpenFlow-only Switch而言)中存在。
2. OpenFlow的FlowTable(國內(nèi)有直譯為“流表”的)
OpenFlow通過用戶定義的或者預(yù)設(shè)的規(guī)則來匹配和處理網(wǎng)絡(luò)包。一條OpenFlow的規(guī)則由匹配域(Match Fields)、優(yōu)先級(jí)(Priority)、處理指令(Instructions)和統(tǒng)計(jì)數(shù)據(jù)(如Counters)等字段組成,如下圖所示。
在一條規(guī)則中,可以根據(jù)網(wǎng)絡(luò)包在L2、L3或者L4等網(wǎng)絡(luò)報(bào)文頭的任意字段進(jìn)行匹配,比如以太網(wǎng)幀的源MAC地址,IP包的協(xié)議類型和IP地址,或者TCP/UDP的端口號(hào)等。目前OpenFlow的規(guī)范中還規(guī)定了Switch設(shè)備廠商可以選擇性地支持通配符進(jìn)行匹配。據(jù)說,OpenFlow在未來還計(jì)劃支持對(duì)整個(gè)數(shù)據(jù)包的任意字段進(jìn)行匹配。
所有OpenFlow的規(guī)則都被組織在不同的FlowTable中,在同一個(gè)FlowTable中按規(guī)則的優(yōu)先級(jí)進(jìn)行先后匹配。一個(gè) OpenFlow的Switch可以包含一個(gè)或者多個(gè)FlowTable,從0依次編號(hào)排列。OpenFlow規(guī)范中定義了流水線式的處理流程,如下圖所示。當(dāng)數(shù)據(jù)包進(jìn)入Switch后,必須從FlowTable 0開始依次匹配;
FlowTable可以按次序從小到大越級(jí)跳轉(zhuǎn),但不能從某一FlowTable向前跳轉(zhuǎn)至編號(hào)更小的FlowTable。當(dāng)數(shù)據(jù)包成功匹配一條規(guī)則后,將首先更新該規(guī)則對(duì)應(yīng)的統(tǒng)計(jì)數(shù)據(jù)(如成功匹配數(shù)據(jù)包總數(shù)目和總字節(jié)數(shù)等),然后根據(jù)規(guī)則中的指令進(jìn)行相應(yīng)操作--比如跳轉(zhuǎn)至后續(xù)某一 FlowTable繼續(xù)處理,修改或者立即執(zhí)行該數(shù)據(jù)包對(duì)應(yīng)的Action Set等。
當(dāng)數(shù)據(jù)包已經(jīng)處于最后一個(gè)FlowTable時(shí),其對(duì)應(yīng)的Action Set中的所有Action將被執(zhí)行,包括轉(zhuǎn)發(fā)至某一端口,修改數(shù)據(jù)包某一字段,丟棄數(shù)據(jù)包等。OpenFlow規(guī)范中對(duì)目前所支持的 Instructions和Actions進(jìn)行了完整詳細(xì)的說明和定義。
另外,OpenFlow規(guī)范中還定義了很多其他功能和行為,比如OpenFlow對(duì)于QoS的支持(即MeterTable和Meter Bands的定義等),對(duì)于GroupTable的定義,以及規(guī)則的超時(shí)處理等。
OpenFlow的通信通道
這一節(jié)中,OpenFlow規(guī)范定義了一個(gè)OpenFlow Switch如何與Controller建立連接、通訊以及相關(guān)消息類型等。
OpenFlow規(guī)范中定義了三種消息類型:
a) Controller/Switch消息,是指由Controller發(fā)起、Switch接收并處理的消息,主要包括Features、 Configuration、Modify-State、Read-State、Packet-out、Barrier和Role-Request等消息。這些消息主要由Controller用來對(duì)Switch進(jìn)行狀態(tài)查詢和修改配置等操作。
b) 異步(Asynchronous)消息,是由Switch發(fā)送給Controller、用來通知Switch上發(fā)生的某些異步事件的消息,主要包括 Packet-in、Flow-Removed、Port-status和Error等。例如,當(dāng)某一條規(guī)則因?yàn)槌瑫r(shí)而被刪除時(shí),Switch將自動(dòng)發(fā)送一條Flow-Removed消息通知Controller,以方便Controller作出相應(yīng)的操作,如重新設(shè)置相關(guān)規(guī)則等。
c) 對(duì)稱(Symmetric)消息,顧名思義,這些都是雙向?qū)ΨQ的消息,主要用來建立連接、檢測(cè)對(duì)方是否在線等,包括Hello、Echo和Experimenter三種消息。
下圖展示了OpenFlow和Switch之間一次典型的消息交換過程,出于安全和高可用性等方面的考慮,OpenFlow的規(guī)范還規(guī)定了如何為Controller和Switch之間的信道加密、如何建立多連接等(主連接和輔助連接)。
OpenFlow協(xié)議及相關(guān)數(shù)據(jù)結(jié)構(gòu)
在OpenFlow規(guī)范的最后一部分,主要詳細(xì)定義了各種OpenFlow消息的數(shù)據(jù)結(jié)構(gòu),包括OpenFlow消息的消息頭等。這里就不一一贅述,如需了解可以參考OpenFlow源代碼中openflow.h頭文件中關(guān)于各種數(shù)據(jù)結(jié)構(gòu)的定義。
OpenFlow的應(yīng)用
隨著OpenFlow/SDN概念的發(fā)展和推廣,其研究和應(yīng)用領(lǐng)域也得到了不斷拓展。目前,關(guān)于OpenFlow/SDN的研究領(lǐng)域主要包括網(wǎng)絡(luò)虛擬化、安全和訪問控制、負(fù)載均衡、聚合網(wǎng)絡(luò)和綠色節(jié)能等方面。另外,還有關(guān)于OpenFlow和傳統(tǒng)網(wǎng)絡(luò)設(shè)備交互和整合等方面的研究。
下面將舉幾個(gè)典型的研究案例來展示OpenFlow的應(yīng)用。
1. 網(wǎng)絡(luò)虛擬化 – FlowVisor
網(wǎng)絡(luò)虛擬化的本質(zhì)是要能夠抽象底層網(wǎng)絡(luò)的物理拓?fù)?,能夠在邏輯上?duì)網(wǎng)絡(luò)資源進(jìn)行分片或者整合,從而滿足各種應(yīng)用對(duì)于網(wǎng)絡(luò)的不同需求。為了達(dá)到網(wǎng)絡(luò)分片的目的,F(xiàn)lowVisor實(shí)現(xiàn)了一種特殊的OpenFlow Controller,可以看作其他不同用戶或應(yīng)用的Controllers與網(wǎng)絡(luò)設(shè)備之間的一層代理。
因此,不同用戶或應(yīng)用可以使用自己的Controllers來定義不同的網(wǎng)絡(luò)拓?fù)洌瑫r(shí)FlowVisor又可以保證這些Controllers之間能夠互相隔離而互不影響。
下圖展示了使用FlowVisor可以在同一個(gè)物理網(wǎng)絡(luò)上定義出不同的邏輯拓?fù)?。FlowVisor不僅是一個(gè)典型的OpenFlow應(yīng)用案例,同時(shí)還是一個(gè)很好的研究平臺(tái),目前已經(jīng)有很多研究和應(yīng)用都是基于FlowVisor做的。
2. 負(fù)載均衡 – Aster*x
傳統(tǒng)的負(fù)載均衡方案一般需要在服務(wù)器集群的入口處,通過一個(gè)gateway或者router來監(jiān)測(cè)、統(tǒng)計(jì)服務(wù)器工作負(fù)載,并據(jù)此動(dòng)態(tài)分配用戶請(qǐng)求到負(fù)載相對(duì)較輕的服務(wù)器上。既然網(wǎng)絡(luò)中所有的網(wǎng)絡(luò)設(shè)備都可以通過OpenFlow進(jìn)行集中式的控制和管理,同時(shí)應(yīng)用服務(wù)器的負(fù)載可以及時(shí)地反饋到 OpenFlowController那里,那么OpenFlow就非常適合做負(fù)載均衡的工作。
Aster*x通過Host Manager和Net Manager來分別監(jiān)測(cè)服務(wù)器和網(wǎng)絡(luò)的工作負(fù)載,然后將這些信息反饋給FlowManager,這樣Flow Manager就可以根據(jù)這些實(shí)時(shí)的負(fù)載信息,重新定義網(wǎng)絡(luò)設(shè)備上的OpenFlow規(guī)則,從而將用戶請(qǐng)求(即網(wǎng)絡(luò)包)按照服務(wù)器的能力進(jìn)行調(diào)整和分發(fā)。
3. 綠色節(jié)能的網(wǎng)絡(luò)服務(wù) – ElasticTree
在數(shù)據(jù)中心和云計(jì)算環(huán)境中,如何降低運(yùn)營成本是一個(gè)重要的研究課題。能夠根據(jù)工作負(fù)荷按需分配、動(dòng)態(tài)規(guī)劃資源,不僅可以提高資源的利用率,還可以達(dá)到節(jié)能環(huán)保的目的。
ElasticTree創(chuàng)新性地使用OpenFlow,在不影響性能的前提下,根據(jù)網(wǎng)絡(luò)負(fù)載動(dòng)態(tài)規(guī)劃路由,從而可以在網(wǎng)絡(luò)負(fù)載不高的情況下選擇性地關(guān)閉或者掛起部分網(wǎng)絡(luò)設(shè)備,使其進(jìn)入節(jié)電模式達(dá)到節(jié)能環(huán)保、降低運(yùn)營成本的目的。
結(jié)語
沒有任何一項(xiàng)技術(shù)可以解決所有問題,我們相信OpenFlow/SDN也不會(huì)是解決現(xiàn)有所有網(wǎng)絡(luò)問題的“萬金油”。但是,我們相信 OpenFlow/SDN的確給網(wǎng)絡(luò)變革和創(chuàng)新帶了許多機(jī)遇—既然網(wǎng)絡(luò)問題已經(jīng)變得可以通過編程來解決的時(shí)候,技術(shù)宅們?cè)摮鍪至?,拯救網(wǎng)絡(luò)世界的時(shí)候到了!
分享到微信 ×
打開微信,點(diǎn)擊底部的“發(fā)現(xiàn)”,
使用“掃一掃”即可將網(wǎng)頁分享至朋友圈。