TR 069, TR 369, TR 181协议详解
TR-069
CWMP(CPE WAN Management Protocol)CPE广域网管理协议,是由DSL论坛发起开发的技术规范之一,编号为TR-069,所以又被称为TR-069协议。提供了对下一代网络中家庭网络设备进行管理配置的通用框架、消息规范、管理方法和数据模型。
CWMP提出通过ACS(自动配置服务器)对CPE(用户侧设备)进行远程集中管理,解决CPE设备的管理困难,节约维护成本,提高问题解决效率。
TR069协议描述一种机制,建立ACS对CPE进行安全的自动化配置管理的框架,同时将它的CPE管理功能添加到这个框架中。目的是要实现多种功能,从而能够管理一个CPE或者CPE的集合。
(1)提供自动配置和动态服务 (2)软件和固件镜像文件管理 (3)诊断 (4)告警 (5)穿越NAT连接
TR069定义的管理模型中,主要包括两类逻辑设备:受管理的用户设备和自动配置服务器。TR069的核心思想是通过定义一套ACS和CPE之间自动协商交互协议,实现终端的自动配置过程。ACS与CPE之间的接口为南向接口,ACS与第三方网管系统、业务管理系统之间的接口为北向接口。TR069协议主要定义了南向接口标准。
CWMP网络元素主要有:
ACS:自动配置服务器,网络中的管理设备。
CPE:用户端设备,网络中的被管理设备
DNS server:域名服务器。CWMP协议规定ACS和CPE使用URL地址来互相识别和访问,DNS用于帮助解析URL参数。
DHCP server:动态主机配置协议服务器。给ACS和CPE分配IP地址,使用DHCP报文中的option字段给CPE配置参数。
协议层 | 描述 |
---|---|
CPE/ACS Management Application | 应用可以在CPE和ACS端分别实现CWMP协议,应用可以进行本地的定义,而不必是CWMP的一部分 |
RPC Methods | 在CWMP中定义的各种RPC方法,实现ACS与CPE之间的交互 |
SOAP | 编码远程过程调用的基于XML语法的标准,避免了与防火墙的冲突 |
HTTP | HTTP 1.1 |
SSL/TLS | 标准的互联网传输层安全协议(可选) |
TCP/IP | 标准的TCP/IP |
RPC:TR096为CPE定义了9种基本RPC方法,6种可选RPC方法;为ACS定义了2种基本RPC方法,2种可选的PRC方法(CPE方法,CPE设备支持,可以被ACS调用;ACS方法,ACS设备支持,可以被CPE调用)。此外,TR069还对RPC方法中使用的数据类型做了定义,只能使用SOAP定义的数据类型中的部分。
SOAP、HTTP:TR069使用SOAP简单对象访问协议作为RPC报文的封装,利用标准HTTP协议来传送的方式。TR069规定将SOAP与HTTP绑定,以RPC方法调用来实现设备的管理。把SOAP绑定到HTTP提供了同时利用SOAP的分散性、灵活性的特点以及HTTP丰富的特征库的优点。在HTTP上传送SOAP并不是说SOAP会覆盖现有的HTTP语义,而是HTFP上的SOAP语义会自然的映射到HTTP语义。在使用HTTP作为绑定协议时,一个RPC调用自然地映射到一个HTTP请求,RPC应答同样映射到HTTP应答。一般情况下,一个完整的SOAP包的结构包括:一个信封(Envelop)、一个头部(header)、一个SOAP体(body)。SOAP协议中未说明一个SOAP包中可以包含多个Envelop,TR069采用了多个信封机制,这样增加了一次交换所带的信息量,减少了网络设备之间的数据交换次数。
SSL:SSL协议指定了一种在应用程序协议和TCP/IP协议之间提供数据安全性分层的机制,它为TCP/IP连接提供数据加密、服务器认证、消息完整性以及可选的客户机认证,确保数据在传送中不被改变。TR069协议实现的是远程管理,安全的信息交换是必需的。采用128bit加密算法、数字认证机制,实现CPE和ACS之间的安全信息交换。
CWMP基本功能
1、ACS和CPE的自动连接
2、支持ACS对CPE的自动配置
3、支持对CPE系统启动文件和配置文件的上传/下载管理
4、支持ACS对CPE状态和性能的监控
TR-369
TR-369,也称为用户服务平台(USP)是一种技术标准,描述了供应商和最终用户对连接的消费者和企业设备进行远程管理的应用层协议和数据模型。CWMP,它是调制解调器、路由器或网关远程管理的完美解决方案。互联设备不断增长,需要部署允许多个最终用户自行管理不断生成的设备的服务时,可能会发现CWMP已经不够了。
2018年重做的时候,考虑到CWMP的成功,宽带论坛在构建TR-369时将其用作框架也就不足为奇了,这就是为什么它有时被称为“下一代TR-069”或者“物联网设备的TR-069”。许多人认为在其业务中实施托管 WiFi 服务(即外包 WiFi 网络管理)的能力是改用 TR-369 的主要好处之一。
这两种协议之间的主要区别在于,您现在拥有代理和控制器,而不是与自动配置服务器通信的客户端。看着像命名上的一个改变,但实际上代理和控制器的运作原理不同。而使用CWMP时,每个客户端只有一个ACS,而使用TR-369协议时,可以将具有不同权限设置的多个控制器订阅到一个代理。应用程序和网络服务提供商都可以同时管理同一设备的各自服务,从而促进提供商合作伙伴关系。
协议多语言
TR-369支持多种消息传输协议(MTPs),不仅限于HTTP。包括websockets,CoAP,简单的面向文本的消息传递协议(STOMP)和MQTT。
在CWMP中,客户端和ACS之间的连接始终是由客户端出于特定目的发起并优化为尽可能短,而TR-369则设计用于始终在线的直接通信。一旦在启动时建立连接,Websockets或STOMP会话将无限期地打开,控制器可以自由地向代理发送消息。
TR369 - 轻量化,与之前相比,管理费用确实显著减少。如:开放会话消除了重复连接请求的需要,这些请求会产生大量不必要的握手。由于TR-369协议非常高效,因此可以更频繁、更精确地监控设备,有效保证为客户提供更好的服务质量。
TR-369 中的应用层在封装到任何 MTP 中之前先封装在协议缓冲区中。Protobuf简称Protobuf,有点像XML,但编码后人类无法读取它们,并且需要模式(.proto文件)进行解码。模式的存在使得数据结构的应用变得更加容易。
TR-369 还提供最先进的安全性。USP 消息封装在可以使用 TLS 加密的 USP 记录中。 消息还可以在 MTP 层中得到保护:对于 Websockets 使用 HTTPS,对于 CoAP – DTLS,对于 STOMP – 使用 TLS。 此外,端到端 (E2E) 消息交换功能可以建立会话上下文,在消息太大而无法传输时确保数据的完整性、保护和分段。
TR-181
TR-369 协议严重依赖于数据建模,特别是稍微修改的 Device:2 Root (TR-181) 数据模型,其版本 1 应用于 TR-069。 宽带论坛的 TR-181 规范将其定义为一组数据对象,例如“基本设备信息、时钟配置、网络接口和协议栈配置、路由和桥接管理、吞吐量统计和诊断测试”。 由于网络接口和协议被视为对象,因此可以自由堆叠它们以匹配设备配置。
TR181定义了设备数据模型的版本2(Device:2)。Device:2数据模型适用于所有类型的TR-069或USP启用设备,包括终端设备、住宅网关和其他网络基础设施设备。
Device:2数据模型由一组数据对象组成,涵盖基本设备信息、时钟配置、网络接口和协议栈配置、路由和桥接管理、吞吐量统计和诊断测试等内容。还定义了一个基线配置文件,指定了数据模型支持的最低级别。
Device:2数据模型的基石是接口堆栈机制。网络接口和协议层被建模为独立的数据对象(也称为接口对象),可以将其堆叠在一起,一个在另一个之上,形成设备可能支持的任何配置。
由于Device:2数据模型可与USP或CWMP协议一起使用,因此它包含一些仅在使用特定协议时才适用的对象和参数。
将网络接口和协议层建模为独立的数据对象,通常称为接口对象(或接口)。 接口对象可以使用路径引用进行堆叠,一个在另一个之上,以便动态定义接口之间的关系。
在Device:2数据模型中,接口对象被任意限制为在IP网络层或以下运行的定义(即OSI模型的第1层到第3层)。但是,可以定义超出此限制范围的特定于供应商的接口对象。
指示的OSI层是非规范的;它仅作为指南,说明接口对象预计出现在堆栈中的哪个级别。然而,CPE不需要支持或使用所有接口,这意味着图片中并不反映所有可能的堆叠组合和限制。例如,一个CPE堆栈可能不包括DSL Bonding,而另一个CPE堆栈可能包括DSL Bonding但不包括桥接,而另一个CPE堆栈可能包括PPP下的VLANTermination,或IP下的VLANTermination(不带PPP),甚至IP下的以太网链路(不带VLANTermination且不带PPP)。
Bridge.{i}.Port.{i} 对象对管理(朝上)桥接端口和非管理(朝下)桥接端口建模,其中每个实例都配置为其中之一。 管理桥接端口堆叠在非管理桥接端口之上。
接口对象:
接口对象是一种网络接口或者协议层。每种类型的接口均由Device:2数据模型表建模,每个接口实例一行(例如,IP.Interface.{i}表示IP接口)
每个接口都包含一组核心参数和对象,用作在数据模型中定义接口对象的模板。接口对象还可以包含特定于接口类型的其他参数和子对象。
核心参数集包括:
Enable(启用/禁用)、Status(接口操作状态:Up/Down/Unknown/Dormant/NotPresent/LowerLayerDown/Error)、Alias(接口别名,CPE分配初始值,稍后由控制器选择)、Name(接口的文本名称,由CPE选择)、LastChange(自接口进入当前操作状态以来的累计时间(以秒为单位))、LowerLayers(直接堆叠在接口下方的接口对象的路径引用列表)
此外,统计子对象中还包含一组核心统计参数。 这些参数的定义可以针对每种接口类型进行定制。 统计子对象中的核心参数集包括:
BytesSent(从接口传输出的字节总数,包括帧字符)、BytesReceived(接口上接收到的字节总数,包括帧字符)。PacketsSent(从接口发出的数据包总数)、PacketsReceived(接口上接收到的数据包总数)、ErrorsSent(由于错误而无法传输的出站数据包总数)、ErrorsReceived(包含阻止其传送到更高层协议的错误的入站数据包总数)、UnicastPacketsSent(请求传输的数据包总数,这些数据包未寻址到本层的多播或广播地址,包括那些被丢弃或未发送的数据包)、UnicastPacketsReceived(由该层传送到更高层的已接收数据包总数,这些数据包未寻址到该层的多播或广播地址)、DiscardPacketsSent(即使没有检测到阻止传输的错误,也选择丢弃的出站数据包总数)、DiscardPacketsReceived(即使没有检测到阻止传送的错误,也选择丢弃的入站数据包总数)、MulticastPacketsSent(高层协议请求传输且寻址到本层多播地址的数据包总数,包括那些被丢弃或未发送的数据包)、MulticastPacketsReceived(由该层传送到更高层的已接收数据包总数,这些数据包被寻址到该层的多播地址)、BroadcastPacketsSent(高层协议请求传输且发送至本层广播地址的数据包总数,包括那些被丢弃或未发送的数据包)、BroadcastPacketsReceived(由该层传送到更高层的已接收数据包总数,这些数据包被寻址到该层的广播地址)、UnknownProtoPacketsReceived(通过接口接收的、由于未知或不支持的协议而被丢弃的数据包总数)
当接口由于先前的管理关闭而在操作上关闭时(即,接口的 Status 参数在接口禁用后转换为关闭状态)或当接口在管理上变为运行状态时(即接口的 Enable 参数从 false 转换为 true),CPE 必须重置接口的 Stats 参数(除非在单个对象或参数描述中另有说明)
每个接口对象可以堆叠在零个或多个其他接口对象之上,必须使用其LowerLayers参数指定。通过让每个接口对象依次引用其下层的接口对象;建立所有接口关系的逻辑层次结构。
LowerLayers参数是对接口对象的路径引用的逗号分隔列表。列表中的每一项代表一个接口对象,该对象堆叠在引用接口的正下方。如果删除引用的接口,CPE必须从该列表中删除相应的项目(即LowerLayers参数中的项目是强引用)
接口对象之间的这些关系可以通过管理操作来设置,以便指定新的接口配置,也可以在CPE内预先配置。
CPE必须拒绝任何设置LowerLayers值的尝试,否则会导致配置无效或不受支持。来自CPE的相应故障响应必须使用适当的协议响应来指示这一点。
完全配置和操作的堆栈中的最低层通常是物理接口(例如,代表 DSL 物理链路的 DSL Line 实例)。 在这些物理接口对象中,LowerLayers 参数将是一个空列表,除非定义并存在一些较低层供应商特定的接口对象。 高层接口对象可以在没有物理层建模的情况下运行,但是这是 CPE 的本地事务。
上图说明了 LowerLayers 参数的使用。 A、B、C、D 代表接口对象。 接口A的LowerLayers参数引用接口B和C。接口B的LowerLayers参数引用接口D。接口C和D的LowerLayers参数中没有指定接口引用。 这样就配置了一个多层的接口栈。 如果Controller要删除接口B,那么CPE将更新接口A的LowerLayers参数以不再引用接口B(并且接口D将被搁置,不再被现在删除的接口B引用)。
接口对象的 Enable 和 Status 参数分别指定接口的当前管理和操作状态。 Status 参数的有效值为:Up、Down、Unknown、Dormant、NotPresent、LowerLayerDown 和 Error。
CPE 必须尽一切可能来遵循如下所述的操作状态转换。 在某些情况下,这些要求被定义为“应该”; 这并不表明它们是可选的。 这些转换以及 Enable 参数和 Status 参数之间的关系是必需的行为 - 只是这些状态转换所花费的时间是特定于实现的。
当Enable参数为false时,Status参数通常应为Down(如果接口上存在故障情况,则为NotPresent或Error)。请注意,当Enable参数转换为false时,如果CPE需要首先完成某些操作(例如,完成传输数据包),则Status参数可能会在一小段时间延迟后转换为Down。
当Enable参数更改为true时,Status应执行以下操作之一:
(1)当且仅当接口能够传输和接收网络流量时才更改为Up
(2)当且仅当接口可操作,但在传输和接收网络流量之前等待外部操作时,才更改为Dormant(休眠)状态
(3)当且仅当由于其下方的一个或多个接口处于关闭状态而导致接口无法进行Up状态时,才更改为LowLayerDown。
(4)如果接口上检测到错误或其他故障情况,则保持错误状态。
(5)如果接口缺少(通常时硬件)组件,则保持NotPresent状态。
(6)如果由于某种原因无法确定接口的状态,请更改为“未知”。
休眠状态表示接口可操作,但正在等待外部事件发生才能传输/接收流量。当此类事件发生时,接口能够传输/接收流量,状态应更改为Up状态。请注意,Up和Dormant状态都被视为健康状态。
Down、NotPresent、LowerLayerDown、Error状态均表示接口处于Down状态。NotPresent状态表示该接口堆叠在一个或多个其他接口之上,并且该接口具体因为这些下层接口中的一个或多个接口已关闭而关闭
错误状态表示接口因在接口上检测到错误或其他故障情况而关闭。
当接口对象堆叠在下层接口的顶部(即不是堆栈中的最底层)时,则:
(1)如果由于堆栈中较低的一个或多个接口处于Up状态而能够传输/接收流量,则该接口应该处于Up状态,无论其下方的其他接口是否处于非Up状态(即,该接口至少与其一些较低层的接口结合正在运行)。
(2)如果堆栈中较低的一个或多个接口处于休眠状态,并且其下方的所有其他接口均处于非运行状态,则该接口可以处于运行状态或休眠状态。
(3)该接口预计为LowerLayerDown,而堆栈中较低层的所有接口均为Down、NotPresent、LowerLayerDown或Error。
供应商特定的接口对象
供应商特定的接口对象可能被定义和使用。如果此类对象由供应商指定,则它们前面必须带有*X__*并且遵循用于参数名称的供应商扩展语法。
如果控制器在CPE的接口堆栈中遇到未知的特定于供应商的接口对象,控制器必须继续处理,就好像该对象的上层接口直接链接到下层接口一样,而不是相应错误。无论控制器是通过InterfaceStack表还是通过接口对象的LowerLayers参数遇到此类对象,这都适用。
下图说明了控制器绕过的堆叠供应商特定接口对象,其中供应商特定对象下方只有一个对象。
下图说明了控制器绕过的堆叠供应商特定接口对象,其中供应商特定对象下面有多个对象。
虽然可以通过LowerLayers参数遍历接口堆栈,但提供了一种替代机制来帮助可视化整体堆栈关系并快速访问堆栈内的对象。
InterfaceStack表是一个Device:2数据模型对象,即Device.InterfaceStack.{i}。这是一个只读表,其行由CPE根据接口对象之间配置的当前关系(通过每个接口实例的LowerLayers参数)自动生成。每个表行代表高层接口对象(由其HigherLayer参数)和低层接口对象(由其LowerLayer参数引用)之间的“链接”。这意味着InterfaceStack表行的HigherLayer和LowerLayer参数将始终为非空。
因此,已搁浅的接口实例将不会在InterfaceStack表中表示。 堆叠接口对象的多个不相交组也可能会共存于表中(例如,每个 IP 接口将是不相交组的根;未使用的“片段”,例如具有配置的 ATM PVC 的辅助 DSL 通道) 不附加到上面的任何东西,如果它们保持互连,就会徘徊;最后,在设置接口堆栈时,可能会出现部分配置的“片段”)。
当一个接口实例没有与其他接口实例的下层引用或来自其他接口实例的引用时,该接口实例被视为搁浅。 搁浅的接口实例将从 InterfaceStack 表中省略,直到它们通过 LowerLayers 参数引用堆叠到另一个接口实例的上方或下方。