stun,turn,ice是ietf提出的处理voip网络中nat穿越问题的协议族,stun 可以处理大部分nat问题,turn是stun协议的一个增强版,专用于处理对称形nat
问题,而ice则是综合stun及turn的产物,是一个框架,综合运用STUN和TURN的结构,它提供可靠的VoIP或视频通话配置以及媒体传输,通过一个SIP供给/应答模型供端点交换多个候选IP地址和端口(比如私有地址和TURN服务器地址)。
采用此框架可以完美解决voip 中 媒体传输中遇到的 nat及防火墙问题,而信令穿越则需要另一套机制,过去人们提出了多种处理nat问题的方案,但都有局限性,
采用ice则完全解决了这些问题,ice的另一个特点时能够通过一定机制检测nat类型,从而决定采用何种方案处理,比如对于大多数呼叫,媒体可能直接用p2p方式即可,
而有些方案可能不论什么nat类型都用media-relay方式,这种方式增加了端到端延时及丢包概率。
stun和turn都是client/server协议,说白了就是客户端向服务器要自己的公网地址及端口,然后放在自己invite请求的sdp消息体及对invite的 200 ok sdp 消息体中。
大多数sip客户端和服务器支持stun协议,所以都有一定缺陷。
最后,stun,turn,ice只是用来处理media的穿越问题,而信令穿越需要另一套机制,同时由于需要客户端及服务器端都实现这些协议,而由于历史问题,大部分客户端只实现了
stun协议,实现turn,ice的服务器和客户端目前还很少,所以目前大部分sbc的实现直接采用media-relay方式,当然,如果客户算支持这些协议,sbc则要有这些协议的服务器实现。