STUN, TURN, ICE简要介绍

STUN有两个版本,早期的版本由RFC3489定义。STUN代表Simple Traversal of UDP Through NATs,顾名思义,它只支持UDP穿透,它是一个完整的解决方案。

新的版本由RFC5389定义,STUN代表Session Traversal Utilities for NAT,新版本中STUN定义为NAT穿透辅助工具,它也不再是一个完整的解决方案。

 

old-STUN

STUN允许应用程序发现NAT分配给它们的公网地址和端口,确定它们与公网之间NAT的类型。这个类型要用于决定穿透是否可行,并影响穿透解决方案的选择。STUN服务器要求具有两个IP地址,用于确定NAT的类型。最初,STUN是做为一个单独的解决方案,但是实际经验发现,单独使用它有很大的局限性,把它作为一个单独的解决方案显的有点不实际。造成这个问题的原因是因为很多的NAT不支持hairpinning行为,还有很多的NAT具有地址和端口依赖映射性质。

STUN穿透的原理?

STUN只规定了检测NAT类型的方式,并未规定穿透的方式。当我们知道NAT的类型后,就可以根据情况决定穿透的方式。穿透的一般原理是:通过一个公网服务器了解到自己在NAT上的映射地址和端口,并把这个信息告诉对方,然后双方互相向对端的公网地址和端口发送合适的包,这个包可能促使NAT为它们之间的通信建立映射,然后它们就可以互相通信了。

STUN局限

STUN解决方案有很大的局限性,但不是说STUN设计上有缺陷,这种局限性主要是由于NAT的行为和控制缺乏标准,变化很大,具有很大的不确定性。

STUN-bis

在RFC5389中,STUN也不再是一个完整的解决方案,而是作为NAT穿透的辅助工具。用于发现终端的公网地址和端口。STUN工作在端口4378(TCP和UDP)。新草案的主要目的已经不再是检测NAT的类型,很多old STUN定义的属性在STUN-bis中都被舍弃了。

 

TURN

TURN是一个中继协议,由RFC5766定义,它与其它中继协议的最大区别在于,它能够允许一个客户端通过一个中继地址与多个对端连接。TURN是STUN-bis的扩展,它用于发现转发路径,当两个终端直接连接失败后,就通过转播通信。由于转播的带宽支出和引入的额外延迟,转播通常是作为最后可选的路径。

 

ICE

ICE提供了一个框架,把不同的技术(STUN, TURN,UPnP等)结合在一起,然而这种灵活性是有代价的,增加了客户端的复杂性。

 

http://www.voip-info.org/wiki/view/ICE

http://www.voip-info.org/wiki/view/TURN

http://www.voip-info.org/wiki/view/STUN-bis

以上地址,对这些协议做了简要介绍,并提供了一些开源实现的链接。

 

你可能感兴趣的:(STUN, TURN, ICE简要介绍)