Skip to main content

NETCONF报文格式

NETCONF(Network Configuration Protocol)是基于可扩展标记语言XML(Extensible Markup Language)的网络配置和管理协议,使用简单的基于RPC(Remote Procedure Call)机制实现客户端和服务器之间通信。

NETCONF报文由三部分组成:

  • Message:消息层,为RPC报文提供一个简单的,独立的传输帧机制。客户端把RPC请求封装在一个<rpc>元素内,服务器把请求处理的结果封装在<rpc-reply>元素内,回应给客户。

  • Operations:操作层,定义了一组基本NETCONF协议操作,被带有基于XML编码参数的RPC方法调用。

  • Content:管理对象层,定义了配置数据模型,目前主流的数据模型有Schema模型,YANG模型等。

rpc报文示例

 <?xml version="1.0" encoding="UTF-8"?>
 <rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
    <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">
        <isiscomm xmlns="http://www.huawei.com/netconf/vrp/huawei-isiscomm">
          <isSites>
            <isSite xc:operation="merge">
              <instanceId>100</instanceId>
              <description>ISIS</description>
              <vpnName>_public_</vpnName>
            </isSite>
          </isSites>
        </isiscomm>
      </config>
    </edit-config>
  </rpc>
 ]]>]]>
字段 描述
? 表示一条指令的开始或结束。
xml 表示此文件是XML文件。
version NETCONF协议版本号。"1.0"表示使用XML1.0标准版本。
encoding 字符集编码格式,当前仅支持UTF-8编码。
<rpc> <rpc>元素用来封装Client发送给NETCONF Server端的请求。
message-id 信息码。由发起RPC请求的Client指定,Server收到RPC请求报文后会保存message-id属性,在生成<rpc-reply>消息时使用。
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" NETCONF XML的名字空间。其中,base表示支持基本的操作类型: base1.0:支持<running/>配置数据库,定义的基本操作包括:<get-config><get><edit-config><copy-config><delete-config><lock><unlock><close-session><kill-session>,支持<error-option>参数为stop-on-error,continue-on-error,rollback-on-error。base1.1:base1.0的升级,功能变更情况如下:<edit-config>的operation属性新增remove操作。新增知名error-tagmalformed-message,废弃知名error-tagpartial-operation。新增用于子树过滤的命名空间通配符机制。新增chunk分包机制,以解决EOM分包机制的安全问题。 用户如果需要使用base1.1中的操作,需要客户端支持base1.1协议,在能力集交互时通告此能力。
<edit-config> 操作类型。
<target> 待操作的目标文件。
<default-operation> 配置默认操作类型。
<error-option> 用来设置<edit-config>操作出现错误后,后续操作的处理方式,包含以下三种类型:stop-on-error:出现错误后停止操作。continue-on-error:出现错误后记录错误信息并继续执行,如果发生任何错误,NETCONF Server给Client返回一个操作失败的<rpc-reply>消息。rollback-on-error:出现错误后停止操作,并将配置回退到执行<edit-config>操作之前的状态。只有设备支持rollback-on-error能力才支持此操作。
<config> 一组由数据模型定义的层次化的配置数据。这些配置数据必须放在指定的名字空间中,必须遵循由其能力集定义的数据模型的约束条件。
]]>]]> XML报文结束符。 说明: Server和Client进行XML报文交互时,XML格式报文最后必须添加结束符“]]>]]>”,否则设备无法识别,不会对Client发送的XML报文响应。设备发送的XML报文将自动添加“]]>]]>”。在后面的举例中,为方便识别XML格式,均未添加此结束符,实际操作中,请自行添加。 如果Hello报文交互base1.1,则YANG模型后面交互的RPC报文支持Chunk格式。Chunk格式报文支持分片,结束符为“\n##\n”。

rpc-reply报文示例

图5-198 成功响应

 <rpc-reply message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
  <ok />
 </rpc-reply>
字段 描述
<rpc-reply> <rpc-reply>元素用来封装<rpc>请求的应答消息,NETCONF Server给每个<rpc>操作回应一个使用<rpc-reply>元素封装的应答消息。
<ok> 在处理<rpc>请求过程中,如果没有发生任何错误,则在<rpc-reply>元素内封装一个<ok>元素返回给Client。

图5-199 失败响应

 <?xml version="1.0" encoding="utf-8"?>
  <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="3">
  <rpc-error>
    <error-type>application</error-type>
    <error-tag>bad-element</error-tag>
    <error-severity>error</error-severity>
    <error-app-tag>43</error-app-tag>
    <error-path xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"
  xmlns:acl="http://www.huawei.com/netconf/vrp/huawei-acl">/nc:rpc/nc:edit-config/nc:config/acl:acl/acl:aclGroups/acl:aclGroup[acl:aclNumOrName="2999"]/acl:aclRuleBas4s/acl:aclRuleBas4[acl:aclRuleName="rule_-2"]/acl:vrfAny</error-path>
    <error-message xml:lang="en">vrfAny has invalid value a.</error-message>
    <error-info>
    <bad-element>vrfAny</bad-element>
  </error-info>
  </rpc-error>
 </rpc-reply>
字段 描述
<rpc-error> 在处理<rpc>请求过程中,如果发生任何错误,则在<rpc-reply>元素内只封装<rpc-error>元素返回给Client。
<error-type> 定义错误发生在协议的层级,有四种取值:transport传输层,RPC远程进程调用,protocol协议层,application应用层。
<error-tag> 标识错误信息内容。
<error-severity> 标识错误的严重级别,取值有error和warning。
<error-app-tag> 标识特定的错误情形。对于一个特殊的错误情形,如果没有合适的<error-tag>与之关联,则此元素不会出现。
<error-path> 标识出错的位置及具体文件名称。
<error-message> 描述出错内容。
<error-info> 含有协议或者数据模型特定的错误内容。对于一个特殊的错误情形,如果没有提供合适的<error info>,这个元素就不会出现。
<bad-element> 错误参数列表。

参考标准

标准 描述
RFC 6241 Network Configuration Protocol (NETCONF)
RFC 6242 Using the NETCONF Protocol over Secure Shell (SSH)