NETCONF用来替换SNMP,是一个网管协议。YANG是NETCONF的数据建模语言,可以使用Yang模式的文本配置网关,从而通过NETCONF协议管理网关。
NETCONF+Yang可用于TSN(实时性网络,time-sensitive network)网络,控制网络实时性。
背景介绍
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现在是南向协议中当之无愧的“红人”。希望本文对你了解这位“红人”有所帮助。