STUN服务器和TURN服务器是在实现P2P(peer-to-peer)通信过程中起到重要作用的服务器。在P2P通信中,软件能够在计算机上直接交流,不需要中间服务器协调。然而,当两个Peer不在同一个网络时,就需要STUN和TURN服务器来协调。本文将详细介绍STUN服务器和TURN服务器的原理,以及它们在P2P通信中的具体作用。
一、 STUN服务器的原理
STUN服务器是基于UDP协议的,主要作用是获取设备的公网IP和端口号。在NAT(Network Address Translation)环境下,设备的内网IP和端口号很容易获得,但获得公网IP和端口号就比较困难。STUN协议是专门为了解决这个问题而设计的。
STUN协议通过在内网设备发送STUN消息到公网STUN服务器上,然后在STUN消息的返回信息中,获得设备的公网IP和端口号。STUN消息包括请求和响应两种。请求消息中包含了设备的网络地址和端口等信息;响应消息中包含了当前网络环境的信息,如公网IP、类型、NAT类型等。在获取到公网IP和端口号后,设备就可以将其发送给对方设备,实现P2P通信。
具体来说,当设备连接到NAT环境下,其产生的IP数据包需要首先经过NAT设备进行转换,然后才能发送到Internet上。NAT设备为了避免IP地址的冲突,会在这个过程中改变这个数据包中的源IP地址和源端口号。这个过程被称为IP地址转换。STUN协议就是利用这个过程,在不同网络间进行IP/端口的映射。
STUN服务器的应用情景主要 是在UDP Hole Punching的情况下,通过对Nat对外端口的反射得到外网IP和对外端口。例如有两个设备A、B想要进行P2P通信,但是它们在不同的私有网路下,A上的公网IP和端口是x,B上的公网IP和端口是y。若A直接向B发送数据,则数据包会无法穿越NAT,从而无法到达B处。但如果A和B都向一个公网IP和端口发送数据包,由于该公网IP和端口上的NAT映射到A和B的私有网络地址是不同的,因此这两个NAT之间就建立了一条“虚拟直通”隧道。A、B就可以通过这条“虚拟直通”隧道直接通信。STUN 就是借助这条“虚拟直通”隧道来提供P2P连接的。
二、TURN服务器的原理
TURN服务器(Traversal Using Relay NAT)可以作为STUN的补充协议,主要作用是在不能进行UDP Hole Punching的环境下搭建一条“隧道”,让数据包穿过NAT设备,从而实现P2P通信。TURN服务器能够保证在双方都无法进行UDP Hole Punching的情况下,能够通讯。
在一些极限情况下会出现STUN服务器失效的现象,例如:双方设备在一个双NAT网络环境下,NAT都不支持STUN。这时TURN就可以发挥作用了,TURN服务器的作用是充当一个“转发器”,将不能直接相互通信的设备的数据包中继转发给对方,让它们完成数据交流。所有的两端数据都经过TURN服务器的转发,TURN会将数据包转发给设备对应的端口,设备接收数据包并返回响应数据。
具体来说,TURN协议的过程如下:
1. 设备A向TURN服务器发送相应请求,包括本地私网IP和端口等信息。
2. TURN服务器响应请求,生成临时公网IP和端口。
3. A向TURN服务器发送连接请求,包含临时公网IP和端口等信息。
4. 服务器代表A向设备B发送连接请求,B会响应请求,并把响应消息发送给服务器。
5. TURN将响应消息转发给A,A向TURN发送数据,TURN将数据转发给B,从而实现P2P通信。
TURN的优势在于,没有NAT阻塞,无需NAT设备的支持。但TURN的弊端是,数据包都经过TURN服务器的转发,会增加延迟和带宽使用率。
特别需要注意的是,TURN是一种基于UDP的转发技术,这就意味着在用户使用的网络环境中,需要允许UDP消息的传输。
三、STUN和TURN的应用:
STUN和TURN主要用于实现实时多人游戏或视频会议等P2P无服务器通信的场景中。在这样的场景下,P2P通信不仅可以大幅降低服务器压力,同时也能降低延迟和提高通信质量。运用STUN和TURN时,需要注意以下几个要素:
1. IP和端口穿透
在NAT环境下,STUN和TURN都需要进行IP和端口穿透。其中,STUN只需要完成UDP Hole Punching,而TURN则需要依赖中转服务器进行穿透。
2. NAT类型
在使用STUN和TURN的过程中,NAT的类型需要被考虑到。对于Full Cone、Restricted Cone、Port Restricted Cone类型的NAT,使用STUN已经足够;针对Symmetric NAT,就需要使用到TURN来解决。
3. 用户需求
使用STUN和TURN之前,需要确定用户需求和使用场景。例如不用视频会议的情况下,STUN就够用了;而对于需要多人实时游戏场景,则需要使用TURN来实现,从而保证稳定的通信连接。
总结:STUN和TURN服务器都是在P2P通信场景下重要的服务器。在使用STUN和TURN时,需要考虑到NAT类型、IP和端口穿透问题,从而保证P2P通信的通畅。同时,在不同的使用场景下,选择不同的服务器方案也是重要的。
粉丝
0
关注
0
收藏
0