通信人家园

 找回密码
 注册

只需一步,快速开始

短信验证,便捷登录

搜索

军衔等级:

  上尉

注册:2001-11-231
跳转到指定楼层
1#
发表于 2016-8-12 11:21:24 |只看该作者 |倒序浏览
在VOLTE通信流程的SIP会话中经常会遇到CANCEL消息,它与结束通话中的BYE有什么区别呢?

首先,我们来回顾一下SIP的基本呼叫流程;Andrew给Jennifer打电话,通话若干分钟后Jennifer挂机结束通话,这是一个典型的通话过程(图1)。本次通话从INVITE开始,由BYE结束(收到最终响应200 OK)。
1.webp (2).jpg
Figure 1  VOLTE通话主要流程

在另一个场景Andrew呼叫Jennifer时,Jennifer正在忙着做饭不能接听电话;Andrew本可等待一段时间,呼叫转移到语音邮箱,但他又不愿意留下任何留言,而只是简单的挂断了电话。
2.webp (1).jpg
Figure 2 通话Cancel流程

通过上图可看出,本次通话没有建立而是由主叫Andrew挂掉了,这就是CANCEL。
   
与BYE消息不同,CANCEL用于关闭一个还未收到最终响应的会话。

注意:图表3呼叫流程中的“200 OK”不是针对本次呼叫流程中INVITE消息的,它只是对CANCEL完成的确认,表示Jennifer已经收到了CANCEL并已经开始拆除这个会话,并返回487 Request Terminated响应给Andrew。

本次487(Request Terminated)是针对INVITE的最终响应。该消息将促使Andrew返回一个ACK请求消息,释放这个会话(ACK是对最终响应确认,这是与1xx--临时响应的区别)。

在VOLTE通话中有一种呼叫分叉(Call Forking),它是指当一个用户注册了多个终端;如果该用户做被叫,注册的多个终端将同时振铃,俗称“一号双(多)响”。虽然多个终端同时振铃,但只有一个终端会应答,而其他响铃的终端呼叫必须要释放。
3.webp (1).jpg
Figure 3 Forking中的Cancel

不同于之前Andrew释放Jennifer未接听电话的场景,Andrew(UA1)并不发送CANCEL。本次Jennifer绑定了多个终端,如手机(UA2)和固定电话(UA3)同时振铃,而实际上Andrew(UA1)甚至并不知道有哪些终端会同时振铃,因为呼叫分叉操作是由SIP代理完成的。Andrew仅仅知道他发起了一次呼叫,有振铃音,并且呼叫被接听了;通过SIP代理将在Jennifer接听电话之后(假设是用UA2),发送CANCEL消息给所有剩余的振铃终端(UA3)。

BYE不是CANCEL,CANCEL也不是BYE;但他们都是执行释放会话的工作。做为通信工程师,幸运的是用户不需要关心这么多,仅仅只是挂掉电话,剩下的事情由SIP来完成。

举报本楼

本帖有 2 个回帖,您需要登录后才能浏览 登录 | 注册
您需要登录后才可以回帖 登录 | 注册 |

手机版|C114 ( 沪ICP备12002291号-1 )|联系我们 |网站地图  

GMT+8, 2024-11-28 19:01 , Processed in 0.116320 second(s), 19 queries , Gzip On.

Copyright © 1999-2023 C114 All Rights Reserved

Discuz Licensed

回顶部