【问题标题】:SIP dialog established via UDP - what is the transport AFTER a large SIP request has been sent via TCP?通过 UDP 建立的 SIP 对话 - 通过 TCP 发送大型 SIP 请求后的传输是什么?
【发布时间】:2023-03-26 02:30:01
【问题描述】:

假设 SIP 对话(INVITE, 200 OK, ACK)已通过 UDP 建立;并且发送了一条需要 TCP 作为传输的大消息。 在为所有其他后续(和正常大小)消息发送大消息之后应用的传输协议是什么?

协议是否切换到 TCP 以处理所有进一步的请求/响应,还是继续使用最初协商的传输 - UDP - 处理标准大小(不是大)的消息?


我的发现(基于 RFC 3261):

所有 SIP 元素必须实现 UDP 和 TCP。 SIP 元素可能
实现其他协议。 - 来自rfc3261#18

ACK 必须发送到相同的地址, 原始请求发送到的端口和传输。 - 来自rfc3261#18

好吧,不是所有请求(尤其是 ACK)都能够独立选择传输。

使 UA 强制使用 TCP 是对 RFC 的重大改变 2543. 它的出现是为了处理更大的消息, 必须使用 TCP,如下所述。因此,即使一个元素 从不发送大消息,它可能会收到一个并且需要 能够处理它们。 - 来自rfc3261#18

在已建立的对话期间,UAS/UAC 永远不知道是否需要大消息 - 从 UDP 切换到 TCP 就可以了(无需任何 RE-INVITE 提前将传输更改为实际请求)。

301(永久移动)或 302(临时移动)响应可能 还提供与目标相同的位置和用户名 初始请求,但指定其他传输参数,例如 要尝试的不同服务器或多播地址,或更改 SIP 从 UDP 传输到 TCP,反之亦然。 - 来自rfc3261#8.3

不真正相关 - UAS 可能想要更改 UAC 建议的传输;但这仅基于对某些 INVITE(或 RE-INVITE)的反应

目的地址, 取消的端口和传输必须与用于取消的那些相同 发送原始请求。 - 来自rfc3261#9.1

好的,CANCEL(如 ACK)也不能独立选择传输。

如果请求在路径 MTU 的 200 字节内,或者如果它更大 超过 1300 字节且路径 MTU 未知,必须发送请求 使用 RFC 2914 [43] 拥塞控制传输协议,例如 作为 TCP。如果这导致传输协议从一个 顶部 Via 中的值,必须更改顶部 Via 中的值。

也就是说,如果 SIP 对话是通过 UDP 建立的,它还必须能够接收 TCP 请求。

适用于任何端口和接口 服务器侦听 UDP,它必须在同一个端口上侦听,并且 TCP 接口。这是因为可能需要发送消息 如果它太大,则使用 TCP,而不是 UDP。结果, 反过来是不正确的。服务器不需要监听 UDP 特定的地址和端口只是因为它正在侦听相同的 TCP的地址和端口。当然,可能还有其他原因 服务器需要在特定地址和端口上侦听 UDP。

好的,这就解释了从 UDP 到 TCP 的无缝切换是如何工作的。 - 对于另一个方向,它不是必需的,但是(我的理解是:它仍然可以工作)。

【问题讨论】:

    标签: sip


    【解决方案1】:

    此时 TCP 和 UDP 都可用,传输层负责选择。 SIP 独立于传输,两者同时处于活动状态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多