📅  最后修改于: 2020-10-29 03:51:18             🧑  作者: Mango
有时,代理服务器会将单个SIP呼叫转发到多个SIP端点。此过程称为分叉。在这里,一个呼叫可以同时振铃多个端点。
使用SIP分支,您可以将台式电话与软件电话或手机上的SIP电话同时振铃,从而可以轻松地从任一设备接听电话。
通常,在办公室中,假设老板无法接听电话或离开,SIP分叉允许秘书接听其分机的电话。
如果有状态代理可用,则需要进行分叉,因为它需要执行并从收到的许多代理中做出响应。
我们有两种分叉-
在这种情况下,代理服务器将一次将INVITE分叉到两个设备(UA2,UA3)。两台设备都将产生180振铃,而接听电话的人将产生200 OK。首先到达发起方的响应(假设UA2)将与UA2建立会话。对于其他响应,将触发“取消”。
如果发起方同时收到两个响应,则基于q值,它将转发响应。
在这种情况下,代理服务器会将INVITE分支到一个设备(UA2)。如果此时UA2不可用或忙,则代理会将其分叉到另一个设备(UA3)。
分支ID可帮助代理将响应与分叉请求进行匹配。没有分支ID,代理服务器将无法理解分叉的响应。分支ID将在Via标头中提供。
UAC使用标签来区分来自不同UAS的多个最终响应。 UAS无法解析请求是否已被派生。因此,它需要添加一个标签。
代理也可以添加标签(如果它生成最终响应),则它们永远不会将标签插入请求或转发的响应中。
一个代理服务器可能也可以分叉单个请求。因此,将派生的代理应将其自己的唯一ID添加到其创建的分支中。
呼叫分支是指两个用户代理之间的一对一信令关系。呼叫ID是SIP消息中携带的唯一标识符,用于引用该呼叫。呼叫是呼叫分支的集合。
UAC通过发送邀请开始。由于分叉,它可能会从不同的UA收到多个200 OK。每个呼叫对应于同一呼叫中的不同呼叫分支。
因此,呼叫是一组呼叫分支。呼叫支路是指UA之间的端到端连接。
呼叫分支的两个方向上的CSeq空间是独立的。在一个方向上,每个交易的序号都会递增。
对于企业用户而言,语音邮件如今已非常普遍。这是电话应用程序。当被叫方不可用或无法接听电话时,集团电话会通知主叫方留下语音消息。
如果被叫方的号码无法接通,用户代理将获得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)。