在许多网络中,尤其是在家庭、办公室和企业网络中,单个公共IP地址后面有多个设备。NAT是将私有IP转换为公共IP的过程,反之亦然。
为了进行p2p通信,每个设备都需要知道另一个设备的IP地址。但是由于NAT,IP地址被隐藏了。设备本身不知道它的公共IP是什么。公共IP地址只有路由器知道。
这使得设备之间的通信变得困难。

STUN是一种协议,允许主机应用程序发现网络上是否存在NAT,如果发现,则获取当前连接的公共IP地址和端口。

Stun server

什么是STUN服务器

STUN服务器允许客户端设备发现自己的公共IP地址。
在客户端设备位于NAT设备后面的情况下,通常是路由器,(NAT设备后面有专用IP地址,并且NAT设备通常是路由器通过单个公共IP地址路由所有数据)。
客户端设备不知道其公共IP地址是什么,只知道其私有IP地址,这些设备对STUN服务器进行ping,STUN服务器用正在进行ping的IP地址和端口号进行回复。
这首先被中继回NAT设备,然后NAT设备将其转发给客户端,客户端设备然后可以与互联网上的另一个设备共享公共IP和端口,以便建立P2P通信。

STUN服务器的角色

这在VoIP、视频通话、在线游戏和其他实时通信中非常有用。

  1. 发现公共IP和端口
    位于互联网上的STUN服务器帮助客户端设备发现其公共IP地址和端口号。当客户端向STUN服务器发送请求,然后用设备公共IP和端口号进行回复时,可以实现这一点。
  2. NAT确定的类型
    STUN可以用来确定,客户端在NAT的knd后面是什么。这种信息可以用于在不同类型的NAT背后建立有效的通信策略
  3. 连接建立
    其中,客户端的外部IP地址和端口号是已知的,然后客户端与其对等clinet共享此信息,并且它们可以使用WebRTC或任何其他协议相互建立直接通信。

STUN服务器的工作原理

Session Traversal Utilities for NAT(STUN)是一种允许主机应用程序发现网络上存在NAT的协议。当发现NAT时,STUN还允许发现公共IP和本地设备连接的端口。

为了使该协议发挥作用,必须在公共网络上提供一个众所周知的STUN服务器,假设STUN服务器的IP地址是已知的,因为它在公共网络上(通过UDP的DNS STUN或TCP/TLS服务器资源记录的STUN。或手动写入STUN服务器公共地址)。

客户端应用程序向STUN服务器发送绑定请求,并且服务器通过公共STUN服务器的眼睛看到的客户端的公共IP地址和主机进行响应。通过异或(XOR)映射来混淆结果,以避免在尝试执行替代NAT穿越方法时执行深度分组检查的应用层网关对分组内容的转换。

这解决了我们在通过NAT发送数据时发现的许多问题:

  1. 客户端发现其对等端的公共IP和端口,并能够与其对等端通信。
  2. 到STUN服务器的出站请求沿着路径在NAT表中创建一个路由条目。使得入站分组在到达公共IP地址时能够找到它们到本地网络上的主机的路径。
  3. STUN协议定义了一种简单的机制,用于保持ping的有效性,以防止NAT路由条目超时。

有了STUN服务器,当任何两个对等方想要相互连接时,他们将向STUN服务器发送请求,在双方成功响应后,他们可以建立公共IP和端口来交换数据。

STUN消息是使用UDP协议发送的,UDP不是一个可靠的协议。可靠性必须通过应用程序控制重传来实现。STUN服务器本身不在其内部实现任何可靠性方法。如果可靠性是强制性的,则可以使用TCP,并且为了安全起见,可以使用TLS安全层对STUN数据包进行加密。

STUN服务器的限制

然而,在实践中,STUN服务器不足以处理所有NAT拓扑和网络条件有时通常在公司环境中,UDP可能会在防火墙设置中被阻止。为了解决这个问题,每当STUN失败时,我们都可以回退到TURN(在NAT周围使用中继进行遍历),这里的关键词是中继。

并非每次都能工作:STUN服务器并不总是能工作,很多时候存在防火墙规则和对称NAT,以及STUN服务器不工作的许多其他情况。

在这些情况下,必须使用其他TURN服务器。TURN服务器替代STUN服务器在STUN服务器不工作的情况下,使用TURN服务器来建立连接。TURN服务器通过服务器中继加密流量,确保连接。

0

本文为原创文章,转载请注明出处,欢迎访问作者网站(和而不同)

发表评论

error: Content is protected !!