圖1:OpenFlow協(xié)議版本演進(jìn)圖
OpenFlow協(xié)議是描述控制器和交換機(jī)之間交互信息的南向接口標(biāo)準(zhǔn)。OpenFlow協(xié)議支持三類消息類型:Controller-to-Switch,Asynchronous和Symmetric,每一種類型都有多個(gè)子類型,控制器和交換機(jī)之間通過這三類消息進(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版本的主要變化過程。
OpenFlow1.0協(xié)議指定每個(gè)OpenFlow交換機(jī)中都存在一張流表,用于數(shù)據(jù)包查找、處理和轉(zhuǎn)發(fā),并且只能同一臺(tái)控制器進(jìn)行通信,流表的維護(hù)也是通過控制器下發(fā)相應(yīng)的OpenFlow消息來實(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è)交換芯片兼容,通過在傳統(tǒng)交換機(jī)上升級(jí)固件就可以支持OpenFlow1.0版本,既方便OpenFlow的推廣使用也有效保護(hù)了用戶的投資,因此OpenFlow1.0是目前使用和支持最廣泛的協(xié)議版本。
自O(shè)penFlow1.1版本開始支持多級(jí)流表,將流表匹配過程分解成多個(gè)步驟,形成流水線處理方式,這樣可以有效和靈活利用硬件內(nèi)部固有的多表特性,同時(shí)把數(shù)據(jù)包處理流程分解到不同的流表中也避免了單流表過度膨脹問題。除此之外OpenFlow1.1中還增加了對(duì)于VLAN和MPLS標(biāo)簽的處理,并且增加了Group表,通過在不同流表項(xiàng)動(dòng)作中引用相同的組表實(shí)現(xiàn)對(duì)數(shù)據(jù)包執(zhí)行相同的動(dòng)作,簡(jiǎn)化了流表的維護(hù)。OpenFlow1.1版本是OpenFlow協(xié)議版本發(fā)展的一個(gè)分水嶺,它和OpenFlow1.0版本開始不兼容,但后續(xù)版本仍然還是在此基礎(chǔ)上發(fā)展。
為了更好支持協(xié)議的可擴(kuò)展性, OpenFlow1.2版本發(fā)展為下發(fā)規(guī)則的匹配字段不再通過固定長(zhǎng)度的結(jié)構(gòu)來定義,而是采用了TLV結(jié)構(gòu)定義匹配字段,稱為OXM(OpenFlow Extensible Match),這樣用戶就可以靈活的下發(fā)自己的匹配字段,增加了更多關(guān)鍵字匹配字段的同時(shí)也節(jié)省了流表空間。同時(shí),OpenFlow1.2規(guī)定可以使用多臺(tái)控制器和同一臺(tái)交換機(jī)進(jìn)行連接增加可靠性,并且多控制器可以通過發(fā)送消息來變換自己的角色。還有重要的一點(diǎn)是自O(shè)penFlow1.2版本開始支持IPv6。
經(jīng)過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é)商過程,允許交換機(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ā)層面沒有太大變化,主要是增加了一種流表同步機(jī)制,多個(gè)流表可以共享相同的匹配字段,但可以定義不同的動(dòng)作;另外又增加了Bundle消息,確保控制器下發(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版本開始和之前版本不兼容,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ī)范概要