YANG
NETCONF协议分为传输层、RPC层、操作层和内容层。其中,内容层是唯一没有标准化的层,于是一种新的建模语言YANG产生了,它的目标是对NETCONF数据模型、操作进行建模,覆盖NETCONF协议的操作层和内容层
YANG
YANG 是随着 NETCONF 协议而产生的数据建模语言,由RFC6020定义,类似于XML Schema和SNMP的SMI, 具有良好的可读性和可扩展性。其关键特性:
- 服务和网元数据模型vs信息模型(UML)
- YANG是数据建模语言
- 领域专用语言
- 专为网络配置而生
- 网元配置建模
- Yang足够为网元配置建模(通常遵循CLI)
- 服务配置建模
- Yang is rich enough to model services in the same language as the NE
- 网络拓扑建模
- 通过发布YANG来可以支持任何新设备
- 设备厂商必须通过IETF创建和发布自己设备的杨模型
需要解释一下数据模型和协议的关系:
什么是数据模型?一个数据模型明确和精确地确定数据的结构、语法和语义;那协议呢? 用于查看和操作数据的远程原语(例如:XML RPC或HTTP方法);对数据模型定义的数据进行编码(例如:XML或JSON)
YANG模型的用处
网络设备的配置结构往往是是不同的。实现同样的功能的不同设备需要的配置结构也往往不同。比如思科设备接口上配置一个address只要知道接口名、ip版本和地址掩码就足够了但是juniper的机器上不但要知道这些还要额外提供一个unit号来标识逻辑接口。特别是现在nfv大潮下,nfv是干毛的,网络功能虚拟化,既然虚拟化我就更关注的是功能本身而不是实现这个功能的设备,对于管理人员来说,他往往就只想告诉一套nfv系统,我要什么功能,比如,我要一号站点能联网我要DHCP服务我要VPN,而单纯利用netconf是无法配置的,因为还要求具体的配置结构。
我们只要给对应的设备所需的配置结构来个模型不就行了?到时候不就是完形填空吗,yang model就是吃这口饭的,我只需知道对应设备的yang model就可以向管理者请求对应设备所需的信息了,具体结构上的问题有yang model来解释。
什么叫做结构上的问题呢?还是举刚才那个例子
思科为啥不需要unit号来指定逻辑端口呢?因为它的逻辑端口藏在接口名里
所以它的配置类似这样
1 | 接口名{ |
但是juniper的额外需要一个unit号来表示逻辑端口
所以它的配置类似这样
1 | 接口名{ |
当然实际上他们的yang model 要比这个复杂的多,比如juniper还有family 这个层级这里就是举一个例子
但是对于上层用户管理来说,他只用填逻辑口号,接口名,地址以及ip版本就可以了,他不需要知道具体到底实际的配置长啥样了,因为有可能及其复杂233.
是不是感觉很完美了,这样NFV可以让服务提供商随意换设备了,底层是思科华为还是juniper没啥所谓,反正只要有yang model我们就知道到底怎么配一台机器了。
XML呢,刚说过netconf是一种协议,它实际是个服务器,接受客户端发来的请求来配置自己,所以每台设备上都有一个netconf server,这里的信息交互就是用xml来实现的,所以yang model其实就是一种描述XML结构的模型。
简单而言,支持netconf的设备其实就是有了一套有标准的设备API。
这套API不光能够做配置,还能提交一些本来由CLI实现的命令。
本质上,netconf协议交换的是XML,传输的是一个一个的RPC。
你只需把你需要的配置,按照你设备上的netconf模型写一个xml,通过一个netconf client 发送给设备,设备就可以去给你配置,并把配置的结果返回给你。传统我们做自动配置脚本,都是基于ssh连接到设备上,然后一条一条命令去输入,这种脚本局限性很大,搞成模板替换数据也是很费神的一件事儿。有了netconf这些都会成为历史,只需整体写一个xml模板,然后因为它是xml,所有很多python的模板包都可以轻轻松松拿来用,比如jinjia template。然后,因为你的配置是整体发送过去的,也就不用一条条命令来看执行结果,处理那些讨厌的问题,比如突然某一条失败了,配置要回滚。。。
更棒的是,netconf 对不同的配置结构都是通过统一的模型语言来描述的,也就是yang model,大部分的配置结构都可以用yang model来描述,理论上你要是有目标主机的yang model,连配置模板也可以自动生成。。。如果你给你的脚本加个fancy的GUI,那么恭喜你,你完成了一个SDN的雏形。
XML是什么
XML:即可扩展标记语言,xml是互联网数据传输的重要工具,它可以跨越互联网任何的平台,不受编程语言和操作系统的限制,可以说它是一个拥有互联网最高级别通行证的数据携带者。xml是当前处理结构化文档信息中相当给力的技术,xml有助于在服务器之间穿梭结构化数据,这使得开发人员更加得心应手的控制数据的存储和传输。
Xml用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。Xml是标准通用标记语言(SGML)的子集,非常适合Web传输。XML提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。
特点:
xml与操作系统、编程语言的开发平台都无关;
实现不同系统之间的数据交互。
作用:
配置应用程序和网站;
数据交互;
Ajax基石。
在配置文件里边所有的配置文件都是以XMl的格式来编写的。
跨平台进行数据交互,它可以跨操作系统,也可以跨编程语言的平台。