启动 NETCONF 会话
每个 NETCONF 会话以握手开始,其中 NETCONF 服务器和客户端应用程序指定其支持的 NETCONF 功能。以下部分介绍如何启动 NETCONF 会话。
交换<>标签元素
NETCONF 服务器和客户端应用程序每一个都首先发射一个标记元素,用于指定它们从 NETCONF 规范中定义的操作 <hello> 或功能中支持的操作或功能。标记 <hello> 元素包含 <capabilities> 元素和元素,用于指定 <session-id> 会话 NETCONF 服务器的 UNIX 进程 ID (PID)。在 <capabilities> 元素中, <capability> 每个定义了一个支持的功能。
在 NETCONF 会话期间,客户端应用程序必须先发出标记元素,并且 <hello> 不能发出多次。
在 NETCONF 规范中定义的每个功能都由统一资源名称 <capability> (URN) 在元素中表示。各个供应商定义的功能由统一资源标识符 (URL) 表示,统一资源标识符 (URL) 可以是 URL 或 URL。NETCONF XML 管理协议会发出与以下示例输出类似的元素(某些元素会显示在多行上 <hello> <capability> ,但仅出于易读性):
<hello>
<capabilities>
<capability>urn:ietf:params:netconf:base: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:url:1.0?scheme=http,ftp,file
</capability>
<capability>urn:ietf:params:xml:ns:netconf:base:1.0</capability>
<capability>
urn:ietf:params:xml:ns:netconf:capability:candidate:1.0
</capability>
<capability>
urn:ietf:params:xml:ns:netconf:capability:confirmed-commit:1.0
</capability>
<capability>
urn:ietf:params:xml:ns:netconf:capability:validate:1.0
</capability>
<capability>
urn:ietf:params:xml:ns:netconf:capability:url:1.0?protocol=http,ftp,file
</capability>
<capability>http://xml.juniper.net/netconf/junos/1.0</capability>
<capability>http://xml.juniper.net/dmi/system/1.0</capability>
</capabilities>
<session-id>22062</session-id>
</hello>
该元素中的 <hello> URL 表示以下支持的功能,并非详尽列表:
-
urn:ietf:params:netconf:base:1.0— NETCONF 服务器支持基本 NETCONF 规范中定义的基本操作和元素。 -
urn:ietf:params:netconf:capability:candidate:1.0—NETCONF 服务器支持在候选配置上操作。 -
urn:ietf:params:netconf:capability:confirmed-commit:1.0—NETCONF 服务器支持已确认的提交操作。有关详细信息,请参阅 仅在使用 NETCONF 确认之后提交候选配置。 -
urn:ietf:params:netconf:capability:validate:1.0—NETCONF 服务器支持验证操作,从而验证配置的语法正确性,而不实际提交。有关详细信息,请参阅 使用 NETCONF 验证候选配置语法 。 -
urn:ietf:params:netconf:capability:url:1.0?protocol=http,ftp,file—NETCONF 服务器接受存储在文件中的配置数据。它可以使用超文本传输协议 (HTTP) 或 FTP(由 URN 中的 和选项指示)从本地文件系统(通过filehttpftpURN 中的选项指示)和从远程计算机检索文件。有关详细信息,请参阅 在 NETCONF 会话中上传和格式化配置数据。 -
http://xml.juniper.net/netconf/junos/1.0—NETCONF 服务器支持在 Junos XML API 中定义的操作,用于请求和更改操作信息(Junos XML API 操作开发人员参考中的标记元素)。NETCONF 服务器还支持在 Junos XML 管理协议中用于请求或更改配置信息的操作。NETCONF 客户端应用程序应仅使用本机 NETCONF XML 管理协议操作和支持的 Junos XML 管理协议中提供的扩展,用于配置功能。对应 Junos XML 协议操作和 NETCONF XML 协议操作语义不一定相同,因此使用 Junos XML 协议配置操作(非记录支持的扩展)可能会导致意想不到的结果。
-
http://xml.juniper.net/dmi/system/1.0—NETCONF 服务器支持设备管理接口 (DMI) 规范中定义的操作。
默认情况下,NETCONF 服务器不会在 NETCONF 功能交换中通告支持的 YANG 模块。要播发受支持的 YANG 模块,在层次结构级别配置以下一个或多个 [edit system services netconf hello-message yang-module-capabilities] 语句:
advertise-custom-yang-modules—播发设备上安装的第三方 YANG 模块。advertise-native-yang-modules—播Junos OS本地 YANG 模块。advertise-standard-yang-modules—播发设备支持的标准 YANG 模块,例如 OpenConfig 模块。
为了遵守 NETCONF 规范,客户端应用程序还会发出一个元素 <hello> ,用于定义它支持的功能。其中不包括 <session-id> 元素:
<hello>
<capabilities>
<capability>first-capability</capability>
<!-- tag elements for additional capabilities -->
</capabilities>
</hello>
]]>]]>
当客户端应用程序向 NETCONF 服务器发送请求时,会话将继续。除非响应客户端应用程序的请求,否则 NETCONF 服务器在会话初始化后不会发出任何元素。
验证兼容性
交换 <hello> 标记元素使客户端应用程序和 NETCONF 服务器能够确定是否它们支持相同的功能。此外,建议客户端应用程序确定在 NETCONF 服务器上Junos OS版本的应用程序。发出其 <hello> 标记后,客户端应用程序会发出 <get-software-information> 标记元素中的 <rpc> 标记元素:
<rpc>
<get-software-information/>
</rpc>
]]>]]>
NETCONF 服务器返回标记元素,其中包含 和 标记元素以及每个控制模块 <software-information> <host-name> <product-name> <package-information> Junos OS元素。标记元素中的标记元素指定了 Junos OS 发行号(下例中为 Junos OS 版本 8.2)和构建日期,格式为 <comment> <package-information> 8.2 YYYYMMDD(年、月、日 — 2007 年 1 月 12 日(下例)。某些标记元素显示在多行上,但仅出于易读性:
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" \
xmlns:junos="http://xml.juniper.net/junos/8.2R1/junos">
<software-information>
<host-name>router1</host-name>
<product-name>m20</product-name>
<package-information>
<name>junos</name>
<comment>JUNOS Base OS boot [8.2-20070112.0]</comment>
</package-information>
<package-information>
<name>jbase</name>
<comment>JUNOS Base OS Software Suite \
[8.2-20070112.0]</comment>
</package-information>
<!-- <package-information> tag elements for additional modules -->
</software-information>
</capabilities>
</rpc-reply>
]]>]]>
通常,设备上运行的所有Junos OS版本相同(我们建议此配置实现可预测的路由性能)。因此,仅验证一个模块的版本号通常足以满足要求。
客户端应用程序负责确定如何处理版本或功能的任何差异。为完全自动化的性能,在客户端应用程序中包括代码,用于确定它是否支持与 NETCONF 服务器Junos OS功能和版本。在存在差异时决定以下哪种选项适用,并实施相应的响应:
忽略功能和不同版本Junos OS,并且请勿更改客户端应用程序的行为以容纳 NETCONF 服务器。不同版本Junos OS不一定导致服务器和客户端不兼容,因此这通常是一种有效的方法。同样,如果客户端应用程序不支持的功能是始终由客户端启动的操作,如验证配置和确认提交,则这是一种有效的方法。在这种情况下,客户端不会发起操作,以维护兼容性。
更改标准行为,以便与 NETCONF 服务器兼容。例如,如果客户端应用程序运行 Junos OS 的更高版本,则只能选择发出 NETCONF 和 Junos XML 标记元素,这些元素表示 NETCONF 服务器版本 Junos OS 中可用的软件功能。
结束 NETCONF 会话并终止连接。如果您决定适应 NETCONF 服务器的版本或功能不实用,则这是合适的。有关说明,请参阅 结束 NETCONF 会话并关闭连接。