zz:NETCONF協議詳解

      網友投稿 919 2025-03-31

      隨著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.

      僅用于回話剛剛建立時netconf-server和netconf-client之間進行能力交換。

      server和client需要在回話建立后互相發送消息,并在消息中攜帶自身支持的能力,以及支持的netconf協議的版本號,server和client根據自身和對方的能力信息協商使用的netconf版本。

      一般來說,C/S雙方互發且協商版本成功后,認為netconf會話建立成功。

      (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.

      是由netconf-client發起的發送到netconf-server的消息。用于client請求server執行某項具體的操作。

      包含一個強制屬性”message-id”,這個id是一個單調遞增的正整數,同一會話內不能重復。該id用于的配對。

      是有netconf-server發送給netconf-client的rpc響應。不能主動發起,僅能在收到之后回復,切必須攜帶與收到的rpc相同的message-id。

      定義了兩種默認的元素分別是表示未定義響應內容的rpc執行成功,而表示rpc執行失敗。

      關于RPC最重要的一點: 原文如下:

      NETCONFrequests MUST be processed serially by the managed device. Additionalrequests MAY be sent before previous ones have been completed. The managed device MUST send responses only in the order the requests were received.

      個人對這段話的理解是這樣的:

      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發現:

      例如:

      ???? ???????? ???????????? ???????????????? ???????????? ???????? ???? ???? ???????? ???????????? ???????????????? ????????????????????NETCONF ????????????????????default?NETCONF?event?stream ????????????????????true ????????????????????2007-07-08T00:00:00Z ???????????????? ???????????????? ????????????????????SNMP ????????????????????SNMP?notifications ????????????????????false ???????????????? ???????????????? ????????????????????syslog-critical ????????????????????Critical?and?higher?severity ????????????????????true ????????????????????2007-07-01T00:00:00Z ???????????????? ???????????? ???????? ????

      發起訂閱:

      ???? ????????SNMP ???? ????

      通知內容舉例:

      ????2007-07-08T00:10:00Z ???? ????????state ???????? ????????????Ethernet0 ???????? ????????enabled ????

      1.3. 操作層

      操作層僅承載在僅消息上,消息無操作層。

      NETCONF協議規定了9種簡單的rpc操作,同時也支持用戶自定義rpc操作。有關自定義操作的內容放到內容層來講。

      1.3.1.

      用于查詢狀態數據,另外如果server支持能力:urn:ietf:params:netconf:capability:xpath:1.0則還可以使用filter進行條件查詢,例如:

      ???? ???????? ???????????? ???????????????? ???????????????????? ????????????????????????eth0 ???????????????????? ???????????????? ???????????? ???????? ???? ???? ???????? ???????????? ???????????????? ????????????????????eth0 ????????????????????45621 ????????????????????774344 ???????????????? ???????????? ???????? ????

      1.3.2.

      用于查詢配置數據,可以通過 來指定不同的配置庫,例如:

      ???? ???????? ???????????? ???????? ???????? ???????????? ???????????????? ???????????? ???????? ???? ???? ???????? ???????????? ???????????????? ????????????????????root ????????????????????superuser ????????????????????Charlie?Root ???????????????????? ????????????????????????1 ????????????????????????1 ???????????????????? ???????????????? ???????????????? ???????????? ???????? ????

      1.3.3.

      用于對指定配置數據庫的內容進行修改,支持以下幾種操作:

      merge:?合并操作,此操作為默認操作。

      replace:?替換操作,如果對象已經存在則替換,不存在則創建。

      create:?創建操作,如果對象已經存在,則報錯誤“data-exists”。

      delete:?刪除操作,如果對象存在則刪除,不存在則報錯 “data-missing”。

      remove:?刪除操作,如果對象存在則刪除,不存在則忽略。

      舉例:

      ???? ???????? ???????????? ???????? ???????? ???????????? ???????????????? ????????????????????Ethernet0/0 ????????????????????1500 ????????????????????

      ????????????????????????192.0.2.4 ????????????????????????24 ????????????????????
      ???????????????? ???????????? ???????? ???? ???? ???????? ???????????? ???????? ????????none ???????? ???????????? ???????????????? ???????????????????? ???????????????????????? ????????????????????????????0.0.0.0 ???????????????????????????? ???????????????????????????????? ????????????????????????????????????192.0.2.4 ???????????????????????????????? ???????????????????????????? ???????????????????????? ???????????????????? ???????????????? ???????????? ???????? ????

      1.3.4.

      將一個庫的數據復制到另一個庫。

      舉例:

      ???? ???????? ???????????? ???????? ???????? ????????????https://user:password@example.com/cfg/new.txt ???????? ????

      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.

      zz:NETCONF協議詳解

      強制關閉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小時內刪除侵權內容。

      上一篇:word如何將a3變成a4排版(word中怎樣將A3版面內容變為A4)
      下一篇:怎樣在框里劃橫線(如何在方框里畫橫線)
      相關文章
      亚洲国产精品嫩草影院| 久久精品亚洲综合专区| 亚洲国产综合久久天堂| 亚洲精品无码aⅴ中文字幕蜜桃| 亚洲高清视频免费| 亚洲AV美女一区二区三区| 亚洲AV中文无码字幕色三| 国产成A人亚洲精V品无码性色| 亚洲乳大丰满中文字幕| 亚洲中文字幕久久精品无码APP| 久久久久亚洲精品男人的天堂| 亚洲中文字幕无码专区| 三上悠亚亚洲一区高清| 亚洲中文字幕无码不卡电影 | 国产亚洲精品不卡在线| 亚洲午夜精品第一区二区8050| 亚洲国产综合人成综合网站| 亚洲欧洲日本在线| 一本色道久久综合亚洲精品高清| 久久亚洲AV无码西西人体| 国产亚洲色视频在线| 亚洲熟妇无码乱子AV电影| 久久久久久久尹人综合网亚洲| 亚洲精品国产精品乱码不99 | 亚洲中文字幕AV在天堂| 亚洲综合一区无码精品| 亚洲av日韩综合一区久热| 国产亚洲视频在线观看网址| 亚洲第一区在线观看| 国产亚洲?V无码?V男人的天堂| 亚洲精品国产精品乱码不99| 久久久久亚洲AV片无码| 亚洲精品中文字幕无码AV| 亚洲最大成人网色香蕉| 亚洲精品第一国产综合亚AV| 亚洲AⅤ永久无码精品AA| 亚洲无线码一区二区三区| 亚洲AV日韩精品久久久久久 | 亚洲福利在线播放| 亚洲精品无码久久千人斩| 亚洲人成电影亚洲人成9999网|