SIP - 分叉


有时,代理服务器会将单个 SIP 呼叫转发到多个 SIP 端点。 这个过程称为分叉。 这里一个呼叫可以同时振铃多个端点。

通过 SIP 分叉,您可以让桌面电话与您的软件电话或手机上的 SIP 电话同时响铃,从而使您可以轻松地从任一设备接听电话。

一般来说,在办公室,假设老板无法接听电话或离开,SIP 分叉允许秘书接听他的分机的电话。

如果有可用的有状态代理,则可以进行分叉,因为它需要执行并响应收到的代理。

我们有两种类型的分叉 −

  • 并行分叉
  • 顺序分叉

并行分叉

在这种情况下,代理服务器将一次将 INVITE 分叉到两个设备(UA2、UA3)。 两台设备都会生成 180 Ringing,无论谁接到呼叫,都会生成 200 OK。 首先到达发起者的响应(假设 UA2)将与 UA2 建立会话。 对于其他响应,将触发取消。

并行分叉

如果发起者同时收到两个响应,则根据 q 值,它将转发响应。

顺序分叉

在这种情况下,代理服务器会将 INVITE 分叉到一台设备 (UA2)。 如果 UA2 当时不可用或繁忙,则代理会将其分叉到另一台设备 (UA3)。

顺序分叉

分支 - ID 和标签

分支 ID 帮助代理将响应与分叉请求进行匹配。 如果没有分支 ID,代理服务器将无法理解分叉响应。 Branch-id 将在 Via 标头中提供。

UAC 使用标签来区分来自不同 UAS 的多个最终响应。 UAS 无法判断请求是否已分叉。 因此,需要添加一个标签。

代理还可以在生成最终响应时添加标签,它们从不将标签插入到它们转发的请求或响应中。

单个请求也可能被多个代理服务器分叉。 因此,要分叉的代理应将自己的唯一 ID 添加到它创建的分支中。

呼叫支路和呼叫 ID

呼叫支路是指两个用户代理之间一对一的信令关系。 呼叫ID是SIP消息中携带的表示呼叫的唯一标识符。 调用是调用分支的集合。

UAC 通过发送 INVITE 开始。 由于分叉,它可能会收到来自不同UA的多个200 OK。 每个对应于同一呼叫中的不同呼叫支路。

因此,一个呼叫是一组呼叫线路。 呼叫支路是指UA之间端到端的连接。

呼叫支路两个方向上的CSeq空间是独立的。 在单个方向内,每次交易的序列号都会递增。

呼叫支路 ID

语音邮件

语音邮件如今对于企业用户来说非常常见。 这是一个电话应用程序。 如图所示,当被叫方无法接听电话或无法接听电话时,PBX 会提示主叫方留言。

如果被叫方的号码无法接通,用户代理将收到 3xx 响应或重定向到语音邮件服务器。 然而,需要某种 SIP 扩展来向语音邮件系统指示要使用哪个邮箱,即播放哪个问候语以及在哪里存储录制的消息。 有两种方法可以实现这一目标 −

  • 通过使用 SIP 标头字段扩展

  • 通过使用 Request-URI 来表示此信息

假设用户sip:Tom@tutorialspoint.com在 sip:voicemail.tutorialspoint.com 有一个提供语音邮件的语音邮件系统,当 INVITE 转发到语音邮件服务器时,它的 Request-URI 可能如下所示 −

sip:voicemail.tutorialspoint.com;target = sip:Tom@tutorialspoint.com;cause = 486

下图展示了Request-URI如何携带邮箱标识符和原因(这里是486)。

SIP 语音邮件