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采用四层分层架构,自下而上分别为:
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 候选配置模式工作流程
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) |
| 基本类型 | decimal64 | 64位浮点数 |
| 基本类型 | 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对比 🏷️高频考点
| 特性 | SNMP | NETCONF |
|---|---|---|
| 设计目标 | 监控为主 | 配置管理为主 |
| 数据格式 | BER编码/二进制 | XML |
| 数据模型 | MIB | YANG |
| 操作方式 | 简单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&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 | 传输层错误 |
| rpc | RPC消息层错误 |
| 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功能使能
# 使能NETCONF功能netconf# 配置NETCONF监听端口号(默认830)netconf port 830# 使能NETCONF over SSHnetconf ssh server enable# 配置NETCONF会话超时时间(单位:分钟,默认5分钟)netconf session timeout 59.2 NETCONF用户配置
# 创建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 passwordssh user netadmin service-type snetconf# 使能SNETCONF服务(SSH NETCONF)snetconf server enable9.3 NETCONF ACL配置
# 配置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 20019.4 NETCONF日志与能力配置
# 使能NETCONF操作日志netconf log all
# 查看NETCONF能力信息display netconf capability
# 查看NETCONF会话信息display netconf session
# 查看NETCONF统计信息display netconf statistics9.5 YANG模型查看
# 查看设备支持的YANG模型列表display yang module all
# 查看指定YANG模型详情display yang module huawei-ifm
# 查看YANG模型定义的数据节点display yang node huawei-ifm9.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连接失败
排查步骤:
- 检查SSH端口830连通性:
# 在NMS上测试SSH端口830telnet 192.168.1.1 830
# 查看设备是否监听830端口display netconf session- 检查用户认证配置:确认SSH用户名、密码正确,用户类型为snetconf
display ssh userdisplay aaa local-user- 检查ACL配置:确认NMS IP地址被ACL放通
display acl 2001- 检查NETCONF服务状态:确认NETCONF和SNETCONF服务已使能
display netconf session all10.2 操作执行失败
排查步骤:
- 检查YANG模型支持:确认设备支持请求的YANG模块和数据节点
display yang module alldisplay yang node huawei-ifm- 检查XML格式正确性:XML标签必须正确闭合,命名空间必须正确声明
- 检查数据类型:YANG定义的数据类型必须匹配(如int32不能赋字符串值)
- 查看错误信息: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服务器状态 |
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!



