DUState应该是指的download&upload state,下载和上传状态。
RPC方法中有一个是ACS的“KICKED”方法,是用来做网页的验证。
事件类型(EVENT CODE对应的含义)
- “0 BOOTSTAP” 指出由于CPE第一次安装或是ACS的URL改变而引起会话建立。这种特殊的情况有:1)出厂后CWMP端第一次与ACS连接;
2)出厂设置后,CWMP端第一次与ACS连接;
3)由于某种原因ACS的URL改变后CWMP端第一次与ACS连接。
注意,BOOTSTARP可能和其他事件代码一起组成是事件代码组,例如,在出厂后CPE初始启动时,CPE发送BOOTSTARP和BOOT事件代码。 - “1 BOOT” 当给电或是复位时引起的会话建立,这包括初始系统启动或是由于其他原因的再启动,包括用Reboot方法,但是不是从待机状态醒来。
- “2 PERIODIC” 在周期通知间隔时会话建立
- “3 SCHEDULED” 由于调用ScheduleInform 方法会话建立,这种事件必须只能用“M ScheduleInform”。
- “4 VALUE CHANGE” 指出从上次成功的Inform后,具有Passive和Active通知属性的一个或多个参数的值发生了改变,如果这个事件代码在事件组中,所有修改的参数必须被包含在Inform的参数列表中,如果这个事件被丢弃,那么这些修改的参数也应该同时被丢弃。
- “5 KICKED” 指出会话建立的目的是网页验证,并且Kicked 方法会在这个会话中调用一次或多次。
- “6 CONNECTION REQUEST” 由于ACS 发送了连接请求而使会话建立。
- “7 TRANSFER COMPLETE” 由于先前请求的下载或上传完成而引起会话建立,TransferComplete方法会在这个会话中调用一次或多次。这个事件代码必须用“M Download”,“M ScheduleDownload”,或者是"M Upload" etc。
- “8 DIAGNOSTICS COMPLETE” 当完成了一个或多个由ACS启动的诊断,CPE会用该事件码重新建立起一个连接。
- “9 REQUEST DOWNLOAD” 为了调用RequestDownload方法二发起的会话。
- “10 AUTONOMOUS TRANSFER COMPLETE” 当不是由ACS请求的上传或下载完成而引起的会话建立(成功或是不成功),Autonmous TransferComplete 方法会在这个会话中调用一次或多次。
- “11 DU STATE CHANGE COMPLETE”, 为了表明先前请求的DU state改变完成而建立的会话,不管成功与否,DUStateChangeComplete方法会在这个会话中调用。这个方法必须用“M ChangeDUState”
- “12 AUTONMOUS DU STATE CHANGE COMPLETE” 会话建立是要通知ACS DU state改变完成了, 而这个改变不是由于调用ChangeDUState 方法的请求,DUStateChangeComplete方法会在这个会话中调用。
- “13 WAKE UP” 由于CPE从待机中苏醒而建立的会话。
- “M Reboot” 由于ACS调用了Reboot RPC,而促使CPE 重新启动,重叠的事件会引起“1 BOOT”事件代码。
- “M ScheduleInform” ACS 请求了一个安排通知。
- “M Download ” ACS 请求下载
- “M ScheduleDownload” ACS请求计划下载
- “M Upload” ACS 请求上传
- ”M ChangeDUState” ACS用ChangeDUState方法请求DU 状态改变。
- “M”
- “X”
" "
ACS主动发起会话(出自3.2.2)
ACS可以随时请求CWMP端点使用连接请求机制启动与ACS的连接。这样可以主动发起会话的前提是,ACS可以访问CPE。如果CPE位于防火墙后面或者ACS和CPE之间存在NAT设备,则ACS可能根本无法访问CPE。
也有例外,允许ACS请求ACS无法连接的CPE,在Annex K这一章节有介绍。
该机制依赖于ACS在CPE发起的交互中与CWMP端点进行至少一次先前通信。在此交互期间,如果ACS希望允许将来ACS启动的事务,它将使用ManagementServer.ConnectionRequestURL参数的值。如果用于管理访问的URL发生更改,CPE必须通过Inform消息通知ACS。CPE WAN管理协议分配了端口7547,CPE可以在连接请求URL中使用此端口。
连接请求机制有如下通用要求(意思是这些要求运用于任何连接请求通信中,与使用的传输协议独立):
1) CPE必须接受任何来源的连接请求,只要该来源对于目标CPE来说有正确的认证参数。
2) CPE 应该限制连接请求的数目,可以在特定的CWMP终端在给定的一段时间内接受连接,这个可以减少可能的攻击。如果因为一些原因CPE选择拒绝连接请求,CPE必须用明确的传输错误来回应连接请求。
3)如果CPE成功认证和回应连接请求,如果它没有完成会话,它必须在30秒内发送回应,尝试用事先确定的ACS地址建立会话,该回应是在Inform中包含‘6 CONNECTION REQUEST’。
注意:实际情况下也会有例外,在满足这个要求的情况下也会引起CPE的失败。
4)如果CPE得到了连接请求的成功回应,但是至少在30s后没有成功建立会话,ACS可以重新对CPE发起连接请求。
5)如果一旦CPE成功认证并且回应连接请求,在与ACS建立会话之前,会在同一CWMP终端收到一个或多个成功认证的,CPE必须为每一个连接请求返回一个成功回应,但是,不管在这段时间里收到了多少个连接请求,CPE不能在同一CWMP终端发起额外的会话作为额外连接请求的回应。
6)当CPE接收一个或多个连接请求,它会与至少一个CWMP终端与ACS建立会话,它不能终止任何会话。CPE必须选择用其他传输行为代替。
7)CPE不能因为一些原因拒绝认证的连接请求,如果CPE因为一些原因拒绝了连接请求,不能作为连接请求的结果发起会话。
2.2安全机制
CPE WAN管理协议旨在允许使用它的交互中的高度安全性。 CPE WAN管理协议旨在防止篡改CPE和ACS之间发生的事务,为这些事务提供机密性,并允许各种级别的身份验证。
以下安全机制包含在此协议中:
• 该协议支持使用TLS进行CPE和ACS之间的通信传输。 这提供了事务机密性,数据完整性,并允许CPE和ACS之间基于证书的身份验证。
• HTTP层提供基于共享机密的CPE和ACS身份验证的替代方法。 请注意,协议未指定CPE和ACS如何学习共享机密。
CPE和ACS的会话时序图例子,ACS先是读取一些参数值,然后设置这些参数值
CPE对于SSL/TLS的需求
- CPE要支持TLS1.2及以上的版本
- 如果用了TLS1.2或者以上的版本,CPE必须使用ACS提供的鉴权方式进行鉴权
[图片上传失败...(image-d246cf-1546580762534)]
如果TLS用于加密,ACS应该使用基本鉴权方案;如果没有使用TLS,ACS应该使用摘要鉴权
CWMP的协议组成
• TR-098: Internet Gateway Device Data Model for TR-069
• TR-104: Provisioning Parameters for VoIP CPE
• TR-135: Data Model for a TR-069 Enabled STB
• TR-140: TR-069 Data Model for Storage Service Enabled Devices
• TR-143: Enabling Network Throughput Performance Tests and Statistical Monitoring
• TR-157: Component Objects for CWMP
• TR-181: Device Data Model for TR-069 [34] and [35]
• TR-196: Femto Access Point Service Data Model
上述为data model配置协议。参数分为可读和可写,所有的可写参数都必须是可读的。对于一些机密的用户信息比如密码,在读的时候会返回空(在不同的data model定义也是不同的)。
2.3.3 CPE初始化会话
RPC方法规范(见附件A)定义了一种机制,允许CPE向相应的ACS通知各种条件,并确保CPE到ACS的通信将以某个最小频率发生。
这包括在初始CPE安装时建立通信的机制,以便将初始自定义参数“引导”到CPE中。它还包括一种机制,用于持续建立与ACS的定期通信,或者必须向ACS报告的事件(例如CPE的宽带IP地址发生变化时)。
在每种情况下,当建立通信时,CPE通过制造商和序列号信息(以及可选的产品类别标识符)唯一地识别其自身,以便ACS知道它正在与哪个CPE通信并且可以以适当的方式响应。
2.3.4 异步ACS发起会话
ACS能够异步通知CPE配置更改,无需依赖CPE的轮询,随时发出连接请求,指示CPE与ACS建立session。CPE WAN管理协议中定义的用于启用异步ACS发起的通信的基本机制假设CPE的直接IP可寻址性来自ACS。
3.1 ACS发现
CPE WAN管理协议定义了CPE可以使用以下机制来发现其关联ACS的地址:
- CPE可以在本地配置每个CWMP端点的ACS的URL。例如,这可以通过LAN端CPE自动配置协议来完成。如有必要,CPE将使用DNS从URL的主机名组件解析ACS的IP地址。
2.作为IP层自动配置的一部分,接入网络上的DHCP服务器可以配置为包含ACS URL作为DHCP选项[17] / [25] / [38]。如有必要,CPE将使用DNS从URL的主机名组件解析ACS的IP地址。在这种情况下,可以使用其他DHCP选项来设置。
对于ACS的URL解析的IP地址,如果300秒不能建立TCP连接,认为ACS不可达。
如果CPE通过DHCP获得ACS URL并且无法到达ACS,则CPE必须使用DHCP重新发现ACS URL。如果ACS在ACS URL解析的每个IP地址上无法与其建立TCP连接300秒,则必须考虑ACS无法访问。如果CPE没有收到DHCP回复,它必须尝试根据[23] / [38]重试。
当CPE需要联系ACS时,它必须在以下场景中使用DHCP发现机制:
•如果CPE的ManagementServer.URL参数为空值,或者
•如果CPE最初无法联系ACS和CPE(最近一次恢复出厂设置后的第一个成功时间),则通过DHCP获取其ACS URL。
如果尚未在CPE中预配置ACS URL,则此行为使CPE可以返回使用DHCP来查找ACS。例如,这可以处理在CPE上设置不正确的ACS URL的情况。此行为不是ACS故障转移机制。
CPE必须记住每次出厂重置后用于定位ACS的机制。如果CPE没有使用DHCP来发现ACS URL,那么它不应该回退到使用DHCP进行ACS发现。如果CPE最初使用DHCP进行ACS发现,那么当它无法联系ACS时,它必须通过DHCP执行重新发现。即使随后通过非DHCP机制设置了ACS URL,最后一个要求也会成立。
ACS URL必须采用有效的HTTP或HTTPS URL形式[6]。使用HTTPS URL表示CPE必须建立到ACS的SSL或TLS连接。
一旦CPE通过CWMP端点与ACS建立连接,ACS可以随时修改存储在CPE中的ACS URL参数。一旦修改,CPE必须使用修改后的URL来进行ACS的所有后续连接。
当使用基于证书的身份验证时,CPE使用ACS URL的“主机”部分来验证来自ACS的证书。由于这取决于ACS URL的准确性,因此该协议的整体安全性取决于ACS URL的安全性。
CPE应该限制将ACS URL本地配置为需要严格安全性的机制的能力。 CPE可以进一步限制仅将ACS URL本地设置为初始设置的能力,一旦成功建立到ACS的初始连接,以便随后仅允许其现有ACS更改此URL,则阻止进一步的本地配置。 CPE应该阻止尝试从跨站点脚本[54]和跨站请求伪造[55]攻击中更改ACS URL。
使用DHCP来配置ACS URL应该限于服务提供商可以确保DHCP服务器和CPE之间的链路安全性的情况。由于DHCP本身并不包含安全机制,因此应该提供其他确保此安全性的方法。
ACS URL可以包含DNS主机名或IP地址。解析ACS主机名时,DNS服务器可能会返回多个IP地址。在这种情况下,CPE应该从列表中随机选择一个IP地址。当CPE无法到达ACS时,它应该从列表中随机选择一个不同的IP地址,并尝试联系新IP地址的ACS。如果多个IP地址代表不同的ACS,则此行为可确保CPE在不同ACS之间平衡其请求。
3.2.2 ACS连接初始化
ACS可以随时请求CWMP端点使用连接请求机制启动与ACS的连接。 CPE中需要对此机制的支持,并且在ACS中建议使用。
该机制依赖于ACS可以访问的CPE。如果CPE位于防火墙后面或者ACS和CPE之间存在NAT设备,则ACS可能根本无法访问CPE。附件K定义了一种机制,允许ACS联系ACS无法直接访问的CPE。
该机制依赖于ACS在CPE发起的交互中与CWMP端点进行至少一次先前通信。在此交互期间,如果ACS希望允许将来ACS启动的事务,它将使用ManagementServer.ConnectionRequestURL参数的值(参见[27],[34]和[35])。如果用于管理访问的URL发生更改,CPE必须通过Inform消息通知ACS。
IANA为CPE WAN管理协议分配了端口7547(参见[20]),CPE可以在连接请求URL中使用此端口。
连接请求机制具有以下通用要求(意味着这些要求适用于任何独立于正在使用的传输协议的连接请求通信):
- CPE必须接受来自具有目标CPE的正确认证参数的任何源的连接请求。
- CPE应该限制它在给定时间段内接受的特定CWMP端点的连接请求数,以进一步降低拒绝服务攻击的可能性。如果CPE因此而选择拒绝连接请求,则CPE必须以传输特定错误响应该连接请求。
- 如果CPE成功验证并响应如上所述的特定CWMP端点的连接请求,并且如果它尚未在请求的CWMP端点的会话中,那么它必须在发送响应的30秒内尝试建立一个具有预定ACS地址的会话(参见第3.1节),其中包含Inform中的“6 CONNECTION REQUEST”EventCode。
注意 - 在实践中,可能会有特殊情况导致CPE在极少数情况下无法满足此要求。
- 如果ACS收到对连接请求的成功响应,但在至少30秒后CPE未成功建立包含Inform中“6 CONNECTION REQUEST”EventCode的会话,则ACS可以重试对该CPE的连接请求。
- 如果CPE一旦成功验证并响应连接请求,但在它建立到ACS的会话之前,就会收到一个或多个成功验证的相同CWMP端点的连接请求,CPE必须对每一个连接请求返回一个成功响应,但不得因为这些额外的连接请求而为同一CWMP端点启动任何额外的会话,无论在此期间收到多少会话。
- 如果CPE在收到一个或多个连接请求时已经在ACS中具有至少一个CWMP端点的会话中,则它不得过早地针对任何CWMP端点终止任何会话。 CPE必须采取特定于运输的替代行动。
此要求适用于CPE在具有至少一个CWMP端点的会话中认为自己的时间间隔内的任何时间收到的连接请求,包括CPE在建立会话的过程中的时间段。 - CPE绝不能因上述任何原因拒绝经过适当认证的连接请求。 如果CPE由于上述任何原因拒绝连接请求,则它不得因该连接请求而与ACS发起会话。
下述为仅对http协议的ACS连接请求要求:
- 连接请求端口必须仅用于TR-069连接请求。它不能与任何其他协议共享。
- 连接请求必须使用HTTP 1.1 GET到CPE指定的特定URL。 URL值在CPE上以只读参数的形式提供。此URL值的路径应该由CPE随机生成,以便每个CPE都是唯一的。
- 连接请求必须使用HTTP,而不是HTTPS。关联的URL必须是HTTP URL。
- 连接请求HTTP GET中未传送任何数据。 CPE可能会忽略任何可能包含的数据。
- CPE必须使用HTTP身份验证中定义的HTTP摘要身份验证方案,以便在继续之前对ACS进行身份验证 - 由于身份验证请求失败,CPE绝不能启动与ACS的连接。
- CPE对成功通过身份验证的连接请求的响应必须使用“200(OK)”或“204(无内容)”HTTP状态代码。 CPE必须在成功认证后立即发送此响应,然后才能启动生成的会话。 HTTP响应中消息体的长度必须为零。
- CPE应该限制它在给定时间段内接受的特定CWMP端点的连接请求数,以进一步降低DOS攻击的可能性。如果CPE因此而选择拒绝连接请求,则CPE必须使用HTTP 503状态代码(服务不可用)来响应该连接请求。此外,CPE[图片上传失败...(image-bb627b-1546580942238)]
不应在响应中包含HTTP Retry-After标头。 - 当CPE收到一个或多个连接请求的时候已经在与ACS的会话中了,不能过早了终止任何一个会话,CPE必须采取如下的替代计划:(1)通过响应状态码503拒绝每一个连接请求,这种情况下,CPE在响应中不应该包含retry-after报文头;(2)完成当前会话后,一次启动一个新会话(无论在上一个会话期间收到了多少个连接请求),其中包含Inform中的“6 CONNECTION REQUEST”EventCode。 必须拒绝不接受的连接请求(使用HTTP 503状态代码)。 如果新会话是针对当前在会话中的CWMP端点,则CPE必须在现有会话完成并且已应用该会话的所有更改后立即启动会话。(3)如果连接请求不是当前在会话中的任何CWMP端点,则CPE可以在现有会话仍处于活动状态时启动具有所请求的CWMP端点的新会话。
- 如果ACS禁用HTTP连接请求机制,则通过将Device.ManagementServer.HTTPConnectionRequestEnable参数的值设置为“False”,CPE必须关闭用于HTTP连接请求的端口。
在cwmp中,http是一定要鉴权的。如果没有TLS,必须使用摘要鉴权。如果使用了TLS,使用basic鉴权。
使用身份验证质询需要发送初始消息(通常是Inform RPC方法请求); 使用TLS的抢先式基本身份验证是安全的,并且无需额外的请求。
如果CPE从ACS(基本或摘要)收到了身份验证质询,则CPE应该在TCP连接期间的所有后续HTTP请求中发送Authorization头。 无论CPE是否这样做,ACS都可以在单个或多个TCP连接中的会话的任何阶段发出后续认证质询。