TR-069
简介
CWMP(CPE WAN Management Protocol)CPE广域网管理协议,是由DSL(Digital Subscriber’s Line,数字用户线路)论坛发起开发的技术规范之一,编号为TR-069
,所以又被称为TR-069
协议。提供了对下一代网络中家庭网络设备进行管理配置的通用框架、消息规范、管理方法和数据模型。
CWMP
主要应用于DSL
接入网络环境。在DSL
接入网络中,由于用户设备数量繁多、部署分散,通常位于用户侧,不易进行设备的管理和维护,CWMP
提出通过ACS
(自动配置服务器)对CPE
(用户侧设备)进行远程集中管理,解决CPE
设备的管理困难,节约维护成本,提高问题解决效率。
CWMP网络的基本框架如图1所示:
TR-069
协议描述一种机制,建立ACS
对CPE
进行安全的自动化配置管理的框架,同时将它的CPE
管理功能添加到这个框架中。目的是要实现多种功能,从而能够管理一个CPE
或者CPE
的集合。
CWMP基本功能
ACS和CPE的自动连接
CPE
可以通过发送Inform
报文自动连接ACS
。触发连接的方式有以下几种:
CPE
启动,根据获取的URL值找到相应的ACS
,并自动发起连接。CPE
周期性发送Inform
报文功能,当周期(比如1小时)到达时,CPE
会自动发送Inform
报文来建立连接。CPE
定时发送Inform
报文功能,当时间点到达时,CPE
会自动发送Inform
报文来建立连接。- 如果当前会话没有结束,但是连接异常中断,而且
CPE
自动重新连接的次数还没有达到上限,此时,CPE
也会自动建立连接。
ACS
可以在任何时候自动向CPE
发起连接请求(Connect Request),通过CPE
的认证(即匹配CPE URL、CPE用户名、CPE密码)后,可以与CPE
建立连接。
支持ACS对CPE的自动配置
当CPE
上线时,ACS
可以自动下发一些配置给CPE
,完成对CPE
的自动配置。设备支持的自动配置项参数主要包括(不仅限于此):
- 配置文件(ConfigFile)
- ACS地址(URL)
- ACS用户名(Username)
- ACS密码(Password)
- Inform报文自动发送使能标志(PeriodicInformEnable)
- Inform报文周期发送时间间隔(PeriodicInformInterval)
- Inform报文定期发送日期(PeriodicInformTime)
- CPE用户名(ConnectionRequestUsername)
- CPE密码(ConnectionRequestPassword)
支持对CPE系统启动文件和配置文件的上传/下载管理
设备管理员可以将系统启动文件、配置文件等重要文件保存在ACS
上,当ACS
发现某个文件的版本有更新,将会通知CPE
进行下载。CPE
收到ACS
的下载请求后,能够根据ACS
报文中提供的下载地址和文件名,自动到指定的文件服务器下载文件。下载完成后,对下载文件的合法性做相应的检查,并将下载结果(成功或失败)反馈给ACS
。目前,设备不支持以数字签名的方式进行的文件下载。
目前,设备支持下载的文件类型有:系统启动文件和配置文件。
同样,为了实现对重要数据的备份,CPE
将根据ACS
的要求将当前的配置文件上传到指定的服务器。目前,设备支持上传的文件类型有:配置文件。
支持ACS对CPE状态和性能的监控
ACS
可以监控与其相连的CPE的各种参数。由于不同的CPE
具有不同的性能,可执行的功能也各异,因此ACS
必须能识别不同类型CPE
的性能,并监控到CPE
的当前配置以及配置的变更。CWMP
还允许网络管理人员自定义监控参数并通过ACS
获取这些参数,以便了解CPE
的状态和统计信息。
ACS
能够监控的状态和性能有:厂商名称(Manufacturer)、厂商标识OUI(ManufacturerOUI)、序列号(SerialNumber)、硬件版本号(HardwareVersion)、软件版本号(SoftwareVersion)、设备状态(DeviceStatus)、启动时间(UpTime)、配置文件、ACS地址、ACS用户名、ACS密码、Inform报文自动发送使能标志、Inform报文周期发送时间间隔、Inform报文定期发送日期、CPE地址、CPE用户名、CPE密码等。
诊断
告警
穿越NAT连接
CWMP实现机制
CWMP方法
ACS对CPE的管理和监控是通过一系列的操作来实现的,这些操作在CWMP协议里称为RPC方法。主要方法的描述如下:
- Get:ACS使用该方法可以获取CPE上参数的值。
- Set:ACS使用该方法可以设置CPE上参数的值。
- Inform:当CPE与ACS建立连接时,或者底层配置发生改变时,或者CPE周期性发送本地信息到ACS时,CPE都要通过该方法向ACS发起通告信息。
- Download:为了保证CPE端硬件的升级以及厂商配置文件的自动下载,ACS使用该方法可以要求CPE到指定的URL下载指定的文件来更新CPE的本地文件。
- Upload:为了方便ACS对CPE端的管理,ACS使用该方法可以要求CPE将指定的文件上传到ACS指定的位置。
- Reboot:当CPE故障或者需要软件升级的时候,ACS使用该方法可以对CPE进行远程重启。
TR-069
定义的管理模型中,主要包括两类逻辑设备:受管理的用户设备和自动配置服务器。TR-069
的核心思想是通过定义一套ACS
和CPE
之间自动协商交互协议,实现终端的自动配置过程。ACS
与CPE
之间的接口为南向接口,ACS
与第三方网管系统、业务管理系统之间的接口为北向接口。TR-069
协议主要定义了南向接口标准。
CWMP实现机制
通信过程如下图:
下面以一个具体的例子,结合CWMP
方法来描述CWMP
具体实现。场景如下:区域内有主、备两台ACS,主ACS系统升级,需要重启。为了连续监控,主ACS需要将区域内的CPE都连接到备用ACS上,处理流程如下:
- (1) 建立TCP连接。
- (2) SSL初始化,建立安全机制。
- (3) CPE发送Inform报文,开始建立CWMP连接。Inform报文使用Eventcode字段描述发送Inform报文的原因,该举例为“6 CONNECTION REQUEST”,表示ACS要求建立连接。
- (4) 如果CPE通过ACS的认证,ACS将返回Inform响应报文,连接建立。
- (5) 如果CPE没有别的请求,就会发送一个空报文,以满足HTTP报文请求/响应报文交互规则(CWMP是基于HTTP协议的,CWMP报文作为HTTP报文的数据部分封装在HTTP报文中)。
- (6) ACS查询CPE上设置的ACS URL的值。
- (7) CPE把获取到的ACS URL的值回复给ACS。
- (8) ACS发现CPE的ACS URL是本机URL的值,于是发起Set请求,要求将CPE的ACS URL设置为备用ACS的URL的值。
- (9) 设置成功,CPE发送响应报文。
- (10) ACS发送空报文通知CPE没有别的请求了。
- (11) CPE关闭连接。
之后,CPE将向备用ACS发起连接。
CWMP配置任务简介
ACS属性和CPE属性可以通过ACS、DHCP和命令行三种方式来配置
- 通过ACS配置
由ACS远程管理,对CPE进行自动配置 - 通过DHCP配置
ACS参数可以通过在DHCP server上配置option 43参数来实现。当CPE访问DHCP server时,DHCP server会将ACS参数发送给CPE - 通过命令行配置
即通过命令行手工指定CWMP参数,具体配置方法看设备
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
TR-096
为CPE
定义了9种基本RPC
方法,6种可选RPC
方法;为ACS
定义了2种基本RPC
方法,2种可选的PRC
方法(CPE
方法,CPE
设备支持,可以被ACS
调用;ACS
方法,ACS
设备支持,可以被CPE
调用)。
此外,TR-069
还对RPC
方法中使用的数据类型做了定义,只能使用SOAP
定义的数据类型中的部分。
- SOAP、HTTP
TR-069
使用SOAP
简单对象访问协议作为RPC
报文的封装,利用标准HTTP
协议来传送的方式。TR-069
规定将SOAP
与HTTP
绑定,以RPC
方法调用来实现设备的管理。
把SOAP
绑定到HTTP
提供了同时利用SOAP
的分散性、灵活性的特点以及HTTP
丰富的特征库的优点。在HTTP
上传送SOAP
并不是说SOAP
会覆盖现有的HTTP
语义,而是HTTP
上的SOAP
语义会自然的映射到HTTP
语义。
在使用HTTP
作为绑定协议时,一个RPC
调用自然地映射到一个HTTP
请求,RPC
应答同样映射到HTTP
应答。
一般情况下,一个完整的SOAP包
的结构包括:
一个信封(Envelop)、一个头部(header)、一个SOAP体(body)。SOAP
协议中未说明一个SOAP
包中可以包含多个Envelop
,TR-069
采用了多个信封机制,这样增加了一次交换所带的信息量,减少了网络设备之间的数据交换次数。
- SSL
SSL
协议指定了一种在应用程序协议和TCP/IP
协议之间提供数据安全性分层的机制,它为TCP/IP
连接提供数据加密、服务器认证、消息完整性以及可选的客户机认证,确保数据在传送中不被改变。TR-069
协议实现的是远程管理,安全的信息交换是必需的。采用128bit加密算法、数字认证机制,实现CPE
和ACS
之间的安全信息交换。
CWMP基本功能
ACS
和CPE
的自动连接支持
ACS
对CPE
的自动配置支持对
CPE
系统启动文件和配置文件的上传/下载管理支持
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
会话将无限期地打开,控制器可以自由地向代理发送消息。
TR-369
轻量化,与之前相比,管理费用确实显著减少。如:开放会话消除了重复连接请求的需要,这些请求会产生大量不必要的握手。由于TR-369
协议非常高效,因此可以更频繁、更精确地监控设备,有效保证为客户提供更好的服务质量。
TR-369
中的应用层在封装到任何 MTP
中之前先封装在协议缓冲区中。Protobuf
简称Protobuf
,有点像XML
,但编码后无法直接明文读取它们,并且需要模式(.proto文件)进行解码。模式的存在使得数据结构的应用变得更加容易。
TR-369
还提供最先进的安全性。USP
消息封装在可以使用 TLS
加密的 USP
记录中。 消息还可以在 MTP
层中得到保护:对于 Websockets
使用 HTTPS
,对于 CoAP
– 使用DTLS
,对于 STOMP
– 使用 TLS
。 此外,端到端 (E2E
) 消息交换功能可以建立会话上下文,在消息太大而无法传输时确保数据的完整性、保护和分段。
拿oktopus 的两张图
TR-181
TR-181
协议严重依赖于数据建模,特别是稍微修改的Device:2 Root
数据模型,其版本 1 应用于TR-069
。 宽带论坛的TR-181
规范将其定义为一组数据对象,例如“基本设备信息、时钟配置、网络接口和协议栈配置、路由和桥接管理、吞吐量统计和诊断测试”。 由于网络接口和协议被视为对象,因此可以自由堆叠它们以匹配设备配置。
TR-181
定义了设备数据模型的版本2(Device:2
)。Device:2
数据模型适用于所有类型的TR-069
或USP
启用设备,包括终端设备、住宅网关和其他网络基础设施设备。
Device:2 详解
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
参数引用堆叠到另一个接口实例的上方或下方。