NETCONF协议(Network Configration Protocol)

  • NETCONF是一个基于XML的交换机配置接口,用于替代CLI、SNMP等配置交换机。
  • 本质上来说,NETCONF就是利用XML-RPC的通讯机制实现配置客户端和配置服务端之间的通信,实现对网络设备的配置和管理。

NETCONF通过RPC与交换机通信,协议包含四层

i. 安全传输层,用于跟交换机安全通信,NETCONF并未规定具体使用哪种传输层协议,所以可以使用SSH、TLS、HTTP等各种协议,官方默认使用SSH进行加密及数据传输

ii.消息层,提供一种传输无关的消息封装格式,用于RPC通信,消息层流程如下

NETCONF中定义了三种消息类型,分别是hello, rpc和rpc-reply, notification。

Ø  <hello>

<hello>仅用于回话刚刚建立时netconf-server和netconf-client之间进行能力交换。

server和client需要在回话建立后互相发送<hello>消息,并在<hello>消息中携带自身支持的能力,以及支持的netconf协议的版本号,server和client根据自身和对方的能力信息协商使用的netconf版本。

一般来说,C/S双方互发<hello>且协商版本成功后,认为netconf会话建立成功。操作层,定义了一系列的RPC调用方法,并可以通过Capabilities来扩展

几种常用能力

(1) XPath Capability

  该能力表示client可以在filter中使用XPath表达式作为过滤条件

  Capability Identifier:

  urn:ietf:params:netconf:capability:xpath:1.0

(2) Writable-Running Capability

  该能力表示server支持直接对<running/>库进行修改操作。

  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

Ø  rpc和rpc-reply,

<rpc>是由netconf-client发起的发送到netconf-server的消息。用于client请求server执行某项具体的操作。

<rpc>包含一个强制属性”message-id”,这个id是一个单调递增的正整数,同一会话内不能重复。该id用于<rpc>和<rpc-reply>的配对。

<rpc-reply>是有netconf-server发送给netconf-client的rpc响应。不能主动发起,仅能在收到<rpc>之后回复,切必须携带与收到的rpc相同的message-id。

在<rpc-reply>定义了两种默认的元素分别是<ok>和<rpc-error>。<ok>表示未定义响应内容的rpc执行成功,而<rpc-error>表示rpc执行失败。

Ø  notification

持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会话会关闭。

iii.操作层,NETCONF提供了九种基本操作:

Ø  get-config    用于查询配置数据

Ø  edit-config     用于对指定配置数据库的内容进行修改,支持以下几种操作:

     merge: 合并操作,此操作为默认操作。

  replace: 替换操作,如果对象已经存在则替换,不存在则创建。

  create: 创建操作,如果对象已经存在,则报错误“data-exists”。

  delete: 删除操作,如果对象存在则删除,不存在则报错 “data-missing”。

  remove: 删除操作,如果对象存在则删除,不存在则忽略。

Ø  copy-config   将一个库的数据复制到另一个库

Ø  delete-config 删除一个数据库。但是<running/>库不能被删除。

Ø  lock  获取指定数据库的锁,当某个client获得了指定数据库的锁之后,在其没有释放该锁之前,其余client均不能获得该数据库的锁,也不能对其进行修改操作。同一client也不能在没有释放锁之前,重复申请锁。 获取锁的主要目的就是避免并发导致数据冲突。

Ø  unlock释放指定数据库的锁。client只能释放自己持有的锁,不能释放其它client的锁。

Ø  get  用于查询状态数据

Ø  close-session  优雅关闭netconf会话,netconf-server将释放该client持有的锁和为其分配的资源,并优雅的关闭与该client链接。

Ø  kill-session  强制关闭netconf会话。

get-config请求报文解析流程B

iv.内容层,定义RPC调用的数据内容,即配置数据库

NETCONF实现流程:

RPC模型

  • NETCONF协议使用基于RPC的通信模型。 NETCONF对等体使用<rpc>和<rpc-reply>元素来提供NETCONF请求和响应的传输协议无关帧。

<rpc>元素用于封装从客户端发送到服务器的NETCONF请求。

<rpc>元素有一个强制属性“message-id”,它是由RPC的发送者选择的一个字符串,它通常编码一个单调递增的整数。 RPC的接收者不解码或解释这个字符串,只是简单地保存它在任何生成的<rpc-reply>消息中用作“message-id”属性。

<rpc-reply>响应<rpc>操作发送<rpc-reply>消息。

<rpc-reply>元素有一个强制属性“message-id”,它等于这是一个响应的<rpc>的“message-id”属性。

响应名称和响应数据被编码为<rpc-reply>元素的内容。 回复的名字是直接在<rpc-reply>元素中的一个元素,任何数据都在这个元素内编码。

  • 如果在处理<rpc>请求期间发生错误,<rpc-error>元素将在<rpc-reply>消息中发送。

如果服务器在处理<rpc>请求期间遇到多个错误,<rpc-reply>可能包含多个<rpc-error>元素。但是,如果请求包含多个错误,则服务器不需要检测或报告多个<rpc-error>元素。

服务器不需要按照特定的顺序检查特定的错误条件。如果在处理期间出现任何错误情况,服务器务必返回一个<rpc-error>元素,并且如果在处理期间出现任何警告条件,应该返回一个<rpc-error>元素。

服务器绝对不能在客户端没有足够访问权限的<rpc-error>元素中返回应用级或数据模型特定的错误信息。

error-type:定义错误发生的概念层,下列类型之一。

Ø  transport (layer: Secure Transport)

Ø  rpc (layer: Messages)

Ø  protocol (layer: Operations)

Ø  application (layer: Content)

error-tag:包含识别错误条件的字符串。

error-severity:包含标识错误严重性的字符串,由设备确定。 下列之一:

Ø  error

Ø  warning

error-app-tag:包含标识数据模型特定或特定于实现的错误条件(如果存在)的字符串。

error-path:包含绝对XPath表达式,用于标识<rpc-error>元素中报告的错误关联的节点的元素路径。 如果没有适当的有效载荷元素或数据存储节点可以与特定的错误条件相关联,则该元素将不存在。

error-message:包含一个适合人类阅读的字符串,用于描述错误情况

error-info:包含协议或数据模型特定的错误内容。

NETCONF的更多相关文章

  1. netconf、yang和XML关系

    netconf是基于xml的网络配置协议,文档RFC6241有详细介绍. yang是为netconf建模的一种数据建模语言.文档RFC2060详细介绍了yang1.0版本,RFC7950介绍了yang ...

  2. SDN的初步实践--通过netconf协议控制交换机

    1.近期在做一个云服务项目,需要与物理交换机配合实现,通过python编程实现了对物理交换机的控制,完全不需要命令行手工配置交换机, 一定程度上实现了SDN的集中控制的思想. 2.架构图如下: 3.利 ...

  3. NETCONF+Yang配置TSN

    NETCONF用来替换SNMP,是一个网管协议.YANG是NETCONF的数据建模语言,可以使用Yang模式的文本配置网关,从而通过NETCONF协议管理网关. NETCONF+Yang可用于TSN( ...

  4. 使用Netconf管理Cisco网络设备

    测试环境:Cisco CSR1000V虚拟化环境 Step 1:开启Cisco设备netconf-Yang,如下图: CSR1000V(config)#netconf-yang CSR1000V(co ...

  5. zz:NETCONF协议详解

    随着SDN的大热,一个诞生了十年之久的协议焕发了第二春,它就是NETCONF协议.如果你在两年前去搜索NETCONF协议,基本得到的信息都是"这个协议是一个网管协议,主要目的是弥补SNMP协 ...

  6. 软件定义网络基础---NETCONF协议

    netconf协议最早被作为网管协议被提出来的,与SNMP网管协议相比较:SNMP的优势在于网络设备的监测,在大规模网管应用中有很大不足,正是针对这种不足之处,提出了NETCONF协议 一:NETCO ...

  7. RFC6241 NETCONF

    概述 NETCONF = The Network Configuration Protocol SDN = Software Define Network NETCONF协议分为传输层.消息层.操作层 ...

  8. 通过python基于netconf协议获取网络中网元的配置数据,助力企业网络控制自动化轻松实现!

    摘要:在当今信息化时代,大多数企业都需要网络支撑企业的ICT运行,提升企业运行效率,针对企业网络中的网元设备(包括交换机,路由器,防火墙等),很多企业希望根据自身的业务特点定制网络管理,比如可以实现网 ...

  9. 一文读懂网管协议 - SNMP,NETCONF,RESTCONF

    本文篇幅较长,主要涉及以下内容: 介绍传统 CLI 配置网络设备存在的挑战,网管协议出现的背景 SNMP 原理,交互过程,以及 trade-off NETCONF 架构,交互过程 RESTCONF 架 ...

随机推荐

  1. vue中关于checkbox数据绑定v-model指令的个人理解

    vue.js为开发者提供了很多便利的指令,其中v-model用于表单的数据绑定很常见, 下面是最常见的例子: <div id='myApp'>     <input type=&qu ...

  2. 教师表(TEACHER.DBF)

    20-27题使用的数据如表1和表2所示. 表1 教师表(TEACHER.DBF) 教师号 姓名 性别 籍贯 职称 年龄 工资/元 0001 王吉兵 男 江苏 讲师 27 2003.50 0002 张晓 ...

  3. 【Java基础】构造方法 static 块 {}块 执行顺序

    package com.test.innerclass; public class HelloB extends HelloA { public HelloB() { System.out.print ...

  4. Spring Web Flow 2.0 入门

    转载: https://www.ibm.com/developerworks/cn/education/java/j-spring-webflow/index.html 开始之前 关于本教程 本教程通 ...

  5. 在Linux命令行模式安装VMware Tools

    在Linux命令行模式安装VMware Tools 方法/步骤1: 首先启动CentOS 7,在VMware中点击上方“VM”,点击“Install VMware Tools...”(如已安装则显示“ ...

  6. Unity 动画属性

    在动画的使用上使用不当的设置往往会造成不可预料的结果. 首先,如果动画自身可以驱动物体移动,那么在Animator组件上必须选择apply root motion,物体的动画位移才能生效,否则动画只能 ...

  7. CF140C New Year Snowmen(贪心+优先队列)

    CF140C 贪心+优先队列 贪心策略:每次取出数量最多的三种球,合成一个答案,再把雪球数都-1再插回去,只要还剩下三种雪球就可以不断地合成 雪球数用优先队列维护 #include <bits/ ...

  8. Solr 4.4.0利用dataimporthandler导入本地pdf、word等文档

    1. 创建本地目录 $ mkdir /usr/local/contentplatform/solr/solr/core1/file1 $ ls -lh total 88M -rw-r--r-- tnu ...

  9. java.time包常用类API学习记录

    Java8出来已那么多年了,java.time包之前一直没有使用过,最近正好有用到,在此做个记录. 上图列出了java.time包下的类,接下来我们详细看下其中每个类的用法. Clock:获取到当前时 ...

  10. 思考--PostgreSQL在与mysql的比较中稍微弱势项

    PostgreSQL在与mysql的比较中稍微弱势项: 1.都是堆表,没有所谓的聚集索引表,其实问题不大,聚集索引表也只是在使用聚集索引那些列有加速,而且pg也有聚集索引,只不过要定期重建. 2.mv ...