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. 深入理解Python中的yield和send

    send方法和next方法唯一的区别是在执行send方法会首先把上一次挂起的yield语句的返回值通过参数设定,从而实现与生成器方法的交互. 但是需要注意,在一个生成器对象没有执行next方法之前,由 ...

  2. 【转载,整理】Spotlight 监控

    非常好用,安装简易的监控软件 官网:https://www.quest.com spotlight官网链接地址:https://www.quest.com/products/#%20 一. Spotl ...

  3. 温故而知新 babel-cli 的相关使用

    # 在线编译 http://babeljs.io/repl # babel-cli 安装入门 http://babeljs.io/setup#installation # babel-cli 使用手册 ...

  4. springboot 中文文档

    springboot 中文文档https://qbgbook.gitbooks.io/spring-boot-reference-guide-zh/content/

  5. C#基础第四天-作业答案-Hashtable-list<KeyValuePair>泛型实现名片

    .Hashtable 实现 Hashtable table = new Hashtable(); while (true) { Console.WriteLine("------------ ...

  6. RDD转换DataFrame

    Spark SQL有两种方法将RDD转为DataFrame. 1. 使用反射机制,推导包含指定类型对象RDD的schema.这种基于反射机制的方法使代码更简洁,而且如果你事先知道数据schema,推荐 ...

  7. 【再话FPGA】在xilinx中PCIe IP Core使用方法

    采用Xilinx Virtex-5 XC5VSX50T-FF1136 FPGA或者Xilinx Virtex-5 XC5VSX95T-FF1136的板子.采用ISE13.2环境.步骤:一.建立一个IS ...

  8. std::bind技术内幕

    引子 最近群里比较热闹,大家都在山寨c++11的std::bind,三位童孩分别实现了自己的bind,代码分别在这里: 木头云的实现 mr.li的实现 null的实现,null的另一个版本的实现 这些 ...

  9. 每日英语:Proactive Advice for Dealing With Grief: Seek Out New Experiences

    When her husband died of cancer 10 years ago, Becky Aikman says she experienced grief and adapted to ...

  10. shell(7):四则运算

    shell 四则运算:expr,let,bc,(()), 1.expr的用法: expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串. 详细 ...