SUBSCRIBE方法用于发起订阅请求,NOTIFY方法用于通告当前资源状态,当那些被订阅的资源的状态发生改变时,负责这一资源的网络实体将向订阅者发送通告,通报当前资源状态的变化情况,这是事件通告机制,以上都为单向行为,涉及以下几个概念:
(1)订阅者---UE
订阅者向通告者发送SUBSCRIBE消息以请求创建一次订阅关系。订阅者负责接收NOTIFY消息,这些NOTIFY消息中包含订阅者所订阅的资源信息。 (2)通告者---S-CSCF
通告者接收SUBSCRIBE消息,判断P-Asserted-Identify头域携带的用户标识已在S-CSCF上注册,返回200(OK)响应,指示订阅成功。通告者负责产生NOTIFY消息,向订阅者回馈当前资源的状态。
UE是订阅者,订阅由UE发起,涉及SBC、S-CSCF及HSS网元;而S-CSCF是通告者,通告是由HSS触发、S-CSCF发起的。
通告者在成功创建订阅关系后,必须立即发送NOTIFY消息,向订阅者通告当前订阅资源的状态。通告内容也即消息体以xml格式予以表达,NOTIFY消息中必须包含扩展的 Subscription-State头域,指示创建的订阅的状态及剩余注册时间。共有3种订阅状态,分别是:
(1)active:订阅已被接受且授权成功。
(2)pending:SUBSCRIBE请求已收到,但还没有足够的信息决定接受或拒绝此次订阅。
(3)terminated:订阅未激活或创建的订阅关系终止。
对应active状态或pending状态,该头部还带有expires参数指示此次订阅的有效时长。对应terminated状态,该头部应包含reason参数指示订阅被终止的原因,或者包含Retry-After参数,指示订阅者过一段时间后重新发起订阅请求。 对于订阅已被接受且授权成功的notify截图如下: 信令平台抓包如下:
由于平台原因,上述抓包中涉及HSS的几个Diameter消息,予以补充如下: PNR(Push Notification Request)消息由命令码309和设置命令标志“R”表示,当AS通过SNR(Subscribe Notifications Request)消息向HSS订阅的数据被更新后,HSS通过PNR消息将更新后的数据发送给AS。
注意:订阅和通告是同一个Call-ID,并且通告行为可延伸到23G网络,也即通告消息可通过S-CSCF、SBC、GGSN传至SGSN,之后通过Gb接口或IU-PS接口到达用户手机,这种现象发生在当UE重定向、盲重定向至23G网络且在RAU完成之后,用户发出register注销消息SIP数据包(Expires: 0)。随后网络侧会下发NOTIFY通告消息,告诉目前用户IMS资源已改变(no resource),UE回复通告200OK消息,其中P-Access-Network-Info头域上报UE所在网络类型及小区标识CGI(MCC+MNC+LAC+CI)或ECGI(MCC+MNC+TAC+CI)。
七、常见初始注册失败
IMS注册失败与手机终端、IMS核心网设备是息息相关的,找出影响注册成功率的终端型号和核心网元,并进一步推动解决问题。本章节仅以注册成功率较低且请求数较高的几款型号终端来进行论述,不尽悉数。 7.1 苹果6s手机初始注册失败
在对苹果6s(A1700)的手机进行注册失败分析时,发现响应码为400的占比较高: 截取一个典型的苹果6s手机(A1700)的注册失败信令图:
在不考虑注册消息在Gm重复发送的因素以外,针对苹果终端失败响应码为400的情况,这类初始注册失败有个特征:
先发起初始注册,收到网络下发的401挑战,但手机不予理会,过几秒钟时间后,手机发起PDN连接性请求(APN=IMS),再次建立起IMS信令的默认承载,并分配得到新的IPV6地址。
再次发起初始注册,本次Call-ID与上次的相同,但不携带IMS认证响应RES结果(其Nonce和response均为空),Gm接口的P-CSCF地址改变(出于安全和负荷角度考虑,轮流使用两个不同地址的代理服务器)。
当S-CSCF收到本次的同一个Call-ID注册信息,认为是上次注册的延续,但同时根据未携带IMS认证信息也判断出并非接在401认证挑战消息后的二次注册,于是回应失败响应码400,具体原因值为“SIP Key Parameter Invalid”或“Invalid Message”。 建议终端厂家出补丁来解决401认证挑战消息的兼容性问题。
建议核查S-CSCF下发的401认证挑战消息的兼容性问题。 7.2 三星S6手机初始注册失败
在对三星S6(批次)的手机进行注册失败分析时,发现原因值为486和500的占比较高:
手机发起初始注册或重注册,S-CSCF回送401挑战消息,但手机UE未响应401挑战消息,稍后UE再次发起初始注册(可发生APN=IMS的PDN重新连接,重新分配IPV6地址),两次注册的Call-ID不同,但由于S-CSCF注册消息处理周期定时器(30s)还在工作,认为同一个IMSI用户的第一次注册尚未完成,因此直接回应486 Busy Here消息,原因值为\,拒绝了注册操作流程。由此产生了两次初始注册失败,截图如下:
建议终端厂家出补丁来解决401认证挑战消息的兼容性问题。 建议核查S-CSCF下发的401认证挑战消息的兼容性问题。
建议S-CSCF缩短注册保护定时器时长或修改流程以信任新的注册消息。
500失败响应码为服务器内部错误,由S-CSCF实体产生,建议检查S-CSCF内部事件记录。
7.3 步步高VIVO X6D手机初始注册失败
在对步步高VIVO X6D(批次)的手机进行注册失败分析时,发现代码为486和500的占比较高: