SIP终端不能挂机或者处于摘机状态是第三个经常遇到的问题。在SIP终端中的表现形式为终端没有发送BYE消息或者发送了错误的BYE消息内容。
网络异常,图片无法展示
|
没有发送BYE的状态:
网络异常,图片无法展示
|
其原因主要表现在:\
- 没有发送BYE消息
- 发送到BYE消息携带了错误的to-tag
- 发送了格式不规范的BYE消息,例如格式错误,sequences错误或者时间戳错误。
- 发送的BYE消息中携带的是错误的路由信息
对于出现的这些问题,用户需要根据SIP消息来进行排查,对比哪些路径节点出现了问题。当然,这些问题带来的结果大家可能都非常清楚。首先,计费的准确性出现了问题,用户的计费不能完整准确地监控。另外,如果媒体服务器对呼叫有限制的话,因为其中一个SIP终端没有真正挂机,其他用户可能不能呼出的问题。如果是一台模拟网关的话,可能出现FXO或者FXS不能正常工作的问题。出现以上这些问题,读者还是要从终端的配置来解决问题,是否出现了终端的配置问题,终端的质量问题。如果是FXO或者FXS的话,是否出现了制式不匹配的问题导致咬线或者摘机的问题。
从服务器端处理的话,可以通过两种办法来通过服务器端对其进行强制挂机处理。这四种服务器端的检测方式是:\
- 开启RTP超时检测来检测终端的RTP流是否仍然活动
- 开启SIP的KeepAlive 检测SIP 会话状态
- 使用Proxy中的dialog中的OPTION来检测SIP终端响应状态,SIP终端发送 200 OK到proxy来检测终端的状态。
使用SIP session timer 定时器来进行周期检测,SIP终端一直在周期内刷新自己的状态。如果SIP终端来定时器的时间范围内,则表示终端参与活动状态;否则,则对其发送BYE消息,强行挂机。
网络异常,图片无法展示
|
关于session timer的规范,大家可以参考rfc4028,具体的定义方式如下:
网络异常,图片无法展示
|
完整的SIP sesison timer 流程图如下:
网络异常,图片无法展示
|
但是,因为很多SIP网络环境中介入了SBC或者其他的网络设备,很多情况下,有时定时器时间设置过短,SBC作为UAC或者UAS,或者proxy不刷新都可能出现上述问题。所以,会话的定时器的管理需要特别小心。