目录
- NETCONF、XML、YANG之间的关系
- 参考引用
- 理解
- XML
- YANG
- 操作层
- 数据库
- 基本能力
- 标准能力集
- 扩展能力集
- 总结
NETCONF、XML、YANG之间的关系
参考引用
https://support.huawei.com/enterprise/zh/doc/EDOC1100202502/9698cb86
https://support.huawei.com/enterprise/zh/doc/EDOC1100278535/ddcce2b6#ZH-CN_CONCEPT_0139427258
IETF在2003年5月成立了Netconf工作组,该工作组主要是为了提出一个全新的基于XML的网络配置(NETCONF)协议而成立的。
理解
NETCONF本身并不是一个协议,并没有一种具体的协议叫NETCONF,NETCONF更像是一种方法论。像是TCP/IP协议栈一样,并没有一种协议叫TCP/IP,TCP/IP是一组协议的集合,每一层都拥有不同的协议,NETCONF也是如此,NETCONF本身有四层,相比TCP/IP它比较简单,没有标准体、对等体之分,只有就一个四层的标准体,如下所示:
- 内容层
- 操作层
- 消息层: RPC
- 传输层:ssh、https
TCP/IP协议栈每一层都有不同的协议,NETCONF也是如此,比如传输层就可以有多种协议可以选择。
NETCONF的传输层是用来承载数据并保证其安全的,NETCONF对传输层的要求不仅仅是承载数据,还要保证其安全,所以在传输层里面的协议可以有ssh、或https这样基于密码学设置的协议或应用.
在消息层,只有一个协议叫RPC,RPC是干什么的?比如新建一个文件,那记事本的进程会向内核发起一个"写入"的系统调用,文件和内核处于同一个机器 ,这种调用属性本地系统调用。如果你是在一个NFS的目录里面写入一个文件,这个目录的实体并不在本地,那NFS的客户端就会向NFS的服务端发起一个“写入”的系统调用,里面清清楚楚的写着将此文件写入,这种通过网络发起的系统调用,这就是RPC,它在NFS当中的具体表现就是TCP/IP当中的一层,可以抓包看到。
而消息层和操作层相当于TCP/IP的应用层,这里面的就是格式化的内容了。这个内容当中也是分层了消息层和操作层。那封装过程肯定从上层向下层封装,从内容层开始产生数据,由消息层包裹起来,然后整体做为数据被包裹在RPC层,然后整体再被当成数据被包裹在传输层当中,这与传统的TCP/IP封装过程是类似的。
XML
一种比HTML更加强悍的标记语言,起源于1996年。XML是一种界定文本数据的简便而标准的方法。它曾经被人称作“Web上的ASCII码”。就好像你可以使用自己喜爱的编程语言来创建任何一种数据结构,然后同其他人在其他计算平台上使用的其他语言来共享一样。XML的标记用来说明你所描述的概念,而属性则用来控制它们的结构。所以,你可以定义自己所设计出的语法并同其他人共享。
XML一种标识语言,由于非常的强大,强大到RPC的消息也能在XML标记语言当中得以体现,当时正值NETCONF正需要一种强悍的标记语言,于是NETCONF就在XML标记语言的基础上开始设计,NETCONF设计了四层,除了传输层不能被在XML标记语言当中表示之外,内容层、操作层、甚至于消息层都能一并在XML当中得以体现。
YANG
各设备供应商在提供设备的同时,为方便管理都会提供一套独立的管理方法(比如使用不同的命令行),这些管理方法之间是独立的,不同类型的设备不能通用。随着网络规模的增大、设备种类的增加,使用传统的NETCONF管理已不能适应当前型号繁多的设备管理,为了能够统一管理、配置、监控网络中的各类设备,YANG应运而生。
所以YANG就是各种要求,就像是写论文的要求,就和严格遵守,YANG模型要求文件必须包括以下信息:
- 模块定义:一个模块可以从其它模块中导入数据,满足什么要求之后可以扩展
- 模块的名称空间,名字空间的名字必须全局唯一
- 对版本的要求
- 介绍信息,类似于注释信息
YANG是NETCONF(网络配置协议)的数据建模语言,客户端可以将RPC操作编译成XML格式的报文,XML遵循YANG模型约束进行客户端和服务器之间通信。
内容层:YANG格式
操作层:YANG格式
消息层:YANG格式
传输层:ssh、https
# YANG提供RPC关键字,可以对其模型顶层的操作进行定义。
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<activate-software-image xmlns="http://acme.example.com/system">
<image-name>acmefw-2.3</image-name>
</activate-software-image>
</rpc>
操作层
数据库
在操作层可以指定对哪一个数据库进行操作
基本能力
NETCONF协议定义了基本能力base,基本能力定义了一系列操作,用于修改数据库配置、从数据库获取信息等。NETCONF基本能力定义的操作只是NETCONF必须实现的功能的最小集合,而不是功能的全集。
NETCONF支持的基本操作如下:
标准能力集
除了基本操作能力,NETCONF协议还定义了一系列标准能力集。这些标准能力定义了一些新的操作,使NETCONF功能更加强大,并使其在容错性、可扩展性等方面得到加强,最终将有利于实现基于NETCONF的开放式网络管理体系结构,为设备厂商扩展功能提供有效的途径。
扩展能力集
除了NETCONF定义的能力集,设备制造商也可以定义自己的能力集,以实现NETCONF定义以外的特色功能。
总结
- NETCONF一种方法论或协议集,是根据XML这种标记语言设计的,早期对建模语言没有具体要求。
- 随着设备品牌和型号越来越多,专门设计YANG这种建模语言让大家统一标准,由于YANG在设计之初就是为了NETCONF准备的,YANG也是以XML这种标记语言设计的。
- 由于两者都是通过XML语言设计的,前者又需要后者来规范标准,于是就这么愉快的在一起了。
- YNAG贯穿了消息层、操作层、内容层,这三层的内容全都都在YANG中有规定的规范,并最终以XML得以体现,比如YANG提供RPC关键字,专门用来定义消息层,但最终YANG起核心作用的还是在内容层,这一点要注意。
- YANG并没有规定传输层,所以在传输层协议的选择比较灵活,华为选择使用ssh。
问:如果所有厂商的netconf都是遵循业界标准来定义的,那是不是说,我在IOS-XE导出做的设备配置xml,可以直接应用在其他厂家支持netconf的路由器上?
答:这是不太行的通的,因为YANG文件有多种类型,不仅有标准的YANG,还有私有的YANG,如果是这样,那意思就是说只有遵循标准YANG编写的程序,在各大厂商上都能运行,如果是用厂商私有的YANG编写的程序,就只能自己跟自己玩。
问:如何看待XML与YANG之间的关系?
答:XML就只是一种标记语言,说白了就是一种即适合人类读取也适合机器读取的字符串文本而已,它规定了某种“形式”格式,就像我们写作文段落前面要空两个格。YANG是一种建模语言,说白也是一种约束规定,它规定了你就得把某种东西做成什么样子,比如它规定在网络设备内部不仅仅仅把IP地址当做是一个字符串处理,而是应该当做某种字典或其它的数据格式,这就相当于你在作文里面描述一个女性的时候不能用帅这个词,而应该用漂亮、温柔之类的词,这样无论任何人都知道你描述的人是位女性。XML规定了你要写成什么样的格式,而YANG规定了你要怎么写;