摘要:在介绍实现IP电话基本原理的基础上,详细阐述IP电话的TCP/IP协议的实现过程,并简要描述1次通话的全过程。
关键词:IP电话 TCP/IP协议 ICMP UDP ARP
引 言
随着网络技术的不断发展,计算机通信系统已渐渐地与网络连为一体了,个人计算机的功能得到了极大的增强;与此同时,人们的需求在不断增加,网络的应用范围也在不断扩宽,网络电话离人们的生活也越来越近了。尤其是当人们正试图将网络改造成能进行实时通信的全球信息高速公路的雏形时,它作为一种新的话音业务,已经成为研究和开发的热点。
1 IP电话的实现原理
普通电话通过信令来控制用户的呼叫建立、连接、通话、释放连接等过程。与此类似,IP电话也必须通过电话信令来控制这些过程,即IP电话要传送2类数据:信令数据和语音数据。与传统的PSTN电话所不同的是,IP电话是通过网络进行传输的。它通过分组交换的方式来实现,因此TCP/IP协议是其所应遵守的基本协议。但是TCP/IP协议是一个庞大而复杂的体系结构,几乎涵盖了网络上所有的应用,对于IP电话这一特定的应用,实现整个TCP/IP协议是完全没有必要的。所以在实现的过程中,可以针对电话这一特定的要求简化TCP/IP协议。图1是一个简化了的TCP/IP协议的分层结构示意图。
图1在遵循OSI的7层结构的基础上,对TCP/IP协议机制进行了适当的简化。在网络接口层,基于带宽及接口复杂程度的考虑,我们选择Ethernet网卡作为接入网络的接口,并采用ARP的方式对电话进行寻址。网络层仍然用IP数据报的方式封装从上层传来的数据包,它包括传输层的UDP及ICMP两种数据包,这两种数据包分别传送信令数据和语音数据。与TCP的传输方式相比,UDP的传输方式在网络压力不太大的情况下传输效率会更高。
图2是IP电话的实现框图:以单片机为核心,包括存储、输入输出、与网络的接口及语音的编解码部分。
2 TCP/IP协议的设计
根据IP电话实现的基本原理,可以将TCP/IP协议固件分为以下4个模块来实现。
(1)ARP模块
ARP模块主要实现对电话的寻址功能。在网络中,IP电话同计算机一样,每个IP电话对应1个IP地址,用户每次建立连接之前首先要获得电话的IP地址及物理地址。在局域网中,为了减轻单片机的负担,可以在服务器中给用户建立电话号码与IP地址及物理地址的对应。用户建立连接之前,主叫用户首先给服务器发送1个ARP请求,与服务器取得联系,进而再发送ICMP请求。服务器将用户所需的对方的IP地址及物理地址放到ICMP包中,形成应答发送给主叫用户。
ARP包的首部采用结构的方式来封装,一个ARP的头结构ARPKT如下:
typedef struct{
WORD hrd, /* 硬件类型 */
pro; /* 协议类型 */
BYTE hln, /*物理地址长度*/
pln; /* IP地址长度*/
WORD op; /* ARP操作字段*/
BYTE smac[MACLEN]; /*源物理地址*/
LWORD sip; /* 源IP地址*/
BYTE dmac[MACLEN]; /* 目的物理地址*/
LWORD dip; /* 目的IP地址 */
} ARPKT;
(2)IP模块
IP模块主要实现对电话信令和语音数据的传输。在一个物理网络中,数据报可以直接从一个IP电话传送到另一个IP电话,因此不必考虑间接投递的问题。当IP电话要传送电话信令或语音数据时,IP层对ICMP或UDP包进行封装,进而传递给物理层形成帧发送出去。当IP数据报到达IP电话时,网络接口软件把它传给IP软件处理。如果其中的目的地址与自己的IP地址匹配,则接收该数据报并上传给合适的高层协议;如果不匹配,则丢弃该数据报。
IP数据报的头部采用结构的形式进行封装,一个IP数据报的头部结构如下:
typedef struct{
BYTE vhl, /*版本及首部长度*/
service; /*IP服务类型*/
WORD len, /*IP数据报总长度*/
ident, /* 标识 */
frags; /*标志 */
BYTE ttl, /*生存时间*/
pcol; /*数据区所用的协议*/
WORD check; /*首部校验和*/
LWORD sip, /* IP源地址*/
dip; /*IP 目的地址*/
} IPHDR;
(3)ICMP模块
ICMP模块主要实现对电话信令的封装。ICMP包可分为2种:ICMP请求和ICMP应答。ICMP请求包括2种情况:向服务器发送请求获取对方用户的IP地址及物理地址和向对端用户发送请求进行通话连接。相应的ICMP应答也有2种:服务器发送的应答和普通用户的应答。
主叫用户与服务器取得联系后,向服务器发送1个ICMP请求并等待应答,从服务器的应答中获取对方的IP地址和物理地址,然后再向对端发送1个ICMP请求包,从叫用户收到主叫用户的请求,做出应答。ICMP包的格式如图3所示。
用数据区的第1个字节来标识2种情况:若第1个字节全为零,则在后面的数据区域中可填入IP地址及物理地址。若不全为零,则第1个字节为电话信令。电话信令可以自己定义,按照程控交换机的技术规范,只需要以下一些基本信令即可:
Req-ID 请求对应IP地址 Ethernet ID号;
Req-conn 请求连接;
Conn-In 连接指示;
Req-lease 请求释放;
Lease-In 释放指示;
Acknowledge 应答;
ID_In ID 指示。
(4)UDP 模块
UDP模块主要实现对语音数据的封装。在用户已经确定建立连接之后,将编码后的语音数据放在UDP的数据区域中进行传送。一个UDP的数据包格式如图4所示。
它包括16bit的源地址、16bit的目的地址、16bit的报文长度及16bit的校验和。为了保证语音数据的质量及传输效率,数据区域的长度应适当选择,不宜过大或过小。
3 IP电话的呼叫过程
整个IP电话的呼叫流程可分为3部分:连接阶段、通话阶段、拆线阶段。
(1)建立连接阶段
在空闲状态下,CPU一直循环检测是否有摘机或其它用户呼入的信号。用户摘机时, CPU检测到摘机信号,就发送拨号音给用户并准备接收用户所拨的电话号码。待号码收齐后,CPU给服务器发送ARP请求,收到服务器的应答后再发送ICMP请求,从服务器的ICMP应答中获取对端的IP地址及物理地址,然后开始发起呼叫。通过ICMP包送到Ethernet,等待被叫用户回应,如果等待一段时间,用户未回应,说明用户不在或线路故障,给用户送忙音;如果被叫用户回应,就给话筒送回铃音,同时被叫用户一方振铃;若被叫久不摘机,被叫停止振铃,并发ICMP消息给主叫用户拆线,主叫用户收到此消息,送忙音,等待主叫用户挂机;如果被叫用户在规定时间内摘机,则停止送振铃音,并用ICMP应答信号,通知主叫用户,被叫已应答,主叫用户收到此消息,停止送铃音,通话开始。
(2)通话阶段
进入通话阶段,主叫用户就开始发送话音数据的IP包。具体过程如下:首先,将编码后的语音数据进行接收,并按照UDP进行封装,再封装成IP包送往Ethernet;同时,将Ethernet Card接收到的语音IP包进行拆包,并按一定节拍将解封语音数据进行解码,从而将被叫用户的话音送到听筒,将话筒的话音送到被叫方。被叫用户在通话阶段与主叫用户通话阶段所处理的过程完全相同。
(3)拆线阶段
当双方通话阶段结束时,如果主叫先挂机,CPU检测了挂机信号,就经被叫方送拆线信号ICMP。被叫方收到此拆线信号,就给被叫方送忙音,提醒被叫方挂机。如果被叫方挂机,就经主叫方送1个释放应答信号,并停止送忙音,这次通话就宣告结束。相反地,如果被叫方先挂机,其处理过程与上面是相同的。1次通话过程结束后,双方进入空闲状态,CPU再进行循环检测是否有摘机以及其它用户呼入的信号,然后重复上面的处理过程。
结束语
本设计方案将传统电话的实现方式与网络结合起来,在遵守TCP/IP基本协议的基础上,通过对其进行简化,在局域网内简单地实现IP电话,成本较低。同时,还存在一些缺陷,如时延、数据的丢失及互连互通等问题,这些都影响了话音的传输质量和电话的推广。不过可以通过增设网关来实现IP电话的互连互通性,拓宽网络的带宽可以减少网络的时延等,并且随着网络技术及其它电子技术的发展,这些问题必将迎刃而解!
上一篇:基于DDS和FPGA技术的高动态扩频信号源的研究
下一篇:蜂窝电话手机噪声的处理
- 热门资源推荐
- 热门放大器推荐
- 带硬件同步功能的以太网 PHY 扩大了汽车雷达的覆盖范围
- 芯原推出新一代高性能Vitality架构GPU IP系列 支持DirectX 12和先进的计算能力
- 应对 AI 时代的云工作负载,开发者正加速向 Arm 架构迁移
- NVIDIA 推出高性价比的生成式 AI 超级计算机
- Gartner发布2025年影响基础设施和运营的重要趋势
- 智谱清言英特尔酷睿Ultra专享版发布,离线模型玩转AIPC
- Quobly与意法半导体建立战略合作, 加快量子处理器制造进程,实现大型量子计算解决方
- RTI Connext Drive参展CES 2025,以领先通信框架加速SDV开发
- 黑莓 1.6 亿美元甩卖网络安全业务 Cylance,远低于其 14 亿美元的收购价