ICE vs STUN vs TURN

Posted

技术标签:

【中文标题】ICE vs STUN vs TURN【英文标题】: 【发布时间】:2020-04-16 11:34:58 【问题描述】:

我读到ICE是WebRTC服务器上的一个代理,它将用户的SDP信息发送到STUN或TURN服务器。 STUN 和 TURN 服务器提供此 SDP 信息并为用户建立 P2P 连接。

这是真的吗? 那么,STUN 和 TURN 服务器的确切区别是什么? 如果 ICE 代理配置了 TURN 服务器,数据流会发生什么?在这种情况下,TURN 只是充当数据报转发器?

【问题讨论】:

请注意,STUN 和 TURN 服务器都不处理 SDP。这就是信令服务器的工作。 @PhilippHancke “这是信号服务器的工作”是什么意思?信令服务器的哪一部分? 您的问题听起来像是在混淆 STUN 和信令服务器(这是很常见的混淆)。 STUN 服务器帮助发现公共 ip,信令服务器交换 SDP 和 ice 候选者(后者是从 STUN 和/或 TURN 服务器收集的) 【参考方案1】:

TURN 是一个中继 - 两个客户端都将数据发送到 TURN 服务器,然后再将其转发给另一个客户端。

STUN 不是中继——STUN 服务器帮助客户端之间“建立连接”(通过发现和交换它们的外部主机:端口对),然后它们直接相互发送数据。但是,STUN 不适用于所有 NAT/防火墙设置,因此当 STUN 失败时使用 TURN。

【讨论】:

如何“直接相互发送数据”?我的意思是,他们如何理解 P2P 连接的目的端口? 我知道了,但我需要更多详细信息。 STUN 绝对会协助 NAT。这就是它的意图。只是它不能解决所有的遍历。 html5rocks.com/en/tutorials/webrtc/infrastructure 仍然是对此的最佳介绍之一 @nerkn STUN 就提供商的带宽成本而言要便宜得多,而且通常对用户而言端到端延迟较低,因此通常是首选。【参考方案2】:

此答案适用于 Webrtc 新手

在我们深入探讨STUNSession Traversal Utilities for NAT之间的区别之前em>) 和 TURN(Traversal Using relays 围绕 NAT),我们需要了解两个欺骗/对等方如何通过 NAT网络地址转换)及其不同方法进行通信:

全锥形 NAT,也称为一对一 NAT,在任何人都可以连接到您并发送数据的情况下,安全性较低。 (地址)-restricted-cone NAT,发件人 IP 地址必须与您的 NAT 表访问者地址之一匹配。 端口限制锥形 NAT,类似于地址限制锥形 NAT,但限制包括端口号。 对称 NAT,仅允许全对匹配,最安全但不推荐。

眩晕

适用于全锥形 NAT, 适用于(地址)-restricted-cone NAT。 适用于端口受限的锥形 NAT 不适用于 对称 NAT 使用和维护成本低。

转身

适用于 对称 NAT 扩展性维护 是在设备/对等体之间转发/中继数据包的服务器/通道,就像第 4 层的反向代理一样 广泛使用和维护

ICE(交互式连接建立) 是一种协议,即使两个设备被 NAT 隔开,它也允许两个设备使用中介来交换报价和​​答案。它是一种收集描述对等点之间的最佳连接路径的信息的方法,并将这些信息放入一个名为ICE Candidate的对象中。

ICE 候选对象是由本地 IP 地址、安全和路由协议组成的对象,例如反射地址 (STUN) 和中继地址 (TURN) >)、支持的格式等...以及所有 ICE 候选/收集的信息都通过 SDP 发送给对等方。

SDP(Session Description Protocol)是WebRTC的重要组成部分。它是大多数人认为的一种协议或格式,用于描述 ICE 候选者、各种音频和视频编解码器、网络拓扑、带宽和其他设备信息的对等方之间的协商。剩下的唯一问题是我们如何将此 SDP 发送给其他对等方?好吧,正确答案取决于您,我们称之为 SDP SIGNALING

SIGNALLING:指中间的信令服务或通道,可以是任何(email, WhatsApp, postman, WebSockets, HTTP, pizza delivery guy).,以某种方式设法获得SDP 信息给其他对等方。

简而言之,STUN服务器用于获取外网地址,TURN服务器用于在直接(点对点)连接失败时中继流量,TURN 服务器是 STUN em> 服务器具有额外的内置中继功能。而 Signaling 服务器用于让对等方共享服务信息以启动对等流的传输

其他可帮助您了解 webRTC、NAT 和网络的资源:

subnetting NAT and IPV4 & IPV6 webRTC crash course STUN VS TRUN SERVERS STUN, TURN, and signaling Quick start with webRTC

【讨论】:

以上是关于ICE vs STUN vs TURN的主要内容,如果未能解决你的问题,请参考以下文章

用于 Java 的 STUN、TURN、ICE 库

STUN, TURN, ICE介绍

如何使用 Stun 和 ice4j 接收公共 IP 和端口

什么会在没有指定 STUN 服务器的本地 webRTC 应用程序上生成 ICE 候选?

WebRTC STUN 服务器如何反馈 SDP 和 ICE 候选人?

WebRTC:ICE、STUN 和 TURN,但我不能只使用我的 SignalR.NET 连接吗?