内核中的 SIP 计时器

SIP Timer inside core

我有以下关于 SIP 核心在 SIP 通信中的行为的问题。

假设A方呼叫B方。B收到INVITE并生成'200 OK'。生成'200 OK'后,B到达终止状态(SIP状态机),因此B中没有状态机。

现在如果“200 OK”没有到达 A,B 应该重新发送“200 OK”,因为它没有收到 ACK。 RFC 3261 表示重新传输“200 OK”是 SIP 核心的责任。

那么B的SIP核心中触发重传的是什么?它是否维护任何计时器?还是依赖于实现?

此致, 苏丹苏

从 B 重传 2xx 在 13.3.1.4 The INVITE is Accepted

部分有解释

准确的文字是这个:

The 2xx response is passed to the transport with an
interval that starts at T1 seconds and doubles for each
retransmission until it reaches T2 seconds (T1 and T2 are defined in
Section 17).  Response retransmissions cease when an ACK request for
the response is received.

重传结束解释如下:

If the server retransmits the 2xx response for 64*T1 seconds without
receiving an ACK, the dialog is confirmed, but the session SHOULD be
terminated.  This is accomplished with a BYE, as described in Section
15.

这意味着应用层(即:不是事务层) 需要管理定时器。

定时器 T1 和 T2 在 table 4 中定义:A Table of Timer Values

T1       500ms default    Section 17.1.1.1     RTT Estimate
T2       4s               Section 17.1.2.2     The maximum retransmit
                                               interval for non-INVITE
                                               requests and INVITE
                                               responses
T4       5s               Section 17.1.2.2     Maximum duration a
                                               message will
                                               remain in the network

是否允许修改T1、T2、T4值。但是,理论上,对于普通的互联网,它们不应该被改变。

例如,如果所有 ACK 都丢失,则将在这些间隔内进行重传:

500 毫秒 1秒 2秒 4s 4s 4s 4s ...

直到总计为 64*T1 = 32 秒