结构模型
NETCONF 有三个对象:NETCONF Client、NETCONF Server、NETCONF Message;
XML and NETCONF
XML 是 NETCONF 协议的编码格式。NETCONF 用文本文件表示复杂的层次化数据。请求 ⇒ 响应,使用 XML 格式。
协议层次(逻辑分层)
在概念上,NETCONF 协议可以划分为 4 层:安全传输层、消息层、操作层、内容层。
安全传输层(Secure Transport Layer)
为客户端和服务器之间交互提供通讯路径。
当前华为使用 SSH 协议作为 NETCONF 协议的承载协议,通过 SSH 来实现 NETCONF 安全传输,所以需要创建 SSH user 作为 NETCONF 用户登陆。
消息层(Messages Layer)
使用 RPC(Remote Procedure Call)远程调用的机制实现客户端和服务端的通信。
提供一种简单的不依赖传输协议层的RPC请求和回应机制:
Client把RPC请求内容封装在一个<rpc>元素内,发送给Server;
Server把请求处理结果封装在一个<rpc-reply>元素内,回应给Client。
其 RPC 的框架与传输层独立,用于表示 NETCONF requests 和response;
1)<rpc>用于封装从客户端到服务端的NETCONF请求。头部定义message-id标示序列。
2)<rpc-reply>用户服务端回复<rpc>的response消息。头部message-id保持一致。<rpc-error>:在<rpc-reply>中被发送。一个<rpc-reply>可以包含多个<rpc-error>;<ok>:在<rpc-reply>中被发送,表示没有错误和没有数据返回;
操作层(Operations Layer)
定义一组基本的操作,作为RPC的调用方法,这些操作组成 NETCONF 基本能力。
操作对象有三个配置库。可以灵活读取和编辑配置库、候选库与运行库,实现整体配置的下发、验证和回滚:
场景分类、操作、功能描述:
1)查询数据:<get-config>,查询配置数据;<get>,查询设备当前运行的配置和状态数据;
2)编辑数据:<edit-config>,修改、创建、删除配置数据;
3)备份恢复:<copy-config>,导出配置,或用一套配置数据整体替换另一套配置数据;<delete-config>,删除配置数据集,清空startup;
4)锁定解锁:<lock>,加锁,独占配置数据集的修改权;<unlock>,解锁,放弃对配置数据集修改权的独占;
5)事务操作:<commit>,提交<candidate>数据集中的配置数据成为当前运行的配置数据;<cancel-commit>:放弃配置提交试运行;<discard-changes>,放弃<candidate>中还未提交的配置数据;<validate>,检查指定配置数据的语法语义是否正确;
6)会话操作:<close-session>,正常地结束本NETCONF会话;<kill-session>:强制结束其他的NETCONF会话,需管理员权限;
内容层(Content Layer)
NETCONF 内容层为设备配置数据,描述了网络管理所涉及的配置数据,而这些数据依赖于各制造商设备(简单说,就是不同厂商的配置命令、参数不同,所以内容层需要发送不同的内容)。
但是,虽然 NETCONF 标准化,但是却没有对数据内容标准化,Content Layer 取决与厂商的设备 —— 即,如果没有统一的数据结构,那么针对不同的厂家,需要使用不同的 NETCONF XML 配置。
所以,为解决上述问题,配置数据需要有建模语言。NETCONF 当前有两种建模语言:
1)Schema:为了描述XML文档而定义的一套规则。Schema文件中定义了设备所有管理对象,以及管理对象的层次关系、读写属性和约束条件。
2)YANG:专门为NETCONF协议设计的数据建模语言,用来为NETCONF协议设计可操作的配置数据、状态数据模型、远程调用(RPCs)模型和通知机制等。
但是,依旧未完全统一,依赖各厂家的实现。目前,主流的数据模型有 Schema 模型,YANG 模型等。NETCONF 1.0 对模型语言没有要求。NETCONF1.1 明确与 YANG 结合,开始规范 NETCONF 内容格式。
当前华为设备支持的内容层有:Huawei-YANG;NETCONF Schema;IETF-YANG;OpenConfig-YANG;
Schema是华为基于W3C XML标准,又扩展了私有语法的一种语言,在NETCONF标准没有确定和YANG模型绑定前,VRPV8已经实现了Schema。
内容最丰富的是Huawei-YANG。
# 配置 VLAN 案例 #
<?xml version="1.0" encoding="UTF-8"?> <rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="801"> <edit-config> <target> <running/> </target> <default-operation>merge</default-operation> <error-option>rollback-on-error</error-option> <config xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0"> <vlan xmlns="http://www.huawei.com/netconf/vrp/huawei-vlan"> <vlans> <vlan> <vlanId>10</vlanId> <protocolVlans> <protocolVlan xc:operation="merge"> <protocolIndex>0</protocolIndex> </protocolVlan> </protocolVlans> </vlan> </vlans> … </rpc> // ---------------------------------------------------------------------------- // 操作层 本例中 edit-config 操作可以把数据加载到运行数据库 <running/> 中。 下发创建 VLAN 10 的信息。 operation操作为merge,其他操作包括:merge create delete remove <config>中可能包含可选的“operation”属性,用来给配置数据指定操作类型。如果未携带“operation”属性,则默认为merge操作。 Operation取值如下: merge:在数据库中修改存在或不存在的目标数据,如果目标数据不存在则创建,如果目标数据存在则修改。这是默认操作。 create:当且仅当配置数据库中不存在待创建的配置数据时,才能成功添加到配置数据库。如果配置数据存在,则会返回<rpc-error>,其中包含一个<error-tag>值“data-exists”。 delete:删除配置数据库中指定的配置数据记录。如果数据存在,则删除该数据,如果数据不存在,则返回<rpc-error>,其中包含一个<error-tag>值“data-missing”。 remove:删除配置数据库中指定的配置数据记录。如果数据存在,则删除该数据,如果数据不存在,则返回成功。 // ---------------------------------------------------------------------------- // 内容层 <config></config> 内容为内容层信息。 内容层的命名空间为 http://www.huawei.com/netconf/vrp/huawei-vlan 内容层结构为:<vlans>包含<vlan>,<vlan>包含<vlanId>和<protocalVlans>。 该内容层,使用 Huawei YANG
如下配置,使用 Schema 方式:
<?xml version="1.0" encoding="UTF-8"?> <rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="801"> <edit-config> <target> <running/> </target> <default-operation>merge</default-operation> <error-option>rollback-on-error</error-option> <config> <vlan xmlns="http://www.huawei.com/netconf/vrp" content-version="1.0" format-version="1.0"> <vlans> <vlan operation="merge"> <vlanId>10</vlanId> <vlanType>common</vlanType> </vlan> </vlans> </vlan> </config> </edit-config> </rpc> 本例中同样为创建VLAN 10的例子,但是内容为Sechma方式。 更推荐使用HUAWEI-YANG。其具有更完整的支持特性。
YANG and NETCONF
NETCONF Client
在 NETCONF Client(例如 网管平台 / SDN-Controller 等等)中,加载 YANG 文件。
通过 YANG 文件,将 Data 转换为 XML 格式的 NETCONF 消息发送到设备。
NETCONF Server
在 NETCONF Server(例如路由器/交换机等)中,加载 YANG 文件。
通过 YANG 文件,将接收到的 XML 格式的 NETCONF 消息转换为Data,并做后续处理。