- 作者:james.zhu(james.zhu@hiastar.com) www.hiastar.com 微信公眾號:asterisk-cn
- Asterisk課堂-如何通過源代碼安裝方式安裝Asteisk/dahdi
- Asterisk課堂-系統(tǒng)部署環(huán)境要求
- Asterisk課堂-Asterisk技術(shù)架構(gòu)
- Asterisk課堂-撥號規(guī)則基礎(chǔ)
- Asterisk課堂-創(chuàng)建第一個撥號規(guī)則
- Asterisk課堂-撥號規(guī)則中的Contexts
- Asterisk課堂-撥號規(guī)則中變量的使用
- Asterisk課堂-撥號規(guī)則中的Extensions用法
- Asterisk課堂-撥號規(guī)則中匹配模式
- Asterisk課堂-IAX2 介紹
- Asterisk課堂-IAX2 呼叫流程
- Asterisk課堂-SIP介紹
- Asterisk課堂-SIP呼叫流程
視頻中講解了SIP的呼叫流程,大家可以通過觀看視頻了解更多:
接下來,我們嘗試使用稍微通俗一點的語言給大家介紹一下呼叫流程中幾個主要的部分:
呼叫流程圖:這里我們假設(shè)用戶已經(jīng)搭建好了兩臺Asterisk服務(wù)器,雙方的分機可以成功注冊,服務(wù)器之間可以通過SIP trunk 互通,雙方使用同一語音編碼,雙方服務(wù)器終端都在同一網(wǎng)段。我們測試的流程是從電話 1 通過Server A 呼叫到Server B上的電話 2。

發(fā)起呼叫流程是通過幾個協(xié)商過程來反復(fù)進行的,這里我們忽略了具體的編碼協(xié)商,支持能力等等問題。電話 1 首先發(fā)起呼叫,電話 1 第一次發(fā)送 INVITE 信息,asterisk A 回復(fù) 401,告訴電話 1 發(fā)安全認證消息,我不會隨便讓你呼叫的。 然后 電話 1 發(fā)送ACK。好吧 ,我發(fā)送安全信息給你。然后電話 1 再發(fā)送 INVITE消息,攜帶安全信息認證。Asterisk A 收到電話 1 消息以后,Asterisk A 通知電話 1 已經(jīng)收到 電話 1 消息,同時Server A 通過撥號規(guī)則判斷電話的呼叫路由狀態(tài),發(fā)現(xiàn)此電話是呼叫到Server B,于是對Server B 發(fā)出 INVITE消息,告訴Server B,兄弟,這個電話是打到你那里的。Server B 收到了Server A的 INVITE消息以后,馬上回復(fù) Server A 一個 100 Trying, 大哥等等,我需要找我系統(tǒng)里面的的電話 2。同時,Server B 對電話 2 發(fā)出一個INVITE 消息,電話 2 收到了INVITE 以后,也馬上回復(fù)Server B 一個100 Tyinging, 電話 2 表示我收到Server B 大哥的呼叫了,同時電話 2 振鈴,電話終端播放一個振鈴音,提醒用戶電話2 振鈴了,快接電話。然后 電話 2 發(fā)出一個 180 Ringing 回復(fù)到Server B,然后到 Server A,最后到了 電話 1。 電話 1 會聽到一個回鈴音。緊接著電話 2 發(fā)送 200 OK,電話 1 回復(fù) ACK。電話 2 收到ACK 以后,說明雙方都無其他問題。雙方正式建立了RTP的互通,開始了語音傳輸。

掛機過程。如果雙方通話結(jié)束,雙方任意一方可以掛機,發(fā)送 BYE 消息以后,對端發(fā)送 200 OK。到此,雙方通話結(jié)束。

在整個呼叫過程中,我們簡單介紹了呼叫發(fā)起,呼叫協(xié)商,查詢路由,發(fā)送不同消息的整個流程,最后到掛機結(jié)束。在呼叫流程中,提醒用戶一定要注意觀察呼叫過程中每個終端,服務(wù)器發(fā)送的信息內(nèi)容。另外,這里忽略了語音編碼的協(xié)商問題,網(wǎng)絡(luò)NAT問題,撥號規(guī)則的呼叫路由問題。這些問題需要在實際環(huán)境中做進一步的分析。如果用戶希望了解更多SIP呼叫流程的技術(shù)細節(jié),建議用戶結(jié)合用戶通過實際呼叫環(huán)境來抓包分析。