【问题现象】
因终端CANCEL消息携带SDP导致呼叫未及时拆线,后续呼叫失败。
【原因定位】
问题描述:外场优化测试中,发现HTC手机在极小概率情况下会连续收到网络侧回复403 Forbidden,错误码User Is Busy,导致多次呼叫失败。
问题原因:
1.通过SBC跟踪发现403Fobidden是由IMS回复.
2.进一步分析403Forbidden消息来自于MMTel-AS,原因是前一次呼叫释放后MMTel-AS未收到拆线消息CANCEL。
3.通过进一步对比,SBC已经收到前一次呼叫终端发给IMS的CANCEL消息.
4.实际上,是SCC-AS收到CANCEL消息,但是并未向后向网元MMTel-AS转发.
5.据此分析,是前一次呼叫的CANCEL消息,由SBC转发给SCC-AS后,SCC-AS无法正确处理,导致呼叫无法正常拆除,后向网元均未正确释放呼叫资源。当用户紧接着再次发起呼叫后,MMTel-AS判断被叫用户前一次通话未拆除,直接回复403 Forbidden(原因值是UserBusy)。
6.进一步对比分析,此未被SCC-AS正确处理的CANCEL消息,主要差异在于其携带了SDP信息,导致SCC-AS无法正确处理。
影响范围:CANCEL消息携带SDP导致呼叫无法及时拆除,后续呼叫被网络侧拒绝。
【解决方案】
1.根据RFC3261和RFC6637协议定义,CANCEL消息不用于媒体协商过程,原则上不携带SDP,所以网络侧未能正确处理。
RFC3261的7.4.1节规定“The Internet media type of the message body MUST be given by the Content-Type header field”,即SIP消息携带body的话,必须有Content-Type header。而20.1节的表格中可以看到,CANCEL消息是不能有Content-Type header的。因此CANCEL不能携带媒体信息。
2.根据高通分析,依据RFC3312协议定义,当媒体协商失败终端主动拆线情况下,CANCEL消息可以携带SDP用于指示媒体协商失败具体原因,而非参与媒体协商过程。问题中遇到的CANCEL是基于此场景触发。
3.征询集团研究院意见,根据RFC3312协议要求,CANCEL消息携带SDP用于指示媒体协商失败具体原因,需在在SDP里相应的a=里把状态设置为failure,而高通的还是写的mandatory。
4.为尽量规避与终端的兼容性风险,华为SBC采用信令适配方式,临时删除CANCEL消息的SDP内容。问题暂时规避。
配置命令如下(只列举关键参数取值):
ADD HMRREQPLC: PLCYNAME=”SDP_DELETE”, METT= CANCEL-1,RSETID=”SDP_DELETE”;
ADD HMRHDRRL: HRLNAME=”SDP_CHK”, HRSETID=”SDP_DELETE”,HNST=USER-DEFINED,MHT1=CONTENT-TYPE,MHPREG1=”(sdp)”,HST=SAVE;
ADD HMRBDYRL: BRLNAME=”SDP_DELETE”, BRSETID=”SDP_DELETE”,
BTPS=ACTIVATED,BTPST=DELETE,BTPREG=”(.*)”,BCPS=DEACTIVATED,SEMC=Y,EMC=”$rule.SDP_CHK.$1!=$NULL”;
ADD HMRPLCSET: PLCSETNAME=”SDP_DELETE1″,PSETID=”SDP_DELETE”,
MSGT=REQMSG,REQPLCNAME=”SDP_DELETE”;
MODSIPAN:ANNAME=”PCSCF”,LETYPE=P-CSCF,IPSETID=”SDP_DELETE”,OPSETID=”SDP_DELETE”;
本文整理自网络,文章版权归原作者所有,如有侵权,请联系我们进行删除。小编微信(gprshome201101)
长按下方二维码图片 > 识别图中二维码 > 关注“51学通信公众号”
51学通信接头方式如下: