如果你接触过Voip,那么你会经常碰到这些术语:Channel、 Call、 Call Leg (A leg 及 B Leg),还有 Bridged Call。是不是感觉晕乎乎的,不知所云?这里解释一下这些术语。
1. Call legs
当你拿起电话,接通一个号码时,从电话交换机的视角来看,这路呼叫是分成两部分的:
- 首先,在你拨号时,你的话机设备向交换机发起一条连接,并通知交换机你要呼叫的号码
- 然后,交换机查找拨号规则,处理被叫号码,然后向被叫终端发起一条连接
因此,在交换机上,有两条独立的连接存在:
- 一条是主叫方 originator (caller)发起的连接,通常称为ingress。
- 另一条是交换机发起的,连接被叫方 recipient of the call (callee),通常称为egress。
这两条连接,都是call leg。call leg.指的是在终端与交换机之间,交换机的入局或出局连接。
1.1 A leg 与 B leg
A leg 和B leg 这两个术语经常混淆。在严格意义上:
- A leg 描述ingress (即交换机入局的 call leg)
- B leg 描述egress (即交换机出局的 call leg)
在多数场景下,这意味着
- 主叫方的连接是 A leg
- 被叫方的连接是 B leg.
2. Channels
在FreeSWITCH或Asterisk的实现中,channel 就是描述call leg的抽象。
Channel由拨号方案控制。每个channel 有一个UUID,编程中可以通过UUID操作呼叫或报告呼叫详情。
3. Calls
术语call 指从主叫到被叫间的端到端连接。
3.1 单leg call
顾名思义,只有一个call leg组成的call。
比如:接入voicemail时,主叫方连接的是交换机提供的APP。这时交换机并没有生成B leg,因为它没必要桥接到第三方。
一些具体实例:
- IVR
- voicemail
- 会议
3.2 Bridged call
拨号方案通过某种方式,把A leg和B leg连接在一起,这时,我们称建立一个bridged call(桥接)。
因此,在bridged call里,两条leg并称为一个call。
呼叫同一组织内的分机时,通常只经过一道交换。在现实世界里,通常你接到的电话是来自你的SIP供应商的,不是主叫直接呼叫到你的设备上,期间可能需要多次交换,才能顺利连接主叫和被叫。但是,在每一个交换机视角里,这些概念同样适用。
桥接的双方,可以不使用同一种协议,这为通信交换提供了极大的便利,但这打破了端到端安全加密的要求。