引子 NETCONF和YANG的目的是以可編程的方式實(shí)現(xiàn)網(wǎng)絡(luò)配置的自動(dòng)化,從而簡(jiǎn)化和加快網(wǎng)絡(luò)設(shè)備和服務(wù)的部署,為網(wǎng)絡(luò)運(yùn)營(yíng)商和企業(yè)用戶(hù)節(jié)約成本。NETCONF和YANG對(duì)應(yīng)的RFC文檔分別是RFC6241和RFC6020,而RFC6244描述了一個(gè)實(shí)現(xiàn)NETCONF/YANG的參考架構(gòu)。 按照RFC6241的定義,NETCONF是安裝、編輯和刪除網(wǎng)絡(luò)設(shè)備配置的標(biāo)準(zhǔn)協(xié)議。RFC6020指出,YANG是一種數(shù)據(jù)模型語(yǔ)言(Data Modeling Language),用來(lái)描述NETCONF相關(guān)的網(wǎng)絡(luò)配置和網(wǎng)絡(luò)狀態(tài)的數(shù)據(jù)模型,包括NETCONF支持的RPC(Remote Procedure Call)消息和異步通知(Notification)。請(qǐng)注意,YANG本身不是數(shù)據(jù)模型,而是定義數(shù)據(jù)模型的語(yǔ)言。YANG和NETCONF是相伴而生的,雖然,原則上YANG也能夠用于其他的協(xié)議和不同的領(lǐng)域,但基本上可以認(rèn)為YANG就是為NETCONF量身定做的。 2002年,IAB(Internet Architecture Board)召集了一次關(guān)于網(wǎng)絡(luò)管理的專(zhuān)題工作會(huì)議(Workshop),最終形成了RFC3535。在這份文檔中,針對(duì)當(dāng)時(shí)網(wǎng)絡(luò)管理中存在的問(wèn)題,提出了14項(xiàng)需求,我們不妨列出其中關(guān)鍵的幾項(xiàng):
另外,更為重要的是,是否支持可編程配置的API不是問(wèn)題,問(wèn)題是以怎樣的方式來(lái)支持。這也是自動(dòng)化配置的基礎(chǔ)。顯然,已有的網(wǎng)絡(luò)管理協(xié)議SNMP和上述的需求比較起來(lái)就大大的力所不逮了:盡管具有一些配置的功能,但SNMP本身并不是面向配置的協(xié)議,也不適合開(kāi)發(fā)用于配置的客戶(hù)端應(yīng)用,更談不到Transaction機(jī)制的支持。要滿(mǎn)足這些需求,設(shè)計(jì)新的替代的網(wǎng)絡(luò)管理協(xié)議就不可避免了。于是NETCONF和YANG的1.0版本分別于2006年和2010年正式發(fā)布。 總的來(lái)說(shuō),NETCONF/YANG并不規(guī)范配置的內(nèi)容,支持NETCONF/YANG的設(shè)備供應(yīng)商可保留自己的特有的配置內(nèi)容,但需要轉(zhuǎn)換成用YANG定義的數(shù)據(jù)模型。然后,NETCONF通過(guò)定義標(biāo)準(zhǔn)的操作接口,必須用統(tǒng)一的方法來(lái)安裝、編輯、刪除配置內(nèi)容,獲取設(shè)備運(yùn)行的狀態(tài)數(shù)據(jù)。也就是說(shuō),數(shù)據(jù)內(nèi)容可以不同,但定義數(shù)據(jù)(YANG)和操作數(shù)據(jù)(NETCONF)的方法必須一致統(tǒng)一。 相對(duì)來(lái)講,NETCONF和YANG都不是很新的東西。SDN(Software Defined Network)在學(xué)術(shù)界和工業(yè)界的發(fā)展和影響賦予了這兩項(xiàng)技術(shù)老樹(shù)吐新芽,迎來(lái)第二春的機(jī)會(huì)。大家都知道,SDN不能僅僅停留在抽象的概念層面上,必須找到應(yīng)用的切入點(diǎn), 并向更廣泛的領(lǐng)域逐漸展開(kāi),才會(huì)具有真正的生命力。目前來(lái)看,虛擬網(wǎng)絡(luò)和自動(dòng)化配置是SDN應(yīng)用的兩個(gè)重要支柱。自動(dòng)化配置讓人們重新發(fā)現(xiàn)了NETCONF和YANG的價(jià)值。 NETCONF和YANG相互交織纏繞在一起,剪不斷,理還亂,很難把它們分開(kāi)來(lái)一一描述清楚。所以本文從自動(dòng)化網(wǎng)絡(luò)設(shè)備配置的功能為切入點(diǎn),用實(shí)際的用例,來(lái)說(shuō)明NETCONF/YANG是如何相互配合完成這些功能的。 組成和交互 NETCONF的自動(dòng)化配置系統(tǒng)采用Client/Server架構(gòu)。Client和Server之間由面向連接的傳輸協(xié)議建立會(huì)話。SSH(Secure Shell)是NETCONF強(qiáng)制支持的傳輸協(xié)議,其他的傳輸協(xié)議如TLS和SOAP也能滿(mǎn)足NETCONF的要求。Client和Server通信的內(nèi)容是NETCONF定義的雙向的XML格式的RPC(Remote Procedure Call)消息,包括從Client發(fā)送到Server的<rpc>請(qǐng)求消息,以及Server的響應(yīng)消息<rpc-reply>。這樣,Client就可以獲取并修改Server的配置數(shù)據(jù)(configuration datastore)。 下圖描述了NETCONF配置系統(tǒng)的結(jié)構(gòu)。NETCONF Server是要配置的網(wǎng)絡(luò)設(shè)備,除了硬件之外,NETCONF引擎是和NETCONF Client建立會(huì)話的軟件模塊,當(dāng)然,Server上面還會(huì)運(yùn)行自身設(shè)備的軟件系統(tǒng)。配置數(shù)據(jù)由NETCONF引擎維護(hù)并傳遞給Server的軟件系統(tǒng),最終應(yīng)用到硬件的芯片。正如上文所述,配置數(shù)據(jù)的語(yǔ)法結(jié)構(gòu)是用YANG語(yǔ)言定義的數(shù)據(jù)模型來(lái)描述的,包括數(shù)據(jù)類(lèi)型和數(shù)據(jù)結(jié)構(gòu)。這和XML的Schema與對(duì)應(yīng)的應(yīng)用域數(shù)據(jù)的關(guān)系完全類(lèi)似。YANG分層的樹(shù)狀結(jié)構(gòu)非常適用于網(wǎng)絡(luò)設(shè)備的配置數(shù)據(jù)的定義。YANG的另外一個(gè)優(yōu)點(diǎn)是沒(méi)有晦澀的內(nèi)容,簡(jiǎn)單易懂。用戶(hù)拿到Y(jié)ANG的數(shù)據(jù)模型文件,即可明白如何寫(xiě)NETCONF Client程序來(lái)配置網(wǎng)絡(luò)設(shè)備。YANG語(yǔ)言的數(shù)據(jù)模型可以無(wú)信息丟失的轉(zhuǎn)換為XML的格式,稱(chēng)為YIN(YANG Independent Notation),主要是為了利用隨手可得的標(biāo)準(zhǔn)的XML解析器。開(kāi)源的NETCONF工具庫(kù)libnetconf提供了轉(zhuǎn)換的工具lnctool。NETCONF引擎和Client程序用YIN檢查配置數(shù)據(jù)的合法性。下文將用一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明YANG是如何定義配置數(shù)據(jù)的數(shù)據(jù)模型。
一般地,Client和Server經(jīng)過(guò)如下的步驟來(lái)完成配置的獲取和改變:
由此可見(jiàn),用戶(hù)能夠以任何編程語(yǔ)言實(shí)現(xiàn)遠(yuǎn)端網(wǎng)絡(luò)設(shè)備的定制化配置的需求,所做的無(wú)非是與Server建立會(huì)話連接,封裝發(fā)送<rpc>請(qǐng)求消息,接收解析<rpc-reply>消息。重要的是,用戶(hù)可以通過(guò)這種簡(jiǎn)單的交互模式,實(shí)現(xiàn)自己的業(yè)務(wù)邏輯,比如,可根據(jù)網(wǎng)絡(luò)的負(fù)載和設(shè)備的狀態(tài),應(yīng)用不同的配置。這也許就是可編程的自動(dòng)化配置的內(nèi)涵,也是YANG和NETCONF設(shè)計(jì)的目標(biāo)。 模型和數(shù)據(jù) METCONF Server上面的配置叫做配置存儲(chǔ)。配置存儲(chǔ)是設(shè)備完整的合法的一份配置數(shù)據(jù)拷貝,使能某個(gè)配置存儲(chǔ)可以把設(shè)備從缺省的初始狀態(tài)轉(zhuǎn)換到特定的運(yùn)行狀態(tài)。在同一個(gè)設(shè)備上,NETCONF可支持三種配置存儲(chǔ),包括:
無(wú)論是運(yùn)行時(shí)配置,重啟時(shí)配置還是可選配置的數(shù)據(jù),都是用YANG定義的數(shù)據(jù)模型來(lái)描述的。下面給出一個(gè)關(guān)于網(wǎng)絡(luò)設(shè)備接口的極度簡(jiǎn)化的例子。
YANG語(yǔ)言是非常直觀的模型語(yǔ)言,理解了上面代碼中YANG語(yǔ)言的一些關(guān)鍵詞,如module,container,list,leaf等,就基本可以清楚的知道代碼的含義了。解釋如下:
配置和操作 上文已說(shuō)明,NETCONF Client和NETCONF Server通過(guò)RPC交互完成網(wǎng)絡(luò)設(shè)備的配置。下面給一個(gè)具體的例子,NETCONF Client向NETCONF Server發(fā)送一個(gè)xml編碼的<rpc>請(qǐng)求?,在Server的運(yùn)行時(shí)配置?上通過(guò)操作(operation)create新建一個(gè)網(wǎng)絡(luò)接口?。 如果操作成功,NETCONF Server將返回<rpc-reply>。
異步通知(notification) 通知類(lèi)似于SNMP的trap機(jī)制,當(dāng)NETCONF Client訂閱(subcribe)通知時(shí),通知所對(duì)應(yīng)的事件發(fā)生之后,NETCONF Client就可以得到事件的信息。如下面的例子,NETCONF Client從NETCONF Server那里得到一個(gè)網(wǎng)絡(luò)接口的link-up事件。
參考文獻(xiàn)
Network Configuration Protocol (NETCONF)
YANG - A Data Modeling Language for the Network Configuration Protocol
An Architecture for Network Management Using NETCONF and YANG
Network Configuration Management with NETCONF and YANG
NETCONF toolset Netopeer
Overview of the 2002 IAB Network Management Workshop |
|