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

NETCONF+Yang可用于TSN(实时性网络,time-sensitive network)网络,控制网络实时性。

以下转自:干货铺时间:详解SDN南向协议之NETCONF

背景介绍

  NETCONF起源于IAB(Internet Architecture Board)组织的几次吐槽大会。时间倒退回2001、2002年,网管和协议开发者聚在一起,原本只是打算喝喝茶、聊聊天,没想到却演变成一场“撕逼大战”。网管向协议开发者吐槽当前的网管协议并没有解决他们的问题,特别是在配置管理方面。

  吐槽大会的成果有2个。一个是梳理了当前使用的网管协议及其优缺点,例如SNMP、CLI等;另一个是理清了网管的痛点,也就是他们最想要的功能。

  在当时SNMP已被广泛使用,它的优势在于设备监测;但是不适合大规模应用,例如获取路由信息(数据量大)会很慢。

  网管罗列的痛点包括:

易用性

区分配置数据和状态数据

面向服务和网络进行配置管理,而不是单一的网络设备

…

  吐槽大会的成果详细记录在RFC 3535中,感兴趣的读者可以进一步阅读。

  针对RFC 3535中罗列的网管需求,2003年成立了NETCONF工作组,NETCONF的设计遵循RFC 3535。2006年NETCONF核心RFC 4741发布,2011年更新版的RFC 6241发布(废除RFC 4741)。

  作为新一代的网络设备的配置管理协议,NETCONF使用YANG作为它的数据建模语言。用户可以使用这套机制增加、修改、删除网络设备的配置,获取网络设备的配置和状态信息。通过NETCONF协议,网络设备可以提供规范的应用程序编程接口API(Application Programming Interface),应用程序可以直接使用这些API,向网络设备发送和获取配置。

  我们可以类比SNMP/SMI来理解NETCONF/YANG。对比如下:

  NETCONF协议与SNMP协议相比,NETCONF的优点如下表所示

  特性 SNMP NETCONF

  配置管理 SNMP在进行设备数据操作时,如果多个用户对同一个配置量进行操作,协议没有提供保护锁定机制。 NETCONF提供保护锁定机制,防止多用户操作产生冲突。

  查询 SNMP能够对某个表的一条或多条记录进行操作,查询中需要多次交互才能够完成。 NETCONF针对整个系统的配置数据可直接进行操作,且定义了过滤功能。

  扩展性 扩展性差 扩展性好:

  协议模型采取分层定义,各层之间相互独立,当对协议中的某一层进行扩展时,能够最大限度不影响到其上层协议。

  协议采用了XML编码,使得协议在管理能力上和系统兼容性方面也具有一定的可扩展性。

  安全性 以目前最新的SNMPv3为例,SNMPv3在安全上存在的主要问题是,SNMPv3全部自己定义,未有扩展的余地。 NETCONF利用现有的安全协议提供安全保证,并不与具体的安全协议绑定。在使用中,NETCONF要比SNMP更灵活。

  NETCONF协议采用Client/Server结构。在SDN领域,SDN控制器作为NETCONF客户端(NETCONF Manager),网络设备作为NETCONF服务端(NETCONF Agent)。通过NETCONF,SDN控制器对网络设备进行配置管理。

2协议特点

2.1区分配置数据和状态数据

  为了便于网管识别出配置数据,明确区分配置数据和状态数据是必要的。一些设备将配置数据和状态数据不做区分,网管不得不“人肉”识别它们。NETCONF协议将数据区分为配置数据和状态数据,并分别提供不同的操作进行数据的增删改查。

  配置数据(configuration data)是对网络设备进行配置的数据,例如创建VLAN的数据。配置数据一般是可读写的。

  状态数据(state data)是反映设备状态的数据,例如端口的up/down状态,报文统计等。状态数据一般是只读的。

2.2存在多个配置数据库

  网络设备通常有一个配置数据库,记录设备当前的配置。并且这个配置数据库一般提供持久化操作的指令(例如锐捷交换机的write指令),用于设备重启后的配置恢复。NETCONF协议定义了running配置数据库,保存设备当前的配置;同时扩展支持startup和candidate配置数据库。

  在对设备进行配置时,你可能有过类似的经历,“到底是先配置A还是先配置B”?这种时候你肯定想“要是有个练手的闲置设备就好了” 。有了candidate,就相当于多了一个练手的闲置设备。你可以先在candidate配置数据库上反复操作,直到得到想要的结果。然后用candidate的配置覆盖running配置数据库。

  Startup配置数据库用于设备重启后的配置恢复。

2.3分层模型

  在系统或协议的设计中,关注点分离(separation of concern)原则无所不在。我们也经常听到“模块化”、“分层”、“解耦”等名词,这些都是关注点分离原则的具体实践。NETCONF协议使用了“分层”的方法实现关注点分离,分层给予了NETCONF强大的易用性、维护性和扩展性。NETCONF在逻辑上可以划分为4层。

  第一层:传输层

  传输层为NETCONF Manager和NETCONF Agent之间交互提供安全的通信路径。当前,锐捷交换机设备使用SSH协议作为NETCONF协议的承载协议。

  第二层:消息层

  消息层提供了一种简单的、不依赖于传输协议的RPC和通告封装机制。client采用<rpc>元素封装操作请求信息,并通过一个安全的、面向连接的会话将请求发送给服务器,而服务器将采用<rpc-reply>元素封装RPC请求的响应信息(即操作层和内容层的内容),然后将此响应信息发送给请求者。另外,服务器可以采用notification向客户端通告事件。

  第三层:操作层

  操作层定义了一系列在RPC中应用的基本操作(增删改查),这些操作组成了NETCONF基本能力。

  第四层:内容层

  内容层描述了网络管理所涉及的配置数据,使用YANG语言进行建模。

2.4YANG

  YANG是一种数据建模语言,是专门为NETCONF内容层建模而设计的。你可能在想什么是数据模型?数据模型准确定义了数据的结构、语法和语义。例如,我们用的手机中通讯录的模板,可以看做是联系人的数据模型。新增联系人时,需要根据模板的定义填入相关信息。同理,YANG定义了网络设备配置数据的模板。例如我们对网络设备上的接口建模后,通过NETCONF下发到网络设备的数据要符合YANG模型的定义。

  YANG具有以下特点:

  可读性好,易学习

  层级树形结构

  可扩展

  可复用

  可以直接映射到XML

2.5创建接口

  了解了NETCONF和YANG的基本概念后,我们来使用它们进行一次接口创建的操作。

  NETCONF Manager向NETCONF Agent发送一个RPC请求。RPC请求中使用edit-config操作配置running数据库,edit-config缺省的operation是merge(如果接口存在则更新;如果不存在则创建)。配置数据包括接口名称、接口描述和接口类型。

  如果操作成功,NETCONF Agent将返回“OK”应答。

  交互过程如下图所示。

3小结

  相较其他配置管理协议,NETCONF因其良好的功能性和扩展性,随着SDN的逐步落地被广泛使用。目前主流设备厂商均提供NETCONF支持,OF-CONFIG也是直接使用NETCONF实现。NETCONF现在是南向协议中当之无愧的“红人”。希望本文对你了解这位“红人”有所帮助。

NETCONF+Yang配置TSN的更多相关文章

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

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

  2. kubernetes 配置网络插件 flannel

    概述 在学习docker时知道docker有四种常用的网络模型 bridge:桥接式网络 joined:联盟式网络,共享使用另外一个容器的网络名称空间 opened:容器直接共享使用宿主机的网络名称空 ...

  3. Kubernetes 学习18配置网络插件flannel

    一.概述 1.我们在学习docker时知道docker有四种常用的网络模型 a.bridge:桥接式网络 b.joined:联盟式网络,共享使用另外一个容器的网络名称空间 b.opened:容器直接共 ...

  4. VNF网络性能提升解决方案及实践

    VNF网络性能提升解决方案及实践 2016年7月 作者:    王智民 贡献者:     创建时间:    2016-7-20 稳定程度:    初稿 修改历史 版本 日期 修订人 说明 1.0 20 ...

  5. 软件定义网络(SDN)研究进展

    写在前面 这是我入门SDN以来的第一篇论文,它是一篇中文综述,看起来相对容易.也让我对SDN有了进一步的认识.下面是我的一些心得. 全文框架 SDN 将数据平面与控制平面解耦合,简化了网络管理. SD ...

  6. Cisco VPP(1) 简单介绍

    一.简单介绍 VPP全称Vector Packet Processing.是Cisco2002年开发的商用代码. 2016年2月11号,Linux基金会创建FD.io项目.Cisco将VPP代码的开源 ...

  7. 11-ESP8266 SDK开发基础入门篇--软硬件定时器

    https://www.cnblogs.com/yangfengwu/p/11094009.html 定时器有两种,软件定时器和硬件定时器 软件定时器就是靠里面的任务延时实现的,,这样的定时器其实延时 ...

  8. Git分布式版本控制系统(上)

    Git分布式版本控制系统(上) 链接:https://pan.baidu.com/s/1CgaEv12cwfbs5RxcNpxdAg 提取码:fytm 复制这段内容后打开百度网盘手机App,操作更方便 ...

  9. netconf、yang和XML关系

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

随机推荐

  1. Mac OS X 下使用清理软件,这是我他妈干过最傻的事情,之一

    Mac OS X 系统设计良好,数据都是有序地存储在不同的文件夹下,配置和安装软件几乎都是极其简单的事情,不过几个月前刚入手mac,我还是好奇地使用了一个mac 下的清理软件,也不记得叫什么名字了,自 ...

  2. Python MySQLdb insert(插入) 封装

    def insert_data(dbName,data_dict): try: data_values = "(" + "%s," * (len(data_di ...

  3. U811.1接口EAI系列之二-BOM构成-委外BOM构成--VB语言

    1.下面代码实现了VB6.0中调用U8EAI-BOM构成服务,以下代码均为项目实际代码,可直接复制应用. 2.在u811.1版本中委外BOM构成与正常的BOM构成是同系列表,不单独存储. 3.是以存货 ...

  4. MySql计算两个日期的时间差函数

    MySql计算两个日期时间的差函数: 第一种:TIMESTAMPDIFF函数,需要传入三个参数,第一个是比较的类型,可以比较FRAC_SECOND.SECOND. MINUTE. HOUR. DAY. ...

  5. Android: 设置 app 字体大小不跟随系统字体调整而变化

    在做 app 内字体大小的需求,类似于 微信中设置字体大小. 那么就需要 app 不跟随系统字体大小调整而变化,找到了两个方法. 方法1: 重写 getResource() 方法,修改 configu ...

  6. Android 如何在Eclipse 引入外部纯Java项目(不是打成Jar使用)

    应用情景--如标题: 在Eclipse的 “Android启动项目”中引入“外部的纯Java项目”,能运行的只有是基于Android的测试代码才可以. 一直很纳闷,如果外部写好一个Java插件(例如服 ...

  7. Atitit opencv模板匹配attilax总结

    Atitit opencv模板匹配attilax总结 找一幅图像的匹配的模板,可以在一段视频里寻找出我们感兴趣的东西,比如条形码的识别就可能需要这样类似的一个工作提取出条形码区域(当然这样的方法并不鲁 ...

  8. Daemontools和Supervisor管理linux常驻进程

    linux主要使用supervise来管理常驻进程.基于supervise的两个比较重要的工具是Daemontools和Supervisor. 实际上,supervise也算Daemontools的一 ...

  9. 行为类模式(五):中介者(Mediator)

    定义 定义一个中介对象来封装系列对象之间的交互.中介者使各个对象不需要显示地相互引用,从而使其耦合性松散,而且可以独立地改变他们之间的交互. 试想一下,如果多个类之间相互都有引用,那么当其中一个类修改 ...

  10. 菜鸟学SSH(九)——Hibernate——Session之save()方法

    Session的save()方法用来将一个临时对象转变为持久化对象,也就是将一个新的实体保存到数据库中.通过save()将持久化对象保存到数据库需要经过以下步骤: 1,系统根据指定的ID生成策略,为临 ...