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中html、css、js 分离

    在正常的创建和引用vue文件都是html.css.js三者在一起的,这样写起来虽然方便了,但是页面比较大或者代码比较多的情况下,即使使用组件有时代码也比较多,简单来说查找不变不利于编程,大的来说影像优 ...

  2. LeetCode.1051-身高检查器(Height Checker)

    这是小川的第390次更新,第420篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第252题(顺位题号是1051).要求学生按身高递增的顺序站列来拍年度照片. 返回没有站在 ...

  3. QA Issue: PN: startUp is upper case, this can result in unexpected behavior. [uppercase-pn]

    (借用一下) 该错误直接导致生成开机启动程序无法启动,既无法生成S99***快捷链接. 解决方法:仅仅将recpie lib-Test改成lib-test就可以了,即不要有大写字母. 附启动方法: S ...

  4. VGA显示正圆

    接着上次的随笔,既然VGA时序已经实现了,那么就显示点东西看看吧. 想显示个圆,但是无从下手,参考了这篇文章:https://user.qzone.qq.com/1241003385/blog/154 ...

  5. GitLab使用小结

    对Git和GitLab的使用作一个小结 GitLab基于Git,可以作为团队开发项目使用,因此通常会有一个主分支master和其他分支,因此项目成员中任意一人不能随意push到主分支中,容易引起混乱: ...

  6. AGC035 A - XOR Circle【分析】

    题目传送门 题意简述: (就是连环的意思) 唔,这道题考场上写了个什么神仙做法,数据太水了居然过了: // #include<cstdio> #include<algorithm&g ...

  7. 关于Vue的一些事

    Vue的官方网站 https://cn.vuejs.org/ Vue中的一些重点 router Vuex 知其然,后知其所以然 这是一篇Vue的源码解读 http://hcysun.me/2017/0 ...

  8. hbase部署

    Hbase: 更细的操作和原理研究笔记和视频 cloudera Hbase:https://sysit.cn/blog/post/sysit/cloudera%E5%AE%89%E8%A3%85HBA ...

  9. etcd api常用操作

    如果需要使用v2 version api,启动etcd时候需要加入“ETCD_ENABLE_V2=true”参数,否则会报错“404 page not found” 获取etcd信息 版本信息 # c ...

  10. springBoot2.0使用@slf4j注解记录日志

    1. idea上安装Lombok插件 File --> setting --> Plugins 安装完后重启idea 2. 在springboot项目中修改pom.xml,添加如下配置引入 ...