OpenFlow,長(zhǎng)期以來一直是軟件定義網(wǎng)絡(luò)的管理和控制協(xié)議,目前正面臨著來自其它協(xié)議的挑戰(zhàn)。
可替代OpenFlow的協(xié)議包括NETCONF、BGP、OVSDB、XMPP以及MPLS-TP。然而,雖然這些協(xié)議都可以用于管理網(wǎng)絡(luò)操作的各個(gè)方面,但它們并不提供和OpenFlow完全相同的功能和特性。
NETCONF協(xié)議
NETCONF協(xié)議,由RFC 6241定義,用以替代命令行界面(command line interface, CLI)、簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議(Simple Network Management Protocol, SNMP)以及其它專有配置機(jī)制。管理軟件可以使用NETCONF協(xié)議將配置數(shù)據(jù)寫入設(shè)備,也可從設(shè)備中檢索數(shù)據(jù)。所有數(shù)據(jù)用可擴(kuò)展標(biāo)記語(yǔ)言(Extensible Markup Language, XML)編碼,通過SSL或傳輸層安全這樣安全、面向連接的協(xié)議,使用遠(yuǎn)程過程調(diào)用(remote procedure calls, RPCs)方式傳輸。
NETCONF協(xié)議定義了多個(gè)數(shù)據(jù)存儲(chǔ),或多套配置數(shù)據(jù)。正在運(yùn)行的配置數(shù)據(jù)存儲(chǔ)包含當(dāng)前設(shè)備正在使用的配置信息。一些設(shè)備還儲(chǔ)存啟動(dòng)配置數(shù)據(jù),其中包含設(shè)備第一次啟動(dòng)時(shí)的配置數(shù)據(jù),不過和運(yùn)行中配置數(shù)據(jù)分離開來。
除了配置數(shù)據(jù),設(shè)備還儲(chǔ)存狀態(tài)數(shù)據(jù)和信息,如包統(tǒng)計(jì)數(shù)據(jù)、運(yùn)行中設(shè)備收集的其他數(shù)據(jù)??刂栖浖梢宰x取這些數(shù)據(jù),但是不能寫入。
候選配置數(shù)據(jù)存儲(chǔ)是一個(gè)可選的設(shè)備性能。如果啟用,它包含一組配置數(shù)據(jù),控制器能用來更新正在運(yùn)行的數(shù)據(jù)存儲(chǔ),以及修改設(shè)備操作。從備選配置數(shù)據(jù)中分離出正在運(yùn)行的配置數(shù)據(jù)可以消除配置不一樣的問題(例如,一系列CLI命令正在更新配置,隨著一個(gè)個(gè)命令相繼執(zhí)行,配置就會(huì)處于一個(gè)不一致的狀態(tài))。
一旦NETCONF會(huì)話開始,控制器和設(shè)備就會(huì)交換一組“特性”。這組“特性”包括一些信息,如NETCONF協(xié)議版本支持列表、備選數(shù)據(jù)是否存在、運(yùn)行中的數(shù)據(jù)存儲(chǔ)可修改的方式。除此之外,“特性”在NETCONF RFC中定義,開發(fā)人員可以通過遵循RFC中描述的規(guī)范格式添加額外的“特性”。
NETCONF協(xié)議的命令集由讀取、修改設(shè)備配置數(shù)據(jù),以及讀取狀態(tài)數(shù)據(jù)的一系列命令組成。命令通過RPCs進(jìn)行溝通,并以RPC回復(fù)來應(yīng)答。一個(gè)RPC回復(fù)必須響應(yīng)一個(gè)RPC才能返回。一個(gè)配置操作必須由一系列RPC組成,每個(gè)都有與其對(duì)應(yīng)的應(yīng)答RPC。
所選擇的傳輸協(xié)議必須保證RPC按發(fā)送順序傳遞給設(shè)備,而且應(yīng)答必須按照發(fā)起RPC的順序被接收。除了從控制器向設(shè)備發(fā)送命令,設(shè)備也可以發(fā)出通知來告知控制器設(shè)備上的一些事件。
NETCONF協(xié)議命令:
get-config:請(qǐng)求返回所有或一部分配置數(shù)據(jù)。傳遞的參數(shù)指定哪些配置數(shù)據(jù)需要返回,哪些具體元素需要獲取。設(shè)備回復(fù)所請(qǐng)求的數(shù)據(jù),如果設(shè)備不能滿足請(qǐng)求,返回RPC錯(cuò)誤。
get:請(qǐng)求返回運(yùn)行中配置數(shù)據(jù)和狀態(tài)數(shù)據(jù)。該命令可以請(qǐng)求所有數(shù)據(jù)或指定一組元素。
edit-config: 修改配置數(shù)據(jù)。包含在命令中的操作指令對(duì)目標(biāo)數(shù)據(jù)中的特定配置數(shù)據(jù)元素進(jìn)行操作。
merge:編輯命令中攜帶的數(shù)據(jù)被合并到現(xiàn)有數(shù)據(jù)。
replace:編輯命令中攜帶的數(shù)據(jù)替換現(xiàn)有的數(shù)據(jù)。
create:創(chuàng)建指定的數(shù)據(jù)存儲(chǔ)元素,命令中的數(shù)據(jù)插入。如果該元素已經(jīng)存在,設(shè)備返回RPC錯(cuò)誤。
delete:刪除指定的數(shù)據(jù)存儲(chǔ)元素。如果元素不存在,設(shè)備返回RPC錯(cuò)誤。
remove:和delete指令類似,但是如果元素不存在,操作被忽略,并且不返回錯(cuò)誤。
copy-config:將一個(gè)數(shù)據(jù)存儲(chǔ)復(fù)制到另一個(gè)。如果目標(biāo)數(shù)據(jù)存儲(chǔ)不存在,則創(chuàng)建它。
commit:將備選數(shù)據(jù)存儲(chǔ)中的內(nèi)容復(fù)制到運(yùn)行中的數(shù)據(jù)存儲(chǔ)。當(dāng)設(shè)備功能不允許copy-config命令來修改運(yùn)行中的數(shù)據(jù)存儲(chǔ)時(shí)使用該命令。
delete-config:刪除指定的數(shù)據(jù)存儲(chǔ)。
lock and unlock:一臺(tái)設(shè)備可能支持多個(gè)NETCONF與多個(gè)控制器會(huì)話,還可能繼續(xù)支持其他配置機(jī)制,如CLI或SNMP. lock命令防止其他配置源干擾正在運(yùn)行的一系列NETCONF操作。unlock命令釋放鎖,并允許其它源在設(shè)備上操作。實(shí)際操作中,locks命令應(yīng)該只能在短時(shí)間執(zhí)行。
close-session:控制器軟件通常在設(shè)備啟動(dòng)時(shí)就會(huì)打開一個(gè)NETCONF連接,并且只要控制器還在管理設(shè)備,就會(huì)一直維持連接。當(dāng)控制器不再管理設(shè)備時(shí),close-session用來正常關(guān)閉連接。
NETCONF vs. OpenFlow
雖然NETCONF和OpenFlow都可以提供控制器軟件和設(shè)備之間的通信,但是兩個(gè)協(xié)議在很多方面是完全不同的。NETCONF是一個(gè)配置協(xié)議,而OpenFlow只是在流程表中在指定數(shù)據(jù)包如何通過路由傳入。OpenFlow的交換機(jī)使用OF-Config進(jìn)行配置,而OF-Config使用NETCONF來與設(shè)備進(jìn)行通信。
NETCONF協(xié)議通過一組可選性能適用于任何設(shè)備架構(gòu),開發(fā)人員可以創(chuàng)建額外“特性”,因此NETCONF設(shè)備可以包含專有功能。反觀,OpenFlow擁有特定設(shè)備體系結(jié)構(gòu)。OpenFlow設(shè)備必須以一個(gè)標(biāo)準(zhǔn)的架構(gòu)建立,沒有專有功能,以確保廠商能夠開發(fā)依附OpenFlow標(biāo)準(zhǔn)的白盒交換機(jī)。這些商品設(shè)備一投入使用將大大降低網(wǎng)絡(luò)成本。
OpenFlow交換機(jī)不支持傳統(tǒng)交換機(jī)和路由器用來確定網(wǎng)絡(luò)路徑的路由協(xié)議,所有有關(guān)數(shù)據(jù)包路徑的信息都來自路由器。NETCONF設(shè)備可以支持這樣的路由協(xié)議。在軟件定義網(wǎng)絡(luò)中,這些協(xié)議將繼續(xù)被使用,控制器軟件管理網(wǎng)絡(luò)操作的某些方面,同時(shí)數(shù)據(jù)包路徑仍舊在設(shè)備級(jí)別確定。
OpenFlow還是NETCONF?
因此,到底是選擇OpenFlow還是NETCONF呢?本質(zhì)是:網(wǎng)絡(luò)有所不同。一些網(wǎng)絡(luò)管理員會(huì)選擇繼續(xù)使用已更新NETCONF接口的現(xiàn)有設(shè)備。其它管理員可能會(huì)因?yàn)閮r(jià)格優(yōu)勢(shì)選擇白盒交換機(jī)。隨著軟件定義網(wǎng)絡(luò)技術(shù)的成熟,管理員們必須繼續(xù)關(guān)注市場(chǎng)發(fā)展,選擇最密切滿足其網(wǎng)絡(luò)需求的設(shè)計(jì)和產(chǎn)品。