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