SIP协议没有为处于完成状态的会话定义一种保活机制。为了解决一方发送BYE失败或BYE消息在网络传输过程中丢失导致会话不能结束的问题,引入Session Timer(会话定时器)机制。
Session Timers由RFC4028(Session Timers in the Session Initiation Protocol)定义。
RFC4028作为SIP协议的扩展,允许通过re-INVITE或UPDATE request来周期性的刷新SIP会话,
该刷新机制允许会话双方判定会话是否是活跃的,扩展定义了两种头域,如下:
Session-Expires: 会话的超时时间
Min-SE:允许的最小会话超时时间
会话发起方发出的INVITE的Support头域中携带“timer",表明支持session timer扩展,2xx 应答的Session-Expires头域中包含"refresher"参数,表明由通话双方谁来发起刷新请求(UAC:主叫,UAS:被叫)
会话发起方可以通过Session-Expires头域中的refersher字段决定是uac还是uas刷新会话,
如果发起方没有携带refresher字段,则由会话接受方决定由谁发起刷新请求。最终将会话刷新方
设置在2xx应答中
会话刷新的间隔时间通过协商机制完成。如果刷新发起者在超时前没有获得刷新请求的2xx应答,则发送BYE结束通话。如果另外一方在超时前
没有收到刷新请求,则发送BYE结束通话
应答码422:表明会话超时周期太短, RFC4028中建议最小超时时间是90秒。建议超时时间是1800秒