「NETCONF」- 概念术语

  CREATED BY JENKINSBOT

结构模型

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,并做后续处理。