网络——netconf文字类
NETCONF( Network Configuration Protocol,网络配置协议)
是一种基于 XML 的网络管理协议,它提供了一种可编程的、 对网络设备进行配置和管理的方法。用户可以通过该协议设置属性、获取属性值、获取统计信息等。这使得它在第三方软件的开发上非常便利,很容易开发出在混合不同厂商、不同设备的环境下的特殊定制的网管软件。
NETCONF基本网络架构:
我们这里的服务器是指的交换机或想获取数据的对象,而客户端是用来收取这些数据的设备。
分层结构:
- 和数据报类似,需要在一个安全的协议中,传输内容。
- 是由下至上的形式进行嵌套。
NETCONF分层 | XML 分层 | 说明 |
内容层 | 配置数据、状态数据、 统计信息等 |
被管理对象的集合,可以是配置数据、状态数据、统计信息等NETCONF协议。 |
操作层 | <get>,<get-config>, <edit-config>… |
在RPC中应用的基本的原语操作集,这些操作组成NETCONF的基本能力NETCONF全面地定义了对被管理设备的各种基础操作,设备支持的操作。 |
RPC层 | <rpc>,<rpc-reply> |
为RPC模块的编码提供了简单的、传输协议无关的机制。通过使用<rpc>和<rpc-reply>元素分别对NETCONF请求和响应数据(即操作层和内容层的内容)进行封装。 自己解释:用于以什么样的标准来读取里面的内容。 |
通信协议层 | 非FIPS模式下: Console/Telnet/SSH /HTTP/HTTPS/TLS FIPS模式下: Console/SSH/HTTP S/TLS |
为NETCONF提供面向连接的、可靠的、顺序的数据链路。 FIPS模式下: |
操作系列 |
操作名称 |
说明 |
获取业务数据 |
get |
获取设备数据 |
get-bulk |
批量获取设备数据 |
|
get-config |
获取设备配置数据 |
|
get-bulk-config |
批量获取设备配置数据 |
|
配置动作 |
edit-config |
修改系统配置 |
非配置动作 |
action |
修改、获取运行统计信息之类的动作 |
事件相关 |
get/filter/netconf |
获取系统支持的事件流 |
create-subscription |
订阅事件 |
|
cancel-subscription |
取消订阅事件 |
|
会话管理 |
close-session |
关闭当前会话 |
kill-session |
关闭非当前会话 |
|
get-sessions |
获取已经建立的会话 |
|
lock |
锁定配置数据库 |
|
unlock |
解锁配置数据库 |
|
执行非交互命令行命令 |
CLI |
作为NETCONF的补充,执行NETCONF尚未提供的命令 |
配置管理 |
rollback |
配置回滚 |
save |
配置保存 |
|
load |
配置加载 |
|
save-point |
提供配置回滚点功能 |
|
请求验证 |
validate |
NETCONF请求的XML语法验证 |
YANG操作 |
get/filter/netconf-state/capabilities |
获取设备能力集 |
get/filter/netconf-state/datastores |
获取设备中的数据库 |
|
get/filter/netconf-state/schemas |
获取设备中的YANG文件名称列表 |
|
get/filter/netconf-state/sessions |
获取设备中的会话信息 |
|
get/filter/netconf-state/statistics |
获取NETCONF的统计信息 |
|
get-schema |
获取YANG文件的内容 |
|
预配置 |
config-provisioned |
开启预配置功能 |
操作 |
说明 |
XML格式样例 |
get |
获取数据,包括运行状态数据和配置数据 |
获取Syslog模块的全部数据的XML请求如下: |
get-config |
获取配置数据,和get不同,它只返回非缺省的配置数据。如果未配置数据,则返回一个空的<data> |
获取接口表内所有配置的XML请求如下: |
get-bulk |
从指定索引的下一条开始批量获取后续N条数据(索引行数据不返回),包括运行状态数据和配置数据。用户通过index属性指定索引,通过count属性指定N。如未指定索引,则以第一条为索引;如未指定N,或者数据表中符合条件的数据记录不足N条,则返回表中所有剩下的数据条目 get操作会返回所有符合条件的数据,这在某些情况下会导致效率问题。get-bulk允许用户从固定数据项开始,向后获取指定条目的数据记录 |
取全部接口的数据的xml请求如下: |
get-bulk-config |
从指定索引的下一条批量获取配置数据。和get-config类似,只返回非默认配置;其他约束类似get-bulk |
获取全部接口配置信息的xml请求如下: |
edit-config增量下发 |
增量下发选项incremental放置在列上,对于类似vlan permitlist列表集合性质的列,可能支持增量下发,用户请求XML中有增量下发选项时,最终执行结果不影响本列原有的数据。 增量下发只支持edit-config,但不支持edit-config中的replace。 不是所有模块都支持增量下发,具体请参见模块对应的NETCONF XML API,查找其是否支持增量下发 |
下发一个接口的VLAN配置,使用增量下发,262接口原有untagvlanlist为12~15,下发后为1~10,12~15。XML请求如下: |
edit-config: merge |
在当前运行配置的基础上直接运行指定配置 merge操作必须指定具体的操作对象(行): · 如果指定的对象存在,则直接配置该对象 · 如果指定的对象不存在,但允许创建,则先创建再配置该对象 · 如果指定的对象不存在且不允许创建,则返回merge失败 |
将BufferSize设置为120的xml请求如下: |
edit-config: create |
创建指定对象。create操作必须指定配置对象。create操作的XML数据格式和merge类似,只是operation属性需要指定为“create” · 如果当前配置表支持创建对象,且当前对象不存在,则先创建配置对象,再创建指定的配置 · 如果配置对象下对应的配置项已经存在,则返回data-exist错误 |
同上,把merge修改为create即可 |
edit-config: replace |
· 如果指定的对象存在,则替换指定对象的配置为当前配置 · 如果指定的对象不存在,但允许创建,则先创建再配置该对象为当前配置 · 如果指定对象不存在且不允许创建,则不进行replace操作,返回invalid-value错误,提示用户配置对象不存在 |
同上,把merge修改为replace即可 |
edit-config: remove |
删除指定配置 · 当指定的删除对象中只有表索引时,则删除此配置指定对象的所有配置,同时删除指定对象 · 当指定的删除对象中不仅仅有表索引还存在配置项时,则删除此对象下面的指定配置 · 如果系统中指定对象不存在,或者XML消息未指定对象,则直接返回成功 |
同上,把merge修改为remove即可 |
edit-config: delete |
删除指定配置 · 当指定的删除对象中只有表索引时,则删除此配置指定对象的所有配置,同时删除指定对象 · 当指定的删除对象中不仅仅有表索引还存在配置项时,则删除此对象下面的指定配置 · 如果系统中指定对象不存在,则直接返回不存在的错误消息 |
同上,把merge修改为delete即可 |
edit-config 默认操作选项 |
edit-config操作用于修改当前系统配置。NETCONF定制了四种修改配置的方式:merge、create、delete和replace。当XML消息中未指定修改配置方式的时候,则使用默认操作做为当前指令的操作方式,不会修改默认操作的缺省值 默认操作的缺省值是merge,在XML消息中可以通过<default-operation>节点来设置默认操作,取值为: · merge:当配置方式和默认操作方式均未指定时,使用该方式 · replace:当配置方式未指定,默认操作指定为replace的时候,edit-config操作会默认为replace操作 · none:当配置方式未指定,默认操作指定为none的时候,edit-config操作会默认为none操作。none操作主要用来检查,下发为none操作的配置仅仅做Schema校验,不进行真正的配置下发。语法检查通过,就返回ok成功,否则失败 |
下发一个空的操作,该操作仅仅验证格式,并不真正下发给系统,xml请求如下: |
edit-config默认错误处理选项 |
edit-config将指定的配置设置到系统上,完成配置设置的操作。在执行edit-config的过程中,如果遇到一个实例配置出错,默认情况下会直接返回错误,但是为了使我们的应用更加灵活,edit-config为我们提供了错误选项,通过错误选项取值的不同,在发生错误的时候进行不同的处理操作 <error-option>节点用于设置一个实例配置出错后,后续实例配置的处理方式,缺省值为stop-on-error,全部取值为: · stop-on-error:停止处理,返回错误。此选项为默认选项 · continue-on-error:继续处理,但是报告错误 · rollback-on-error:停止并回滚配置 |
下发两个接口的配置,当下发第一个接口的配置发生错误时,继续进行下一个接口配置的下发,XML请求如下: |
edit-config测试处理选项 |
在真正执行edit-config操作时,可指定一个测试选项,使用<test-option>节点来决定当前配置是否真正下发。该节点的缺省值为test-then-set,全部取值为: · test-then-set:如果没有错误则将配置设置到系统 · set:将配置设置到系统 · test-only:只测试,并不下发配置到系统。语法检查通过,就返回ok成功,否则失败 |
下发一个接口的配置,仅测试,XML请求如下: |
action |
下发非配置数据的设置动作,比如,reset操作 |
清除全部接口的统计信息,XML请求如下: |
lock |
锁保护的是配置数据,即edit-config中可以指定的那些模块的配置数据,其他操作不受锁的限制 NETCONF锁仅仅保护NETCONF 会话,不保护SNMP等其他请求下发的配置 |
禁止NETCONF会话修改设备的当前配置,XML请求如下: |
unlock |
取消锁保护 当会话结束时锁也会被自动释放 |
取消锁保护,允许NETCONF会话修改设备的当前配置: |
get- sessions |
获取当前系统中所有NETCONF会话的信息(不能指定sessions-ID) |
获取当前系统中所有NETCONF会话的信息: |
close- session |
关闭当前NETCONF会话,并释放锁和这个session用到的内部资源(如内存等),退出XML视图 |
关闭当前NETCONF会话,并释放锁和这个session用到的内部资源(如内存等),退出XML视图 |
kill- session |
关闭其他NETCONF会话,不支持关闭用户自己的NETCONF会话 |
关闭session-id为1的NETCONF会话: |
CLI |
执行命令行的命令。请求消息将命令行语句封装在<CLI>标签中,命令行输出信息被封装在<CLI>标签中返回 CLI支持Configuration和Execution方式执行命令行: · Execution:在用户视图下执行命令行 · Configuration:在系统视图下执行命令行。使用该方式时需要指定exec-use-channel的属性: ¡ false:不使用channel方式执行命令行 ¡ true:使用临时channel执行命令行,执行完成后,自动关闭该channel ¡ persist:使用保留channel执行命令行。使用该方式时,则需要执行Open-channel操作打开当前对话的channel;使用完成后,执行Close-channel关闭Channel。如果未执行Open-channel操作,则系统将自动打开channel;如果未执行关闭保留channel操作,再次使用保留channel时,系统在上次最后执行的命令行所在视图再次执行命令行 · 对于其他视图下命令,则需要在Configuration下先指定进子视图的命令,再指定配置命令 一个NETCONF会话只能打开一个保留channel,可以打开多个临时channel 不支持执行交互式命令 使用channel方式执行命令行时,不支持执行quit命令退出用户视图 |
在系统视图下不使用channel方式执行telnet server enable命令: |
save |
保存系统运行配置。save操作可以使用子元素<file>来指定保存的配置文件名称。当save操作中不存在子元素<file>列时,则设备会自动将当前运行配置保存到主用下次启动配置文件中。OverWrite属性用来判断当指定的配置文件名存在时,当前配置是否覆盖原配置文件并保存成功。Binary-only属性用来只保存当前使用的二进制配置文件 |
将设备当前配置保存到文件test.cfg中: |
load |
配置加载。<load>操作执行后,指定文件中的配置会被合并到设备的当前配置中 |
将文件a1.cfg中的配置合并到设备的当前配置中: |
rollback |
配置回滚。<rollback>操作必须使用子元素<file>来指定需要回滚的配置文件名称<rollback>操作执行后,当前系统运行配置会被完全替换为指定文件中所描述的配置 |
将设备当前配置回退到文件1A.cfg中配置的状态: |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)