为了处理对话存活机制进行管理,SIP协议支持了一个非常重要的关于定时器的扩展协议,这就是RFC4028。在此协议中规定了两个针对SIP会话超时定时器:Session-Expires(SE)和Min-SE(MSE)。这里提醒读者,一些人理解这里的M为MAX了,当然后续就会有很多悲剧出现。Session-Expires 终端用来通过INVITE或者UPDATE传输会话生命周期,Min-SE用来传输代理服务器端允许最小会话周期值。UAs通过周期性地发送re-INVITE或者UPDATE请求来保持会话存活状态。示例中是鼎信SIP 话机设置中关于定时器(SE)设置:
![](http://www.ctiforum.com/uploadfile/2021/1018/20211018093144896.jpg)
根据RFC4028-5,MSE默认设置为90秒,通过响应码422返回中传输。服务器端通过MSE设置来校验其设置范围,鼎信IPPBX UC200 示例关于定时器设置:
![](http://www.ctiforum.com/uploadfile/2021/1018/20211018093144955.jpg)
通过终端(SE)和服务器端(MSE)设置可以看出,尽管在用户端设置了某个参数值,但是如果超过了服务器端MSE的设置,仍然不会成功设置。因为服务器端MSE也进行了设置处理。在具体的关于SIP话话定时器的SE和MSE的处理流程如下:
![](http://www.ctiforum.com/uploadfile/2021/1018/20211018093144791.jpg)
关于SIP会话超时SE和MSE协商机制-RFC4028
在以上示例中,我们可以看到,用户通过INVITE发送一个SE为:50秒,服务器端不接受,因此返回一个422(参考rfc4028-6),假设服务器指示仅接受最小80秒的MSE。终端又根据服务器端的设置最小要求,设置为SE为80秒。代理服务器 1 看到终端按照此建议值设置了SE,满足了自己本身的MSE要求,然后转发到第二个代理服务器,在设置中设置了SE 80秒,MSE也是80秒。假设第二个代理服务器同样也不能接受这样的设置,也对第一个代理发送一个建议的MSE值:90秒。第一个代理服务器通过和第一个终端协商后又重新发送一个新的SE设置为90秒的定时器超时设置,并且携带了第二个代理服务器的MSE定时器设置90秒。最后实现存活机制流程。
通过以上关于ME和MSE处理机制的流程我们看到,用户侧不能任意设置ME,服务器端也需要小心设置MSE值。因为,MSE事实上是一种对服务器的一种保护机制,如果服务器端对话话处理能力遇到性能瓶颈,资源不足的话,SE设置过低,导致服务器端验证响应过于频繁,可能最后导致系统稳定性问题。笔者这里仅介绍了关于会话定时器SE和MSE的关系设置,在SIP服务器的环境配置中还有其他的定时器讨论需要读者做进一步的了解,通过这些定时器设置获得更多关于SIP处理的时间设置:
参考资料:
- https://www.rfc-editor.org/rfc/rfc4028.html
- www.dinstar.cn
- www.asterisk.org.cn