NETCONF YANG原理
- 网络管理技术背景
- NETCONF协议介绍
- YAGN建模语言介绍
- RESTCONF协议
网络管理技术背景
前言
对于设备的配置管理,工程师更习惯使用CLI命令行的方式与设备交互。该方式简单直接,便于理解。但是在网络自动化领域,CLI方式与设备交互存在效率较低、机器不容易理解命令等问题。
IETF为了解决设备配置管理复杂的问题,先后成立工作组,发布了NETCONF、YANG和RESTCONF相关标准。
设备数据简介

如何配置一台网络设备
设备的配置管理有多种方法,可以用Console线直连或者SSH等方式远程登录设备并使用CLI配置,也可以借助网管服务器使用SNMP Set配置设备MIB节点中的参数。
随着网络规模的增大、复杂性的增加,以上两种方式已经不能满足配置管理的需求。为了解决这样的问题,基于可扩展标记语言XML(Extensible Markup Language)的NETCONF协议应运而生。

经典配置管理的方法问题

网络设备的本质诉求

IETF工作组逐步落实会议结论

工程师配置设备流程
命令行是人类与设备的交互语言。工程师查询产品文档,使用命令行方式配置设备。命令行采用了嵌套的方式实现设备配置。

NETCONF配置设备流程
YANG文件是另一种方式的对设备数据的描述。YANG模型使用module-container-leaf结构,描述设备。例如路由器的接口,属性等信息,YANG模型详细定义了字段类型和规范。

- 本例为非真实示例,YANG模型不会讲整个设备做成一个YANG文件,而是根据功能拆分成多个YANG文件。
NETCONF协议介绍
简介
NETCONF(Network Configuration Protocol)网络配置协议,提供一套管理网络设备的机制。用户可以使用这套机制增加、修改、删除网络设备的配置,获取网络设备的配置和状态信息。

NETCONF协议框架
NETCONF协议在概念上可以划分为4层:安全传输层、消息层、操作层、内容层

一个完整的NETCONF报文

XML编码
XML是NETCONF协议的编码格式。NETCONF用文本文件表示复杂的层次化数据。

NETCONF传输层与消息层
NETCONF使用SSH实现安全传输,使用RPC(Remote Procedure Call)远程调用的机制实现客户端和服务端的通信。

RPC的框架与传输层独立,用于表示NETCONF requests和response:

NETCONF基本操作

NETCONF操作对象
操作对象有三个配置库。可以灵活读取和编辑配置库、候选库与运行库,实现整体配置的下发、验证和回滚。

案例:下发VLAN配置

- <config>中可能包含可选的“operation”属性,用来给配置数据指定操作类型。如果未携带“operation”属性,则默认为merge操作。
- Operation取值如下:
merge:在数据库中修改存在或不存在的目标数据,如果目标数据不存在则创建,如果目标数据存在则修改。这是默认操作。
create:当且仅当配置数据库中不存在待创建的配置数据时,才能成功添加到配置数据库。如果配置数据存在,则会返回,其中包含一个值“data-exists”。
delete:删除配置数据库中指定的配置数据记录。如果数据存在,则删除该数据,如果数据不存在,则返回,其中包含一个值“data-missing”。
remove:删除配置数据库中指定的配置数据记录。如果数据存在,则删除该数据,如果数据不存在,则返回成功。
NETCONF内容层

- Schema是华为基于W3Cxml标准,又扩展了私有语法的一种语言,在NETCONF标准没有确定和YANG模型绑定前,VRPV8已经实现了Schema。内容最丰富的是Huawei-YANG。
案例:下发VLAN配置(HUAWEI_YANG)

案例:下发VLAN配置(Schema)

NETCONF配置介绍
- 进入NETCONF视图
[Huawei]netconf
系统视图下输入netconf,进入netconf视图。
- 配置NETCONF服务器口号
[Huawei-netconf]protocol inbound ssh port 830
在830端口号使用SSH服务器的NETCONF服务。
- 使用NETCONF功能
[Huawei]snetconf server enable
在TCP 22端口号上使用SSH服务器的NETCONF服务器。
- snetconf server enable和protocol inbound ssh port 830都可以使用NETCONF功能。如果这两个命令都配置,表示客户端可以使用22端口号或者830端口号与服务器建立NETCONF连接。
- NETOCNF使用SSH作为承载协议。在使用之前必须配置SSH。
YAGN建模语言介绍
YANG的起源

YNAG语言概述
YANG(Yet Another Next Generation)是一种数据建模语言,YANG模型定义了数据的层次化结构,可用于基于NETCONF的操作。建模对象包括配置、状态数据、远程过程调用和通知。它可以对NETCONF客户端和服务器端之间发送的所有数据进行一个完整的描述。Yang有以下特点:
- 基于层次化的树状结构建模。
- 数据模型以模块和子模块呈现。
- 可以和基于XML的语法的YIN(YANG Indepent Notation)模型无损转换。
- 定义内置的数据类型和允许可扩展类型。
YANG模型的最终呈现是.yang为后缀的文件。 - YANG起源于NETCONF,但不仅用于NETCONF。虽然统一了YANG建模语言,但是YANG 文件没有统一。
- YANG文件可以简单分为三类:厂家私有YANG文件,IETF标准YANG和OpenConfig YANG。
- NETCONF协议中的Config&Status Data、Notification Data和底层的RPC的消息都可以通过YANG模型来建模实现。YANG的模型文件可以通过工具转换到对应格式的XML/JSON文件,被最终的NETCONF/RESTCONF消息封装。
认识YANG文件-Module

认识YANG文件-Leaf Node
Leaf节点用于定义一个简单指定类型的变量,使用“leaf”关键字申明。在Leaf节点内有子声明和值,没有子节点。本例中“host-name”内有两个子声明,“type”和“description”。

认识YANG文件-Leaf List
Leaf List用于定义一个数组类型变量,使用“leaf-list”关键字申明。本例中“domain-search”内有两个子声明,“type”和“description”。

认识YANG文件-List Nodes
List节点用于定义一个更高层次的数据节点。一个List节点使用“key”唯一标识,可以包含多个leaf节点。

认识YANG文件-Container Nodes

认识YANG文件-Grouping
Grouping用于定义可以重复使用的节点,一般与uses一起使用。本例中target定义了leaf address和port。Container peer中声明use target,表示复用此leaf模型。

认识YANG文件-配置数据和状态数据
YANG文件可以申明数据类型。

认识YANG文件-数据类型
YANG模型支持内置默认的数据类型和扩展的数据类型。“typedef”申明用于新定义扩展数据类型。

FAQ:如何加载YANG模型
在NETCONF客户端(例如网管平台/SDN控制器)加载YANG文件。通过工具实现YANG文件转换为NETCONF消息下发到设备。

RESTCONF协议
RESTCONF起源

RESTCONF概述
RESTCONF允许Web应用以一种模块化、可扩展的方式访问网络设备的配置数据、状态数据和事件通知。NETCONF和RESTCONF支持共存。RESTCONF较于NETCONF,使用了不同的操作方法和数据编码。
有以下特点:
- RESTCONF使用HTTP的方法对设备YANG定义的数据进行操作(CPUD:Create、Remove、Update、Delete)
- 设备NETCONF和RESTCONF可以共享的YANG文件
- 数据编码格支持XML或者JSON

RESTCONF与NETCONF对比
NETCONF操作设备多个操作库,有事务机制,有回滚。
RESTCONF使用HTTP的操作,无状态,无事务机制,无回滚。

一次典型的RESTCONF交互
一次完整的RESTCONF交互包含请求和响应。

本例客户端通过OPTIONS方法获取设备支持的方法,设备回复支持操作有:POST、DELETE、GET、HEAD、PATCH、OPTIONS。
RESTCONF请求报文

请求报文头部可以包含多个字段,例如Accept、Authorization、Host、From等等参数。
RESTCONF请求案例

RESTCONF响应报文

RESTCONF响应案例

HTTP状态码
HTTP状态码(HTTP Status Code)是服务器响应状态的3位数字码,用于向客户端返回操作结果。

思考题
1.华为NETCONF的传输层使用什么协议?
华为使用SSH作为传输层协议。在开启设备NETCONF功能时候,需要创建SSH用户作为NETCONF用户登陆。
2.NETCONF、RESTCONF和YANG是之间什么关系?
YANG是建模语言用于描述NETCONF和RESTCONF的内容层。NETCONF和RESTCONF区别在于RESTCONF基于HTTP构建传输层、消息层和操作层,而NETCONF使用SSH为传输层、RPC为消息层和NETCONF定义的操作层。
本章总结



















