了解 NETCONF XML 管理协议
了解网络配置协议 (NETCONF) 以及使用 NETCONF 管理网络设备的优势。
NETCONF 的优势
-
NETCONF 是一种基于标准的协议,专为管理网络设备而开发。
-
NETCONF 使用面向连接的安全会话来提供身份验证、数据完整性和机密性。
-
NETCONF 与供应商无关,因此您可以使用相同的 NETCONF 基本作来管理来自不同供应商的设备。
NETCONF XML 管理协议概述
NETCONF XML 管理协议是一种基于标准的协议,专为与网络设备通信和管理而定制。NETCONF 使用客户端/服务器模型和基于远程过程调用 (RPC) 的通信。NETCONF 客户端与 NETCONF 服务器建立连接和 NETCONF 会话,并在设备上执行作。Junos 设备将 NETCONF 服务器集成到作系统中,因此服务器不会在进程列表中显示为单独的条目。
NETCONF 对 RPC 和配置数据使用基于 XML 的数据编码。NETCONF 协议可定义与 CLI 配置模式命令等效的基本作。客户端应用程序可以使用协议作来显示、编辑和提交配置数据(以及其他作),就像管理员使用 CLI 配置模式命令执行这些作一样。在 NETCONF 会话中,客户端应用程序还可以执行等效于 Junos OS作模式命令的 RPC。
从概念上讲,NETCONF 可以分为 4 层。 表 1 介绍了层。
| NETCONF 层 | 说明 |
|---|---|
| 传输 |
传输层有助于使用各种协议在客户端和服务器之间创建会话。 |
| 消息 |
消息层是一种独立于传输的成帧机制,用于对 RPC 和通知进行编码。标签包括:
|
| 运维 |
作层定义可在网络设备上执行的协议作。这些作包括基本协议作(例如、 |
| 内容 |
内容层包含 XML 格式的 RPC 请求和响应有效负载。此层定义配置数据和通知数据。 |
NETCONF 服务器和客户端应用程序之间的通信是基于会话的。服务器和客户端在交换数据之前显式建立连接和会话。如传输层所定义,NETCONF 可以使用满足必要要求的任何安全传输协议。Junos 设备支持通过 SSH 的 NETCONF 会话、出站 SSH、TLS 和出站 HTTPS 以及通过出站 SSH 的 NETCONF Call Home 会话。
每个 NETCONF 会话都以握手开始,其中服务器和客户端交换 <hello> 包含其受支持的 NETCONF 功能的标记。在 NETCONF 会话中,客户端和服务器交换包含 RPC、RPC 回复或通知的消息。NETCONF作层定义客户端应用程序可用于管理设备的协议作。内容层描述了 RPC 中包含的编码参数和数据。 NETCONF 和 Junos XML API 概述 更详细地介绍了内容层。客户端应用程序发出请求后,将关闭 NETCONF 会话和连接。
NETCONF 客户端向 NETCONF 服务器发送 RPC,以请求信息、执行作命令或修改设备上的配置。NETCONF 服务器处理 RPC 并向客户端发送 RPC 回复。根据请求,RPC 回复返回请求的信息或指示请求作的成功或失败。
有关 NETCONF 的详细信息,请参阅以下 RFC:
-
RFC 6241, 网络配置协议 (NETCONF)
-
RFC 6242, 使用安全外壳上的 NETCONF 协议 (SSH)
NETCONF 和 Junos XML API 概述
Junos XML API 是 Junos OS 配置语句和作模式命令的 XML 表示形式。Junos XML API 为 Junos OS 配置层次结构中的所有语句以及您在 CLI作模式下发出的许多命令定义了等效的 XML。每个带有 Junos XML 对应项的作模式命令都会映射到请求标记元素,必要时还映射到响应标记元素。Junos XML 请求标记在功能上等同于 CLI 中相应的作模式命令。
NETCONF 客户端应用程序可以请求信息、执行作命令或修改 Junos 设备上的配置。客户端应用程序在 NETCONF 和 Junos XML API 标记元素中对请求进行编码,并将其发送到设备上的 NETCONF 服务器。NETCONF 服务器将请求定向到相应的软件模块,在 NETCONF 和 Junos XML API 标记元素中对响应进行编码,并将结果返回给客户端应用程序。
当 NETCONF 客户端修改 Junos OS 配置时,RPC 内容将包含 Junos XML 配置数据。NETCONF 客户端还可以发送带有相应请求标记的作 RPC,以执行作命令或检索信息。服务器使用包含在相应响应标记元素中的 Junos XML API 元素返回响应。
例如,要请求有关设备接口状态的信息,客户端应用程序会发送 Junos XML API <get-interface-information/> 请求标记。
<rpc>
<get-interface-information/>
</rpc>
NETCONF 服务器从接口进程中收集信息,并将其返回到 Junos XML API <interface-information> 响应标记元素中。
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos="http://xml.juniper.net/junos/25.2R1/junos"> <interface-information xmlns="http://xml.juniper.net/junos/25.2R1/junos-interface" junos:style="normal"> <physical-interface> <name> ge-0/0/0 </name> <admin-status junos:format="Enabled"> up </admin-status> ... </interface-information> </rpc-reply>
您可以通过多种方式确定 Junos XML API 内容。您可以通过瞻博网络 XML API 资源管理器 浏览 Junos XML API 元素。您可以查看给定作系统和版本中支持的配置元素以及作请求和响应标记。
此外,在 Junos 设备上,您可以使用 CLI 中的竖线 (|) 运算符查看 Junos XML API 内容。例如,要检索给定命令的作请求标记,请在 CLI 中发出 command | display xml rpc 。以下示例显示命令 show interfaces 的请求标记为 <get-interface-information>。
user@host> show interfaces | display xml rpc
<rpc-reply xmlns:junos="http://xml.juniper.net/junos/25.2R1/junos">
<rpc>
<get-interface-information>
</get-interface-information>
</rpc>
<cli>
<banner></banner>
</cli>
</rpc-reply>
同样,要检索 XML 格式的配置数据,请使用命令 show configuration | display xml 。
user@host> show configuration system services | display xml
<rpc-reply xmlns:junos="http://xml.juniper.net/junos/25.2R1/junos">
<configuration junos:commit-seconds="1747272887" junos:commit-localtime="2025-05-14 18:34:47 PDT" junos:commit-user="admin">
<system>
<services>
<netconf>
<ssh>
</ssh>
</netconf>
<ssh>
<root-login>allow</root-login>
</ssh>
<ftp>
</ftp>
</services>
</system>
</configuration>
<cli>
<banner></banner>
</cli>
</rpc-reply>
您可以使用 NETCONF 和 Junos XML API 来管理 Junos 设备。您可以编写客户端应用程序来与 NETCONF 服务器进行交互。您还可以使用 NETCONF 构建用于配置以及信息检索和显示的自定义最终用户界面,如基于 Web 浏览器的界面。
使用 NETCONF 和 Junos XML API 的优势
NETCONF 和 Junos XML API 完整记录了每个受支持的 Junos OS作请求的所有选项,以及每个 Junos OS 配置语句中的所有元素。标记名称清楚地指示作请求或配置语句中元素的功能。
DTD 中有意义的标记名称和结构规则的组合使您可以轻松理解 XML 标记数据集的内容和结构。NETCONF 和 Junos XML 标记元素使客户端应用程序可以轻松解析设备输出以查找和显示特定信息,如以下部分所述。
解析设备输出
以下示例说明了 Junos XML API 如何更轻松地解析设备输出并提取所需信息。此示例比较了运行 Junos OS 的设备的格式化 ASCII 和 XML 标记输出。格式化后的 ASCII 输出为:
Physical interface: fxp0, Enabled, Physical link is Up Interface index: 64, SNMP ifIndex: 1
相应的 XML 标记版本为:
<physical-interface>
<name>fxp0</name>
<admin-status junos:format="Enabled">up</admin-status>
<oper-status>up</oper-status>
<local-index>64</local-index>
<snmp-index>1</snmp-index>
...
</physical-interface>
当客户端应用程序需要从格式化的 ASCII 输出中提取特定值时,它必须依赖于值的位置,绝对表示或相对于相邻字段中的标签或值表示。假设客户端应用程序想要提取接口索引。它可以使用正则表达式匹配实用程序来查找特定字符串,但接口索引中的位数不一定是可预测的。客户端应用程序不能简单地读取标签后的特定 Interface index: 数量的字符。相反,它必须提取标签和后续标签之间的所有内容,即:
, SNMP ifIndex
如果输出的格式或顺序在更高版本的 Junos OS 中发生更改,则会出现问题。例如,输出可能会在接口索引号后面添加一个 Logical index 字段。
Physical interface: fxp0, Enabled, Physical link is Up
Interface index: 64, Logical index: 12, SNMP ifIndex: 1
提取由 和 Interface index: SNMP ifIndex 标签分隔的接口索引号的应用程序现在会获得不正确的结果。在这种情况下,您必须更新应用程序以改为手动搜索以下标签:
, Logical index
相反,XML 标记输出的结构化特性使客户端应用程序能够通过提取开始 <local-index> 标记和结束 </local-index> 标记中的所有内容来检索接口索引。应用程序不必依赖于元素在输出字符串中的位置。因此,NETCONF 服务器可以按元素内 <physical-interface> 的任何顺序发出子标记元素。添加新 <logical-index> 元素不会影响应用程序定位元素 <local-index> 和提取其内容的能力。
显示设备输出
带有 XML 标记的输出也更容易转换为不同的显示格式。例如,你可能希望在不同时间显示有关给定设备组件的不同数量的详细信息。当设备返回格式化的 ASCII 输出时,您必须在应用程序中编写特殊的例程和数据结构,以提取给定详细信息级别所需的信息。相比之下,XML 输出的固有结构是显示程序自身结构的理想基础。您可以对多个细节级别使用相同的提取例程,只需忽略在显示较少细节时不需要的标签元素即可。