SIP 分叉
有时,代理服务器将单个SIP呼叫转发到多个SIP端点。这个过程被称为分叉。这里单个呼叫可以同时响铃多个端点。
使用SIP分叉,您可以让您的桌面电话与手机上的软件电话或SIP电话同时响铃,从而可以轻松地从任一设备接听电话。
一般来说,在办公室里,假设老板无法接听电话或离开,SIP分机允许秘书接听电话他的分机。
如果有一个有状态的代理可用,因为它需要执行和响应从它收到的许多,分叉将是可能的。
我们有两种类型的分叉 -
- 平行分叉
- 顺序分叉
平行分叉
在这种情况下,代理服务器将把INVITE分叉到例如两个设备(UA2,UA3)。两个设备将产生180响铃,并且接收呼叫的任何人将产生200 OK。首先到达发起者的响应(假设UA2)将与UA2建立会话。对于其他响应,将触发CANCEL。
如果发起者同时接收到这两个响应,则基于q值,它将转发响应。
顺序分叉
在这种情况下,代理服务器将INVITE分叉到一个设备(UA2)。如果UA2在那时不可用或忙,则代理将它分配到另一个设备(UA3)。
分支 - ID和标签
分支标识帮助代理匹配对分叉请求的响应。没有分支ID,代理服务器将无法了解分叉响应。分支标识将在Via标头中可用。
标签由UAC使用以区分来自不同UAS的多个最终响应。UAS无法解析请求是否已分叉。因此,它需要添加一个标签。
代理还可以添加标签,如果它生成最终响应,他们从来不插入标签到请求或响应他们转发。
也有可能单个请求也可以由多个代理服务器分叉。因此,fork的代理将向它创建的分支添加自己的唯一ID。
呼叫支路和呼叫ID
呼叫支路是指两个用户代理之间的一对一信令关系。呼叫ID是参考呼叫的SIP消息中携带的唯一标识符。呼叫是呼叫线路的集合。
UAC通过发送INVITE开始。由于分叉,它可以从不同的UA接收多个200OK。每个对应于相同呼叫中的不同呼叫支路。
因此,呼叫是一组呼叫支路。呼叫支路是指UA之间的端到端连接。
呼叫支路的两个方向上的CSeq空间是独立的。 在单个方向上,序列号对于每个事务递增。
语音邮件
对于企业用户来说,语音邮件是非常普遍的。这是一个电话应用程序。谈到图片,当被叫方不可用或无法接收呼叫时,PBX将通知主叫方留下语音消息。
如果被叫方的号码不可达,用户代理将获得3xx响应或重定向到语音邮件服务器。然而,需要某种SIP分机来向语音邮件系统指示要使用哪个邮箱 - 即,播放哪个问候语以及在哪里存储所记录的消息。有两种方法来实现这一点 -
通过使用SIP头字段扩展
通过使用Request-URI来发信号通知这个信息
假设用户sip:Tom@tutorialspoint.com在sip:voicemail.zijiebao.com有一个语音邮件系统,它提供语音邮件,当转发到语音邮件服务器时,INVITE的Request-URI可能看起来像 -
sip:voicemail.tutorialspoint.com;target = sip:Tom@tutorialspoint.com;cause = 486
下图显示了Request-URI如何携带邮箱标识符和原因(这里为486)。