您当前的位置是:  首页 > 新闻 > 国内 >
 首页 > 新闻 > 国内 >

Asterisk课堂-SIP呼叫流程

2016-12-19 11:17:05   作者:james.zhu   来源:asterisk   评论:0  点击:


  Asterisk中的SIP协议使用时非常广泛的,基本上目前的软交换大部分都使用了SIP协议。平时我们使用了SIP电话呼叫,用户感觉非常简单。事实上,可能很多Asterisk用户不了解其背后的流程处理。以前的章节我们介绍了IAX的呼叫流程,SIP呼叫流程事实上也和IAX2的呼叫流程差不多。
  视频中讲解了SIP的呼叫流程,大家可以通过观看视频了解更多:
  接下来,我们尝试使用稍微通俗一点的语言给大家介绍一下呼叫流程中几个主要的部分:
  呼叫流程图:这里我们假设用户已经搭建好了两台Asterisk服务器,双方的分机可以成功注册,服务器之间可以通过SIP trunk 互通,双方使用同一语音编码,双方服务器终端都在同一网段。我们测试的流程是从电话 1 通过Server A 呼叫到Server B上的电话 2。
\
  发起呼叫流程是通过几个协商过程来反复进行的,这里我们忽略了具体的编码协商,支持能力等等问题。电话 1 首先发起呼叫,电话 1 第一次发送 INVITE 信息,asterisk A 回复 401,告诉电话 1 发安全认证消息,我不会随便让你呼叫的。 然后 电话 1 发送ACK。好吧 ,我发送安全信息给你。然后电话 1 再发送 INVITE消息,携带安全信息认证。Asterisk A 收到电话 1 消息以后,Asterisk A 通知电话 1 已经收到 电话 1 消息,同时Server A 通过拨号规则判断电话的呼叫路由状态,发现此电话是呼叫到Server B,于是对Server B 发出 INVITE消息,告诉Server B,兄弟,这个电话是打到你那里的。Server B 收到了Server A的 INVITE消息以后,马上回复 Server A 一个 100 Trying, 大哥等等,我需要找我系统里面的的电话 2。同时,Server B 对电话 2 发出一个INVITE 消息,电话 2 收到了INVITE 以后,也马上回复Server B 一个100 Tyinging, 电话 2 表示我收到Server B 大哥的呼叫了,同时电话 2 振铃,电话终端播放一个振铃音,提醒用户电话2 振铃了,快接电话。然后 电话 2 发出一个 180 Ringing 回复到Server B,然后到 Server A,最后到了 电话 1。 电话 1 会听到一个回铃音。紧接着电话 2 发送 200 OK,电话 1 回复 ACK。电话 2 收到ACK 以后,说明双方都无其他问题。双方正式建立了RTP的互通,开始了语音传输。
\
  挂机过程。如果双方通话结束,双方任意一方可以挂机,发送 BYE 消息以后,对端发送 200 OK。到此,双方通话结束。
\
  在整个呼叫过程中,我们简单介绍了呼叫发起,呼叫协商,查询路由,发送不同消息的整个流程,最后到挂机结束。在呼叫流程中,提醒用户一定要注意观察呼叫过程中每个终端,服务器发送的信息内容。另外,这里忽略了语音编码的协商问题,网络NAT问题,拨号规则的呼叫路由问题。这些问题需要在实际环境中做进一步的分析。如果用户希望了解更多SIP呼叫流程的技术细节,建议用户结合用户通过实际呼叫环境来抓包分析。

专题