基于python的modbus协议编程_通往未来的网络可编程之路:Netconf协议与YANG Model

85d3b0ed99bb5bc0c36ab81b92ee9263.png

5da875660066a7acecc0fd803a9abbfc.png

近年来,随着全球云计算领域的不断发展与业务的不断增长,促使网络技术也不断发展,SDN技术应运而生,从最初的基于Openflow的转发与控制分离的核心思想,人们不断的去扩展SDN的外延,目前,人们可以达成一个共识,Openflow不再是必备条件(但转发与控制分离依然是核心条件),网络可编程能力慢慢地成为衡量一套SDN架构的重要标准之一。

传统的网络设备进行可编程操作,一般是基于CLI与SNMP协议去进行的,脚本也好,网管软件也罢,都是在此基础上去进行开发,实现我们今天要谈的广义范围上的网络可编程能力,进而实现很多场景的自动化。有些设备支持一些web界面的配置,通过xml进行整体配置的替换,此类极少,本篇不做赘述。

CLI

CLI(Command-line Interface),通过命令行的方式实现人机交互,是网工必备的熟练,人们每天打开软件ssh或者Telnet到设备,然后贴入一段配置,保存生效。有一天人们厌倦了这种重复,通过程序自动生成配置脚本,批量登录到设备下发配置生效,实现自动化,这是一种网络可编程的方式。说说优点,非常符合人的思维、思路与既有的技术体系。但是说到底,这种方式更倾向于人,而非网络设备。它有着以下一些缺点:

  • 厂商之间的命令集存在巨大差异,何止是厂商,同型号不同软件版本可能差异都非常大。
  • 开发人员必须熟知命令集及其使用方法,从配置层面存在安全风险。比如手一瓢,想开端口变成了关闭端口...
  • 对传输协议不强制要求(SSH与Telnet),存在生产安全风险
  • 解析与生成配置的过程及其复杂,很多时候写的正则只能是无限接近“真相”,而不是全部“真相”。
  • 没有事务性,一次配置可能部分生效,部分不生效
  • 没有自动化的检查机制,完全依赖人。比如我想测试一下这段生成的脚本对不对,有办法,但是很困难,很多时候难以简单实现。
  • 没有数据建模的思想

CLI始终是人机交互的方式,可以通过程序可以赋予网络一定的可编程能力,但它毕竟不是天生面向网络可编程的一种方式。在当今云计算与SDN的浪潮之下,不适用于网络中的大规模自动化部署,可编程能力有限,这其中的开发难度难以为外人道也。

SNMP

SNMP(SNMP,Simple Network Management Protocol),该协议能够支持网络管理系统,用以监测连接到网络上的设备是否有任何引起管理上关注的情况。它由一组网络管理的标准组成,包含一个应用层协议(application layer protocol)、数据库模式(database schema),和一组数据对象。

维基百科里的一段内容,我们划下重点,网络管理,监测,数据对象。它是用来管理网络的,能配置能采集,主要用于监测,它有数据建模,将网络设备的一些模块、特征、状态数据结构化。主要是用于网管系统(划重点,多是监控)。那我们也来说说它的缺点:

  • 可读性差。它偏向人机中的“机”,用起来可读性差,建模数据也可读性低,用的是一个ASN.1的超集。
  • 安全性受限,有v1 v2c v3三个版本,安全性依次提高,但是目前最通用的是v2c,安全性有限。v3版本从设计上很安全,但是普及性。。。
  • 无备份及恢复回滚等机制。命令行我们还有show run等方式备份,但snmp。。。
  • 极少的写操作。读很多,写很少,多用于监控。
  • 能采集的数据项有限,无法获取整台设备的配置。很多时候我们发现能用cli采集出来,但是无法用snmp采集。
  • 性能有瓶颈,采集数据上限64K,采集颗粒度过大,在大型复杂网络中可能是分钟级或者更久。这个也划下重点,我们对于颗粒度的要求也非常严格,很多时候希望几秒钟采集一次端口流量。大型网络中,传统的网管软件,我觉得是...多展开一句,现在的方式是Telemetry(比如gRPC)可以实现微秒级,有的需要软硬件结合才行,目前还未普及,但未来一定是趋势,至于这个未来什么时候来..

SNMP自诞生之日,极大地被应用在了网络监控领域,用于获取数据进行监控,配置能力的缺失与复杂导致人们对其在网络配置方面使用甚少。只有读的网络可编程...

Netconf协议与YANG Model

面向下一代网络,我们需要什么样的网络管理协议去更好地实现网络可编程能力,提高自动化的水平?

IETF于2002年在RFC3535提出了以下几点设想(实际有33条之多,结合网上资料与笔者认知,写了以下几条):

1、有对网络配置的可编程接口

2、同样的配置可以跨厂商型号

3、需要统一可读性良好的建模语言

4、完整的错误检查及恢复功能

5、事务性

有了想法,那就去实现,在2006年IETF提出了Netconf协议,基于RFC3535提出的问题进行了解决。最初的Netconf只规定了协议的基本框架和操作,定义考虑RFC3535的一些问题的解决方法,没有规定统一的建模语言,所以早期部分厂商的设备只是支持Netconf的一些基本操作,底层没有使用统一的数据建模语言。

在2010年发布了RFC6020, 提出了YANG Model建模语言,以及和NETCONF 的结合方法。一个定义的是数据建模的语言统一各厂商之间的底层资源逻辑,一个定义的是对配置数据、状态数据的操作统一各厂商的命令集,YANG模型创建的数据实例包裹在Netconf协议之中传输,二者相互结合,构建了一套新的基于YANG模型的使用Netconf协议驱动的新时代的通用网络可编程接口。

在2016年之后,Netconf协议与YANG Model紧密结合并流行开来。至此我们再去看一些SDN架构软件层面的时候,多多少少听到了这两个名词。

YANG 与Netconf,一个是静,一个动,就好比阴阳,二者衍生出了下一个时代的网络可编程世界。(当我们去看github上,YANG的仓库时也会发现,它的图标是太极,包括它名字中与“阳”的关联也多少透露出当初设计者的设计思想)

我们接下来就简单讲讲YANG Model与Netconf协议,我们先来讲数据建模语言YANG,看看它是如何描述这个网络世界的数字孪生。

YANG Model

在RFC6020的文档中,开篇明义,YANG,A Data Modeling Language for the Network Configuration Protocol。是Yet Another Next Generation (Yang) Data Modeling Language的缩写。它是一种建模语言,用于描述网络概念的。

支持定义列表、字典、甚至更复杂的数据结构,支持约束、枚举、引用导入,版本管理、命名空间。由于篇幅,我们做简单讲解,详细信息大家可以参考:

官方文档:https://tools.ietf.org/html/rfc6020

互联网博文:https://www.jianshu.com/p/ca7f5fe11fae

它可以非常简单的用结构化语言描述出这个网络设备。比如对于一个端口的定义:

16dc20142efc93086beffc328a03ca5b.png

作为一个专业的运维人员,有点网络基础和一点点编程基础就可比较清晰的了解端口的定义,它是一个list结构的,可以有多个,它的一个属性是interface-name(同时是key,唯一,不可重复),还有speed属性和duplex属性,他们都是字符串。
一个网络设备的很多属性都以YANG Model去描述,包括配置状态和运行状态。

就这样,YANG Model用结构化语言描述了这个网络世界。有兴趣额的可以看看上面的那个互联网博文,有非常深入的描述。

它可以很好的转换成XML数据,包裹在Netconf协议之中进行传输(我们后续会讲解):

c60fd763b7e78dc934e2c1f545d2b40c.png

同时为了拉平厂商之间的差异,谷歌牵头的Openconfig对数据模型就行了标准化,从官网中我们看到这样一行标语“Vendor-neutral, model-driven network management designed by users”,由用户设计的、跨厂商通用的、模型驱动的网络编程(我么先这么翻译吧)。简单点说它是为了让各厂商之间的建模是相同的,大家再去配置某些数据的时候就不用一个个去翻看各厂商的私有的yang model了。但是网络总有私有协议,不同厂商总会为了“更好的用户体验”和“更好的商业战略”去创造新的、更牛的私有协议(这真的是网络厂商的原罪啊)。图中是一些比较常用openconfig的yang model实现。

bac74df0183c82d0ccc58f6654d58399.png

dac3a04b4d9a50549b4652299d288278.png

从图中来看,我觉得还是挺多的,常用的配置比较齐全。但是实际中要看厂商是否也支持这些yang model。某科的一些高版本的设备基本都是支持的。国产的我暂时没去细看。

网络是不可能完全相同的,能做到大同,对于一个做网络运维开发的工程师来说,已经是谢天谢地了!

openconfig可以在

https://github.com/openconfig/public/tree/master/release/models

查找。私有的yang model 大家可以去各个官网查找。

Netconf协议

说完了yang model,我们来聊聊Netconf协议,yang model定义了网络世界的数字描述,Netconf定义了对数据的获取(get)与调整(config)。
Netconf对yang model描述的世界的数据yang data封装操作,实现对网络世界的管理。

b517c9d3e88bca7bef20db3165fde288.png

yang data封装在xml中,然后通过Netconf协议进行管理。它是一个分层思想很棒的协议,有层次的描述了这个协议的一些细节。我们看看上图。

  • 传输:Netconf是通过SSH协议传输,面向连接,且有安全保障。
  • 消息:通过RPC进行对网络设备的远端调用,网管发出rpc请求,网络设备恢复rpc-reply。
  • 操作:这是Netconf的灵魂所在,它支持get(配置及运行数据)、get-config(获取配置数据,且一个设备可以有多个配置数据,一个running,一个startup,多个candidate候选)、edit-config(配置网络设备的参数,支持增删改)这些常用的,还有delete-config、copy-config(复制配置到目的地,目的地可以是ftp、文件或者是正在running的配置等等)、lockunlock(对配置进行锁定,防止多进程操作导致的配置冲突或者失败等情况)等等。
  • 数据:data就是xml包裹的yang data,如上图我们所描述的那个端口一样,结构化数据易于编程。用来描述要配置或者删除或者获取的数据。

这就是Netconf的四个layer,控制端与网络设备端通过Netconf沟通,通过传统的ssh协议,用Netconf子系统,默认端口是830。如下图:

a1fb5bd69da1b3984e75987c2891bb9b.png

这个图用原始的ssh演示了交互,但是实际上我们是通过编程去实现这个过程的。编程的实现方式我后续会演示给大家。

Netconf配置网络设备,交互过程大致如下:

6bc1828296cab9b01dcedb0881d81c30.png

这个图,如此low,大家也可以看出来,是我自己画的... 我对Netconf的理解如上,网上很多图,我觉得都是不太对的,server agent 很多行为都对不上。这个是我登录设备所直观感受的,当然也和官方文档是一一对应的。

我们可以看看一些Netconf的例子:

hello,建链。

a07562f6f7682858470a7b9af9d8a7bd.png

我们看到了几个关键字,Netconf的版本,支持的YANG Model,session id。同时hello中表明我们是在什么样的命名空间下操作,此例中是Netconf对应版本。

获取配置

2fc2effaa30fc12ab981f4caeeea70cb.png

get-cofig有一个参数是source,即获取哪里的配置数据(running、startup 或者其他)。还有一个参数是filter,即在哪个yang model描述的数据模型获取哪个数据。这个对应的是网络设备当初发送的capability中的。如果成功会回复对应的配置数据。

获取配置或者运行数据

884639950a756a2718057ac7b5640707.png

类似get-config,但是获取的是running配置(个人理解)或者运行数据。可以指定filter。

复制配置

1b3b1900b4390ea1e136d12c4147dd62.png

复制操作两个参数,源与目的。成功回复的是ok标签。

编辑配置

2081c6f696e26ff51ca11c6205966a53.png

编辑配置的时候指定编辑的数据项,capability的命名空间及对应标签,比如这个是配置dhcp的,它是有http://tail-f.com/ns/example/dhcp这个yang model所描述。

优雅的关闭session

928f24449c05b3e5706bd6938a9fe1fc.png

在ssh里来回传输的就是这种报文,我们只是把报文部分摘出来,方便大家理解。

然后简单补充一些内容,供参考。

  • Netconf是基于session的,每次成功都会有一个session id。
  • 每次请求都有message id,只要是逐渐变大即可。
  • 对数据配置可以锁定,独占,通过lock操作。
  • Netconf是事务性的,操作要么全部实现,要么全部不实现。同时根据官网文档,这个事务性是针对N台网络设备的配置,即一次配置多态都可以支持事务性。不过我没操作过...
  • Netconf支持订阅,看设备性能而言,数量级大概是5个session左右,我可以订阅某数据项,当发生变化的时候,设备会告知我。
  • capability,我是这样理解的,网络设备发送的是Netconf的版本和YANG Model,控制端发送的是Netconf的版本,二者对的上Netconf版本才能继续。这条是我的直观感受。欢迎指教。
  • get edit等操作会指定要改的数据,用filter可以过滤。
  • copy-config支持把一个配置全集从某处复制到某处,某处可以是FTP File,设备上的running、startup、candidate配置。
  • Netconf还支持对配置的验证,使用validate操作。

本文还是希望做到科普,具体细节不做赘述,大家可以去看看RFC的相关协议,其实不是很长。

在实际中基于一些开源的软件,比如python的ncclient,我们可以非常方便的对网络设备进行自动化配置,实现网络可编程。这就是Netconf与YANG Model的使命所在。

网络人员阅读格式良好的YANG Model定义,基于Netconf定义的操作,使用相关的编程语言对网络设备进行可编程操作。通过这种方式铸就网络可编程的道路。

我们再去扩展的想象一下,YANG Model已经定义了网络设备的数据结构,我们可以通过Netconf去操作,那是不是也可以通过其他协议去操作呢?

答案是肯定的,实际上后续也从Netconf衍生出了很多其他的协议,比如RESTConf。如下图,

80d4daf62ba97ad060f2a993af65d351.png

YANG Model(public与native)定义了数据结构,之上是新的网管协议,Netconf、RESTCon、gRPC等等。这样我们可以通过基于HTTP RESTful API的RESTConf对网络设备操作,也可以通过基于SSH的Netconf对网络设备操作,也可以通过基于HTTP2.0的gRPC对网络设备操作,他们都是基于数据结构良好的YANG Model,编写对应的data,封装到xml或者json当中对网络设备编程,这就是未来的网络可编程之路,准确点说,是Model Driven Program,基于模型的网络可编程。网工逐步的关注于设备的参数,而不是命令集,通过阅读对应的数据模型,对网络进行参数配置。

写在最后,我为什么要开这个公众号。本人上学期间学的是计算机科学与技术,步入职场后,进行的是网络运维工作,想想分团队原因可能是我研究生是网络技术研究院导致的(手动滑稽),从最开始的网络运维到后期通过工具基于CLI去简化工作,提高效率,后逐步将工具开发成BS架构的web应用,不断接触新技术,后续不断丰富新功能,有幸赶上了开源技术与SDN的发展,逐步转型做了NetDevOps方面的工作,用自己的编程能力为团队提高运维能力,自己也乐于这一行行代码的编写中。随着编写的不断深入,逐步发现,NetDevOps应该是一个未来每个网工应该具备的技能(众人拾柴火焰高),这样才能即高屋建瓴又可快速实现。反观网络上的一些资料,说实话国内非常少,国内的氛围也不是很强,国内的很多软件都是基于老的CLI后者snmp,大家工作还是在用文本工具和SSH工具。于是希望自己能够授人以渔,将自己的经验(坑)和技能分享给更多的网络运维工程师,尽自己的一点绵薄之力。小处说,你能学点东西减少自己的工作量,着眼远处,国内的网络运维能真正向自动化方向演进。

后续会录一些视频和编写一些文章,写一个文档,感觉真费劲,欢迎订阅收藏点击喜欢在看之类的。

附录:

Netconf常见的operation

910e2cf3066154bdfd5216a330004308.png

5da875660066a7acecc0fd803a9abbfc.png

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

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

相关文章

mfc color 亮度_双十一4K投影仪怎么选?小心别掉“亮度坑” - 电视

导读:  不少影音爱好者计划在双十一期间购入4K投影仪,组建家庭影院、升级视觉享受,却因为选购产品亮度不足,让期待落空,还耗费时间、精力。投影仪亮度不足,画面看起来像是蒙上一层纱,不清晰&a…

dosbox edit.exe 如何使用_宅家30天,2万字节java高级工程师面试题解析,如何斩获阿里p7...

宅家里一个月,“闭关修炼”的你是不是正在为金三银四跳槽季发愁呢?小编今天说的这富含的15个互联网大厂Java高级工程师核心面试问题整理!内容包括:kafka面试题及解析18道ZooKeeper面试题及解析28道Linux 面试真题及解析45道MySQL面…

3三星闪存刷梅林_三星电子副会长李在镕造访西安

5月18日,陕西省委书记胡和平、省长刘国中在西安会见了三星电子副会长李在镕。Source:陕西日报胡和平表示,当前,陕西疫情防控取得阶段性重要成果,经济社会秩序加快恢复,包括三星在内的外资企业保持良好运行态…

stata中介效应的sobel检验_SPSS进行中介效应检验的实战操作与分析——杏花开生物医药统计...

中介变量( Mediator) 是一个重要的统计概念,如果自变量X通过某一变量M对因变量Y产生一定影响,则称M为X和Y的中介变量。研究中介作用的目的是在已知X和Y关系的基础上,探索产生这个关系的内部作用机制。在这个过程中可以把原有的关于同一现象的…

鼠标图标怎么自定义_酷鱼魔鼠——给鼠标添加酷炫的特效

酷鱼魔鼠是由酷鱼软件开发的一款非常有趣的鼠标特效软件。软件可以在你移动或者点击鼠标的时候,展示非常酷炫华丽的鼠标移动轨迹和点击特效。软件提供了非常多的鼠标动作特效,可以自定义设置鼠标移动、按下、双击、单机、点击桌面图标时的特效效果。并且…

uml+oopc嵌入式c语言开发精讲_嵌入式开发中更接近底层的汇编与C语言

分享本文,介绍下更接近硬件底层的C语言与汇编,解释 CPU 如何执行代码。高级语言与低级语言学习编程其实就是学习与计算机交流的语言。因为计算机不理解人类语言,通过编译器把人类写的代码转成二进制代码,才能在机器上运行。掌握了…

delphi xe http 收不到反馈消息_好消息!浦东这个小区3幢多层住宅都要加装电梯啦→...

原标题:好消息!浦东这个小区3幢多层住宅都要加装电梯啦→好消息!东明路街道这个小区要加装电梯,还是3个!规划设计方案公示中快和小布一起看看吧!▽环林东路879弄加装电梯项目建设单位:上海市浦东…

php调用美图接口,网易美图 API 接口调用与请求方法详细教程

原标题:网易美图 API 接口调用与请求方法详细教程网易美图 API 接口在网上已经很多且大都封装成了 API 供别人调用。支持前台跨域请求,以POST方式提交图片即可。网易美图 API 接口会随机更新一张美图,你可以选择调用本站的接口,也…

nlp 财务提取_RPA,智慧财务时代的“珍妮纺织机”来了?

智慧财务020社群与知识分享|上方蓝字星标置顶订阅|转载商务合作请添加首财君微信:cfo_tian昨日重磅《百亿存款谜局2》新戏码下的资管拷问一文秒懂财务机器人(RPA)的拐点和跳点。文 | 首财君【原创】出品 | 首席财务官(ID:cfoworld…

安装oracle配置监听出错,安装失败,无法建立监听?

本帖最后由 tomfish88 于 2013-12-5 13:23 编辑原来的监听如何删除呢,我把注册表的也删除了,还是安装不成功,QQ截图20131203114715.png (70.13 KB, 下载次数: 2)2013-12-5 13:21 上传QQ截图20131205132007.png (8.28 KB, 下载次数: 1)2013-12…

数据量大的sql怎么做优化_搜索引擎关键词优化怎么做

搜索引擎关键词优化怎么做新媒体营销的兴起,而且是方兴未艾,因此与客户建立起良好关系,保持良好的口碑关系,让客户信任你,公司适合增值服务:或者利润多,同时能在业务管理、销售管理、人事管理等…

vba显示正在加载_简单、易用的VBA过程积木代码

分享成果,随喜真能量(这是我视频教程的开场白)。大家好,今天继续和大家分享VBA编程中常用的简单“积木”过程代码第76-80讲,内容是:保存当前工作簿的副本到其它位置备份;不显示警告框&#xff1…

linux关机_Linux中shutdown,halt,poweroff,init 0区别

1)shutdown命令我们较常使用的是shutdown这个命令,这个命令可以安全地关闭或重启Linux系统,它在系统关闭之前给系统上的所有登录用户提示一条警告信息。该命令还允许用户指定一个时间参数,可以是一个精确的时间,也可以…

php static_castunsigned int,static_cast揭密

本文讨论static_cast<> 和 reinterpret_cast<>。介绍大多程序员在学C前都学过C&#xff0c;并且习惯于C风格(类型)转换。当写C(程序)时&#xff0c;有时候我们在使用static_cast<>和reinterpret_cast<>时可能会有点模糊。在本文中&#xff0c;我将说明…

群晖 root_最新群晖DSM7.0降级教程

小广告:隔壁网1212活动开始,群晖DS920+和DS220+满300减40,购买酷狼8T赠送隔壁网邀请码和1年VIP,大刀价格微信咨询momo。 很多童靴,升级到DSM7.0后第三方套件无法用了,比如transmission,玩PT下载的童靴,需要谨慎升级。 这个方法wjq_xp分享的,非常感谢,前面部分和旧的降…

update关联一个视图的时候特别慢_实现一个简单的Vue.js

原文转自 https://const_white.gitee.io/gitee-blog/blog/vue/mini-vue/Vue响应式原理图片引自 孟思行 - 图解 Vue 响应式原理乞丐版 mini-vue实现mini-vue之前&#xff0c;先看看官网的描述。在Vue官网&#xff0c;深入响应式原理中&#xff0c;是这样说明的&#xff1a;每个组…

接口500什么原因_80%小餐饮店几乎都“活“不过500天,为什么?都在这5个原因里...

餐饮创业分享达人 原创作者&#xff1a;秦.关中我是餐饮创业实战经验分享达人&#xff0c;想要了解和学习更多餐饮实战经验&#xff0c;记得关注我哦&#xff01;希望我的分享能帮助大家在创业的道路上少走弯路&#xff0c;不踩坑&#xff0c;为你创业成功助上一臂之力。无论是…

padding-left在ie8中不生效_陆国应 律师从民法典第209条来看房屋未过户买卖合同是否生效?...

基本案例(案例来源于大律师教你怎样打官司)&#xff1a;张某与某公司签订了房屋买卖合同。双方在合同中约定&#xff1a;某公司将三居室一套售于张某&#xff0c;价款30万元&#xff0c;并约定该房屋于2018年2月1日前交付使用。此后&#xff0c;张某先后向某公司支付购房款人民…

电脑反应慢卡怎么解决_电脑键盘失灵怎么解决

键盘是电脑中重要的输入设备之一&#xff0c;但在使用的过程中有时可能会碰到键盘失灵的问题&#xff0c;该怎么办呢&#xff1f;别着急&#xff0c;接下来&#xff0c;小编我就来给大家详细的介绍一下电脑键盘出现怎么办&#xff0c;并将解决键盘失灵的操作方法来分享给你们。…

金山手机控usb调试模式开启工具_话筒坏了无法连麦?一招手机秒变电脑麦克风...

前段时间孩子上网课&#xff0c;沉睡多年的摄像头和麦克风被从箱子底请了出来。当连接妥当后&#xff0c;突然发现麦克风失灵了&#xff0c;几经调试宣布报废&#xff01;当时正处于疫情高发期&#xff0c;电脑城肯定是关了&#xff0c;网购是来不及了&#xff0c;怎么办&#…