NetConfig协议详细介绍
nanshan 2024-11-21 18:51 15 浏览 0 评论
最近在做TSN设备相关的项目,项目中使用了Netconfig协议进行设备管理和配置。以前没接触过,在网上找了很多资料学习,做个笔记记录一下。
NETCONFIG简介
NETCONF(Network Configuration Protocol,网络配置协议)是一种基于 XML 的网络管理协议,它提供了一种可编程的、对网络设备进行配置和管理的方法。它使用简单的基于RPC(Remote Procedure Call)机制实现客户端和服务器之间通信。客户端可以是脚本或者网管上运行的一个应用程序。服务器是一个典型的网络设备。
NETCONF 报文使用 XML 格式,具有强大的过滤能力,而且每一个数据项都有一个固定的元素名称和位置,所以具有很强的兼容性,不同厂家不同设备可以通过 XML 得到相同的结果,便于混合不同厂商不同设备的为冷热软件开发。
NETCONF的优点
- NETCONF协议以XML格式定义消息,运用RPC机制修改配置信息,这样既能方便管理配置信息,又能满足来自不同制造商设备之间的互操作性。
- 减少由于人工配置错误引起的网络故障。
- 提高使用配置工具升级系统软件的效率。
- 扩展性好,不同制造商设备可以定义自己的协议操作,以实现独特的管理功能。
- NETCONF提供了认证、鉴权等安全机制,保证了消息传递的安全。
NETCONFIG与SNMP比较
NETCONFIG协议结构
NETCONF协议采用了分层结构。每层分别对协议的某一方面进行包装,并向上层提供相关服务。分层结构使每层只关注协议的一个方面,实现起来更简单,同时使各层之间的依赖、内部实现的变更对其他层的影响降到最低。
NETCONFIG协议结构分为:
- 安全传输(Secure Transport)层为客户端和服务器之间交互提供通讯路径。
- 消息(Messages)(RPC) (Remote Procedure Call,远程调用) 层提供一种简单的不依赖传输协议层的,生成RPC请求和回应消息框架的机制。Client把RPC请求内容封装在一个元素内,发送给Server;Server把请求处理结果封装在一个元素内,回应给Client。
- 操作(Operations)层定义一组基本的操作,作为RPC的调用方法,可以使用XML编码的参数调用这些方法。
- 内容(Content)层由管理对象的数据模型定义,数据模型定义依赖NETCONF的实现情况。对应xml中具体的配置数据、状态数据等信息。
安全传输层
NETCONF的第一大优势就是其从协议层面就已经规定其传输层必须使用带有安全加密的通信协议。由于NETCONF协议规定必须要支持SSH,所以目前SSH是NETCONF使用最广泛的传输层协议。NETCONF的协议内容是承载在安全传输层之上的,所以NETCONF本身是一个应用层协议。
消息层
NETCONF中定义了三种消息类型,分别是hello, rpc和rpc-reply, notification。
<hello>
<hello>仅用于回话刚刚建立时netconf-server和netconf-client之间进行能力交换。server和client需要在回话建立后互相发送<hello>消息,并在<hello>消息中携带自身支持的能力,以及支持的netconf协议的版本号,server和client根据自身和对方的能力信息协商使用的netconf版本。一般来说,C/S双方互发<hello>且协商版本成功后,认为netconf会话建立成功。
几种常用的能力
(1) XPath Capability
该能力表示client可以在filter中使用XPath表达式作为过滤条件
Capability Identifier:
urn:ietf:params:netconf:capability:xpath:1.0
(2) Writable-Running Capability
该能力表示server支持直接对<running/>库进行修改操作。
Capability Identifier:
urn:ietf:params:netconf:capability:writable-running:1.0
(3) Candidate Configuration Capability
该能力表示server具有一个candidate数据库,并且可以将candidate数据库中的配置提交生效并更新running数据库
Capability Identifier:
urn:ietf:params:netconf:capability:candidate:1.0
(4) Rollback-on-Error Capability
该能力表示server在执行client发送的配置数据出错后可以进行回滚
Capability Identifier:
urn:ietf:params:netconf:capability:rollback-on-error:1.0
(5) Validate Capability
该能力表示server可以校验client发送的配置数据是否正确
Capability Identifier:
urn:ietf:params:netconf:capability:validate:1.1
(6) Distinct startup Capability
该能力表示server有一个startup数据库,用于保存启动配置
Capability Identifier:
urn:ietf:params:netconf:capability:startup:1.0
<rpc>和<rpc-reply>
<rpc>是由netconf-client发起的发送到netconf-server的消息。用于client请求server执行某项具体的操作。<rpc>包含一个强制属性”message-id”,这个id是一个单调递增的正整数,同一会话内不能重复。该id用于<rpc>和<rpc-reply>的配对。<rpc-reply>是有netconf-server发送给netconf-client的rpc响应。不能主动发起,仅能在收到<rpc>之后回复,切必须携带与收到的rpc相同的message-id。在<rpc-reply>定义了两种默认的元素分别是<ok>和<rpc-error>。<ok>表示未定义响应内容的rpc执行成功,而<rpc-error>表示rpc执行失败。
关于RPC最重要的几点:
1. netconf-client必须保证server收到的rpc请求的顺序和message-id的顺序是一致的。
2. netconf-server在能保证数据不冲突的前提下可以并行处理收到的rpc请求。
3. netconf-server在发送<rpc-reply>时必须严格按照收到的<rpc>的顺序。
<notification>
支持Notification上报的netconfig server需在能力交换时上报能力:“urn:ietf:params:netconf:capability:notification:1.0”。
几个关键的知识点:
1. Netconf的通知采用的是订阅发布机制,server仅会向发送过订阅请求的client发送通知。
2. Netconf的通知是以Stream进行分类的,不同类的Stream以不同的stream-name进行区分。netconf-server默认需要支持的stream-name是”NETCONF”。
3. client不能重复下发订阅,即同一Stream的订阅不能重复下发,也不能同时订阅多个Stream,订阅可以设置定时取消,如果没有设置终止时间,取消订阅需要使用close-session或者kill-session。定时取消的订阅netconf的会话还是激活的,而使用close-session或者kill-session来取消的话,netconf会话会关闭。
操作层
操作层仅承载在<rpc>和<rpc-reply>消息上,<hello>和<notification>消息无操作层。
NETCONF协议规定了9种简单的rpc操作,同时也支持用户自定义rpc操作。
1、<get>
查询的是设备当前运行的状态数据,即只能从配置数据库中获取数据。所以,不需要使用source参数指定配置数据库。如果server支持能力:urn:ietf:params:netconf:capability:xpath:1.0则还可以使用filter进行条件查询。
<rpc message-id="101"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<get>
<filter type="subtree">
<top
xmlns="http://example.com/schema/1.2/stats">
<interfaces>
<interface>
<ifName>eth0</ifName>
</interface>
</interfaces>
</top>
</filter>
</get>
</rpc>
2、<get-config>
用来查询全部或部分指定配置数据。
- source:正在查询的配置数据库名称。
- filter:此参数用来标识要查询配置数据库的范围。如果此参数不存在,则返回设备上所有的配置。
<rpc message-id="101"xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<get-config>
<source>
<running/>
</source>
<filter type="subtree">
<top xmlns="http://example.com/schema/1.2/config">
<users/>
</top>
</filter>
</get-config>
</rpc>
3、<edit-config>
用来把全部或部分配置数据加载到指定的目标配置数据库,对设备的操作进行鉴权,鉴权通过后,执行相应的修改。支持多种加载配置方式,如:本地文件、远程文件,支持在线编辑。如果NETCONF服务器支持URL能力,可以使用标识本地配置文件的参数替代参数。一组由数据模型定义的层次化的配置数据中可能包含可选的“operation”属性,用来给配置数据指定操作类型。如果未携带“operation”属性,则默认为merge操作。Operation取值如下:
- merge:在数据库中修改存在或不存在的目标数据,如果目标数据不存在则创建,如果目标数据存在则修改。这是默认操作。
- create:当且仅当配置数据库中不存在待创建的配置数据时,才能成功添加到配置数据库。如果配置数据存在,则会返回,其中包含一个值“data-exists”。
- replace: 如果配置数据库中配置数据已经存在则替换,不存在则创建。
- delete:删除配置数据库中指定的配置数据记录。如果数据存在,则删除该数据,如果数据不存在,则返回,其中包含一个值“data-missing”。
- remove: 配置数据库中配置数据已经存在则删除,不存在则忽略。
<rpc message-id="101"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<edit-config>
<target>
<running/>
</target>
<config
xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0">
<top
xmlns="http://example.com/schema/1.2/config">
<interface xc:operation="replace">
<name>Ethernet0/0</name>
<mtu>1500</mtu>
<address>
<name>192.0.2.4</name>
<prefix-length>24</prefix-length>
</address>
</interface>
</top>
</config>
</edit-config>
</rpc>
4、<copy-config>
源配置数据库替换目标配置数据库。如果目标配置数据库没有创建,则直接创建配置数据库,否则用源配置数据库直接覆盖目标配置数据库。
<rpc message-id="101"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<copy-config>
<target>
<running/>
</target>
<source>
<url>https://user:password@example.com/cfg/new.txt</url>
</source>
</copy-config>
</rpc>
5、<delete-config>
用来删除一个配置数据库,但不能删除配置数据库。
<rpc message-id="101"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<delete-config>
<target>
<startup/>
</target>
</delete-config>
</rpc>
6、<lock>
用来锁定设备的配置数据库,独占配置数据库的修改权。这种锁定允许用户在配置时,不会受到如NETCONF mannager、SNMP或者CLI脚本的配置影响,防止产生冲突。如果配置数据库被合法用户锁定,则返回的reply报文中将显示lock-denied,并且将显示锁定者。
<rpc message-id="101"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<lock>
<target>
<running/>
</target>
</lock>
</rpc>
7、<unlock>
取消锁定数据库操作,只能取消自己的锁定操作。
<rpc message-id="101"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<unlock>
<target>
<running/>
</target>
</unlock>
</rpc>
8、<close-session>
用来正常关闭当前NETCONF会话。当NETCONF Server收到请求时,它将关闭当前的NETCONF会话。服务器将释放与该会话相关的所有锁和资源。在收到请求后,NETCONF Server将忽略这个会话的所有请求消息。
9、<kill-session>
用来强制关闭另一个NETCONF会话,只有管理员用户才有权限执行操作。当NETCONF Server收到请求时,它将中止该会话正在进行的所有操作,释放与该会话相关联的任何锁和资源,并关闭该会话。如果NETCONF服务器在处理操作时收到请求,它必须将配置恢复到发出确认提交之前的状态。
内容层
内容层需要使用Yang语言对其数据进行建模。支持用户自定义操作,可以根据实际的需求在yang文件中定义相应的rpc操作。
Netconfig基本网络结构
Netconfig基本网络结构的主要元素:
- 客户端(Client):利用NETCONF协议对网络设备进行系统管理。向NETCONF Server发送请求,查询或修改一个或多个具体的参数值。接收NETCONF Server主动发送的告警和事件,以获知被管理设备的当前状态。
- 服务端(Server):维护被管理设备的信息数据并响应客户端的请求。服务器收到客户端的请求后会进行数据解析,然后给客户端返回响应。当设备发生故障或其他事件时,服务器利用Notification机制主动将设备的告警和事件通知给客户端,向客户端报告设备的当前状态变化。
- 配置数据集(Datastores):NETCONF定义了一个或多个配置数据集的存在,并允许对它们进行配置操作。配置数据集被定义为使设备从其初始默认状态进入期望的操作状态所需的完整配置数据集合。运行的配置数据集保存网络设备上当前处于活动状态的完整配置。 在设备上只存在一个此类型的配置数据集,并且始终存在。基本模型中只存在配置数据集。 其他配置数据集可以由能力集定义,且只在宣称支持该能力集的设备上可用。备用配置数据集。存放设备将要提交到的各项配置数据的集合。管理员可以在上进行操作,对配置的任何改变不会直接影响网络设备。可以通过指令将备用配置数据提交为设备运行数据。启动配置数据集。存放设备启动时所加载的配置数据,相当于已保存的配置文件。
NETCONF会话是Client与Server之间的逻辑连接,网络设备必须至少支持一个NETCONF会话。Client从运行的Server上获取的信息包括配置数据和状态数据,Client可以修改配置数据,并通过操作配置数据,使Server的状态迁移到用户期望的状态,Client不能修改状态数据,状态数据主要是Server的运行状态和统计的相关信息。
Netconf建模语言
- Schema:Schema是为了描述XML文档而定义的一套规则。Schema文件中定义了设备所有管理对象,以及管理对象的层次关系、读写属性和约束条件。设备通过Schema文件向网管提供配置和管理设备的接口。Schema文件类似于SNMP的MIB文件。
- YANG:YANG是专门为NETCONF协议设计的数据建模语言,用来为NETCONF协议设计可操作的配置数据、状态数据模型、远程调用(RPCs)模型和通知机制等。YANG数据模型定位为一个面向机器的模型接口,明确定义数据结构及其约束,可以更灵活、更完整地进行数据描述。
Netconf鉴权机制:
NETCONF鉴权机制用于管理特定用户执行NETCONF操作和访问NETCONF资源权限。
NETCONF鉴权支持的内容如下:
- 协议操作(Protocol Operation)鉴权:允许使用指定的NETCONF协议操作。
- 模块(Module)鉴权:允许访问指定的特性模块。
- 数据节点(Data-node)鉴权:允许查询、修改指定的数据节点。
NETCONF鉴权机制用于管理特定用户执行NETCONF操作和访问NETCONF资源权限,使这些用户只能执行或访问NETCONF协议规定的操作和能力集中预配置好的子集。
Netconf会话基本流程:
- 客户端触发NETCONF会话建立,完成SSH连接建立,并进行认证与授权。
- 客户端和服务器完成NETCONF会话建立和能力协商。
- 客户端发送一个或多个请求给服务器,进行RPC交互(鉴权)。例如:修改并提交配置。查询配置数据或状态。对设备进行维护操作。
- 客户端关闭NETCONF会话。
- SSH连接关闭。
能力集(Capabliity):
NETCONF能力集是补充基本NETCONF规范的一组功能。能力集扩展了设备的基本操作,描述了附加操作和操作中允许的内容。客户端可以发现服务器的功能,并使用由这些能力集定义的任何其他操作,参数和内容。能力集定义可以命名一个或多个依赖的能力集。 为了支持一种能力集,服务器必须支持它所依赖的任何能力集。
能力协商是在会话建立阶段,双方通过发送消息给对方来通告自己支持的能力。当NETCONF会话打开,每一端(包括Client和Server)必须发送一个包含自身能力列表的消息。双方至少要发送NETCONF基本能力"urn:ietf:params:netconf:base:1.0"或"urn:ietf:params:netconf:base:1.1"。除了基本功能,NETCONF协议还允许客户端发现服务器端支持的其它能力列表。在交换过Hello消息后,Server等待Client发送请求,为每个请求回应。
相关推荐
- Linux/Unix 系统中非常常用的命令
-
Linux/Unix系统中非常常用的命令,它们是进行文件操作、文本处理、权限管理等任务的基础。下面是对这些命令的简要说明:**文件操作类:*****`ls`(list):**列出目录内容,显...
- 教你如何在Linux中删除分区(CLI篇)
-
文接上篇,继续以Ubuntu系统为例。删除分区前,急得重要数据备份!备份!备份用命令操作分区,用的最多的莫过于fdisk了,几乎所有的Linux发行版都默认带有fdisk。首先要知道的是,你想删除的分...
- 敲完就让你提桶跑路的Linux命令(敲完就让你提桶跑路的linux命令是什么)
-
不谨慎可能就会让你提桶的Linux命令!!!删除文件rm-rf该命令是删除文件或文件夹等最快的方式之一。删除后的内容很难恢复,如果删除系统文件可能会导致系统崩坏。>rm-rf/#强制...
- Log文件可以删除吗(taxukeylog文件可以删除吗)
-
Log文件(日志文件)是否可以删除取决于具体场景和文件类型。以下是详细分析和建议:一、哪些Log文件可以删除?非关键应用日志用户级应用日志:如浏览器缓存日志、游戏临时日志等,通常不影响系统运行,可定期...
- Linux 删除空目录(linux直接删除目录)
-
rmdir命令用来删除空目录。当目录不再被使用时,或者磁盘空间已到达使用限定值,就需要删除失去使用价值的目录。利用rmdir命令可以从一个目录中删除一个或多个空的子目录。该命令从一个目录中删除一个或...
- 在 Windows 11 或 10 上删除、创建和格式化分区
-
在Windows11或10上删除、创建和格式化分区假设您的现有电脑使用的是传统硬盘,但现在您想再添加一个硬盘或SSD。当然,后者将用于启动操作系统,而前者将作为纯数据存储。在成功将操作系统...
- 如何使用 Apt Clean 命令清除 APT 缓存?
-
APT(AdvancedPackageTool)是Debian系Linux发行版的包管理工具,用于处理软件包的安装、升级和依赖管理。在使用apt命令(如aptinstall、apt...
- Linux 磁盘空间不够用?5 招快速清理文件,释放 10GB 空间不是梦!
-
刚收到服务器警告:磁盘空间不足90%!装软件提示Nospaceleftondevice!连日志都写不进去,系统卡到崩溃?别慌!今天教你5个超实用的磁盘清理大招,从临时文件到无用软件一键搞定...
- Linux清空日志方法(linux怎么清理日志)
-
方法1:使用>重定向>/path/to/logfile或(需要权限时):sudosh-c'>/var/log/logfile'方法2:使用trun...
- 如何在Eclipse中搭建Zabbix源码的调试和开发环境
-
Zabbix是一款非常优秀的企业级软件,被设计用于对数万台服务器、虚拟机和网络设备的数百万个监控项进行实时监控。Zabbix是开放源码和免费的,这就意味着当出现bug时,我们可以很方便地通过调试源码来...
- Linux操作系统之常用命令(linux操作系统之常用命令有哪些)
-
Linux操作系统一、常用命令1.系统(1)系统信息arch显示机器的处理器架构uname-m显示机器的处理器架构uname-r显示正在使用的内核版本dmidecode-q显示硬件系...
- 理解linux内核的vmlinuz和initrd(linux内核原理及分析)
-
Originaladdress:http://www.chenjunlu.com/2010/11/understanding-of-vmlinuz-initrd-and-system-map/1....
- Linux纯干货知识总结|面试专用(linux面试宝典)
-
学习Linux的重要性相信不用我多说大家也明白,以下是小编总结的常用Linux基础知识以及面试常问的Linux命令,希望能帮助大家更规范地理解和使用~绝对路径和相对路径绝对路径以正斜杠开始完整的文件的...
- Linux基础知识之启动流程分析(简述linux启动流程)
-
Linux系统启动原理:1.poweron开机。2.开机自检:电脑开机后首先加载BIOS(BasicInput/OutputSystem基本输入输出系统)。BIOS程序首先检查计算机能否满足运...
- Java程序员必备——Linux的面试常见问题及面试题!你知道多少?
-
一.常用命令1.编辑相关①.awkNF:字段总数NR:第几行数据FS:分隔字符②.sed-n-i直接修改4a:在第四行后添加4i:在第四行前插入1,5csting:用sting替换1到5行...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)