数据模型与网络自动化

传统人工 CLI 配置网络的模式,已经不在适用当代的网络,面临着兼容性,容错率低,效率低下等等问题,详细的内容可阅读这篇传统CLI面临的挑战

在这样的大背景下,各种网管协议应运而生。但这时就产生一个问题,以怎样的格式和内容去传递配置?

YANG 就是为了解决该问题而出现的,在解释 YANG 前,我们先来回忆下,传统 CLI 是如何下发配置的?

常常是由网络工程师通过 console/Telnet/SSH 等方式登录上设备,然后直接对设备进行配置,这时自然不用考虑怎样传参的问题,只要懂得设备的命令,直接上去敲就可以。

而 CLI 这样的配置,是一种无结构化的数据

! interface Bundle-Ether2 ! interface Bundle-Ether780 description evpn-vpws-test ! interface MgmtEth0/RSP0/CPU0/0 vrf mgmt ipv4 address 10.124.3.85 255.255.255.0 ! interface MgmtEth0/RSP0/CPU0/1 shutdown ! interface TenGigE0/0/1/0 shutdown ! interface TenGigE0/0/1/1 shutdown ! interface TenGigE0/0/2/0 shutdown !

这样无结构的数据对我们人来说是非常友好的,容易理解和阅读。

但由于换成了 NETCONF 这样的网管协议管理设备,这样的数据发挥不出任何优势,甚至无法被机器识别。因为使用 NETCONF 目的就是为了使用自动化,可编程化的方案代替人工,从而满足当下网络的各种业务场景。

此时配置结构化的数据就成了必然。

于是各个厂商开始对配置进行结构化的约定,在 NETOCNF 中,配置使用 XML 表示,进行参数的下发。

比如对接口的 MTU 进行更改:

<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <edit-config> <target> <running/> </target> <config> <top xmlns="http://example.com/schema/1.2/config"> <interface> <name>Ethernet0/0</name> <mtu>1500</mtu> </interface> </top> </config> </edit-config> </rpc>

但此时又有一个问题,就是下发数据的格式和参数是由谁指定呢,比如这里 interface 命名的定义,类型的定义,层级的定义是如何确定的呢?

我怎么知道在下发接口配置时,就下发这样的配置内容呢?

答案在于各个厂商定义了一套约束标准,也可以理解成配置的模板。这些模板对数据进行约束,判断是否是合法的数据。这也就是数据模型的由来。

拿 NETCONF 举例,NETCONF 采用 C/S 的架构,Client 端在生成配置内容时会参考定义好的数据模型。Server 在接收时,同样会用这些数据模型进行校验。

具体些,比如针对下发 JSON 格式的配置,通过 JSON Scheme 定义的 JSD 对数据进行约束。

数据模型与网络自动化

如左图中是具体的数据,右图中是对左侧数据具体进行约束的数据模型。比如这里限定了,productName 的类型是字符串,当前对象共有三个属性等。当传入其他不符合 scheme 的数据时,会进行的报错。

如果对 JSON-Scheme 感兴趣,可以去仔细了解下。

对于思科设备来说,这种由 JSON-Scheme 定义的文件叫 JSD,用于约束传入的数据类型,需要注意的是不同的厂商定义的 JSD 内容和格式是不一样的,甚至同一厂商定义的不同类型的 JSD 也不一样。

针对下发的 XML 格式的配置也采用相同的方法,各个厂商通过 XML Scheme 定义 XSD 对数据进行约束。

数据模型与网络自动化

左面是 xml 格式的数据,右边是 XSD 文件对其进行约束,规定了属性的类型。同样不同厂商编写的 XSD 约束也是不一样的。

虽然说通过编写 XSD 和 JSD 的方式解决了如何约束配置数据的问题。

但由于不同厂商编写的数据模型没有统一的规范,导致各种各样的 JSD/XSD 出现,学习成本也很高。而且造成很严重的兼容性问题。比如 Cisco 的 JSD 或者 XSD 一定和 HUAWEI 不一样。甚至 Cisco 本身每个团队开发出的 JSD/XSD 的内容也不一样。

为了解决这个问题,由 IETF 主导,开发出了 YANG - Yet Another Next Generation. 被现在各个协议广泛使用。

YANG YANG 的定义

YANG 是一种数据模型语言,用于在 NETCONF 等网络协议中,将想要操作的配置或状态数据进行模型化,用层次化的表现形式,对数据进行表述。对于 YANG 模型来说,每个都有唯一标识命名空间 URI,用于区分。

简单来说,通过 YANG,对下发配置的进行约束,如下的公式很好的描述了 YANG:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpfpgj.html