VoIP电话终端穿越NAT技术的研究

时间:2009-11-13

  摘要:VoIP技术在近几年发展非常迅速;在NAT后的电话终端怎样穿越NAT成为通信系统能否正常工作的关键。利用将网守和VoIP电话终端的H.323协议栈进行扩展是穿越NAT的技术关键,但同时也带来了网守负荷增加的问题。

  1 引言

  近年来 VoIP(Voice over IP)技术和市场发展迅猛,IP 电话的市场份额已经占长途电话业务的 60%以上。宽带VoIP 电话终端产品如雨后春笋般蓬勃发展,产品的功能也从过去的单纯的语音业务 过渡到音视频业务[1][2]。因国内网络环境的限制,宽带VoIP 电话终端的市场仍然没有达到某些 预期的那样红火。其中,制约宽带VoIP 电话终端发展的一个重要的技术原因就是宽带VoIP 电话终 端穿越NAT 的技术的限制。该技术已经成为许多终端生产厂家的快速发展的瓶颈之一。

  2 IP 语音和视频通信的工作机理

  VoIP 技术的迅速发展与Internet 的迅速发展是密不可分的;Internet 的信道被范围地共 享,基于Internet 通过分组进行多媒体通信的低廉成本[3][4]。VoIP 通信系统标准广泛应用于视频 会议和IP 电话中。目前,主要的通信协议有H.323、MGCP、SIP 和H.248,相应的宽带VoIP 电话 终端也就相应地分为H.323、MGCP、SIP 和H.248 电话终端。为叙述方便,在以下的论述中以国内 应用广泛的H.323 宽带电话终端为例。

  基于H.323 协议的通信系统一般有网守、通信终端、MCU 等构成[5]。其中网守为基于H.323 协 议的通信系统中的通信控制服务器,通信终端可以是多口网关和电话终端,MCU 为多点控制单元。 与其他协议一样,H.323 协议也是一协议组。该协议组的结构如图1 所示,图中RAS 协议是为网守 提供管理通信系统的资源与状态的协议;如终端向网守注册、信道带宽管理、状态查询等; H.225.0 协议也是进行通信终端的呼叫控制;H.245 协议被用来进行多媒体通信信道控制。RTP 协 议用来传输多媒体信息。所有H.323 协议的实现均通过UDP 和TCP 两种IP 包承载。

  VoIP 电话终端能够正常通信的前提条件是至少应该有2 个TCP 端口和3 个UDP 端口是可达 的;在公网上,每一VoIP 电话终端都有自己的公网IP 地址,上述要求是非常容易满足的。然而 NAT (Network Address Translator)后的VoIP 设备仅有私有IP 地址,这些地址在公众网上是不可 路由的,同时,除非人工进行静态映射,NAT 的端口与私有IP 设备的地址端口的映射是动态分配 的。复杂的H.323 协议动态分配端口并产生和维护多个UDP 数据流,这就决定了一般的NAT 后的 VoIP 电话终端的通信端口是不可达的。这样一来,多媒体通信中的NAT 问题就严重地制约了IP 电 话和视频会议的应用。解决这个问题也就成为VoIP 电话终端正常通信的关键。为了阐述解决这一 问题的原理,我们先简要回顾一下NAT 设备是如何工作的。

  3 NAT 的工作机理

  网络地址转换(NAT)软件虽然种类很多,但都遵循统一的Internet 标准,网络地址转换软 件一般配置于企业的服务器上,置于公网和企业的私有网络的边界,其功能是将外网可见的IP 地 址与内网所有的地址相映射。NAT 后的所有IP 终端可以使用Internet 标准所规定的私有IP 地址 (例如 10.0.x.x 和192.168.x.x 等),而这些地址是不用于公网的。从外网来的含公网地址信息的 数据包先到达NAT,NAT 使用预设好的规则(其组元包含源地址、源端口、目的地址、目的端口、 协议)来修改数据包,然后再转发给内网接收点。对于流出内网的数据包也须经过这样的转换处 理,其转换过程如下所述。

  假设NAT 的公网的IP 地址为:a1.b1.c1.d1;有一个 NAT 后的IP 终端的 IP 地址为: 192.168.0.8。此客户机向a2.b2.c2.d2 的Web 服务器发出请求,数据包的部分格式如下:

  {目标IP:a2.b2.c2.d2,源IP:192.168.0.8,目标端口:TCP 端口80,源端口:TCP 端口 1025} 经过NAT 的转换变成如下格式为:

  {目标IP:a2.b2.c2.d2,源IP:a1.b1.c1.d1,目标端口:TCP 端口80,源端口:TCP 端口 5000}。此时,在NAT 的映射表中将临时建立如下映射: {192.168.0.8,TCP1025}---{ a1.b1.c1.d1,TCP5000}。

  当远端Web 服务器收到请求后,返回的数据包格式如下:

  {目标IP:a1.b1.c1.d1,源IP:a2.b2.c2.d2,目标端口:TCP 端口5000,源端口:TCP 端口 80};

  经过NAT 转换后的格式如下:{目标IP:192. 168. 0.8,源IP:a2.b2.c2.d2,目标端口: TCP 端口1025,源端口:TCP 端口80}。

  对于VoIP 电话终端,要求终端之间使用IP 地址和数据端口来建立数据通信道。因此存在一对 矛盾:为了建立数据连接终端必须随时侦听外来的呼叫;而NAT 却通常被配置成动态映射,分配自 己的端口,任何不请自到的数据包到达NAT 后,往往因为不知道其真正的目的终端而被丢弃,致使 外来的呼叫无法到达电话终端。

  4 穿越NAT 技术

  解决NAT 穿越一直是一个棘手的问题。在近几年的VoIP 电话终端研发过程中,总结出一些切 实可行的解决该问题的方案[6]:如在NAT 后增加H.323 代理、使用VPN(Virtual Private Network)、利用内网和外网的两个服务器建立呼叫隧道、在非保护区配置多点控制单元等。虽然 每一个方案均有其局限性、但在某些特定的场合这些方案是非常实用的。这些方案的一个共同点是 要添加额外的辅助设备。

  一般情况下,企业网网管并不想改动他们的NAT 设备的配置,也不想让内外的交互通信绕过这 些设备,这就要求VoIP 电话终端的设计人员在系统设计时,采取其他的更为先进NAT 穿越技术。

  NAT 后的电话终端可以向位于相同局域网上的任何别的电话终端发起呼叫,因为在局域网内的 这些IP 地址是可以通过私网内的网关路由的;然而他们的IP 地址是私有的,在局域网外不可路 由,因此NAT 后的终端不能接收局域网外终端的呼叫。当NAT 内的终端向NAT 外的终端发起呼叫 时,发起呼叫的终端A 的IP 地址会包含在数据包负载中,根据H.323 协议被呼叫的终端B 收到呼 叫建立(call setup)数据包后,会从该数据包负载中获取终端A 的IP 地址,并开始发送音频和 视频数据到这个IP 地址的终端A。如果这个IP 地址是私有的,Internet 路由器将丢弃从外部终 端发送往内部终端的音频和视频数据包,因为这些数据包正被送往一个不可路由的IP 地址。这个 呼叫将显示已经连接上,但NAT 后的终端A 将永远不会收到外部终端B 的音频和视频数据包。也就 是说,私网内的VoIP 电话终端无法与外部的电话终端进行正常通信。

  NAT 有一个非常重要的特性,为VoIP 电话终端穿越NAT 正常通信提供了可乘之机。首先,由上 述的NAT 的工作机理我们可以看出,NAT 一般不会限制由NAT 后的设备发起的TCP 链接,也就是说,在NAT 后的VoIP 电话终端随时都可以与网守主动建立TCP 链接。其次,当UDP 包由NAT 后的 VoIP 电话终端向NAT 外传输时,NAT 服务器将为VoIP 电话终端动态的分配一个映射端口,在一定 的时间内,NAT 将暂存一条映射信息在映射表内。由外网返回的UDP 包到达该端口时,NAT 服务器 将根据映射表中的信息,自动将该UDP 包转发给VoIP 电话终端。但受H.323 协议的限制,VoIP 电 话终端的现有技术并不能自动完成穿越NAT 的任务。如图2 所示,NAT 后的终端在与公网上的电话 终端通信之前,首先要向公网上的网守注册。显然,由VoIP 发出的所有数据报均可到达公网网 守;依据H.323 协议栈中的RAS 协议可知,由私网VoIP 电话终端发出的UDP 数据包中只含有私网 IP 地址;这些私网IP 地址在公网上是不可以路由的,由网守返回的UDP 数据包不能返回私网内的 终端。

  解决该问题的关键是:让私网内的终端在发UDP 数据包时,携带自己所在私网的公网IP 地 址;私网内的终端必须通过某种途径了解自己所在私网的相关信息,通过修改网守的相关功能,使 其在标准的H.323 协议上进行扩展就可以达到这一目的。我们可以根据上述的NAT 的对TCP 链接的 管理特性,在私网VoIP 电话终端注册之初,由该电话终端发起与网守的TCP 链接,在TCP 链接建 立后,利用网守的地址翻译功能,将私网内的终端的实际公网地址告知终端。同时,对VoIP 电话 终端的H.323 协议栈也进行相应的扩展,在发送UDP 数据包时,将原来的私网IP 地址用公网IP 地 址来替代。网守接到由私网内的VoIP 电话终端发来的UDP 承载的数据包(如RTP 和RAS 包)后, 记录其IP 地址和端口号,再返回RTP 和RAS 包时,以纪录的IP 地址和端口号为目的地址进行发 送。NAT 接到网守返回的数据包,根据映像表中暂存的地址映像关系,将收到的数据转发.由此, 网守发出的信息正确到达VoIP 电话终端。基于上述工作机理的VoIP 通信系统,不仅可以完成由 VoIP 电话终端向网守的注册,而且还能够实现音视频信息的正常传输。为了保证私网内VoIP—电 话终端能够随时响应外部的呼叫,该VoIP 电话终端与网守一直维持着一个TCP 链接。对于图3 所 示的通信系统,采用上述的设计方案后,私网内外的VoIP 电话终端可以进行正常的通信;双方既 可以做被叫方,也可以做主叫方。

  对于图 3 所示的通信系统,两个私网内的VoIP 电话终端均可以与公网上的VoIP 电话终端直接 交换音、视频信息,但两个私网内的VoIP 电话终端要想直接通信,仍然是不现实的。造成两私网 内的VoIP 电话终端不能直接通信的原因是:

  ○1 NAT 后的终端不能建立起与另一个不同NAT 后的终端的TCP 链接,被叫方的NAT 根本无法知道 对方呼叫的对象是哪个终端,无法响应外部向内部中断发起的TCP 链接请求。

  ○2 流媒体的数据交换是基于UDP 承载的,两个希望建立通信连接的VoIP 电话终端没有途径知道对 方在其NAT 上所对应的UDP 映射端口,也就没有能力将音视频数据直接送达对方。

  在H.323 协议中,描述了网守的路由功能;因双方与公网上的网守的通信已经没有任何障碍, 在不同私网内VoIP 电话终端完全可以通过网守的转接实现无障通信。网守在图3 所示的通信系统 中,既要处理信令数据,又要完成流媒体的转发,其通信流量显著增加,对网守服务器及其运行环 境的要求也显著提高。同时,由上述的论述中可以看出,该穿越NAT 的方案是建立在每一个私网内 的VoIP 电话终端都一直与网守维持着一个TCP 链接的基础上的。随着VoIP 电话终端数量的增多, 网守需要维持的TCP 链接也会增加,导致网守的负荷过重,网守的用户容量大幅减少。近几年,服 务器硬件与运行环境质量的大幅提升虽然从一定程度上缓和了这一问题的严重性,但寻求减轻网守 负荷的技术手段仍然是一个值得研究的课题。除了尽量避免由网守转发媒体流数据外,还有一个 为有效的减轻网守负荷的技术手段,这就是尽量减少网守同时维持的TCP 链接的数量。在减轻网守 负荷技术的研究上虽然有一定得的进展,但仍然没有找到一个比较成熟的技术方案。

  5 结论

  通过对H.323 协议栈的扩展,实现私网内的VoIP 电话终端可以在不增加任何附加设备的情况 下穿越NAT,与其他VoIP 电话终端通信。该穿越技术大大减小了VoIP 通信系统的组网难度。 本文的创新点是:拓宽了VoIP 通信系统的应用范围,减小了施工难度,在一定程度上解决了 VoIP 电话终端穿越NAT 的关键技术难题。技术方案带来的一个负面效应就是增加了网守的负荷, 尽管对较小的容量通信系统来说,这一效应可能没有任何的影响,但在某些应用场合该技术还是受 到一定的限制。


  
上一篇:基于蓝牙技术的远程家居控制系统的研究
下一篇:如何扭转电压比较器不被重视的问题

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料