stun_nat_traversal

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

http://www.donews.net/zwell/articles/60760.aspx

简单来说,STUN解决的过程如下:

1、 将STUN Client放在NAT后的终端中。

2、 该终端在发送OLC之前调用STUN Client,去连接位于公网的任一台STUN Server.

3、 STUN Server与STUN Client进行STUN Messgae交互(STUN Server将对应的RTP/RTCP经NAT转换后的地址

告之STUN Client)。

4、 该终端在打开本地逻辑通道时,使用STUN Client已经发送过的地址作为RTP/RTCP地址。

并且在填写OLC时将STUN Client得到的NAT转换后的地址填写到OLC报文中。

比如:STUN Client使用192.168.1.4:40000与192.168.1.4:40001 与STUN Server通讯;

得到的经NAT转换后的地址为:221.12.27.14:2000与221.12.27.14:2039;

那么终端在打开本地的RTP/RTCP就指定为40000与40001,

同时OLC中地址替换为221.12.27.14:2000与221.12.27.14:2039。

5、 这样公网的终端将会把数据发到221.12.27.14:2000与221.12.27.14:2039上,

NAT会送到192.168.1.4:40000与192.168.1.4:40001上。

在《这篇文档》中,提及了4种NAT类型,上面使用STUN的结果会有不同:

● 如果STUN Server和被叫不是同一主机,那么只有Full Cone类型的NAT才能成功。

● 如果STUN Server和被叫是同一主机(也就是被叫终端安装STUN Server),但STUN Server使用的端口与本地OLC

的端口不同,那么Restricted Cone NAT类型的也能成功。

● 如果STUN Server和被叫是同一主机,而且STUN Server使用的端口与本地OLC的端口相同,那么都能成功。

OpenH323 在其class H323EndPoint/class H323_RTP_UDP/class RTP_UDP中已经加入了STUN Client支持,

你只需要调用H323EndPoint ::SetSTUNServer(…),就可以完成Client的功能。

其STUN Client的代码在PWLIB中:

http://cvs.sourceforge.net/viewcvs.py/openh323/pwlib/src/ptclib/pstun.cxx

虽然OpenH323没有提供STUN Server的支持,但是找到一个成熟的STUN Server/Client并添加到

OpenH323中并不是一件难事:http://sourceforge.net/projects/stun/ 是不错的选择。

http://sourceforge.net/projects/stun/的代码放入PWLIB中编译,并相应的修改OpenH323,以支持STUN Server。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航