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. Linux下监控网卡流量的软件Nload

    Linux下监控网卡流量的软件Nload 安装nload: # wget http://www.roland-riegel.de/nload/nload-0.7.2.tar.gz # tar zxvf ...

  2. 如何利用Nginx的缓冲、缓存优化提升性能

    使用缓冲释放后端服务器 反向代理的一个问题是代理大量用户时会增加服务器进程的性能冲击影响.在大多数情况下,可以很大程度上能通过利用Nginx的缓冲和缓存功能减轻. 当代理到另一台服务器,两个不同的连接 ...

  3. yum 安装docker后 无法启动

    一,yum安装docker yum -y install docker 启动docker service docker start 报错: journalctl -xe Error starting ...

  4. lua基础学习(三)

    一.lua函数 1.在Lua中,函数是对语句和表达式进行抽象的主要方法.既可以用来处理一些特殊的工作,也可以用来计算一些值.Lua 提供了许多的内建函数,你可以很方便的在程序中调用它们,如print( ...

  5. ArrayList(顺序表)和LinkedList(链表)的区别联系,优劣取舍问题

    ArrayList和LinkedList都是List接口的实现类.主要区别如下: 最主要的区别是底层的数据结构不同: 1)ArrayList相当于一个动态数组,需要随机访问列表中的元素时,ArrayL ...

  6. [转帖]教你如何修改运行中的docker容器的端口映射

    教你如何修改运行中的docker容器的端口映射   在docker run创建并运行容器的时候,可以通过-p指定端口映射规则.但是,我们经常会遇到刚开始忘记设置端口映射或者设置错了需要修改.当dock ...

  7. 另一种分页器 不依赖Paginator模块的方法

    """ 分页组件 """ class Pagination(object): def __init__(self, current_page ...

  8. axios中设置Content-Type不生效的问题

    Api:axios(config): config中无data字段时,headers里的Content-Type无效果,这应该出于优化的层面,此时的Content-Length=0,无需向服务端提供C ...

  9. centos 防火墙 iptables firewalld SELinux

    参考 Centos7 只启用iptables 禁用firewalld功能 java.net.NoRouteToHostException: 没有到主机的路由 相关内容 centos7 中才开始引用fi ...

  10. shiro三连斩之概念

    1, 什么是Shiro? Shiro是一个安全框架,用于解决系统的认证和授权问题,同时提供了会话管理,数据加密,与WEB集成,缓存等机制. Authentication:身份认证/登录,验证用户是不是 ...