Netconf协议讲解

news2024/11/14 2:50:53

目录

什么是Netconf

为什么要提出Netconf

数据的类别

传统网络配置协议

Netconf配置协议

Netconf协议架构

安全传输层

消息层

操作层

内容层

Netconf配置设备流程

通过Python进行Netconf配置


什么是Netconf

NETCONF(Network Configuration Protocol)网络配置协议,提供一套管理网络设备的机制。用户可以使用这套机制增加、修改、删除网络设备的配置,获取网络设备的配置和状态信息。

NETCONF有三个对象

NETCONF客户端、NETCONF服务器、NETCONF消息


为什么要提出Netconf

数据的类别

运行在设备上可获取的信息分为两类:配置数据和状态数据

配置数据可以写(例如配置IP地址,此数据就是配置数据)

状态数据是只读数据(例如接口的带宽利用率无法改变,只能读取,此数据就是状态数据)

传统网络配置协议

更改设备数据有多种方法,可以基于命令行也可以基于特定协议。命令行和SNMP是最经典的获取设备数据的方法

SNMP

SNMP基于UDP协议,无状态、无序、不可靠

SNMP用Set做配置时支持的配置比较少,只能做简单的配置,配置的限制太大

SNMP只是单个设备的管理,不支持网络级的配置和多设备配置协同

SNMP使用MIB进行描述数据的,不区分是状态数据还是配置数据

SNMP其实主要还是用于网络监控,不适合设备管理

CLI

各厂商定义的CLI各不相同,管理不方便

CLI配置脚本人类容易理解,但是设备解析起来比较复杂,很难实现自动化解析

无论配置自动化技术如何发展,本质仍然是使用CLI

Netconf配置协议

Netconf工作在SSH协议之上(通过SSH进行加密),可以下发配置给网路设备

Netconf有标准的数据模型,统一数据格式,可以使得所有厂商都可以识别

Netconf相比CLI设备识别会更快速,可以兼容不同的厂商

Netconf是面向业务的,支持网络级的配置和多设备配置协同

Netconf会区分状态数据和配置数据


Netconf协议架构

Netconf协议在概念上可以划分为4层:安全传输层、消息层、操作层、内容层

出错了才会发送notification

安全传输层

为客户端和服务器之间交互提供通讯路径

当前华为Netconf协议的安全传输层是基于SSH

消息层

提供的是RPC请求和回应机制,表示此消息是RPC请求还是RPC应答

RPC的框架与传输层独立,用于表示Netconf requests和response

设备之间的会话交互是有会话ID的

消息层的格式

<rpc>

用于封装从客户端到服务端的NETCONF请求(头部定义message-id标示序列)

<rpc-reply>

用户服务端回复<rpc>的response消息(头部message-id与<rpc>保持一致)

<rpc-error>在<rpc-reply>中被发送

一个<rpc-reply>可以包含多个<rpc-error> , 表示没有错误

<ok>在<rpc-reply>中被发送

表示没有数据返回

操作层

明确消息层中的内容是干嘛的(进行配置edit(删除、创建、修改等配置)、下载get等)

操作对象(Netconf有三个操作对象)

运行配置库(running)-dis cu可以查看

 命令配置成功,并且comit了,配置的命令就会存储在运行配置库中

 此配置库存放在内存中

候选配置库(candidate)

 命令配置成功,但是没有comit,配置的命令会就存储在候选配置库

启动配置库(startup)-dis save可以查看

 配置命令保存后,配置的命令就会存储在启动配置库中

 此配置库存放在Flash卡中

通过此三个配置库,可以灵活读取和编辑配置库、候选库与运行库,实现整体配置的下发、验证和回滚

Netconf定义的操作类型

 

操作类型和操作对象之间的关系

内容层

为设备配置数据的具体才足以内容,即下载或配置的具体内容(配置某个接口,下载某个文件)

建模语言

当前Netcon有两种建模语言:Schema和Yang

Schema

Schema是为了描述XML文档而定义的一套规则

Schema文件中定义了设备所有管理对象,以及管理对象的层次关系、读写属性和约束条件

Yang—主要使用的是Yang建模语言

YANG是专门为NETCONF协议设计的数据建模语言

用来为NETCONF协议设计可操作的配置数据、状态数据模型、远程调用(RPCs)模型和通知机制等

什么是Yang模型,Yang和Netconf的关系是什么

Yang是一个建模的语言,只有框架,没有具体的数据,用来描述Netconf的内容层的结构

NETCONF 1.0对模型语言没有要求,NETCONF1.1明确了与YANG结合,开始规范NETCONF内容格式。

虽然指定了标准的Yang,但是每个厂商都有自己私有的Yang,在使用Netconf配置时并未完全统一

设备里面会内置了很多的Yang模型,不同的Yang模型只表示内容层不一样,其他层是一样的

当前华为设备支持的内容层

Huawei-YANG     华为私有Yang

NETCONF Schema 

Openconfig-yang  谷歌牵头的Yang

IETF-Yang         标准的Yang


Netconf配置设备流程

Netconf如何对设备配置

向Yang建模文件中填充数据,将其转为XML格式下发到设备进行设备配置

因为Yang语言只定义了模型,没有数据,要生成数据就需要变为XML格式(<>)

即将数据填充到Yang模型中,将其转变为XML格式(Yang转XML)

XML类似于Html,是一种扩展的标记语言

为什么要转为XML语言

       因为很多设备是支持XML语言的

XML格式编码

XML是Netconf协议的编码格式

例子:通过Netconf下发Vlan配置(内容层为Huawei私有Yang)

其中merge是<config>中可选的“operation”属性中的一个操作

Operation包含的操作以及其作用

merge:(默认操作)

在数据库中修改存在或不存在的目标数据

如果目标数据不存在则创建,如果目标数据存在则修改

create

当且仅当配置数据库中不存在待创建的配置数据时,才能成功添加到配置数据库

如果配置数据存在,则会返回<rpc-error>(其中包含一个<error-tag>值“data-exists”)

delete

删除配置数据库中指定的配置数据记录

如果数据存在,则删除该数据,如果数据不存在,则返回<rpc-error>(其中包含一个<error-tag>值“data-missing”)

remove

删除配置数据库中指定的配置数据记录

如果数据存在,则删除该数据,如果数据不存在,则返回成功。

delete和remove有点不同,一般删除使用remove


通过Python进行Netconf配置

Python中ncclient模块主要就是用来下发Netconf配置的(代码若有不对请指正)

基本步骤

ssh要手工配置好

先通过Prami模块通过SSH登录上去,配置Netconf相关命令(开启设备Netconf)

然后在通过ncclient模块下发Netconf配置

Netconf.txt文件

sys im
aaa
 local-user netconf password irreversible admin@123
 local-user netconf service-type ssh
 local-user netconf level 15
 quit

rsa local-key-pair create
y

ssh user netconf service-type snetconf
snetconf server enable
netconf
 protocol inbound ssh port 830
 quit

实验命令

from ncclient import manager
from ncclient import operations
import paramiko
import time

ip = "192.168.0.1"
ssh_user = "huawei"
ssh_password = "admin@123"


netconf_port = '830'
netconf_user = 'netconf'
netconf_password = 'admin@123'
filename = r'netconf.txt'    #此文件夹存放的是关于Netconf的命令(设备开启Netconf相关操作)

#声明类名为ssh,包含两个方法 ssh_connect()建立SSH连接,ssh_config发送配置
class ssh():
    def ssh_connect(ip,username,password):
        ssh = paramiko.client.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.client.AutoAddPolicy)
        ssh.connect(hostname=ip,port=22,username=username,password=password)
        print(ip+"ssh登录成功")
        return ssh
    def ssh_config(filename,ip,username,password):
        a = ssh.ssh_config(ip,username,password)
        command = a.invoke_shell()
        command.send("N\n")
        command.send("screen-length 0 temporary \n")
        with open(filename) as cmd1:
            cmd = cmd1.readlines()
            for i in cmd:
                command.send(i)
        time.sleep(1)
        outup = command.recv(65535).decode('ascii')
        print(outup)
        a.ssh_close()

#建立Netconf会话连接
def huawei_connect(ip,port,user,password):
    return manager.connect(
        ip = ip,
        port = port,
        username = user,
        password = password,

        hostkey_verify = False,
        device_params = {'name' : 'huaweiyang'},
        allow_agent = False,
        look_for_keys = False
    )
#Netconf配置文件 Yang为huawei-yang,XML格式
CREATE_INTERFACE = '''<config>
                  <ifm xmlns="urn:huawei:yang:huawei-ifm"> 
                     <interfaces> 
                       <interface> 
                         <name>100GE1/0/1</name>
                         <mtu>1500</mtu> 
                       </interface> 
                      </interfaces> 
                   </ifm>
                </config>'''

if __name__ == "__main__":
    ssh.ssh_config(filename,ip,ssh_user,ssh_password)
    m = huawei_connect(ip,netconf_port,netconf_user,netconf_password)
    m.edit_config(target="running",config=CREATE_INTERFACE)
    m.commit()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/132323.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity运行时代码编辑插件介绍-InGame Code Editor-IDE类文本编辑器

因为某些原因,需要在Runtime显示一下代码,也方便做样式设计 所以找到了这个插件 特色什么的都不展开说了,开源的代码都是好代码,样式什么的就不能要求过多 基础使用方法 导入TextMeshPro 基于这个插件的,所以需要先从Package Manager先下载TextMeshPro 创建编辑器 T…

【SpringBoot应用篇】SpringBoot集成j2cache二级缓存框架

【SpringBoot应用篇】SpringBoot集成j2cache二级缓存框架j2cache介绍j2cache入门使用pomapplication.ymlcaffeine.propertiesCacheTestController启动类j2cache介绍 j2cache是OSChina(开源中国)目前正在使用的两级缓存框架。 j2cache的两级缓存结构&#xff1a; L1&#xff…

《悠悠岁月》悠悠岁月,浅藏浅忆,且行且珍惜

《悠悠岁月》悠悠岁月&#xff0c;浅藏浅忆&#xff0c;且行且珍惜 安妮埃尔诺&#xff0c;法国当代著名女作家&#xff0c;2022年获诺贝尔文学奖。埃尔诺从1974年开始创作&#xff0c;至今已出版了约十五部作品。《悠悠岁月》这部历经二十余年思考和推敲的杰作&#xff0c;使她…

Apache Shiro(一)

1.Apache Shiro Apache Shiro Reference Documentation | Apache Shiro Apache Shiro 是一个功能强大且易于使用的 Java 安全(权限)框架。Shiro 可以完 成&#xff1a;认证、授权、加密、会话管理、与 Web 集成、缓存 等。借助 Shiro 您可以快速轻松 地保护任何应用程序——从最…

PHPExcel基本使用(2) 导入图片

一、效果二、代码一、效果 基于这篇 PHPExcel基本使用&#xff08;2&#xff09; 导入图片 调整 二、代码 基于thinkphp5.1 <?phpnamespace app\index\controller;use think\facade\Env;class Test {public function test(){self::excelAction();}/*** todo 导出报表*…

Microcontent - 微内容

这两年&#xff0c;微内容不断被人提及。微内容是什么&#xff1f;微内容解决什么问题&#xff1f;今天我们一起来看看这个话题。 作者&#xff1a;Sarah Cuellar - 1 - 什么是微内容 什么是微内容&#xff1f;微内容指的是小块的内容&#xff0c;它们遵循具体的的结构规则…

classnames 源码学习笔记与解读

前言 这里我引用源码文档中的一句话来作为开场白&#xff1a; A simple JavaScript utility for conditionally joining classNames together. 话不多说&#xff0c;咱们直接开始 classnames 的源码学习。 核心源码解读 直接来看它的源码部分&#xff0c;以下这是 classnam…

Win10的几个实用技巧系列之win10和win8系统哪个好用、系统任务栏和窗口假死的解决方法

目录 win10系统任务栏和窗口假死怎么办?win10系统任务栏和窗口假死的解决方法 win10系统任务栏和窗口假死怎么解决 Win10进不去Epic下载的死亡搁浅怎么办?Win10玩死亡搁浅闪退的解决方法 Epic领取的死亡搁浅进不去 Win10玩死亡搁浅闪退的解决方法 win10和win8系统哪个好用…

Eth09- EthCtrlConfig:以太网控制器写MAC地址到NVM中的配置

文章目录 1 MAC地址保存到非易失性存储器中传送门 ==>> AutoSAR入门和实战系列总目录 1 MAC地址保存到非易失性存储器中 如果想把MAC地址保存到非易失性存储器中,防止掉电之后MAC地址不存在了,可以通过以下的配置参数,实现实时保存MAC地址到NVM中 EthCtrlConfig/…

【Effective Objective - C】—— 读书笔记(四)

【Effective Objective - C】—— 读书笔记&#xff08;四&#xff09; 协议与分类 文章目录【Effective Objective - C】—— 读书笔记&#xff08;四&#xff09;协议与分类23.通过委托与数据源协议进行对象间通信要点&#xff1a;24.将类的实现代码分散到便于管理的数个分类…

Friedman 检验后的two-tailed Nemenyi test和the two-tailed Bonferroni-Dunn test的关键值

Critical values qαq_{\alpha}qα​ for post-hoc tests after the Friedman testCritical values qαq_{\alpha}qα​ for the two-tailed Nemenyi test Critical values qαq_{\alpha}qα​ for the two-tailed Bonferroni-Dunn test 其中classifiers是比较的方法个数&#…

【nowcoder】笔试强训Day15

目录 一、选择题 二、编程题 2.1 查找输入整数二进制中1的个数 2.2 手套 一、选择题 1.给出数据表 score(stu-id,name,math,english,Chinese), 下列语句正确的是&#xff08; &#xff09; A. Select sum(math),avg(chinese) from score B. Select *,sum(english) from …

初步改造2

1.找到登录按钮的触发方法 views/login/index.vue 找到是handleLogin 接着发现调用的是vuex里面的user/login方法 2.vuex中的方法&#xff0c;其实对应于"store/modules/user.js 中actions的login方法 3.前端请求与发现无响应&#xff0c;我们先用postman排除是后端问题&a…

Java集合 - HashMap

介绍 HashMap Map 是一种存储键值对的集合。Map 集合可以根据 key 快速查找对应的 value 值。HashMap 是 Map 类型的一中。 HashMap 的底层存储结构是&#xff1a;数组 链表 红黑树。 下面我们通过 HashMap 的新增操作、查找操作来看 HashMap 的底层存储结构。 HashMap 的…

深入理解ConcurrentHashMap1.8源码

1. 概述 之前介绍了ConcurrentHashMap1.7&#xff0c;采用的是数组分段锁的方式来实现的。虽然说采用分段锁的方式能够在一定程度上提高并发的效率&#xff0c;但是锁的粒度是Segment级别的&#xff0c;其实还是挺大的。 于是&#xff0c;ConcurrentHashMap1.8继续在1.7版本上…

postgresql_internals-14 学习笔记(五)Buffer Cache

新年的第一篇博客~ 一、 Buffer Cache简介 1. 主要用途 调和内存&#xff08;ns级&#xff09;与磁盘&#xff08;ms级&#xff09;间的速度差异。 pg不仅用自己的buffer cache&#xff0c;也用os cache&#xff0c;所以它使用了“双缓存”&#xff0c;这也是很多文档推荐sha…

《UEFI内核导读》UEFI是不是操作系统?

敬请关注微信公众号&#xff1a;“固件C字营” 最近一直在思考一个问题&#xff0c;UEFI是什么&#xff1f;UEFI算不算是操作系统&#xff1f; 众所周知&#xff0c;计算机系统是由软件和硬件两大部分组成的&#xff0c;但从更科学的角度来划分&#xff0c;我们其实可以分得更…

电子学会2020年9月青少年软件编程(图形化)等级考试试卷(四级)答案解析

目录 一、单选题&#xff08;共15题&#xff0c;每题2分&#xff0c;共30分&#xff09; 二、判断题&#xff08;共10题&#xff0c;每题2分&#xff0c;共20分&#xff09; 三、编程题【该题由测评师线下评分】&#xff08;共5题&#xff0c;共50分&#xff09; 青少年软件…

【MySQL】说透锁机制(三)行锁升表锁如何避免? 锁表了如何排查?

文章目录前言哪些场景会造成行锁升表锁&#xff1f;如何避免?如何分析排查?查看InnoDB_row_lock%相关变量查看 INFORMATION_SCHEMA系统库总结最后前言 在上文我们曾小小的提到过&#xff0c;在索引失效的情况下&#xff0c;MySQL会把所有聚集索引记录和间隙都锁上&#xff0…

【正点原子】嵌入式Linux C应用编程-第十一章

第十一章&#xff1a;线程 前言&#xff1a; 与进程类似&#xff0c;线程是允许应用程序并发执行多个任务的一种机制&#xff0c;线程参与系统调度&#xff0c;事实上&#xff0c;系统调度的最小单元为线程&#xff0c;而不是进程 1&#xff1a;线程的概念 什么是线程&#xff…