您當(dāng)前的位置是:  首頁 > 新聞 > 國內(nèi) >
 首頁 > 新聞 > 國內(nèi) >

Asterisk課堂-SIP呼叫流程

2016-12-19 11:17:05   作者:james.zhu   來源:asterisk   評論:0  點(diǎn)擊:


  Asterisk中的SIP協(xié)議使用時(shí)非常廣泛的,基本上目前的軟交換大部分都使用了SIP協(xié)議。平時(shí)我們使用了SIP電話呼叫,用戶感覺非常簡單。事實(shí)上,可能很多Asterisk用戶不了解其背后的流程處理。以前的章節(jié)我們介紹了IAX的呼叫流程,SIP呼叫流程事實(shí)上也和IAX2的呼叫流程差不多。
  視頻中講解了SIP的呼叫流程,大家可以通過觀看視頻了解更多:
  接下來,我們嘗試使用稍微通俗一點(diǎn)的語言給大家介紹一下呼叫流程中幾個(gè)主要的部分:
  呼叫流程圖:這里我們假設(shè)用戶已經(jīng)搭建好了兩臺(tái)Asterisk服務(wù)器,雙方的分機(jī)可以成功注冊,服務(wù)器之間可以通過SIP trunk 互通,雙方使用同一語音編碼,雙方服務(wù)器終端都在同一網(wǎng)段。我們測試的流程是從電話 1 通過Server A 呼叫到Server B上的電話 2。
\
  發(fā)起呼叫流程是通過幾個(gè)協(xié)商過程來反復(fù)進(jìn)行的,這里我們忽略了具體的編碼協(xié)商,支持能力等等問題。電話 1 首先發(fā)起呼叫,電話 1 第一次發(fā)送 INVITE 信息,asterisk A 回復(fù) 401,告訴電話 1 發(fā)安全認(rèn)證消息,我不會(huì)隨便讓你呼叫的。 然后 電話 1 發(fā)送ACK。好吧 ,我發(fā)送安全信息給你。然后電話 1 再發(fā)送 INVITE消息,攜帶安全信息認(rèn)證。Asterisk A 收到電話 1 消息以后,Asterisk A 通知電話 1 已經(jīng)收到 電話 1 消息,同時(shí)Server A 通過撥號規(guī)則判斷電話的呼叫路由狀態(tài),發(fā)現(xiàn)此電話是呼叫到Server B,于是對Server B 發(fā)出 INVITE消息,告訴Server B,兄弟,這個(gè)電話是打到你那里的。Server B 收到了Server A的 INVITE消息以后,馬上回復(fù) Server A 一個(gè) 100 Trying, 大哥等等,我需要找我系統(tǒng)里面的的電話 2。同時(shí),Server B 對電話 2 發(fā)出一個(gè)INVITE 消息,電話 2 收到了INVITE 以后,也馬上回復(fù)Server B 一個(gè)100 Tyinging, 電話 2 表示我收到Server B 大哥的呼叫了,同時(shí)電話 2 振鈴,電話終端播放一個(gè)振鈴音,提醒用戶電話2 振鈴了,快接電話。然后 電話 2 發(fā)出一個(gè) 180 Ringing 回復(fù)到Server B,然后到 Server A,最后到了 電話 1。 電話 1 會(huì)聽到一個(gè)回鈴音。緊接著電話 2 發(fā)送 200 OK,電話 1 回復(fù) ACK。電話 2 收到ACK 以后,說明雙方都無其他問題。雙方正式建立了RTP的互通,開始了語音傳輸。
\
  掛機(jī)過程。如果雙方通話結(jié)束,雙方任意一方可以掛機(jī),發(fā)送 BYE 消息以后,對端發(fā)送 200 OK。到此,雙方通話結(jié)束。
\
  在整個(gè)呼叫過程中,我們簡單介紹了呼叫發(fā)起,呼叫協(xié)商,查詢路由,發(fā)送不同消息的整個(gè)流程,最后到掛機(jī)結(jié)束。在呼叫流程中,提醒用戶一定要注意觀察呼叫過程中每個(gè)終端,服務(wù)器發(fā)送的信息內(nèi)容。另外,這里忽略了語音編碼的協(xié)商問題,網(wǎng)絡(luò)NAT問題,撥號規(guī)則的呼叫路由問題。這些問題需要在實(shí)際環(huán)境中做進(jìn)一步的分析。如果用戶希望了解更多SIP呼叫流程的技術(shù)細(xì)節(jié),建議用戶結(jié)合用戶通過實(shí)際呼叫環(huán)境來抓包分析。

專題