视频加载失败

NETCONF-技术详解

3169 字
16 分钟
NETCONF-技术详解

NETCONF 技术详解#

一、NETCONF概述#

1.1 NETCONF定义#

NETCONF(Network Configuration Protocol,网络配置协议)是IETF制定的网络配置管理协议,标准化为 RFC 6241。它基于XML编码,通过SSH/TLS/HTTP等安全传输协议进行通信,默认使用 SSH端口830

1.2 设计目标#

NETCONF旨在解决传统网络管理方式的局限性:

  • 替代SNMP:SNMP主要面向监控(Get/Set),缺乏事务性配置管理能力
  • 替代CLI:CLI(命令行)缺乏标准化,不同厂商命令差异大,且无事务性保证
  • 提供标准化配置管理:面向数据模型(YANG),支持事务性操作(commit/rollback)

1.3 核心特点#

特点说明
基于XML数据编码采用XML格式,结构化、可读性好
面向数据模型使用YANG定义数据结构,标准化管理对象
事务性操作支持候选配置+commit机制,保证配置原子性
面向连接基于SSH长连接,保持会话状态
能力协商通过hello消息交换设备支持的能力
标准化IETF标准,跨厂商兼容

二、NETCONF架构 🏷️高频考点#

NETCONF采用四层分层架构,自下而上分别为:

NETCONF 四层架构

四、安全传输层 (Secure Transport Layer)

SSH / TLS / HTTP

端口: 830 (SSH)

一、内容层 (Content Layer)

管理数据

YANG数据模型定义

二、操作层 (Operations Layer)

NETCONF协议操作

/ / ...

三、消息层 (Messages Layer)

RPC消息封装

/ /

NETCONF 四层架构

四、安全传输层 (Secure Transport Layer)

SSH / TLS / HTTP

端口: 830 (SSH)

一、内容层 (Content Layer)

管理数据

YANG数据模型定义

二、操作层 (Operations Layer)

NETCONF协议操作

/ / ...

三、消息层 (Messages Layer)

RPC消息封装

/ /

2.1 四层说明#

层次名称功能说明
第一层内容层(Content Layer)管理数据使用YANG模型定义数据结构,包含配置数据和状态数据
第二层操作层(Operations Layer)NETCONF协议操作定义get-config、edit-config等操作
第三层消息层(Messages Layer)RPC消息封装将操作封装为XML格式的RPC消息
第四层安全传输层(Secure Transport Layer)传输保障提供安全的传输通道,SSH最常用

三、NETCONF操作类型 🏷️高频考点#

3.1 操作类型汇总#

操作作用类比CLI说明
<get>查询运行状态和配置display查询running配置和状态数据
<get-config>查询配置数据display current-configuration查询指定数据存储的配置
<edit-config>修改配置数据system-view下配置创建、删除、替换、合并配置
<copy-config>复制配置数据save/备份将一个数据存储复制到另一个
<delete-config>删除配置数据reset configuration删除指定数据存储
<lock>/<unlock>锁定/解锁配置数据防止并发修改锁定running/candidate存储
<close-session>关闭NETCONF会话quit正常关闭当前会话
<kill-session>强制关闭会话强制终止通过session ID强制关闭其他会话
<commit>提交候选配置commit将candidate提交到running

3.2 edit-config操作属性#

<edit-config>操作支持多种操作属性(operation),用于精确控制配置修改方式:

操作属性说明示例场景
merge合并配置(默认操作)修改已有配置项的值
replace替换配置用新配置完全替换旧配置
create创建配置(已存在则报错)新建接口、VLAN等
delete删除配置(不存在则报错)删除接口、VLAN等
remove删除配置(不存在不报错)删除接口、VLAN等(兼容版)

四、NETCONF数据存储 🏷️高频考点#

4.1 数据存储类型#

数据存储说明类比可写说明
running当前运行的配置running-config设备当前运行的配置,始终存在
candidate候选配置候选配置文件可修改后统一提交到running
startup启动配置startup-config设备启动时加载的配置

4.2 候选配置模式工作流程#

验证失败

开始

锁定 candidate 配置

修改 candidate 配置

验证配置

设备语法/语义检查

提交配置

candidate → running

配置生效

解锁 candidate 配置

结束

回滚配置

验证失败

开始

锁定 candidate 配置

修改 candidate 配置

验证配置

设备语法/语义检查

提交配置

candidate → running

配置生效

解锁 candidate 配置

结束

回滚配置

4.3 确认提交(confirmed-commit)#

确认提交机制允许管理员提交配置后,在一定时间内确认是否生效。如果超时未确认,配置自动回滚:

<!-- 提交配置,设置确认超时为120秒 -->
<commit>
<confirmed/>
<confirm-timeout>120</confirm-timeout>
</commit>
<!-- 在超时前确认提交,使配置永久生效 -->
<commit/>

confirmed-commit机制常用于远程配置修改场景,防止配置错误导致设备不可达。如果配置导致网络中断,管理员无法在超时前确认,配置将自动回滚,恢复网络连通性。

五、YANG数据模型 🏷️高频考点#

5.1 YANG定义#

YANG(Yet Another Next Generation)是一种数据建模语言,标准化为 RFC 6020,用于定义NETCONF操作的数据结构和语义。YANG定义了数据的层次结构、数据类型、约束条件等。

5.2 YANG特点#

特点说明
层次化数据结构YANG使用树状结构组织数据,清晰表达配置和状态信息
强类型定义支持int32、string、boolean等基本类型及派生类型
可扩展性模块化设计,支持import和include引用其他模块
支持RPC定义可定义NETCONF操作的自定义RPC
支持通知定义可定义设备主动发送的通知事件
支持约束可定义范围、长度、正则表达式等约束条件
可读性好语法接近编程语言,便于理解和编写

5.3 YANG模块结构#

YANG模块(module)是YANG的基本单元,包含以下主要组成部分:

module module-name {
// 命名空间和前缀
namespace "urn:example:module";
prefix "mod";
// 引入其他YANG模块
import ietf-yang-types {
prefix "yang";
}
// 组织和联系信息
organization "...";
contact "...";
description "...";
// 类型定义
typedef status-type {
type enumeration {
enum "up" { value 1; }
enum "down" { value 2; }
}
}
// 容器
container interfaces {
list interface {
key "name";
leaf name { type string; }
leaf status { type status-type; }
}
}
// RPC定义
rpc reset-interface {
input {
leaf interface-name { type string; }
}
}
// 通知定义
notification interface-down {
leaf name { type string; }
}
}

5.4 YANG数据类型#

类型分类数据类型说明
基本类型int8/int16/int32/int64有符号整数
基本类型uint8/uint16/uint32/uint64无符号整数
基本类型string字符串
基本类型boolean布尔值(true/false)
基本类型decimal6464位浮点数
基本类型empty空值(用于标记存在性)
基本类型enumeration枚举
基本类型binary二进制数据
派生类型typedef基于基本类型派生
结构类型container容器,组织子节点
结构类型list列表,可重复的数据集合
结构类型leaf叶子节点,具体数据项
结构类型leaf-list叶子列表
引用类型uses引用grouping
引用类型refine细化引用的节点

5.5 YANG与NETCONF的关系#

┌─────────────────────────────────────────────────────────────┐
│ │
│ YANG 模型(定义数据结构) │
│ │ │
│ │ 定义 │
│ ▼ │
│ ┌─────────────────────┐ │
│ │ 数据内容(XML格式) │ ◄── NETCONF 操作传输和操作 │
│ └─────────────────────┘ │
│ │
│ 关系:YANG 定义"是什么",NETCONF 定义"怎么操作" │
└─────────────────────────────────────────────────────────────┘
  • YANG:定义数据的结构、类型、约束 —— 建模语言
  • NETCONF:定义数据的传输、操作、事务 —— 协议
  • XML:数据的编码格式 —— 编码

六、NETCONF与SNMP对比 🏷️高频考点#

特性SNMPNETCONF
设计目标监控为主配置管理为主
数据格式BER编码/二进制XML
数据模型MIBYANG
操作方式简单Get/Set丰富的事务性操作
安全性v1/v2c弱,v3强基于SSH/TLS,安全
事务性支持(候选配置+commit)
可靠性Trap不可靠支持通知确认
传输协议UDP(无连接)SSH/TLS(面向连接)
配置回滚不支持支持(discard-changes/confirmed-commit)
批量操作GetBulk仅查询支持批量配置修改
标准化程度MIB跨厂商差异大YANG模型标准化程度高
适用场景状态监控、告警上报配置下发、网络编排

七、NETCONF XML消息格式 🏷️高频考点#

7.1 Hello消息(能力交换)#

NETCONF会话建立后,双方首先交换 <hello> 消息,通告各自支持的能力和特性:

<?xml version="1.0" encoding="UTF-8"?>
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<capabilities>
<capability>urn:ietf:params:netconf:base:1.0</capability>
<capability>urn:ietf:params:netconf:base:1.1</capability>
<capability>urn:ietf:params:netconf:capability:writable-running:1.0</capability>
<capability>urn:ietf:params:netconf:capability:candidate:1.0</capability>
<capability>urn:ietf:params:netconf:capability:confirmed-commit:1.0</capability>
<capability>urn:ietf:params:netconf:capability:validate:1.0</capability>
<capability>urn:ietf:params:netconf:capability:notification:1.0</capability>
<!-- 华为扩展能力 -->
<capability>http://www.huawei.com/netconf/vrp?revision=2018-10-30&amp;module=huawei-aaa</capability>
</capabilities>
<session-id>1</session-id>
</hello>

7.2 RPC请求消息#

NMS向Agent发送的操作请求,使用 <rpc> 标签封装:

<?xml version="1.0" encoding="UTF-8"?>
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<get-config>
<source>
<running/>
</source>
<filter>
<top xmlns="http://www.huawei.com/netconf/vrp">
<ifm>
<interfaces>
<interface>
<name/>
<adminStatus/>
<operStatus/>
</interface>
</interfaces>
</ifm>
</top>
</filter>
</get-config>
</rpc>

7.3 RPC响应消息#

Agent对NMS请求的响应,使用 <rpc-reply> 标签封装:

操作成功(返回数据)#

<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<data>
<top xmlns="http://www.huawei.com/netconf/vrp">
<ifm>
<interfaces>
<interface>
<name>GigabitEthernet0/0/1</name>
<adminStatus>up</adminStatus>
<operStatus>up</operStatus>
</interface>
<interface>
<name>GigabitEthernet0/0/2</name>
<adminStatus>up</adminStatus>
<operStatus>down</operStatus>
</interface>
</interfaces>
</ifm>
</top>
</data>
</rpc-reply>

操作成功(无返回数据)#

<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="102" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply>

操作失败(返回错误)#

<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="103" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<rpc-error>
<error-type>application</error-type>
<error-tag>unknown-element</error-tag>
<error-severity>error</error-severity>
<error-message>Unrecognized element: invalidInterface</error-message>
<error-info>
<bad-element>invalidInterface</bad-element>
</error-info>
</rpc-error>
</rpc-reply>

7.4 错误类型说明#

错误类型(error-type)说明
transport传输层错误
rpcRPC消息层错误
protocol协议操作层错误
application应用层/数据层错误
错误严重级别(error-severity)说明
error错误,操作失败
warning警告,操作可能成功但有警告

八、NETCONF通知机制#

8.1 订阅通知#

NMS通过 <create-subscription> 操作向Agent订阅事件通知:

<rpc message-id="201" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<create-subscription xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0">
<stream>NETCONF</stream>
</create-subscription>
</rpc>

8.2 事件通知#

当设备发生事件时,Agent主动向已订阅的NMS发送 <notification> 消息:

<?xml version="1.0" encoding="UTF-8"?>
<notification xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0">
<eventTime>2026-08-04T10:30:00Z</eventTime>
<ifm xmlns="http://www.huawei.com/netconf/vrp">
<interfaces>
<interface>
<name>GigabitEthernet0/0/1</name>
<adminStatus>down</adminStatus>
<operStatus>down</operStatus>
</interface>
</interfaces>
</ifm>
</notification>

8.3 通知流(Stream)#

流名称说明
NETCONF标准NETCONF事件流
华为扩展流华为设备特有的事件流(如接口状态变化、告警等)

九、华为设备配置命令示例#

9.1 NETCONF功能使能#

Terminal window
# 使能NETCONF功能
netconf
# 配置NETCONF监听端口号(默认830)
netconf port 830
# 使能NETCONF over SSH
netconf ssh server enable
# 配置NETCONF会话超时时间(单位:分钟,默认5分钟)
netconf session timeout 5

9.2 NETCONF用户配置#

Terminal window
# 创建SSH用户(用于NETCONF over SSH)
aaa
local-user netadmin password cipher Admin@123
local-user netadmin service-type ssh
local-user netadmin privilege level 15
quit
# 配置SSH用户认证方式
ssh user netadmin authentication-type password
ssh user netadmin service-type snetconf
# 使能SNETCONF服务(SSH NETCONF)
snetconf server enable

9.3 NETCONF ACL配置#

Terminal window
# 配置ACL限制NETCONF访问源
acl number 2001
rule 5 permit source 192.168.1.0 0.0.0.255
rule 10 deny
quit
# 将ACL绑定到NETCONF服务
netconf
acl 2001

9.4 NETCONF日志与能力配置#

Terminal window
# 使能NETCONF操作日志
netconf log all
# 查看NETCONF能力信息
display netconf capability
# 查看NETCONF会话信息
display netconf session
# 查看NETCONF统计信息
display netconf statistics

9.5 YANG模型查看#

Terminal window
# 查看设备支持的YANG模型列表
display yang module all
# 查看指定YANG模型详情
display yang module huawei-ifm
# 查看YANG模型定义的数据节点
display yang node huawei-ifm

9.6 配置示例:通过NETCONF查询接口信息#

以下是一个完整的NETCONF操作流程示例:

1. 建立SSH连接(端口830)
ssh netadmin@192.168.1.1 -p 830
2. 能力交换(hello消息)
NMS和Agent互发hello消息,交换能力列表
3. 发送get-config请求(查询接口配置)
<get-config><source><running/></source><filter>...</filter></get-config>
4. 接收rpc-reply响应(包含接口配置数据)
5. 发送edit-config请求(修改接口配置)
<edit-config><target><running/></target><config>...</config></edit-config>
6. 接收rpc-reply响应(<ok/>表示操作成功)
7. 关闭会话
<close-session/>

十、常见故障排查#

10.1 NETCONF连接失败#

排查步骤:

  1. 检查SSH端口830连通性
Terminal window
# 在NMS上测试SSH端口830
telnet 192.168.1.1 830
# 查看设备是否监听830端口
display netconf session
  1. 检查用户认证配置:确认SSH用户名、密码正确,用户类型为snetconf
Terminal window
display ssh user
display aaa local-user
  1. 检查ACL配置:确认NMS IP地址被ACL放通
Terminal window
display acl 2001
  1. 检查NETCONF服务状态:确认NETCONF和SNETCONF服务已使能
Terminal window
display netconf session all

10.2 操作执行失败#

排查步骤:

  1. 检查YANG模型支持:确认设备支持请求的YANG模块和数据节点
Terminal window
display yang module all
display yang node huawei-ifm
  1. 检查XML格式正确性:XML标签必须正确闭合,命名空间必须正确声明
  2. 检查数据类型:YANG定义的数据类型必须匹配(如int32不能赋字符串值)
  3. 查看错误信息:rpc-reply中的rpc-error包含错误类型、错误标签、错误消息

10.3 常用排查命令汇总#

命令作用
display netconf session查看NETCONF会话信息
display netconf capability查看NETCONF能力信息
display netconf statistics查看NETCONF统计信息
display netconf log查看NETCONF日志
display yang module all查看所有YANG模型
display yang module <module>查看指定YANG模型详情
display yang node <module>查看YANG模型数据节点
display ssh user查看SSH用户配置
display ssh server status查看SSH服务器状态

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏

评论区

Profile Image of the Author
zs13
Hello, I'm Zs13.
公告
欢迎来到我的博客!
分类
标签
最新动态
站点统计
文章
22
分类
1
标签
46
总字数
64,717
运行时长
0
最后活动
0 天前
站点信息
构建平台
EdgeOne Pages
博客版本
Firefly v6.15.10
文章许可
CC BY-NC-SA 4.0