NAT、ICE、STUN、TURN的理解

251 阅读4分钟

NAT

NAT(Network Address Translation,网络地址转换)是一种用于在局域网内设备通过一个公共IP地址访问互联网的技术。NAT路由通过将私有IP地址映射到一个公共的IP地址,并在不同端口之间做映射,允许多个设备通过一个外部IP地址访问互联网。

NAT的工作原理

  • 内部网络中的设备: 使用私有IP地址,这些地址只能在局域网中使用,无法直接访问外部互联网。
  • NAT路由器: 当内部设备通过NAT访问外网时,NAT路由器会将设备的私有IP地址转为公共的IP地址,并根据不同的端口区分连接。
  • 返回通信: 当外部服务器向设备发送响应时,NAT路由器会根据映射的端口将数据包转发到局域网中的正确设备。

NAT问题

NAT 是为了安全性和 IP 地址复用设计的,但它也阻碍了点对点通信,因为外部设备无法直接通过私有 IP 地址联系到 NAT 后面的设备。因此,在实时通信(如 WebRTC)中,需要解决 NAT 穿透的问题。

总结

在过去,连接互联网的设备比较少时,都是通过调制解调器(moden)获取运营商分配的IP地址直接访问互联网,但是在当今连接互联网的设备越来越多,如果一台设备分配一个IP地址必然会导致IP地址分配不足的问题,所以NAT技术应运而生,将当前连接NAT路由器的设备都分配一个私有连接,当这些设备访问互联网时,路由器会将这些私有连接映射到公有连接,并为其分配一个端口号来访问互联网,当互联网返回数据时找到映射表中的私有连接,将数据发送到正确的设备。(解释这么多就是你上网必须连接wifi、那有的人就说我不连接wifi用4g或者5g也能访问,那是运营商给你做了处理,在运营商那也是个NAT路由器)

ICE

ICE(Intercative Connectivity Establishment)交互式连接建立,是WebRTC使用的框架,用于发现和建立最佳的点对点连接路径。ICE会尝试多种方式子在设备之间建立连接,例如使用本地IP地址、通过STUN服务器、TURN服务器等,直到找到一种可行的方式。

ICE的工作步骤

  • 收集候选者: ICE会收集所有可能的网路路径(称为“候选者”),包括本地IP地址、经过NAT的公共IP地址(通过STUN)获取以及TURN中继地址。
  • 连接测试: ICE会测试这些候选路径,选择最优的路径进行点对点连接。
  • 连接建立: 一旦找到了可用的路径(例如通过STUN、TURN或直接连接),ICE就会使用该路径进行通信。

STUN

STUN(Session Traversal Utilities for NAT),会话穿越实用程序,是一种协议,用于帮助设备在经过 NAT 的情况下,获取它们的公共 IP 地址端口,从而帮助设备与外部网络建立通信。STUN 是 WebRTC 实现 NAT 穿透的重要组成部分。

STUN的工作原理

  • 设备向STUN服务器(位于公共网络上)发送请求,STUN服务器响应设备的请求并告诉它,它在外部网络中公共IP地址和端口。
  • 一旦设备知道了自己的公共IP地址和端口,它就可以将这些信息传递给远程设备,以尝试通过该地址进行通信。

TURN

TURN(Traversal Using Relays around NAT),通过中继进行 NAT 穿越,是另一种用于解决 NAT 穿透的技术,适用于 STUN 不能直接实现的场景。TURN 服务器的主要功能是作为中继服务器,用于在无法直接建立 P2P 连接时,传输通信数据。

TURN的工作原理

  • 当两台设备无法通过NAT进行直接通信时,数据可以通过TURN服务器进行中继。
  • 设备会向TURN服务器发送数据,TURN 服务器再将数据转发给目标设备。这种情况下,TURN 服务器承担了所有通信流量的传输。

NAT、ICE、STUN、TURN之间的关系

  • NAT 是造成P2P连接困难的主要原因,因为它隐藏了设备的真实IP地址。
  • ICE 是解决这个问题的框架,它协调STUN、TURN和其它机制来找到最佳的通信路径。
  • STUN 服务器帮助设备获取 NAT 后的公共 IP 地址,允许尝试建立直接 P2P 连接。
  • TURN 服务器在 STUN 不能穿透 NAT 的情况下,用于中继设备间的数据流,确保连接的成功。