SDN軟件定義網絡綜述

從網絡虛擬化提及
雲計算的發展,是以虛擬化技術爲基礎的。雲計算服務商以按需分配爲原則,爲客戶提供具備高可用性、高擴展性的計算、存儲和網絡等IT資源。虛擬化技術將各類物理資源抽象爲邏輯上的資源,隱藏了各類物理上的限制,爲在更細粒度上對其進行管理和應用提供了可能性。近些年,計算的虛擬化技術(主要指x86平臺的虛擬化)取得了長足的發展;相比較而言,儘管存儲和網絡的虛擬化也獲得了諸多發展,可是還有不少問題亟需解決,在雲計算環境中尤爲如此。 html

OpenFlow和SDN儘管不是專門爲網絡虛擬化而生,可是它們帶來的標準化和靈活性卻給網絡虛擬化的發展帶來無限可能。筆者但願經過本文對OpenFlow/SDN作一個初步介紹,以期幫助你們可以進一步深刻了解和學習OpenFlow/SDN。限於筆者能力有限,文中不免紕漏錯誤之處,歡迎批評和指正。 編程

起源與發展
OpenFlow起源於斯坦福大學的Clean Slate項目組 [1] 。CleanSlate項目的最終目的是要從新發明英特網,旨在改變設計已略顯不合時宜,且難以進化發展的現有網絡基礎架構。在2006年,斯坦福的學生Martin Casado領導了一個關於網絡安全與管理的項目Ethane[2],該項目試圖經過一個集中式的控制器,讓網絡管理員能夠方便地定義基於網絡流的安全控制策略,並將這些安全策略應用到各類網絡設備中,從而實現對整個網絡通信的安全控制。受此項目(及Ethane的前續項目Sane[3])啓發,Martin和他的導師Nick McKeown教授(時任Clean Slate項目的Faculty Director)發現,若是將Ethane的設計更通常化,將傳統網絡設備的數據轉發(data plane)和路由控制(control plane)兩個功能模塊相分離,經過集中式的控制器(Controller)以標準化的接口對各類網絡設備進行管理和配置,那麼這將爲網絡資源的設計、管理和使用提供更多的可能性,從而更容易推進網絡的革新與發展。因而,他們便提出了OpenFlow的概念,而且Nick McKeown等人於2008年在ACM SIGCOMM發表了題爲OpenFlow: Enabling Innovation in Campus Networks[4]的論文,首次詳細地介紹了OpenFlow的概念。該篇論文除了闡述OpenFlow的工做原理外,還列舉了OpenFlow幾大應用場景,包括:1)校園網絡中對實驗性通信協議的支持(如其標題所示);2) 網絡管理和訪問控制;3)網絡隔離和VLAN;4)基於WiFi的移動網絡;5)非IP網絡;6)基於網絡包的處理。固然,目前關於OpenFlow的研究已經遠遠超出了這些領域。 安全

基於OpenFlow爲網絡帶來的可編程的特性,Nick和他的團隊(包括加州大學伯克利分校的Scott Shenker教授)進一步提出了SDN(Software Defined Network, 目前國內多直譯爲「軟件定義網絡」)的概念–其實,SDN的概念聽說最先是由KateGreene於2009年在TechnologyReview網站上評選年度十大前沿技術時提出[5]。若是將網絡中全部的網絡設備視爲被管理的資源,那麼參考操做系統的原理,能夠抽象出一個網絡操做系統(Network OS)的概念—這個網絡操做系統一方面抽象了底層網絡設備的具體細節,同時還爲上層應用提供了統一的管理視圖和編程接口。這樣,基於網絡操做系統這個平臺,用戶能夠開發各類應用程序,經過軟件來定義邏輯上的網絡拓撲,以知足對網絡資源的不一樣需求,而無需關心底層網絡的物理拓撲結構。關於SDN的概念和原理,能夠參考開放網絡基金會(Open NetworkingFoundation)於今年4月份發表的SDN白皮書Software Defined Networking:The New Norm forNetworks [6] 。 服務器

從上面的描述中,能夠看出OpenFlow/SDN的原理其實並不複雜,從嚴格意義上講也很難算是具備革命性的創新。然而OpenFlow/SDN卻引來了業界愈來愈多的關注,成爲近年來名副其實的熱門技術。目前,包括HP、IBM、Cisco、NEC以及國內的華爲和中興等傳統網絡設備製造商都已紛紛加入到OpenFlow的陣營,同時有一些支持OpenFlow的網絡硬件設備已經面世。2011年,開放網絡基金會(Open Networking Foundation)在Nick等人的推進下成立,專門負責OpenFlow標準和規範的維護和發展;同年,第一屆開放網絡峯會(OpenNetworking Summit)召開,爲OpenFlow和SDN在學術界和工業界都作了很好的介紹和推廣。今年年初召開的第二屆峯會上,來自Google的Urs Hölzle在以OpenFlow@Google[7]爲題的Keynote演講中宣佈Google已經在其全球各地的數據中心骨幹網絡中大規模地使用OpenFlow/SDN,從而證實了OpenFlow再也不僅僅是停留在學術界的一個研究模型,而是已經徹底具有了能夠在產品環境中應用的技術成熟度。最近,Facebook也宣佈其數據中心中使用了OpenFlow/SDN的技術。

OpenFlow標準和規範
自2010年初發布第一個版本(v1.0)以來,OpenFlow規範已經經歷了1.一、1.2以及最近剛發佈的1.3等版本。同時,今年年初OpenFlow管理和配置協議也發佈了第一個版本(OF-CONFIG 1.0 & 1.1)。下圖[8] 列出了OF和OF-CONFIG規範各個版本的發展歷程及變化,從圖中能夠看到目前使用和支持最多的仍然是1.0和1.1版本。 網絡

虛擬化的逆襲:網絡虛擬化之OpenFlow和SDN

在這裏,咱們將詳細介紹一下OpenFlow Switch的最新規範(即OF-1.3)[9]。下圖選自Nick等人的論文OpenFlow:EnablingInnovation in Campus Networks [4] 。這張圖常被用來講明OpenFlow的原理和基本架構。其實,這張圖還很好地代表了OpenFlow Switch規範所定義的範圍—從圖上能夠看出,OpenFlow Switch規範主要定義了Switch的功能模塊以及其與Controller之間的通訊信道等方面。 數據結構

虛擬化的逆襲:網絡虛擬化之OpenFlow和SDN

OF規範主要分爲以下四大部分, 架構

1. OpenFlow的端口(Port) 負載均衡

OpenFlow規範將Switch上的端口分爲3種類別: 異步

a) 物理端口,即設備上物理可見的端口; 性能

b) 邏輯端口,在物理端口基礎上由Switch設備抽象出來的邏輯端口,如爲tunnel或者聚合等功能而實現的邏輯端口;

c) OpenFlow定義的端口。OpenFlow目前總共定義了ALL、CONTROLLER、TABLE、IN_PORT、ANY、LOCAL、NORMAL和FLOOD等8種端口,其中後3種爲非必需的端口,只在混合型的OpenFlow Switch(OpenFlow-hybrid Switch,即同時支持傳統網絡協議棧和OpenFlow協議的Switch設備,相對於OpenFlow-only Switch而言)中存在。

2. OpenFlow的FlowTable(國內有直譯爲「流表」的)

OpenFlow經過用戶定義的或者預設的規則來匹配和處理網絡包。一條OpenFlow的規則由匹配域(Match Fields)、優先級(Priority)、處理指令(Instructions)和統計數據(如Counters)等字段組成,以下圖所示。

虛擬化的逆襲:網絡虛擬化之OpenFlow和SDN

在一條規則中,能夠根據網絡包在L二、L3或者L4等網絡報文頭的任意字段進行匹配,好比以太網幀的源MAC地址,IP包的協議類型和IP地址,或者TCP/UDP的端口號等。目前OpenFlow的規範中還規定了Switch設備廠商能夠選擇性地支持通配符進行匹配。聽說,OpenFlow在將來還計劃支持對整個數據包的任意字段進行匹配。

全部OpenFlow的規則都被組織在不一樣的FlowTable中,在同一個FlowTable中按規則的優先級進行前後匹配。一個OpenFlow的Switch能夠包含一個或者多個FlowTable,從0依次編號排列。OpenFlow規範中定義了流水線式的處理流程,以下圖所示。當數據包進入Switch後,必須從FlowTable 0開始依次匹配;FlowTable能夠按次序從小到大越級跳轉,但不能從某一FlowTable向前跳轉至編號更小的FlowTable。當數據包成功匹配一條規則後,將首先更新該規則對應的統計數據(如成功匹配數據包總數目和總字節數等),而後根據規則中的指令進行相應操做–好比跳轉至後續某一FlowTable繼續處理,修改或者當即執行該數據包對應的Action Set等。當數據包已經處於最後一個FlowTable時,其對應的Action Set中的全部Action將被執行,包括轉發至某一端口,修改數據包某一字段,丟棄數據包等。OpenFlow規範中對目前所支持的Instructions和Actions進行了完整詳細的說明和定義。

虛擬化的逆襲:網絡虛擬化之OpenFlow和SDN

另外,OpenFlow規範中還定義了不少其餘功能和行爲,好比OpenFlow對於QoS的支持(即MeterTable和Meter Bands的定義等),對於GroupTable的定義,以及規則的超時處理等。

3. OpenFlow的通訊通道

這一節中,OpenFlow規範定義了一個OpenFlow Switch如何與Controller創建鏈接、通信以及相關消息類型等。

OpenFlow規範中定義了三種消息類型:

a) Controller/Switch消息,是指由Controller發起、Switch接收並處理的消息,主要包括Features、Configuration、Modify-State、Read-State、Packet-out、Barrier和Role-Request等消息。這些消息主要由Controller用來對Switch進行狀態查詢和修改配置等操做。

b) 異步(Asynchronous)消息,是由Switch發送給Controller、用來通知Switch上發生的某些異步事件的消息,主要包括Packet-in、Flow-Removed、Port-status和Error等。例如,當某一條規則由於超時而被刪除時,Switch將自動發送一條Flow-Removed消息通知Controller,以方便Controller做出相應的操做,如從新設置相關規則等。

c) 對稱(Symmetric)消息,顧名思義,這些都是雙向對稱的消息,主要用來創建鏈接、檢測對方是否在線等,包括Hello、Echo和Experimenter三種消息。

下圖展現了OpenFlow和Switch之間一次典型的消息交換過程,出於安全和高可用性等方面的考慮,OpenFlow的規範還規定了如何爲Controller和Switch之間的信道加密、如何創建多鏈接等(主鏈接和輔助鏈接)。

虛擬化的逆襲:網絡虛擬化之OpenFlow和SDN

4. OpenFlow協議及相關數據結構

在OpenFlow規範的最後一部分,主要詳細定義了各類OpenFlow消息的數據結構,包括OpenFlow消息的消息頭等。這裏就不一一贅述,如需瞭解能夠參考OpenFlow源代碼[10]中openflow.h頭文件中關於各類數據結構的定義。

OpenFlow的應用

隨着OpenFlow/SDN概念的發展和推廣,其研究和應用領域也獲得了不斷拓展。目前,關於OpenFlow/SDN的研究領域主要包括網絡虛擬化、安全和訪問控制、負載均衡、聚合網絡和綠色節能等方面。另外,還有關於OpenFlow和傳統網絡設備交互和整合等方面的研究。

下面將舉幾個典型的研究案例來展現OpenFlow的應用。

1. 網絡虛擬化 – FlowVisor[11]

網絡虛擬化的本質是要可以抽象底層網絡的物理拓撲,可以在邏輯上對網絡資源進行分片或者整合,從而知足各類應用對於網絡的不一樣需求。爲了達到網絡分片的目的,FlowVisor實現了一種特殊的OpenFlow Controller,能夠看做其餘不一樣用戶或應用的Controllers與網絡設備之間的一層代理。所以,不一樣用戶或應用可使用本身的Controllers來定義不一樣的網絡拓撲,同時FlowVisor又能夠保證這些Controllers之間可以互相隔離而互不影響。下圖展現了使用FlowVisor能夠在同一個物理網絡上定義出不一樣的邏輯拓撲。FlowVisor不只是一個典型的OpenFlow應用案例,同時仍是一個很好的研究平臺,目前已經有不少研究和應用都是基於FlowVisor作的。

虛擬化的逆襲:網絡虛擬化之OpenFlow和SDN

2. 負載均衡 – Aster*x[12]

傳統的負載均衡方案通常須要在服務器集羣的入口處,經過一個gateway或者router來監測、統計服務器工做負載,並據此動態分配用戶請求到負載相對較輕的服務器上。既然網絡中全部的網絡設備均可以經過OpenFlow進行集中式的控制和管理,同時應用服務器的負載能夠及時地反饋到OpenFlowController那裏,那麼OpenFlow就很是適合作負載均衡的工做。Aster*x經過Host Manager和Net Manager來分別監測服務器和網絡的工做負載,而後將這些信息反饋給FlowManager,這樣Flow Manager就能夠根據這些實時的負載信息,從新定義網絡設備上的OpenFlow規則,從而將用戶請求(即網絡包)按照服務器的能力進行調整和分發。

虛擬化的逆襲:網絡虛擬化之OpenFlow和SDN

3. 綠色節能的網絡服務 – ElasticTree[13]

在數據中心和雲計算環境中,如何下降運營成本是一個重要的研究課題。可以根據工做負荷按需分配、動態規劃資源,不只能夠提升資源的利用率,還能夠達到節能環保的目的。ElasticTree創新性地使用OpenFlow,在不影響性能的前提下,根據網絡負載動態規劃路由,從而能夠在網絡負載不高的狀況下選擇性地關閉或者掛起部分網絡設備,使其進入節電模式達到節能環保、下降運營成本的目的。

虛擬化的逆襲:網絡虛擬化之OpenFlow和SDN

結語

沒有任何一項技術能夠解決全部問題,咱們相信OpenFlow/SDN也不會是解決現有全部網絡問題的「萬金油」。可是,咱們相信OpenFlow/SDN的確給網絡變革和創新帶了許多機遇—既然網絡問題已經變得能夠經過編程來解決的時候,技術宅們該出手了,拯救網絡世界的時候到了!

參考資料

[1]斯坦福大學Clean Slate項目網站, http://cleanslate.stanford.edu/

[2] Ethane項目首頁,http://yuba.stanford.edu/ethane/

[3] Sane項目首頁,http://yuba.stanford.edu/sane/

[4] OpenFlow: EnablingInnovation in Campus Networks, www.openflow.org/documents/openflow-wp-latest.pdf

[5] TechnologyReview網站關於2009年十大前沿技術的評選,http://www.technologyreview.com/article/412194/tr10-software-defined-networking/

[6] Software DefinedNetworking: The New Norm for Networks,https://www.opennetworking.org/images/stories/downloads/white-papers/wp-sdn-newnorm.pdf

[7] Open Networking Summit2012日程安排,http://opennetsummit.org/speakers.html

[8] SDN Standards: What andWhatnot, http://opennetsummit.org/talks/ONS2012/pitt-tue-standards.pdf

[9] OpenFlow SwitchSpecification v1.3.0,https://www.opennetworking.org/images/stories/downloads/specification/openflow-spec-v1.3.0.pdf

[10] OpenFlow v1.0.0源代碼, http://openflowswitch.org/downloads/openflow-1.0.0.tar.gz

[11] FlowVisor: A Network Virtualization Layer,

http://www.openflow.org/downloads/technicalreports/openflow-tr-2009-1-flowvisor.pdf

[12]Aster*x:Load-Balancing as a Network Primitive,

http://www.stanford.edu/~nikhilh/pubs/handigol-acld10.pdf

[13] ElasticTree: Saving Energy in Data Center Networks,

相關文章
相關標籤/搜索