STUN 协议用于帮助位于网络地址转换 NAT 后面的设备找出自己的公网地址,以及确定 NAT 为公网 IP 地址和私网 IP 地址之间映射的类型。
STUN 协议主要用于涉嫌 VoIP、视频会议和其他实时通信应用,包括 WebRTC。
NAT 设备通常位于用户的网络(例如家庭或公司网络)和互联网之间,用于将用户网络内部的私有 IP 地址转换为互联网上的公共 IP 地址。由于 NAT 设备通常只允许从内部网络发起的连接,如果一个位于外部的设备(互联网上的另一个用户)想要直接连接到内部设备,可能会因为NAT 而无法连接。
SUTN 协议的作用之一:通过向 SUTN 服务器发送请求,位于 NAT 后面的设备可以找出自己的公网地址,然后把这个地址告诉其他设备,从而让其他设备可以直接连接。
此外,STUN 协议还可以帮助确定 NAT 的类型。不同的 NAT 设备可能有不同的行为,例如有些 NAT 设备可能对于来自同一个公网地址和端口的多个连接使用同一个映射,而有些则可能为每个连接使用不同的映射。通过确定 NAT 的类型,设备可以更好的配置自己的连接策略。
需要注意的是,STUN 协议并不能解决所有的 NAT 穿越问题,在一些情况下,例如对称型 NAT,STUN 协议可能无法工作,在这种情况下,可能需要使用 TURN协议,通过中继服务器转发流量。
简单来说,在我们的设备(例如电脑或者手机)连接互联网时,通常会通过一个叫做网络地址转换NAT的设备,这个设备通常是我们的路由器。NAT 设备会给我们的设备一个私有的 IP 地址,然后用一个公开的 IP 地址代表我们的设备在互联网上进行通信。
STUN 协议的主要作用就是帮助我们的设备找到它的公开 IP 地址,也就是其他设备所看到的IP 地址,设备可以向一个 STUN 服务器发起请求。然后 STUN 服务器会回复它的公开 IP 地址。然后设备就可以告诉其他设备它的公开 IP 地址,这样其他设备就能找到它并且建立连接。
STUN 协议还可以帮助设备理解 NAT 设备是如何处理不同的连接的,这对于建立和管理网络连接是很重要的。
在 WebRTC 中
在WebRTC中,STUN 协议是建立点对点链接的关键环节之一。它在 WebRTC 的 “信令”过程中起着重要作用。
信令过程是 WebRTC 建立连接前的一个必要步骤,它包括交换媒体元数据以及网络数据(IP 地址和端口)。这个过程通常由一个信令服务器完成,但是信令服务器并不是 WebRTC 协议的一部分,而是由应用自己实现的。
WebRTC 使用 STUN 在信令过程中的步骤:
- 获取媒体元数据:WebRTC 端点会获取要发送的媒体的信息,例如视频或者音频流的编解码参数。这一步通常是通过浏览器的 API 完成的,与 STUN 服务无关
- 获取网络数据:WebRTC 端点会使用 STUN 协议,向 STUN 服务器发送请求,以获取自己的公网 IP 地址和端口,这就是所有的 ICE协议 候选者的获取过程。除了公网地址,ICE 候选者还可能包括私有地址,或者通过 TURN 服务器中继的地址。
- 交换信令信息:一旦 WebRTC 端点获取了媒体元数据和网络数据,就可以把这些信息打包成一个叫做“offer”或者“answer” 的 SDP 消息,然后通过信令服务器发送给另一个端点。这个 SDP 消息就包含了建立连接所需要的所有信息。
- 建立连接: 当两个 WebRTC 端点都接收到对方的 SDP 消息后,就可以尝试建立 点对点连接了,这个过程坑包括 NAT 穿越,也就是尝试直接连接到对方的公网地址。
如果两个端点都在同一个局域网内,就可能不需要 STUN 协议,对于跨越互联网的连接,STUN 通常是必须的。