zz:NETCONF協議詳解
隨著SDN的大熱,一個誕生了十年之久的協議煥發了第二春,它就是Netconf協議。如果你在兩年前去搜索Netconf協議,基本得到的信息都是“這個協議是一個網管協議,主要目的是彌補SNMP協議的不足,希望可以取代SNMP協議”。SNMP有哪些不足,而NETCONF是否真的能夠彌補,這都不是重點,重點是NETCONF誕生至今SNMP依舊活的好好的。所以如果我們還是把NETCONF當做一個網管協議的話,估計它會在冷板凳上一直坐下去,而如果我們換一個角度去看待NETCONF協議,你會發現也許它是最適合SDN的一個協議。

0. 概述
NETCONF = The?Network?Configuration Protocol
SDN = Software Define?Network
從文字含義上就覺得NETCONF和SDN可以在一起搞事情,搞什么事情? 搞Network啊。
SDN要用軟件去定義網絡,如何定義?簡單就是要用軟件去配置網絡,有人說”配置網絡太空泛了,能不能具體點?”,但我真的沒法說的具體,因為網絡能配置的東西太多了,網絡的設備類型多種多樣,業務類型更是成百上千了,但SDN就是想在這么復雜的網絡上開辟一番新的天地,NETCONF可以說是其不二的選擇。
接下來就對NETCONF1.1(RFC6241)版本進行詳細分析。
1. NETCONF1.1協議詳解
NETCONF采用的是C/S的模式:
從上圖中可以看出NETCONF協議內部分為4層,由下至上分別是安全傳輸層,消息層,操作層和內容層。
在詳細介紹這四層之前,需要提前建立一個概念,NETCONF認為網絡的模型數據可以分為兩大類,即狀態數據和配置數據。狀態數據一般指server(設備)的固有屬性數據和當前運行的狀態數據等,這類數據僅能查詢。而配置數據則是指由用戶(以某種方式)配置到server上的數據。而配置數據本身又可以存在多個數據庫,標準中提到了
1.1. 安全傳輸層
NETCONF的第一大優勢就是其從協議層面就已經規定其傳輸層必須使用帶有安全加密的通信協議,例如SSH,TLS等。相比與其它也允許明文傳輸的協議來說其在協議層面就已經對數據安全做了第一道守護。由于NETCONF協議規定必須要支持SSH,所以目前SSH是NETCONF使用最廣泛的傳輸層協議。
NETCONF的協議內容是承載在安全傳輸層之上的,所以NETCONF本身是一個應用層協議,所以NETCONF協議中并沒有規定建鏈和保活相關的內容。
1.2. 消息層
NETCONF中定義了三種消息類型,分別是hello, rpc和rpc-reply, notification。
1.2.1.
server和client需要在回話建立后互相發送
一般來說,C/S雙方互發
(1) XPath Capability
該能力表示client可以在filter中使用XPath表達式作為過濾條件
Capability Identifier:
urn:ietf:params:netconf:capability:xpath:1.0
(2) Writable-Running Capability
該能力表示server支持直接對
Capability Identifier:
urn:ietf:params:netconf:capability:writable-running:1.0
(3) Candidate Configuration Capability
該能力表示server具有一個candidate數據庫,并且可以將candidate數據庫中的配置提交生效并更新running數據庫
Capability Identifier:
urn:ietf:params:netconf:capability:candidate:1.0
(4) Rollback-on-Error Capability
該能力表示server在執行client發送的配置數據出錯后可以進行回滾
Capability Identifier:
urn:ietf:params:netconf:capability:rollback-on-error:1.0
(5) Validate Capability
該能力表示server可以校驗client發送的配置數據是否正確
Capability Identifier:
urn:ietf:params:netconf:capability:validate:1.1
(6) Distinct startup Capability
該能力表示server有一個startup數據庫,用于保存啟動配置
Capability Identifier:
urn:ietf:params:netconf:capability:startup:1.0
1.2.2.
在
關于RPC最重要的一點: 原文如下:
NETCONF
個人對這段話的理解是這樣的:
1. netconf-client必須保證server收到的rpc請求的順序和message-id的順序是一致的。
2. netconf-server在能保證數據不沖突的前提下可以并行處理收到的rpc請求。
3. netconf-server在發送
1.2.3.
在netconf的1.0版本中還沒有加入Notification相關的內容,而在1.1版本已經將RFC5277(NETCONF Event Notifications)囊落在內了。支持Notification上報的netconf-server需在能力交換時上報能力:
“urn:ietf:params:netconf:capability:notification:1.0”
幾個關鍵的知識點:
1. Netconf的通知采用的是訂閱發布機制,server僅會向發送過訂閱請求的client發送通知。
2. Netconf的通知是以Stream進行分類的,不同類的Stream以不同的stream-name進行區分。netconf-server默認需要支持的stream-name是”NETCONF”。
3. client不能重復下發訂閱,即同一Stream的訂閱不能重復下發,也不能同時訂閱多個Stream,訂閱可以設置定時取消,如果沒有設置終止時間,取消訂閱需要使用close-session或者kill-session。定時取消的訂閱netconf的會話還是激活的,而使用close-session或者kill-session來取消的話,netconf會話會關閉。
Stream發現:
例如:
發起訂閱:
通知內容舉例:
1.3. 操作層
操作層僅承載在僅
NETCONF協議規定了9種簡單的rpc操作,同時也支持用戶自定義rpc操作。有關自定義操作的內容放到內容層來講。
1.3.1.
用于查詢狀態數據,另外如果server支持能力:urn:ietf:params:netconf:capability:xpath:1.0則還可以使用filter進行條件查詢,例如:
1.3.2.
用于查詢配置數據,可以通過
1.3.3.
用于對指定配置數據庫的內容進行修改,支持以下幾種操作:
merge:?合并操作,此操作為默認操作。
replace:?替換操作,如果對象已經存在則替換,不存在則創建。
create:?創建操作,如果對象已經存在,則報錯誤“data-exists”。
delete:?刪除操作,如果對象存在則刪除,不存在則報錯 “data-missing”。
remove:?刪除操作,如果對象存在則刪除,不存在則忽略。
舉例:
1.3.4.
將一個庫的數據復制到另一個庫。
舉例:
1.3.5.
刪除一個數據庫。但是
1.3.6.
獲取指定數據庫的鎖,當某個client獲得了指定數據庫的鎖之后,在其沒有釋放該鎖之前,其余client均不能獲得該數據庫的鎖,也不能對其進行修改操作。同一client也不能在沒有釋放鎖之前,重復申請鎖。
獲取鎖的主要目的就是避免并發導致數據沖突。
舉例:
1.3.7.
釋放指定數據庫的鎖。client只能釋放自己持有的鎖,不能釋放其它client的鎖。
舉例:
1.3.8.
優雅關閉netconf會話,netconf-server將釋放該client持有的鎖和為其分配的資源,并優雅的關閉與該client鏈接。所有在
1.3.9.
強制關閉netconf會話。
1.4. 內容層
開放但規范的內容層是netconf協議的精髓所在。其開放體現在netconf協議本身沒有對內容層的數據結構做任何的限定。而其規范則體現在其內容層需要使用Yang語言對其數據進行建模。
在netconf出現之前,我們所熟知且常用的協議,均采用在協議中規定報文的結構體,并按字節流讀取并解析的架構。為了更好的在字節流中表達更豐富的報文結構,我們采用TLV等方式來定義對象。但不知大家是否發現,這種方式幾乎不具備任何擴展性,一旦擴充對象,或修改對象就需要變更代碼。而如果對一個協議擴展了大量的私有數據,那么首先協議不在標準,其次協議棧的代碼幾乎是完全重寫。
而netconf的出現可以說直接對上述問題進行了一次”降維“打擊,它完全站在了一個更高的維度來解決上述問題。其內容層未指定具體的模型結構,而是指定了一套建模語言–yang。也就是說使用yang定義的數據模型,均可以作為netconf的內容層。所以擴展對netconf來說就是不斷的增加和修改yang文件而已。
做一個比喻,傳統基于字節流的協議可以比作一份具有特定可執行的程序,而NETCONF則是寫程序的編程語言。
另外一點我們在上面將操作的時候提到netcon支持用戶自定義操作。也就是說我們不必糾結標準制定的9個操作類型是否夠用,完全可以根據實際的需求在yang文件中定義相應的rpc操作。
Netconf協議本身的一些擴展也是采用在標準中增加默認支持的yang文件的方式來實現的,比如yang-moudle-monitor。
2. 標準地圖
3. 相關網絡資源
http://www.netconfcentral.com/
網絡
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。