NAT, STUN, TURN 和 ICE

在构建 p2p 应用程序的联网过程中,您可能听说过 NAT、STUN、TURN 和 ICE。那么这些到底是什么呢?让我们通过一个类比来了解一下。

NAT, STUN, TURN 和 ICE

先从定义开始:

NAT:网络地址转换(NAT)是一种将 IP 地址空间映射到另一地址空间的方法,方法是在数据包通过流量路由设备传输时修改其 IP 头中的网络地址信息。

STUN:(Session Traversal Utilities for NAT:NAT 会话遍历实用程序)是一套标准化方法,包括一个网络协议,用于在实时语音、视频、信息和其他交互式通信应用中穿越网络地址转换器(NAT)网关。

TURN:Traversal Using Relays around NAT(TURN)是一种协助多媒体应用穿越网络地址转换器(NAT)或防火墙的协议。它可与传输控制协议(TCP)和用户数据报协议(UDP)一起使用。它对被对称 NAT 设备伪装的网络上的客户端最有用。TURN 无法帮助服务器通过 NAT 在专用网络的已知端口上运行;它只支持 NAT 后面的用户连接到单个对等设备,例如电话。

ICE:交互式连接建立(ICE)是计算机网络中使用的一种技术,用于在点对点网络中找到让两台计算机尽可能直接对话的方法。最常用于交互式媒体,如网络电话(VoIP)、点对点通信、视频和即时信息。

这些都是维基定义,人们对它们了解不多。因此,让我来解释一下什么是点对点网络。

首先,基本用例是我们需要双方在尽可能减少资源占用的情况下进行通话,同时延迟也应尽可能小。比方说,客户 1 想要与客户 2 视频通话。要实现两个系统之间的通话,最基本的是要在它们之间建立互联网连接。一种方法是在两个客户端中间添加一个服务器,让它们连接到服务器。服务器从客户端 1 接收数据,然后发送给客户端 2。

如果要这样做,我们需要服务器尽可能靠近两个客户端,以减少延迟。我们可以通过在不同地点添加多个服务器来做到这一点,但这样做成本很高,而且在两个客户端之间传输数据所需的资源也很庞大。现在,我们假设有一种方法可以将两台设备相互连接起来(具体方法稍后讨论)。现在,传输的数据不必在多个地点之间跳转,因此延迟会减少,资源利用率也会相对降低。

现在我们来谈谈可用于通信的基本协议,即 TCP 和 UDP。

TCP(传输控制协议)在通过 IP 网络通信的主机上运行的应用程序之间提供可靠、有序和错误校验的八进制数(字节)流传输。

UDP(用户数据报协议)是一种高性能数据传输协议,设计用于在高速广域网上传输大容量数据集。它适用于不需要检错和纠错或在应用程序中进行检错和纠错的情况。在 IP 网络中,UDP 不需要事先建立通信通道或数据路径。

在这两种协议中,UDP 的性能更好,因为我们不需要每个数据缓冲区都到达目的地。即使错过某些数据缓冲区,例如错过视频通话中的某些帧,也没有关系。

现在让我们看看在两台设备之间建立直接通道需要什么:

  • 双方的 IP 地址
  • 端口号
  • 打开套接字

每台连接到互联网的设备都有自己的 IP 地址,我们需要在愿意共享数据的两台设备之间共享这些地址。但这里还有一个注意事项,即连接到 NAT 设备或防火墙后的设备不知道自己的 IP 地址和端口。

让我们考虑这样一种情况:两个客户端(client1 和 client2)位于 NAT 设备(路由器)后面。client1 拥有自己的私有 IP 地址,我们称之为 “IP1″,但它自己并不知道。同样,client2 也有一个私有 IP 地址,我们称之为 “IP2″。这些客户端通过各自的 NAT 设备连接到互联网,每个设备都有自己的公共 IP 地址,我们称之为 “公共 IP 1 “和 “公共 IP 2″。

当client1 和 client2 要共享数据时,它们通常需要通过各自的 NAT 设备路由数据,充当中间人。但是,如果 client1 和 client2 知道各自的 IP 地址,共享数据就会简单得多。这就是 STUN(用于 NAT 的会话遍历工具)服务器的用武之地。

STUN 服务器有一个简单而重要的功能:根据请求为客户端提供各自的 IP 地址和端口号。例如,client1 可以向 STUN 服务器发送请求,STUN 服务器将回复其私有 IP 地址和端口号。同样,即使 client2 位于 NAT 设备或防火墙后面,它也能从 STUN 服务器获取信息。

然而,在某些情况下,STUN 服务器无法有效地完成此任务。在这种情况下,TURN(使用围绕 NAT 的中继进行遍历)服务器就会介入。TURN 服务器充当两个客户端之间的中继,允许它们间接交换数据。虽然 TURN 服务器的运行方式与传统服务器类似,可以接收和传输数据,但它们仅在连接的客户端之间这样做,从而保护了它们的隐私。尽管如此,当通过 TURN 服务器进行通信时,它不再是直接的点对点连接。

在实践中,STUN 和 TURN 服务器经常一起使用,以确保客户端之间的高效数据传输,例如从 client1 到 client2,即使它们位于 NAT 设备后面。这种组合方法有助于克服各种网络限制并确保无缝通信。

STUN 服务器:本质上,STUN 服务器通过向其他客户端提供其私有 IP 地址和端口号,帮助防火墙和 NAT 设备后面的客户端与其他客户端建立直接通信。

NAT, STUN, TURN 和 ICE

TURN 服务器: 同样,TURN 服务器通过将数据从 A 点转发到 B 点,实现客户端之间的通信,特别是当由于网络限制或 STUN 的其他故障而无法实现直接点对点连接时。

NAT, STUN, TURN 和 ICE

ICE 协议: ICE(交互式连接建立)是一种协调这些连接的协议。它使设备能够探索各种通信选项(如利用 STUN 或直接点对点连接),并选择最有效的通信选项。ICE 执行多项基本功能,包括收集候选连接、检查连接性、协商并最终建立连接。这样既能确保最佳通信,又能最大限度地减少对中介的依赖。

现在让我来打个比方:

想象一下,Rahul 和 Simran 是一年级的学生,他们想在没有大人参与的情况下互相交谈。Rahul 需要知道 Simran 在教室里的座位,反之亦然。但是,作为一年级的学生,他们可能记不住自己的桌号。因此,他们决定向老师求助,老师会告诉他们各自的桌号。在这种情况下,老师代表 STUN 服务器,帮助 Rahul 和 Simran 找到彼此的位置。

现在,假设 Rahul 和 Simran 不愿意向老师寻求帮助。相反,他们决定直接交换信件。为此,他们给对方写信,然后交给学校的邮递员,由他把信送到他们的课桌之间。邮递员就像一个 TURN 服务器,在无法直接通信的情况下,在 Rahul 和 Simran 之间转发信息。

在这种情况下,ICE(Interactive Connectivity Establishment,交互连接机构)就会介入,帮助 Rahul 和 Simran 建立沟通渠道。无论是通过教师(STUN 服务器)、邮递员(TURN 服务器),还是直接在他们之间交换信息,ICE 都会协调整个过程,确保 Rahul 和 Simran 能够高效地交换信息。

作者:Dikshant Rajput

本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/webrtc/43994.html

(0)

相关推荐

发表回复

登录后才能评论