本帖最后由 siyzhang 于 2015-7-20 09:56 编辑
关于SIP outbound proxy and STUN 的常见问与答分享{:3_52:}
1、什么是Outbound proxy(外出代理服务器)?应当设置Outbound proxy 吗?
Outbound proxy通常是在有防火墙NAT时用,用于处理信号及帮助多媒体数据流通过防火墙。如果用户有Outbound proxy,并且没有使用STUN或者其它的穿过防火墙NAT的机制,则应当使用Outbound proxy。但是已经使用了STUN或者其它的穿过防火墙NAT的工具,则不同时使用Outbound proxy。
Outbound Proxy:可以算是一个二传手,也就是传递SIP 的URI,通常以outbound命名: 要同过这个地址才可以联系到Registrar Server(通常称为SIP Proxy).至于realm的话,在一个庞大的网络罗,一般会用域名还带替IP地址,一是方便记忆,二是服务器可以做到多级热冗余,这样某个IP所对应的服务器故障了,待命的服务器就可以接替工作;因为outbound ,SIP服务器的信息要写入到终端里的,如果这时在某个IP地址的服务器出故障了,那么终端也就不能提供服务了(为了避免这个问题,有的终端厂家就加了个Second Server的变量,这是终端的折中的做法;当然,这样做,终端就可以有双倍的服务器地址或是域名).
在来说outbound Proxy 和SIP server(也叫SIP Proxy, SIP registar);处于网络安全IP地址缺乏的原故,有些NGN的解决方案里有个Outbound Server,一般SIP的核心平台(registrar server, redirect server,Policy server, Provisioning Sever, Heartbeat Sever, Database, billing server, Trunk Gateway)都是至于一个有安全保护的网络环境里.终端必须通过Outbound Server才能联系到里面.另外,终端处于NAT/Firewall后面时,Outbound会记忆终端的公网IP地址及对应的UDP端口号,还有其虚拟地址及端口;同时按一定的时间间隔(30秒以内,因为NAT/FW只会将一个没有数据通过的TCP或UDP端口保留最长30秒)发送一个心跳消息给终端,防止终端出来的UDP端口被NAT/firewall关闭.(当然很多终端也能定时的上发心跳消息给服务器端,及时告诉上边自己出去的公网IP地址及对应的UDP端口号,还有虚拟地址及端口).
2、用户ID(User ID)和认证ID(Authentication ID)有什么区别?
用户ID是电话的SIP地址中用户部分,而且通常是作为呼叫者ID的信息,显示在SIP软件或者电话机的LCD上。典型的情况下,用户ID是一个电话号码或者是扩展了的数字,或者是一个用户的名字。而认证ID则是严格地用于认证目的之ID,是电话机联系SIP服务器时验证用户身份用的ID。认证ID可以与用户ID相同,也可以不一样。
3、应当选用哪种语音编码方法?
通常的情况下,所有的编码方法,都能够提供良好的语音。但是低比特速率的编码,对音乐来说质量可能有些差。DTMF(双音多频传输法)音调或者传真信号在音频通道上传输(带宽不够时),有可能在远端不能解码。所以,如果带宽允许,选用G.711编码方法,G.722甚至能够给出更好的音质。
带宽允许的情况下,使用PCMU(G711u)编码。PCMU and PCMA都能够达到CD音质,但是它们消耗的带宽也最多(64kbps)。如果网络带宽比较低,可以选用低比特速率的编码方法,如G.723或G.729,这两种编码的方法也能达到传统长途电话的音质,但是需要很少的带宽(G723需要5.36.3kbps,G729需要8kbps)。
如果带宽足够并且需要更好的语音质量,就使用PCMU 和 PCMA,甚至可以使用宽带的编码方法G722(64kbps),这可以提供有高保真度的音质。
4、Voice_Frames_Per_TX是什么意思?它与以太网的流量有什么关系?
为了减少整个 以太网IPRTP 的开销(这些开销是由54字节的报文头引起的),多个语音帧可以包在单个以太网帧中发送。不过,这会引起语音延迟。在网络带宽比较紧的时候,增加这个数量,可以提高整个语音质量。
如果RTP数据包每2.5ms发送一个(G.728),则整个以太网IPRTP的开销是
// 1s发送个数: ((1s=1000ms) / 2.5ms)=400/s
// 1个大小:54*8b= 432b
// 0.432 * 400 = 172.8kbps
这在公共Internet上,将会不太好。但是,如果RTP数据包每10ms发送一个,则总的以太网IPRTP的开销是
// 0.432 * 100=43.2kbps
如果RTP数据包每20ms发送一个,则总的以太网IPRTP的开销是
// 0.432 * 50=21.6kbps
推荐对G.723iLBC编码,每30ms发送一个数据包,所有其它的编码则每20ms发送一个包。所以,对G.723iLBC编码,Voice_Frames_Per_TX的值设置为1,对G.728设为8,对所有其它的编码设为2。
5、Voice_Frames_Per_TX应当设置为什么值?
这取决于选用什么样的编码方法,及在带宽利用率与丢包影响之间的折衷。这个值越大,则带宽利用率越高,因为更多的语音帧放到一个UDPRTP数据包中,这样数据报文头的开销减少了。但是丢失了一个数据包,对语音质量的影响比较大。
对PCMUPCMA,默认值是2,最大值是10
对G.723,默认值是1,最大值是32
对G726-32,默认值是2,最大值是20
对G729,默认值是2,最大值是64
对G728,默认值是4,最大值是64
6、以太网加到RTP数据包上的开销是多少?
对于语音数据,在以太网的IP网上传输,一个RTP数据包包含54字节(或者432比特)的报文头。这54字节包含14字节的以太网头,20字节的IP头,8字节的UDP头,和12字节的RTP头。
7、各种编码方法的帧的速率及比特速率是多少?
G.711 是10ms的帧长度, 64kbps的比特速率
G.722 是10ms的帧长度, 64kbps的比特速率
G.726-32 (也叫 G.721)是10ms的帧长度,32kbps的比特速率
G.728 是2.5ms的帧长度, 16kbps的比特速率
G.729 是10ms的帧长度, 10kbps的比特速率
G.723 是30ms的帧长度, 5.3kbps或者6.4kbps的比特速率
iLBC 是20ms或者30ms的帧长度,15.2kbps 或者 13.3kbps 的比特速率
8、为什么G.723是低带宽的IP通信中最佳的选择?
对G.723,其帧速率是30ms发一个数据包,编码的速率是5.3kbps (20 bytes 每 30ms)或者6.4kbps (24 bytes 每 30ms)。其总的比特速率是
5.3 + 0.43233.3 = 19.7kbps,
或者 6.4 +0.43233.3 =20.8kbps。
如此低的比特速率,很适合于在28.8kbps拔号上网的时使用。再与其它的技术配合,如数据链路层压缩、静默抑制,及舒适的噪声产生,总的带宽可能更低。
9、什么是STUN服务,我是否需要使用STUN服务?
STUN代表UDP数据包简单地穿过NAT(Simple Traversal of UDP over NAT)。这是一个协议,当一个IP电话机在NAT后面时,IP电话机可以使用这个协议检测到NAT的存在,并判断NAT的类型。一个IP电话机如果支持STUN协议,它就可以发送一系列的STUN查询,到公共的因特网上的STUN服务器,这样就可以得到NAT上映射到话机的公网IP地址和端口。IP电话机就可以智能地修改SIPSDP消息中的私有IP地址。这样SIP信令和RTP多媒体数据就可以成功地穿过NAT,而不需要修改NAT的任何配置。
STUN代表了对大多数NAT的解决方法,但是不适合于对称的NAT。也就是说,绝大多数的SOHO路由器都是非对称的NAT,在这种情况下,使用STUN是成功的。但是STUN协议不能穿过对称的NAT。如果你的路由器是对称的NAT,则不要使用STUN。
10、如果我的电话机使用了STUN服务,能够正常地工作,我还需要设置外出代理服务器(Outbound proxy)吗?
不需要设置Outbound proxy。