說明: git
本文檔探討基於Asterisk如何實現VoIP的一些基本功能,包括基本呼叫功能的方案選取、主叫號碼透傳、如何編寫Asterisk AGI程序、Radius認證計費模塊等。 編程
本文檔VoIP軟終端使用X-Lite,其它終端都可以接入測試。 安全
文章內容僅供參考,轉載請註明出處。 服務器
1 VoIP系統相關協議和標準
因爲I P電話技術標準的開發涉及多個領域,所以,VOIP系統要想實現這些IP電話之間的通訊,則必須提供支持這些協議的實現。目前主要涉及的協議如圖1-1所 示,其中除了HTTP是與WWW相關的協議外,其它的都是VOIP相關協議。 網絡
圖1-1 全部基於IP協議的協議族 併發
由圖1 -1能夠看出,與VOIP相關的協議共分五層,每一層又由許多協議組成。目前有關IP電話制定的標準體如今應用層。而應用層又可分爲信令控制協議、網關控制協議、媒體編碼和傳輸協議和QOS協議等。 分佈式
信令控制協議,目前被普遍接受的IP電話控制信令體系主要有ITU-T的H.323系列和IETF的會話初始化協議(SIP)。 函數
網關控制協議,網關控制協議主要有媒體網關控制協議(MGCP)。該協議是爲了解決目前IP電話負擔太重,不能知足將來容量和業務擴展的要求而設計的。 佈局
媒體編碼,媒體編碼主要有兩類——視頻編碼和音頻編碼。視頻編碼主要有H.261和H.263。音頻編碼主要有G. 7xx系列。 性能
實時傳輸協,實時傳輸協議有包括了實時傳輸協議(RTP)、實時傳輸控制協議(RTCP)、實時流協議(RTSP)和資源預留協議(RSVP)。相關的協議標準能夠參考相應的網上資料,在這不細述。
2 Asterisk簡介
Asterisk是一個開源的軟件包,它能夠運行PBX的全部功能,一般運行在Linux操做系統平臺上。它不只包含了PBX的功能,同時還有其它一 些附加特性。Asterisk能夠用三種協議來實現VoIP,同時能夠與目前電話使用的標準硬件進行交互通訊。
Asterisk提供了附加的語音郵件服務、電話會議、交互語音應答、呼叫排隊等基本電話服務。它還提供了多方呼叫、顯示呼叫者ID(顯示主叫號碼)等服務
Asterisk在實現VoIP時,不須要任何附加硬件,DDD 軟交換所採用的也是這種使用方式。可是,若是企業沒有與VoIP語音網關運營商創建合做關係,想要本身構建這樣的一個平臺,那麼要和數字電話設備與模擬電 話設備進行交互通訊,Asterisk須要一個PCI硬件的支持,這個硬件生產商中最著名的是Digium平臺提供的。
Asterisk 的結構基本上是十分簡單,可是它不一樣於大多數的電話產品。基本上,Asterisk擔任的是一箇中間件的功能,它鏈接了底層的電話技術和上層的電話應用。 Asterisk爲佈局混合的電話環境提供了一致性。Asterisk是開源PBX (Private Branch eXchange)和IVR (Interactive Voice Response)系統。使用兼容的PCI硬件,Asterisk支持傳統的電話線路,包括:TDM(Time Division Multiplexing), TI/El PRI/PRA&RBS (Robbed Bit Signal)模式、模擬電話線/模擬電話(POTS),ISDN(Integrated Services Digital Network)和BRI(Basic Rate)與PRI(Primary Rate)。
Asterisk能夠透明的橋接VoIP之間的一些協議,包括:會話初始協議(SIP-Session Initiation Protocol), H.323(國際電信工業會的一種標準)、IAX(Inter-Asterisk eXchange)媒體網關控制協(MGCP-Media Gateway Control Protocol)等其它一些協議。Asterisk 具備很大的柔韌性,特殊的API接口都圍繞着PBX核心系統。這個核心處理着PBX內部之間的相互聯繫。每一部分都是清晰來自於協議、編碼或內部電話使用 的硬件接口的抽象。這些抽象的接口使Asterisk能夠與任何的硬件和技術以及未來的硬件和軟件技術完美的結合。從圖2-5能夠看出,Asterisk 由內部核心和外圍動態可加載模塊組成。內部核心由如下六個部分組成:PBX交換核心模塊(PBX Switching Core)、調度和I/O管理模塊(Scheduler and I/O Manager)、應用調用模塊(Application Launcher)、編解碼轉換模塊(Codec Translator)、動態模塊加載器模塊(Dynamic Module Loader)和CDR生成模塊(CDR Core)。
圖3-1 VOIP通訊系統功能模塊圖
Asterisk提供了不少的基本撥號語法及應用的撥號函數,它共有40多個配置文件,經過Asterisk特有的語法修改特有的配置文件,才能實現 通話的基本功能,同時能夠實現針對不一樣的用戶實現不一樣的通訊功能。它的配置文件的源文件採用的是C語言編寫。可是基於Asterisk的 Application API編程接口,如AGI,對外部的應用程序可使用PHP,Python,Perl,Java等語言編寫。Asterisk運行操做系統平臺的 Linux內核要求大於等於2. 4. x的版本。
3 VoIP通訊系統基本功能概述
若是是基於純軟件的實現方案,Asterisk是構建VoIP項目的核心,系統中全部與用戶呼叫有關的功能和管理都經過它來實現,包括VoIP各類協 議的互通和配置,以及各類呼叫設備的配置文件。本文檔所討論的VoIP通訊系統基本功能如圖3-2所示,通常的Asterisk的任務包括了兩方面,一是 與呼叫有關的,包括基本呼叫處理、主叫號碼透傳、呼叫紀錄和日誌生成等,二是與呼叫控制有關,即終端用戶的認證計費功能。
圖3-1 VOIP通訊系統功能模塊圖
4 基於Asterisk實現VOIP通訊系統基本功能
PBX是專用交換機,俗話叫集團電話。普遍地運用在企業辦公機構中,極大地提升了企業的辦事效率。但傳統的PBX存在缺點有:
它對新興的CTI(計算機與電話集成)和VoIP支持不夠。
傳統的PBX都採用的是專用技術,缺少開放性和標準性,而且價格昂貴。解決它的缺點的措施是IP PBX技術。
4.1 VoIP通訊系統方案選擇
方案1:模擬電話+語音網關+網守+PBX+模擬電話
語音網關型的應用是將VoIP語音網關的FXO/FXS接口同總部或分支機構的PBX(小交換機或集團電話)直接相連,當須要打長途電話時,將話音轉 到VoIP網關上,經過因特網傳輸。用戶在使用時只需在分機上先撥IP電話特服號(如可設爲"8"),即可直接撥打IP電話。
在這個方案中,若要像普通電話那樣的數字號碼撥號,就得通過網守的路由管理,但對於中小企業這種設備太昂貴。網守處於高層,提供對端點的呼叫管理功 能,是IP電話網絡系統中的重要管理實體。網守的主要功能有:地址解析、接入控制、帶寬管理、區域管理等四項基本功能;此外,還能提供呼叫控制信令、呼叫 管理等其餘功能。要構建一個穩定可靠的、實用的VoIP網,離不開GK的管理。
基於VoIP語音網關的複雜性與成本昂貴,本文檔不使用這種方案。
方案2:VoIP電話/IP電話+商業IP-PBX設備+PBX+模擬電話
IP-PBX是一種基於IP的電話交換系統,它具備傳統PBX交換機的全部功能,它的目標是取代企業內部原先的PBX。這個系統能夠徹底將話音通訊集 成到公司的數據網絡中,從而創建可以鏈接分佈在全球各地辦公地點和員工的統一話音數據網絡。IP-PBX最顯著的特徵是一個集成通訊系統,所以,經過互聯 網,僅須要單一設備便可爲用戶提供語音、傳真、數據和視頻等多種通訊方式,創建中、小型的呼叫中心。因爲VoIP技術是將語音以數據包的形式在IP網絡中 進行傳送,所以採用VoIP技術構建的通訊平臺,用戶具備可移動的特性,形象的說就是同一個用戶在A地用的是011的號碼,到了B地仍是011的號碼,號 碼隨着人走,VoIP還支持語音信箱、多方會議、視頻會議等傳統PBX沒有的功能。有助於移動辦公和異地協同辦公。
雖說商業的VoIP設備或者軟件,如華爲SoftCo 5816 IP語音交換機、貝爾阿爾卡特A5020,他們可以更容易、方便提供豐富的IP-PBX業務類型,也提供了數字中繼接口與PSTN網絡方便鏈接,而且只需 要手動配置參數就能夠投入到使用,不須要大量地編程,可是這種方案須要的成本跟方案1差很少,比較昂貴,而且靈活性不夠,因此不使用。
方案3:IP電話/模擬電話+Linux PC機+開源IP-PBX+媒體網關+PBX+模擬電話
基於PC服務器+ Asterisk呼叫管理軟件的IP-PBX系統,Asterisk做爲IP電話網絡的控制中心(PC型PBX),該控制中心以軟件方式工做,安裝在一臺 服務器內。數字中繼網關與原有傳統PBX的E1中繼接口相聯(在這裏媒體網關特指單獨的VoIP落地網關運營商的語音網關設備,本文檔讓Asterisk 與之對接實現IP與PSTN的完美轉換),VoIP媒體網關提供的多路數字設置爲中繼模式,一端鏈接PSTN專網,一端對接Asterisk軟交換IP 側。在控制中心的服務器上對IP電話號碼進行分配。經過適當調整控制中心軟件的參數以及添加、修改某些模塊代碼,便可完成本文檔最終完成的IP電話系統的 建設。若是使用專用、商業的IP-PBX系統,可能會花費不菲,因此本文檔使用方案3。
本節的目標就是基於開源IP-PBX Asterisk設計VoIP電話系統的基本呼叫功能模塊、認證計費功能模塊、AGI功能模塊等。
4.2 VOIP系統的基本組件
通常VOIP系統基本組件組成如圖4-1所示。
圖 4-1 VOIP系統的基本組成
IP- PBX主要功能組件如圖4-1所示,下面討論這些基本功能組件。
1. 呼叫控制器
IP電話系統的智能部分,它負責提供一切傳統PBX系統的中心-PBX交換機所能提供的服務。負責控制全部的呼叫創建和呼叫管理,能輕易提供大部分基 本服務(如呼叫保持、呼叫轉移、呼叫等待等),以及配置電話的分機號碼(Extension Number)、功能按鈕、通話管理和路由決策功能。此外,它還控制全部的PC虛擬電話功能,如語音郵件、統一消息、自動話務員、交互式語音響應 (IVR)和自動呼叫分配等。
2. 媒體網關
在IP-PBX系統中,媒體網關用來實現IP網絡和傳統電路交換網的通訊,負責把呼叫轉接到PSTN網,完成異種網絡的電話呼入和呼出。它除了具備接 通被叫的功能外,還能夠把來自PSTN的呼叫鏈接到IP電話系統。媒體網關在整個VoIP系統中起着很是關鍵的做用。它不只使VoIP系統可以鏈接 PSTN用戶,並且可以增長整個系統的可靠性,使系統具備處理緊急呼叫的能力。媒體網關還須要完成語音編碼轉換,通訊協議轉換以及LAN/WAN- PSTN之間的呼叫創建拆除等功能。
3. 局域網接入模塊
提供IP-PBX系統各組件之間的鏈接。在局域網的環境中,該模塊可使用局域網交換機來代替。
4. 控制中心
包括資源管理系統、計費系統、網管系統、語音信箱等。
5. 信令網關
提供和其它信令網絡的互通功能,能夠支持H.323,IAX,SIP,MGCP等的所有或者部分功能。
6. 應用服務器
爲IP-PBX系統提供增值應用。
7. I P話機終端
包括終端部分軟件PC Phone,I P-Phone等。
8. 模擬終端普通電話,傳真機等傳統模擬設備。
本文檔IP-PBX系統的基本組件
1.VoIP軟終端X-Lite,對應圖4-1的PC PHONE:PC用戶使用SIP軟終端(目前只使SIP協議做爲輸入信令)訪問IP-PBX服務器軟交換後臺,對普通座機或手機發起呼叫,實現PC2Phone的通信。
2.IP-PBX(VoIP 軟交換),對應圖4-1的呼叫控制器:基於開源軟交換平臺Asterisk,接受VoIP軟終端(或其它能發起SIP/H323請求的硬件終端)發起的呼 叫信令、解析被叫號碼、構建VoIP語音數據包發送到IP網絡中。
3.語音網關,對應圖4-1的媒體網關、信令網關,由於實際使用中大部分的媒體網關設備都集成了信令網關功能:提供模擬語音信號和VoIP信令的轉換,即 從IP網絡進入的VOIP數據包被轉換成模擬語音,經過與PBX相連的數字中繼線路進入到PBX(數字程控交換機)。
4.數字程控交換機(PBX):用於電話交換網的交換設備,它以計算機程序控制電話的接續,從語音網關的E1數字中繼線路送出來的7號信令或1號信令或PRI信令以及模擬語音數據包進入到數字程控交換機。
4.3 VOIP系統的軟硬件平臺
第1節已經簡單介紹過Asterisk,它是一個很是靈活的軟件,能夠輕鬆的安裝在任何Linux平臺上。Asterisk的資源需求與其它的嵌入 式、實時的應用系統很相似,都是經過優先級的方式來訪問CPU和總線,並規定系統上的任何函數都不能直接調用比Asterisk優先的進程。對於非專業的 系統而言,這也許不是很重要,若是目標是商用系統,這種優先級方式帶來的性能上的缺陷會引發通話質量的問題。好比,常常出現回聲、噪音等等。這種狀況在手 機超出服務區外的時候經常出現。因爲對於Linux的內核代碼和優化技巧不是很瞭解,選擇一個高的配置,而不是從新對內核進行編程,是一個比較好的主意。
硬件平臺
表4-1能夠對系統的硬件配置有一個大概的認識
表4-1 VOIP 系統的硬件配置
系統 | 併發通話數量 | 最小要求 |
非專業系統 | <5 | 400M CPU 256M內存 |
SOHO系統 | 5-10 | 1G CPU 512M內存 |
小型商用系統 | 10-15 | 3G CPU 1G 內存 |
中等商用系統 | >15 | 雙處理器,在分佈式構架裏採用多個服務器集羣 |
對於要安裝Asterisk的計算機,若是在預算有限的狀況下,下面是一些建議:系統的穩定性及質量取決於所選擇主板的結構設計,考慮使用服務器主板 是一個很好的主意。好比服務器主板提供的PCI插槽有3.5V和5.0V,服務器主板能夠給主板提供更穩定的電壓和電流。並且,語音卡經常會形成每秒 100個以上的中斷請求,因此對於主板來講,必定要仔細考察芯片組是否能供支持。
安裝PCI顯卡,而不是AGP顯卡,由於AGP通道會形成內存的高佔用率和CPU中斷佔用。若是採用工控機/服務器構架,根本沒有安裝顯卡,而是使用 Console來管理系統。對於CPU而言,因爲Asterisk使用CPU進行信號的模數轉換(也就是說CPU具備DSP的做用),因此浮點運算能力是 很是重要的,同時CPU的L2Cache也應該儘可能的大。
1. 專有板卡的準備
若是準備鏈接Asterisk系統到任何電信設備上去,必須須要一個專有硬件的支持。板卡的主要功能是鏈接PSTN和LAN/WAN。爲了橋接電路交 換的電信網絡和包交換的數據網絡,最流行和最經濟的鏈接PSTN的方法是使用接口卡,接口卡有好幾種,這裏僅僅討論常見的兩種狀況。
(a)模擬接口卡
PSTN介入狀況是普通的電話線或者模擬中繼電話線的時候,就須要這種卡。
最流行的Asterisk模擬接口卡也許是TDM400P(實際上這款卡和時分複用沒有任何關係,僅僅是這麼叫好聽而已),由Digium公司製造。 TDM400P是一個4口卡,能夠插4塊子卡,既能夠提供FXO口,也能夠提供FXS口。這個卡是貴的,固然最有名氣。
(b)數字接口卡
若是須要多於10條電路或者須要數字鏈接的時候,就要購買或者尋找T1或El卡了。可是要注意,El的接入的價格由信息產業部統一規定,在一些地區可 以找到很是便宜的PSTN接入價格(落地價格),有關這方面的內容在這不細述。
2. 硬件的需求
針對中小型公司,硬件的要求通常不是很高,普通的網絡設備就能夠知足要求。若是想採用很好的語音質量,能夠採用專門的語音網關來處理語音信息。由於, 採用通訊的硬件設備目前大可能是PSTN電話終端,所以要求附加一個硬件來將PSTN電話轉化爲「IP」電話。目前大多采用ATA設備來轉換PSTN的電話 終端。固然也可使用IP電話,如X-Lite等。
對於本文檔的VoIP開發環境說明以下:
基於非專業系統的配置需求來進行硬件的配置,如Ubuntu 7.04。
不方便配備專有板卡,尋找某些地區的PSTN接入運營商,簡稱VoIP落地運營商或者VoIP落地網關,他們可以提供接口卡(數字接口卡、語音網關、媒體網關)。
軟件平臺
1.操做系統
對於中小型公司而言,Linux多是首選的操做系統。同時,Asterisk源碼便於在Linux中編譯和運行,相對比較安全。在對於中小型軟件研發而言,Linux可能成爲開發中的首選的操做系統。
2.Asterisk軟件包
Asterisk的核心,主要由三個包組成:
Asterisk主程序(Asterisk)
Zapate電話驅動(zaptel)
PRI庫(libpri)
其他的還有一些其它的軟件,如語音附加包等,均可以從開源的網站上下載。
4.4 Asterisk構建VoIP整合應用方案(基本呼叫功能的實現)
Asterisk和VoIP的最初設計思想相同,其最終目的是減小長途通話的費用,實現通話的網絡化,使IP網絡成爲一個可運載語音數據和其它數據的平臺,實現語音網絡和視頻網絡等完美地結合。
爲了實現基本的呼叫功能,即摘機、掛機等功能,目前設計的拓撲結構爲:VoIP軟終端--->SIP代理服務器(SIP Proxy Server、SIP Redirect Server)-->轉發到用戶代理服務器(UAS,Asterisk)--->與VoIP語音網關通訊(Cisco AS5300,華爲8010等設備,通常有二、四、n個數字中繼接口)---->經過E1中繼線路對接數字程控交換機(華爲C&c0八、貝爾S1240數字程控交換機)。
VoIP系統第一部分——IP側的實現
VoIP系統有兩側:IP側與PSTN側,這部分主要是IP側,發起呼叫請求的VoIP軟終端是任何一個可以發起SIP請求的客戶端軟件或者硬件設備或者語音網關設備,網絡拓撲結構圖以下所示,圖中每一個結點在前幾個小節均有描述。
(點擊看大圖)
第二部分——VoIP網關、PSTN網絡層
這部分是本文檔所討論的開源軟交換平臺(Asterisk)通訊的VoIP語音網關,如圖4-3所示,通過它出局的數字中繼是一個E1接口(又稱一個 PCM),是一對引自數字程控交換機的同軸電纜線,在電纜線上數據傳輸速率是2.048 Mbps能夠同時容納32時隙
*64Kbps的語音數據。
結合圖4-2與圖4-3,基本呼叫處理包含主叫摘機、撥號、通話、掛機、被叫掛機全過程。一般應用呼叫的方式多是PC到PC、PC到電話 (PSTN/IP)、電話(PSTN/IP)到電話(PSTN/IP)等方式。對於基本的呼叫流程是任何PBX都具備的,設計流程大多都同樣。
在X-Lite客戶端輸入完被叫號碼後,點擊呼叫按鈕,用戶聽到VoIP會話應用程序播放的撥號音,而後開始撥號。
X-Lite收集用戶撥打的號碼,並按照標準的SIP代理服務器到VoIP用戶代理服務器Asterisk。
Asterisk動態的調用呼叫模塊,進入到Asterisk內部的呼叫Dialplan, 並按照呼叫Dialplan中配置的被叫號碼模板進行匹配。
當成功匹配某個已配置的被叫號碼模板後,號碼將被映射至某語音網關(此語音網關直接鏈接目的電話或用戶小交換機PBX)。
IP-PBX Asterisk的IP網絡利用H.323/SIP協議向語音網關發起呼叫,併爲每路呼叫創建通道,用以發送和接收語音數據。
被叫語音網關接收IP側的H.323/SIP呼叫,經過PSTN信令將呼叫傳遞到給PBX處理,直到接通目的電話。
在呼叫鏈接過程當中的H.323/SIP階段,IP側與PSTN側協商所使用的語音編解碼方式,並使用RTP協議傳遞語音數據。
呼叫中的任何一方掛機時,VoIP會話應用程序X-Lite將結束會話。
4.5 基本呼叫功能環境搭建示例(SIP與H.323互通)
圖4-4 簡單拓撲圖
軟終端Xlite註冊到軟交換Asterisk上
圖4-5 軟終端設定
4.5.1 IP-PBX服務器Asterisk抓包分析
圖4-6 SIP_REGISTER_1
圖4-7 SIP_REGISTER_2
X-Lite(UA) ------> asterisk PBX(讀取SIP INVITE消息)
圖4-8 IP_INVITE_1
Asterisk PBX 針對上面的分析狀況,響應X-Lite會話繼續下去:
Transmitting to X-Lite(202.108.12.6)
圖4-9 SIP_INVITE_2
(點擊看大圖)
圖4-10 SIP_TRYING
執行撥號方案
圖4-11 dialplan
Asterisk而後開始與華爲8010語音網關創建H323通訊
① Call set up.
H.225/Q.931 Call Setup
圖4-12 h323_SETUP_1
(點擊看大圖)
圖4-13 h323_SETUP_2
②ALERT/PROGRESS 表示被叫已經正在響鈴…
圖4-14 h323_3_ALERT
這時候,Asterisk PBX將被叫手機正在響鈴的信號以SIP消息 的形式發送到客戶端X-Lite,這是一種sip_indicate類型的SIP消
息。
圖4-15 SIP_Ringing
Asterisk響應會話繼續的SIP消息
圖4-16 SIP_183_SESSION_PROGRESS
Asterisk與華爲8010語音網關的H323鏈接已經成功創建
③Connect
表示軟交換Asterisk與華爲8010語音網關的H323鏈接已經成功創建
圖4-17 H323_ESTABLISHED
Asterisk與X-Lite之間發送OK與ACK響應消息,表示SIP軟終端已經跟H323語音網關創建了鏈接,而且被叫已經接聽,開始成功通話
圖4-18 SIP_200ok_ack 被叫先掛斷,Asterisk與華爲8010語音網關的H323鏈接在此釋放
④Release Complete
表示軟交換Asterisk與華爲8010語音網關的H323鏈接在此釋放
(點擊看大圖)
圖4-19 H323_RELEASE Asterisk向軟終端X-Lite發送BYE消息
圖4-20 SIP_BYE X-Lite收到BYE消息後以OK消息響應,整個會話就此終止
圖4-21 SIP_BYE_OK
4.5.2 結論
經過觀察上面這個流程圖能夠容易的看出,語音網關在收到INVITE消息後當即發送SETUP消息,反之亦然.
因此能夠獲得以下的H.323和SIP的消息對應關係:
H.323 消息 | SIP 消息 |
Setup | Invite |
Call Proceeding | 100 Trying |
Alerting | 180 Ringing |
Connect | 200 OK |
Release Complete | BYE |