OpenFlow是一種新型網(wǎng)絡(luò)協(xié)議,起源于斯坦福大學(xué)的Clean Slate項(xiàng)目組。OpenFlow提出的出發(fā)點(diǎn)是由于研究人員無(wú)法改變現(xiàn)有網(wǎng)絡(luò)設(shè)備進(jìn)行創(chuàng)新網(wǎng)絡(luò)架構(gòu)和協(xié)議的研究和實(shí)驗(yàn),而這些新的網(wǎng)絡(luò)創(chuàng)新思想恰恰需要在實(shí)際的網(wǎng)絡(luò)上才能更好地驗(yàn)證。斯坦福大學(xué)因此提出了控制轉(zhuǎn)發(fā)分離架構(gòu),將控制邏輯從網(wǎng)絡(luò)設(shè)備中分離出來(lái),交給中央控制器集中統(tǒng)一控制,實(shí)現(xiàn)網(wǎng)絡(luò)業(yè)務(wù)的靈活部署,并且他們?cè)O(shè)計(jì)了OpenFlow協(xié)議作為控制器與交換機(jī)通訊的標(biāo)準(zhǔn)接口。近年OpenFlow已經(jīng)引起了網(wǎng)絡(luò)設(shè)備商和網(wǎng)絡(luò)管理員的廣泛關(guān)注,使用OpenFlow協(xié)議實(shí)現(xiàn)軟件定義網(wǎng)絡(luò),可以把網(wǎng)絡(luò)作為一個(gè)整體而不是許多獨(dú)立分散的設(shè)備來(lái)集中進(jìn)行管理,大大提升了網(wǎng)絡(luò)可用性和網(wǎng)絡(luò)管理效率。
OpenFlow的思路很簡(jiǎn)單,網(wǎng)絡(luò)設(shè)備維護(hù)一個(gè)或者若干個(gè)流表,并且數(shù)據(jù)流只按照這些流表進(jìn)行轉(zhuǎn)發(fā)。流表本身的生成、維護(hù)完全由外置的控制器來(lái)管理。流表項(xiàng)并非僅指普通的IP五元組,而是由一些關(guān)鍵字和執(zhí)行動(dòng)作組成的靈活規(guī)則,并且每個(gè)關(guān)鍵字字段都是可以通配的。在實(shí)際應(yīng)用中,網(wǎng)絡(luò)管理人員可以通過(guò)配置流表項(xiàng)中具體的匹配關(guān)鍵字來(lái)決定使用何種粒度的流轉(zhuǎn)發(fā)規(guī)則。例如,如果只需要根據(jù)目的IP進(jìn)行路由,那么下發(fā)流表項(xiàng)時(shí),關(guān)鍵字只匹配目的IP字段,其它關(guān)鍵字全通配,而動(dòng)作中只需要一個(gè)出端口即可實(shí)現(xiàn)常規(guī)的IP路由轉(zhuǎn)發(fā)。
自2009年底發(fā)布第一個(gè)正式版本v1.0以來(lái),OpenFlow協(xié)議已經(jīng)經(jīng)歷了1.1、1.2、1.3以及最新發(fā)布的1.4等版本的演進(jìn)過(guò)程。同時(shí),2012年OpenFlow管理和配置協(xié)議也發(fā)布了第一個(gè)版本(OF-CONFIG1.0&1.1),用于配合OpenFlow協(xié)議進(jìn)行自動(dòng)化的網(wǎng)絡(luò)部署。圖1給出了OpenFlow協(xié)議各個(gè)版本的演進(jìn)過(guò)程和主要變化,目前使用和支持最多的是OpenFlow1.0和OpenFlow1.3版本,圖2說(shuō)明了這兩個(gè)版本的主要變化。
圖1:OpenFlow協(xié)議版本演進(jìn)圖
OpenFlow協(xié)議是描述控制器和交換機(jī)之間交互信息的南向接口標(biāo)準(zhǔn)。OpenFlow協(xié)議支持三類消息類型:Controller-to-Switch,Asynchronous和Symmetric,每一種類型都有多個(gè)子類型,控制器和交換機(jī)之間通過(guò)這三類消息進(jìn)行連接建立,流表下發(fā)和信息交換,實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)中所有OpenFlow交換機(jī)的控制。
圖2:OpenFlow1.0到1.3版本演進(jìn)的主要結(jié)構(gòu)變化
下面簡(jiǎn)單介紹一下OpenFlow協(xié)議中1.0到1.4版本的主要變化過(guò)程。
OpenFlow1.0協(xié)議指定每個(gè)OpenFlow交換機(jī)中都存在一張流表,用于數(shù)據(jù)包查找、處理和轉(zhuǎn)發(fā),并且只能同一臺(tái)控制器進(jìn)行通信,流表的維護(hù)也是通過(guò)控制器下發(fā)相應(yīng)的OpenFlow消息來(lái)實(shí)現(xiàn)。流表由多個(gè)流表項(xiàng)組成,而每個(gè)流表項(xiàng)就是一個(gè)轉(zhuǎn)發(fā)規(guī)則。流表項(xiàng)由匹配字段、計(jì)數(shù)器和動(dòng)作組成。其中匹配字段是流表項(xiàng)的標(biāo)識(shí),OpenFlow1.0支持12個(gè)匹配字段;計(jì)數(shù)器用于流表項(xiàng)的匹配和收發(fā)包統(tǒng)計(jì);動(dòng)作指示對(duì)匹配流表項(xiàng)的數(shù)據(jù)包應(yīng)該執(zhí)行的動(dòng)作,如轉(zhuǎn)發(fā)到另一端口,丟棄或送控制器處理,甚至可以修改數(shù)據(jù)包字段轉(zhuǎn)發(fā)。但OpenFlow1.0只支持IPv4。
OpenFlow1.0版本的優(yōu)勢(shì)是它可以與現(xiàn)有的商業(yè)交換芯片兼容,通過(guò)在傳統(tǒng)交換機(jī)上升級(jí)固件就可以支持OpenFlow1.0版本,既方便OpenFlow的推廣使用也有效保護(hù)了用戶的投資,因此OpenFlow1.0是目前使用和支持最廣泛的協(xié)議版本。
自O(shè)penFlow1.1版本開(kāi)始支持多級(jí)流表,將流表匹配過(guò)程分解成多個(gè)步驟,形成流水線處理方式,這樣可以有效和靈活利用硬件內(nèi)部固有的多表特性,同時(shí)把數(shù)據(jù)包處理流程分解到不同的流表中也避免了單流表過(guò)度膨脹問(wèn)題。除此之外OpenFlow1.1中還增加了對(duì)于VLAN和MPLS標(biāo)簽的處理,并且增加了Group表,通過(guò)在不同流表項(xiàng)動(dòng)作中引用相同的組表實(shí)現(xiàn)對(duì)數(shù)據(jù)包執(zhí)行相同的動(dòng)作,簡(jiǎn)化了流表的維護(hù)。OpenFlow1.1版本是OpenFlow協(xié)議版本發(fā)展的一個(gè)分水嶺,它和OpenFlow1.0版本開(kāi)始不兼容,但后續(xù)版本仍然還是在此基礎(chǔ)上發(fā)展。
為了更好支持協(xié)議的可擴(kuò)展性,OpenFlow1.2版本發(fā)展為下發(fā)規(guī)則的匹配字段不再通過(guò)固定長(zhǎng)度的結(jié)構(gòu)來(lái)定義,而是采用了TLV結(jié)構(gòu)定義匹配字段,稱為OXM(OpenFlow Extensible Match),這樣用戶就可以靈活的下發(fā)自己的匹配字段,增加了更多關(guān)鍵字匹配字段的同時(shí)也節(jié)省了流表空間。同時(shí),OpenFlow1.2規(guī)定可以使用多臺(tái)控制器和同一臺(tái)交換機(jī)進(jìn)行連接增加可靠性,并且多控制器可以通過(guò)發(fā)送消息來(lái)變換自己的角色。還有重要的一點(diǎn)是自O(shè)penFlow1.2版本開(kāi)始支持IPv6。
經(jīng)過(guò)1.1和1.2版本的演變積累,2012年4月發(fā)布的OpenFlow1.3版本成為長(zhǎng)期支持的穩(wěn)定版本。OpenFlow1.3流表支持的匹配關(guān)鍵字已經(jīng)增加到40個(gè),足以滿足現(xiàn)有網(wǎng)絡(luò)應(yīng)用的需要。OpenFlow1.3主要還增加了Meter表,用于控制關(guān)聯(lián)流表的數(shù)據(jù)包的傳送速率,但控制方式目前還相對(duì)簡(jiǎn)單。OpenFlow1.3還改進(jìn)了版本協(xié)商過(guò)程,允許交換機(jī)和控制器根據(jù)自己的能力協(xié)商支持的OpenFlow協(xié)議版本。同時(shí),連接建立也增加了輔助連接提高交換機(jī)的處理效率和實(shí)現(xiàn)應(yīng)用的并行性。其它還有IPv6擴(kuò)展頭和Table-miss表項(xiàng)的支持。
2013年最新發(fā)布的OpenFlow1.4版本仍然是基于1.3版本的特征改進(jìn)版本,數(shù)據(jù)轉(zhuǎn)發(fā)層面沒(méi)有太大變化,主要是增加了一種流表同步機(jī)制,多個(gè)流表可以共享相同的匹配字段,但可以定義不同的動(dòng)作;另外又增加了Bundle消息,確?刂破飨掳l(fā)一組完整消息或同時(shí)向多個(gè)交換機(jī)下發(fā)消息的狀態(tài)一致性。其它還支持光口屬性描述,多控制器相關(guān)的流表監(jiān)控等特征。
OpenFlow協(xié)議的發(fā)展演進(jìn)一直都圍繞著兩個(gè)方面,一方面是控制面增強(qiáng),讓系統(tǒng)功能更豐富更靈活;另一方面是轉(zhuǎn)發(fā)層面的增強(qiáng),可以匹配更多的關(guān)鍵字,執(zhí)行更多的動(dòng)作。每一個(gè)后續(xù)版本的OpenFlow協(xié)議都在前一版本的基礎(chǔ)上進(jìn)行了或多或少的改進(jìn),但自O(shè)penFlow1.1版本開(kāi)始和之前版本不兼容,OpenFlow協(xié)議官方維護(hù)組織ONF為了保證產(chǎn)業(yè)界有一個(gè)穩(wěn)定發(fā)展的平臺(tái),把OpenFlow1.0和1.3版本作為長(zhǎng)期支持的穩(wěn)定版本,一段時(shí)間內(nèi)后續(xù)版本發(fā)展要保持和穩(wěn)定版本的兼容。
圖3:OpenFlow1.0測(cè)試規(guī)范概要
神州數(shù)碼網(wǎng)絡(luò)公司(DCN)在2011年就開(kāi)始OpenFlow交換機(jī)的研發(fā),全線交換產(chǎn)品支持OpenFlow1.0和1.3協(xié)議,并配合國(guó)內(nèi)多家高校,科研機(jī)構(gòu)和互聯(lián)網(wǎng)公司進(jìn)行了OpenFlow科研和商用網(wǎng)絡(luò)的部署,是目前國(guó)內(nèi)擁有最多實(shí)際案例的設(shè)備廠商,在行業(yè)內(nèi)處于領(lǐng)先地位。2013年11月開(kāi)放網(wǎng)絡(luò)基金會(huì)ONF正式推出OpenFlow1.0協(xié)議一致性認(rèn)證業(yè)務(wù),為網(wǎng)絡(luò)設(shè)備商提供了證明其產(chǎn)品完全符合OpenFlow標(biāo)準(zhǔn)規(guī)范的機(jī)會(huì),該測(cè)試涵蓋二層和三層交換功能的10個(gè)方面,共有200來(lái)個(gè)測(cè)試項(xiàng)。DCN公司憑借近幾年在OpenFlow研發(fā)的技術(shù)積累,其數(shù)據(jù)中心交換機(jī)CS6500于2014年4月順利通過(guò)ONF的規(guī)范測(cè)試,成為國(guó)內(nèi)首家通過(guò)OpenFlow1.0一致性認(rèn)證的設(shè)備廠商。今后DCN將持續(xù)研發(fā)創(chuàng)新,積極配合用戶實(shí)踐SDN,引領(lǐng)網(wǎng)絡(luò)設(shè)備市場(chǎng)的新變革。