Browsed by
Tag: 保活

Keep-alive

Keep-alive

在 SIP 通信领域,keep-alive (保活)有两种:设备的 keep-alive 与会话(session,dialog)的 keep-alive。

设备的 keep-alive 目前大家都有成熟统一的解决方案,并且符合 RFC3261 的要求,那就是采用 OPTIONS 操作进行检测,如果对端设备返回 200OK 则说明设备 keep-alive。终端采用 REGISTER 也可以检测设备 keep-alive。

各厂家一直都没有会话 keep-alive 的统一解决方案。RFC4028 规范虽然定义了 reINVITE 和 UPDATE 用于会话 keep-alive 检测,但是这两个操作用于会话检测显得太复杂了,会导致重新协商媒体,影响会话的通话质量。

目前各厂家的思路倒是基本一致:既然正常的 reINVITE 和 UPDATE 操作会导致新的媒体协商,那不携带 SDP 是不是就可以直接用于会话的 keep-alive?当然, reINVITE 是例外,「reINVITE without SDP」已经被用于 3PCC 流程,因此不可能再用于会话 keep-alive 操作。

我们根据历年与各厂家设备对接的经验,总结以下用于会话 keep-alive 的操作:

  • UPDATE without SDP
  • INFO without SDP
  • MESSAGE without SDP

最新版本 miniSIPServer 的默认处理方式:如果在会话过程中收到上述三种 SIP 消息,将进入会话 keep-alive 处理流程;如果会话存在,则返回 200OK 消息。

UPDATE 和 INFO 本身就只能在会话中传递,因此天然契合 keep-alive 的要求。我们推荐优先采用 INFO,RFC3261 明确定义了 INFO,各厂家设备一定会支持 INFO 操作。而 UPDATE 操作定义在补充协议中,部分厂家的设备未必会支持 UPDATE,更遑论 「UPDATE without SDP」。

MESSAGE 即可以在会话内传递,也可以在会话外发起,用于传递即时消息(instant message)。我们限定 「MESSAGE without SDP」只能在会话内传递,并保留给 keep-alive 流程处理。