我们先通过一个简单的SIP流程示例来大致了解一下SIP呼叫流程如图5-9所示。
①主叫方A摘机拨号,终端在判断使用SIP进行呼叫后,使用SIP发起Invite请求消息。SIP的目的地址不一定是被叫的地址,在实际的网络中也可能是中间SIP代理设备的地址,即主叫的SIP代理。此时,主叫SIP Invite消息中的SDP消息会携带本端媒体会话的信息,如本端地址、端口号、编码方式和带宽等信息。此时主叫的媒体面资源已经具备。
②主叫的SIP代理与ENUM/DNS交互,将被叫E.164格式的号码转换为E.164 arpa记录,使用NAPTR指针解析到SIP URI规整格式域名,再继续使用SRV记录和A记录解析出被叫的SIP代理。
图5-9 SIP呼叫流程
③主叫SIP代理向被叫SIP代理发送Invite消息,该消息会被发送给被叫终端。
④被叫SIP代理在成功将Invite消息发给被叫后,会向主叫方向发送状态码是100的临时响应,表明正在尝试TRYING。此时主叫终端上显示正在拨号,而不是拨号失败。
⑤被叫振铃,被叫SIP代理会返回状态码是180 RINGING的响应。主叫在收到180后,会在听筒中播放“嘟…嘟…”(缓慢的)的等待对方接听的回铃音。
⑥被叫摘机后,被叫给主叫返回状态码是200的最终成功响应消息。
⑦主叫收到被叫的200消息后,再反馈ACK确认消息给被叫。
在这之后,主叫和被叫就建立了媒体的连接,可以互相传送数据,进行通话。最后,主叫和被叫都可以通过挂机拆除SIP会话。SIP会话的拆除是双方都确认的过程,以便双方都释放自己已经分配的资源。
下面以主叫彩铃放音流程为例,对SIP呼叫的基本呼叫信令流程进行简单的介绍,如图5-10所示。应用场景如下:
图5-10 彩铃放音组网图
A呼叫B,在B振铃过程中A听到MRS放的彩铃音,B摘机,A、B通话。
呼叫信令流程如图5-11所示。
图5-11 呼叫信令流程
根据上面的呼叫信令可以看出,这个呼叫包含3个会话,主叫软交换与AS的会话,被叫软交换与AS的会话,MRS与AS的会话。下面对呼叫信令进行具体的描述。由于涉及的信令比较多,在阅读以下说明之前建议先使用附件中的工具打开附件中的日志,对着工具中的信令流程进行阅读。
1)主叫拨打被叫时,主叫软交换就会触发Invite消息到AS,消息中携带主叫的媒体信息(SDP),这个就相当于窄带呼叫里的IDP消息。
2)AS给主叫软交换回复100(Trying)消息,该消息中不会携带有用信息,仅仅是告诉对端请求消息已经收到,防止对端重传请求消息。
3)AS收到主叫的Invite消息后,经过业务的处理后开始路由被叫,于是给被叫软交换下发Invite消息,这个相当于窄带里的Connect操作,这个Invite消息里也携带了主叫的媒体信息,其实就是AS将主叫的媒体信息透传给被叫。
4)被叫软交换收到Invite后给AS回复100,防止重传Invite。
5)被叫软交换给AS上报180(Ringing)消息,告诉AS被叫在振铃。平台将180定义为Alerting事件,业务中往往会设置监控这个事件,要求平台上报。
6)平台上报Alerting事件后,业务使用UI SIB开始放音,于是平台给MRS下发Invite消息,这个相当于窄带里的ETC操作,消息中携带主叫的媒体信息。
7)MRS给AS回100消息。
8)MRS给AS回复200(OK)消息,这是对Invite请求的最终响应,表示MRS接受这个请求,可以开始放音,消息中携带了MRS的媒体信息。(SIP中定义了1××消息为临时响应消息,2××以上为最终响应消息,比如200 OK,487终止请求,503服务器不可用等)。
9)AS收到MRS的200消息后,需要给MRS回复一个确认消息ACK,因为200消息是一个最终响应消息,对流程有关键的作用,必须保证可靠传输,因此协议规定当一方收到另一方的最终响应时,需要回复ACK。
10)此时MRS可以开始放音了,AS需要告诉主叫软交换,让主叫软交换和MRS建立放音链路,给主叫放音,所以AS就给主叫软交换回复了180消息,其中携带了MRS的媒体信息。为什么要带上MRS的媒体信息?在SIP呼叫里,任何两方通信都必须要先完成媒体协商。简单地说,就是交换媒体信息,让双方都知道对方支持什么格式的媒体,否则双方就无法通信。这里,AS在6的Invite消息里将主叫的媒体信息带给了MRS,而MRS在8的200消息里把MRS的媒体信息告诉了AS,AS在10的180消息里将MRS的媒体信息透传给了主叫,这样主叫和MRS就完成了媒体信息的交换,即完成了媒体协商。
11)主叫软交换收到180后给AS回复PRACK(临时响应的确认消息),一般情况下对于临时响应(1××)是不需要回复确认消息的,但是由于这里的180携带了MRS的媒体信息,对于主叫软交换和MRS间的媒体协商起到了关键的作用,因此必须保证可靠传输,此时的180中会携带“supported:100rel”或“required:100rel”头域,主叫软交换发现180中携带了这些头域时,就会给对端回复PRACK。
12)AS收到PRACK后给主叫软交换回复200消息,表示已经收到了PRACK,这样AS和主叫软交换间就完成了一次握手,确保了180(携带媒体信息)的可靠传输。此时,主叫开始听到MRS的彩铃音。
13)MRS给AS上报INFO消息,其中携带信息“cause=200;text="pa completed"”,作用是通知AS放音完成。
14)AS给MRS回复200消息,这是对INFO消息的响应。
15)被叫软交换给AS上报200消息,其中携带了被叫的媒体信息,这是对3 invite的最终响应,表示被叫摘机。(www.xing528.com)
16)AS给被叫软交换回复确认消息ACK,这是对200的确认。
17)被叫已经摘机,无须再放彩铃音了,所以AS给MRS下发了BYE信令,终止给MRS的会话。MRS在19处回复了200,这是对BYE请求的响应。
18)AS再次给被叫软交换下发Invite消息(这就是常说的re-invite),如图5-12所示。这里大家可能会觉得很奇怪,既然被叫已经摘机,那么主、被叫就应该可以通话了,为什么要给被叫发re-invite?这里又涉及媒体协商了,前面说过在SIP呼叫里,任何两方通话都必须要先完成媒体协商,就是双方交换媒体信息。
由图5-12可知,被叫已经获得了主叫的媒体信息(在3Invite消息里AS将主叫的媒体信息透传给被叫了),但是主叫还不知道被叫的媒体信息,就是说主、被叫的媒体协商还没完成,因此现在还不能通话,必须再进行媒体协商。这里AS给被叫下发re-invite其实就是开始媒体协商的过程。
图5-12 re-invite信令流程
细心的同学可能还有疑问:在15处的200消息里已经携带了被叫的媒体信息,此时AS只要直接给主叫回复200,通过这条200消息把被叫的媒体信息透传给主叫就可以了,为什么还要重新开始媒体协商呢?这里就要综合前面的信令流程来分析了(其实SIP协议的难点就在这里,很灵活,没有固定的流程,必须要根据具体信令交互过程来分析),仔细看看前面的信令流程,如图5-13所示。
图5-13 信令交互流程
由图5-13可以发现,此时主叫已经完成了一次媒体协商,但这是同MRS的媒体协商。
①6∶Invite:AS将主叫的媒体信息透传给MRS,MRS获得了主叫的媒体信息。
②8∶200:MRS通过200将自己的媒体信息带给了AS。
③10∶180:AS通过180将MRS的媒体信息透传给主叫,主叫获得了MRS的媒体信息。
也就是说,当前主叫侧记录的对端媒体信息是MRS的媒体信息,只有当主叫侧还没完成媒体协商时才可以通过200消息直接把被叫的媒体信息告诉主叫,但此时肯定是不能这样了。
1)MRS对17 BYE回复的200响应。
2)被叫收到AS的re-invite后,给AS回复临时响应100。
3)被叫给AS回复200响应,这是对re-invite的最终响应,其中携带了被叫的媒体信息。
4)AS给主叫下发UPDATE消息,其中携带了被叫的媒体信息,其实就是将21∶200中的媒体信息透传给主叫。前面已经说到了当前主叫侧记录的对端媒体信息是MRS的媒体信息,所以AS要通过UPDATE消息告诉主叫更新媒体信息为UPDATE消息中携带的媒体信息。此时主叫侧获取到了被叫的媒体信息。
5)主叫对UPDATE消息回复200响应,其中携带了主叫的媒体信息,其实就是主叫希望通过200响应消息将自己的媒体信息带给对端。
6)AS给主叫回复200响应,这是对初始Invite(1 invite)的最终响应,就是告诉主叫可以开始通话了。
7)AS给被叫回复ACK消息,这里携带了主叫的媒体信息,这是对21∶200响应的确认消息。通过这条消息将主叫的媒体信息透传给被叫,至此主、被叫的媒体协商完成。媒体协商关键信令如图5-14所示。
图5-14 媒体协商关键信令
①21∶200:被叫通过200响应携带了自己的媒体信息。
②22∶UPDATE:AS通过UPDATE将被叫的媒体信息透传给主叫(主叫获得了被叫的媒体信息)
③23∶200:主叫通过200响应携带了自己的媒体信息。
④25∶ACK:AS通过ACK将主叫的媒体信息透传给被叫(被叫获得了主叫的媒体信息)。
8)主叫对24∶200的确认消息,此时主、被叫开始通话。
9)被叫挂机,给AS上报BYE请求。
10)AS给被叫回200响应,这是对BYE的响应。
11)AS给主叫下BYE请求,告诉主叫结束呼叫。
12)主叫给AS回200响应,这是对BYE的响应,至此通话结束。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。