用yate建立VoIP服务器 实现免费语音通话(SIP协议.docx_第1页
用yate建立VoIP服务器 实现免费语音通话(SIP协议.docx_第2页
用yate建立VoIP服务器 实现免费语音通话(SIP协议.docx_第3页
用yate建立VoIP服务器 实现免费语音通话(SIP协议.docx_第4页
用yate建立VoIP服务器 实现免费语音通话(SIP协议.docx_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

用yate建立VoIP服务器 实现免费语音通话(SIP协议2009年1月7日,工业与信息化部发放了三张3G牌照,标志着中国进入了通信技术的新时代。3G的重要特性之一是 高速数据链路,移动上网速度大大提高。同时,中国移动也大幅下调了2G网络GPRS上网的资费。可是,语音通话费用仍然按兵不动。作为永远处于弱势的用 户,我们却可以通过VoIP网络电话自己实现免费语音通话。网络电话是下一代网络(NGN)的重要应用之一。“下一代网络”是指10年以后的网络,全部基于软交换(Softswitch)技术。但是,拨打VoIP免费网络电话,并不需要在等待10年。基于现有的TCP/IP网络,我们已经可以使用开源的VoIP软件,实现PC-to-PC的免费语音通话。(注:这里的“免费”,是指不需要支付传统语音通话费用,ADSL/FTTB/3G等上网接入仍然是需要费用的)下面,我将介绍如何用yate2软件搭建VoIP服务器,并用SIP协议完成语音通话。在我的实例中,使用了局域网内的3台PC,Windows操作系统,接在同一个集线器上,并不是广域网或3G接入。yate2建立VoIP服务器Yate = Yet Another Telephony Engine,是一款开源的VoIP网络电话软件。它可以作为服务器、也可以作为客户端使用。yate2可以在Linux下运行、也可以在Windows下运行。yate2下载地址:/softphone/yate.html。VoIP服务器可以干什么? 客户端使用各自的用户名和密码登录到服务器上 用户通过“电话号码”拨叫另一用户 服务器负责转发拨叫请求及此后的其他控制信令 服务器可以转发话音数据包建立服务器这一步不是必须的。yate2支持两个客户端通过IP地址直接连接,而不需要建立服务器。如果你需要支持较多的用户能够互相通话,通常要建立服务器;如果只有2个用户,则可以采用直连方式。建立VoIP服务器的前提条件 一台计算机,作为服务器 服务器通常需要拥有固定的公网IP地址 服务器上不能再运行客户端(也就是说,客户端、服务器不能同时启动,否则会冲突)用yate2搭建VoIP服务器的步骤1. 下载并安装yate2(最好完全安装所有组件,仅30MB)2. 打开yate2安装目录的conf.d子目录3. 将regfile.conf.sample复制一份,改名为regfile.conf,打开作下列修改:o 找到;auth=100、;register=100、;route=100三行,分别去掉前面的分号o 对需要建立的每一个用户,在文件末尾增加两行:用户名password=密码 例如建立用户sunny,密码为870212,则写成:sunnypassword=870212 这样,yate2服务器就有了身份认证功能4. 将regexroute.conf.sample复制一份,改名为regexroute.conf,打开作下列修改:o 找到default,在后面增加一行$username$=-;error=noauth这样未登录的用户就不能拨打电话o 对需要建立的每一个电话号码,在刚才插入处之后增加一行电话号码$=return;called=用户名例如当有人拨打号就呼叫用户sunny,则写成=return;called=sunny 这样,yate2服务器就有了电话路由功能5. 开始-管理工具-服务,重新启动Yet Another Telephony Engine服务如果服务成功启动、没有错误提示,你已经正确建立了最简单的yate2网络电话服务器。通过yate2服务器打电话再次提醒,不能在运行yate2服务器的计算机上打开yate2客户端软件,否则是无法正常运行的。1. 开始-Yate-Yate Client,启动yate2客户端2. Accounts页-New,打开新建帐户对话框,填写各项目:o Protocol=sipo Use provider,不要选择o Account,可以随意输入o Username=用户名,后面留空o Password=密码o Server=服务器的IP地址点击OK后,Status应该会显示“Registered”3. Calls页,Account=前面填写的account名称,然后输入另一个用户的电话号码,点击Call就可以打电话了4. 如果有电话打进来,选中它并点击Take the call就可以接听5. 点击Hangup挂断yate2直连打电话如果只有2个用户需要相互通话,就不必劳神建立VoIP服务器了(何况服务器还要占据一台计算机)。yate2支持直连通话,配置方法如下:1. 被叫用户只需开启Yate Client(当然要在防火墙中允许它),不需要配置2. 主叫用户,Accounts页-New,打开新建帐户对话框,填写各项目:o Protocol=sipo Use provider,不要选择o Account,可以随意输入o Username,留空o Password,留空o Server=被叫用户的IP地址点击OK后,Status并不会显示“Registered”,但是这没有关系3. 主叫用户,Calls页,Account=前面填写的account名称,然后随便输入一个号码,点击Call就可以打电话了4. 被叫用户,选中打进来的电话并点击Take the call就可以接听5. 点击Hangup挂断SIP协议yate2支持SIP、H.323、jabber、iax等多种VoIP协议,而先前我选择的是SIP协议。SIP协议定义了一组VoIP网络电话信令,传输层基于UDP协议、端口号为5060;SIP只提供控制信令,并不负责语音数据的编码和传输。通过yate2服务器通话,SIP协议分析我用Wireshark抓包分析了一次通话过程。这次通话的情况如下: 服务器:0 主叫方:83,用户名lxvoip-1,电话号码1 被叫方:01,用户名u2,电话号码2 通话过程:主叫方拨打号码2,被叫接听,稍后由主叫挂断说明主叫方83 服务器0服务器0 被叫方01其他头部信息发起呼叫= INVITE sip:20没有Authorization头,Call-ID:21264929300= 100 Trying缺少认证 ACK sip:20发起呼叫= INVITE sip:20From:;tag=1542144666 ,包含Authorization头,Max-Forwards:20,Call-ID:21264929300 INVITE sip:u20From:;tag=831312670 ,没有Authorization头,Max-Forwards:19,Call-ID:4956875750= 100 Trying振铃= 180 Ringing转发振铃= 180 Ringing接听 ACK sip:u20From:;tag=831312670转发接听 ACK sip:20From:;tag=1542144666上面的过程,建立了主叫方-服务器、服务器-被叫方的两个VoIP电话连接;主叫方不知道被叫方的用户名和IP地址,被叫方知道主叫方的用户名、但不知道IP地址现在出现大量的双向RTP数据包,封装了语音数据(甚至可以解码并窃听语音内容);使用随机高端口(在SIP协议的INVITE、200两种报文中,用SDP协议声明了RTP使用的UDP端口、语音编码方式等),经过服务器转发挂断= BYE sip:20:5060Reason:SIP;text=User hangup主叫方已经停止发送和接收RTP数据包,而被叫方的RTP包仍然不断经服务器转发到达,主叫方回应ICMP Port unreachable消息。= 100 Trying BYE sip:20:5060这次带上Authorization头= 100 Trying同意挂断 BYE sip:u201:5060服务器也停止接收RTP数据包,而被叫方的RTP包仍然不断到达,服务器回应ICMP Port unreachable消息。= 100 Trying同意挂断= 200 OK登录(Register)与退出(Unregister)假设有人拨打电话号码1。根据regexroute.conf,服务器知道号码1对应于用户lxvoip-1。那么,服务器怎么知道lxvoip-1的IP地址呢?这就需要通过接收登录与退出消息来记录用户状态。 登录:REGISTER sip:0Contact:Expires:600To: 退出:REGISTER sip:0Contact:Expires:0To: 两者的区别就是Expires,0表示退出,非0表示登录 如果缺少身份认证,服务器会返回401;通过身份认证后,服务器返回200yate2直连通话,SIP协议分析直接贴出Wireshark的自动分析结果吧Statistics-VoIP Calls-Graph就可以看到|Time | 01 | 83 |3.985 | INVITE SDP |SIP From: sip:anonymous83 To:sip:083| |(5060) - (5060) |4.004 | 100 Trying| |SIP Status| |(5060) - (5060) |4.035 | 180 Ringing |SIP Status| |(5060) - (5060) |11.818 | 200 OK SDP |SIP Status| |(5060) (5060) |11.857 | RT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论