说明:
1.本文档探讨基于Asterisk如何实现VoIP的一些基本功能,包括基本呼叫功能的方案选取、主叫号码透传、如何编写Asterisk AGI程序、Radius认证计费模块等。
2.本文档VoIP软终端使用X-Lite,其它终端均可以接入测试。
3.文章内容仅供参考,转载请注明出处。
1 VoIP系统相关协议和标准
由于I P电话技术标准的开发涉及多个领域,因此,VOIP系统要想实现这些IP电话之间的通信,则必须提供支持这些协议的实现。目前主要涉及的协议如图1-1所示,其中除了HTTP是与WWW相关的协议外,其它的都是VOIP相关协议。
图 1-1 所有基于 IP 协议的协议族
图3-1 VOIP通信系统功能模块图
如果是基于纯软件的实现方案,Asterisk是构建VoIP项目的核心,系统中所有与用户呼叫有关的功能和管理都通过它来实现,包括VoIP各种协议的互通和配置,以及各种呼叫设备的配置文件。本文档所讨论的VoIP通信系统基本功能如图3-2所示,一般的Asterisk的任务包括了两方面,一是与呼叫有关的,包括基本呼叫处理、主叫号码透传、呼叫纪录和日志生成等,二是与呼叫控制有关,即终端用户的认证计费功能。
<group coordsize="7020,3191" coordorigin="2230,1562" editas="orgchart" style="width: 351pt; height: 159.55pt;" id="_x0000_s1059"><lock v:ext="edit" aspectratio="t"></lock><diagram autolayout="f" constrainbounds="0,0,0,0" dgmfontsize="5" dgmscaley="30423" dgmscalex="127779" dgmstyle="0" v:ext="edit"><relationtable v:ext="edit"><rel iddest="#_s1065" idsrc="#_s1065" v:ext="edit"></rel><rel idcntr="#_s1064" iddest="#_s1065" idsrc="#_s1066" v:ext="edit"></rel><rel idcntr="#_s1063" iddest="#_s1065" idsrc="#_s1067" v:ext="edit"></rel><rel idcntr="#_s1062" iddest="#_s1065" idsrc="#_s1068" v:ext="edit"></rel><rel idcntr="#_s1061" iddest="#_s1066" idsrc="#_s1069" v:ext="edit"></rel></relationtable></diagram><shapetype o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f" coordsize="21600,21600" id="_x0000_t75"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></path><lock v:ext="edit" aspectratio="t"></lock></shapetype><shape type="#_x0000_t75" o:preferrelative="f" style="left: 2230px; width: 7020px; position: absolute; top: 1562px; height: 3191px;" id="_x0000_s1060"><fill o:detectmouseclick="t"></fill><path o:extrusionok="t" o:connecttype="none"></path><lock text="t" v:ext="edit"></lock></shape><shapetype o:oned="t" o:spt="32" path="m,l21600,21600e" filled="f" coordsize="21600,21600" id="_x0000_t32"><path fillok="f" arrowok="t" o:connecttype="none"></path><lock shapetype="t" v:ext="edit"></lock></shapetype><shape strokeweight="2.25pt" adj="-126300,-1,-126300" o:connectortype="elbow" o:spid="_x0000_s1061" type="#_x0000_t32" style="left: 4390px; width: 720px; position: absolute; top: 2498px; height: 1px;" id="_s1061"></shape><shapetype o:oned="t" o:spt="33" path="m,l21600,r,21600e" filled="f" coordsize="21600,21600" id="_x0000_t33"><stroke joinstyle="miter"></stroke><path fillok="f" arrowok="t" o:connecttype="none"></path><lock shapetype="t" v:ext="edit"></lock></shapetype><shape strokeweight="2.25pt" adj="-155015,-49797,-155015" o:connectortype="elbow" o:spid="_x0000_s1062" type="#_x0000_t33" style="left: 4408px; width: 702px; position: absolute; top: 2017px; height: 2510px;" id="_s1062"></shape><shape strokeweight="2.25pt" adj="-155015,-60374,-155015" o:connectortype="elbow" o:spid="_x0000_s1063" type="#_x0000_t33" style="left: 4408px; width: 702px; position: absolute; top: 2017px; height: 1825px;" id="_s1063"></shape><shapetype adj="10800" o:oned="t" o:spt="34" path="m,l@0,0@0,21600,21600,21600e" filled="f" coordsize="21600,21600" id="_x0000_t34"><stroke joinstyle="miter"></stroke><formulas><f eqn="val #0"></f></formulas><path fillok="f" arrowok="t" o:connecttype="none"></path><handles><h position="#0,center"></h></handles><lock shapetype="t" v:ext="edit"></lock></shapetype><shape strokeweight="2.25pt" adj="5400,-67413600,-153300" o:connectortype="elbow" o:spid="_x0000_s1064" type="#_x0000_t34" style="left: 4390px; width: 720px; position: absolute; top: 3122px; height: 1px;" id="_s1064"></shape><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/lin_bei/%E5%9B%BE3-1%20VOIP%E9%80%9A%E4%BF%A1%E7%B3%BB%E7%BB%9F%E5%8A%9F%E8%83%BD%E6%A8%A1%E5%9D%97%E5%9B%BE.bmp" alt=""></group>
图3-1 VOIP通信系统功能模块图
PBX是专用交换机,俗话叫集团电话。广泛地运用在企业办公机构中,极大地提高了企业的办事效率。但传统的PBX存在缺点有:
1.它对新兴的CTI(计算机与电话集成)和VoIP支持不够。
2.传统的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 系统的硬件配置
评论