NAT穿越之STUN

来源:互联网 发布:ubuntu matlab 编辑:程序博客网 时间:2024/06/10 08:11
NAT穿越之STUN 
1、简介 
STUN是一种NAT穿越协议,其全称是Simple Traversal of UDP Through NAT,即UDP对NAT的简单穿越方式。 

2、应用模型 
 
如上图所示,如果STUN ClientA想与STUN ClientB通信,那么其过程如下: 
(1)STUN ClientA通过NA向STUN Server发送UDP请求STUN 消息询问并注册自身的转换后地址; 
(2)STUN Server收到请求消息,产生响应消息,响应消息中携带请求消息的源端口,即STUN ClientA在NA上对应的外部端口,然后响应消息通过NA发送给STUN ClientA; 
(3)STUN ClientB通过NB向STUN Server发送UDP请求STUN 消息询问并注册自身的转换后地址; 
(4)STUN Server收到请求消息,产生响应消息,响应消息中携带请求消息的源端口,即STUN ClientB在NB上对应的外部端口,然后响应消息通过NB发送给STUN ClientB; 
(5)STUN ClientA将其在NA上对应的外部地址和端口信息包含在消息中,发送给STUN Server请求要和STUN ClientB通讯; 
(6)STUN Server收到请求信息后,查询STUN ClientB的注册地址,并通过NB将请求转发给STUN ClientB; 
(7)STUN ClientB通过消息体中的内容得知STUN ClientA在的外部地址和端口,并将其在NB上对应的外部地址和端口信息包含在响应消息中,然后将响应信息发送给STUN ClientA,STUN ClientA收到响应信息后也知道了STUN ClientB的外部地址和端口,这样就在STUN ClientA和STUN ClientB之间建立了连接,解决了穿越NAT的通信建立问题以及作为被叫时的问题。 

本端的接收地址和端口号为NAT外的地址和端口号。由于通过STUN协议已在NAT上预先建立媒体流的NAT映射表项,因此,媒体流可顺利穿越NAT。 

需要注意的是,NAT/PAT对于地址转换关系是有一定生命期的,某个地址转换后在一段时间内没有被使用将会被清除,当这个业务流再次出现时,将会建立一个新的地址转换关系,这就意味着STUN的询问过程以及终端的注册过程都需要再执行一遍才能保证通信的正确。解决这个问题一个比较通行的方案是采用某种方式保持NAT/PAT的转换关系,例如在NAT/PAT生命期内重复注册一次,比如NAT/PAT的生命期是3分钟,那么就将注册重复周期设置为2分钟。 

另外,STUN Server并非指一个专用的服务器,而是指一种功能、一个协议,我们可以在软交换服务或者任何一个需要此功能的服务器上内置此协议。 
0 0