什么是 ICE 候选人,以及如何选择他们之间的同伴连接?

我最近写了一个简单的聊天应用程序,但我真的不了解 ICE 候选人的背景。

当同行创建一个连接,他们得到 ICE 候选人,他们交换他们和设置 他们终于找到了同步连接。

所以我的问题是,ICE 的候选人来自哪里,他们是如何被使用的,他们都是真正被使用的吗?

我注意到我的同事在他的机器上执行应用程序时得到的候选人较少,是什么原因导致不同数量的候选人?

48437 次浏览

ICE 代表 交互式连接建立,它是一种用于 establishing communication for VOIP, peer-peer, instant-messaging, and other kind of interactive media.的 NAT (网络地址转换器)技术

通常,ice 候选者提供关于将在其中交换数据的 ipaddress 和端口的信息。

它的格式如下所示

A = 候选: 11 UDP2130706431 192.168.1.1021816主持人

这里 UDP指定要使用的协议,typ host指定它是哪种类型的候选冰,主机意味着候选冰是在防火墙内生成的。 如果你使用 wireshark来监控流量,那么你可以看到用于数据传输的端口与冰中的端口是相同的。

另一种类型是 relay,它表示在防火墙外进行通信时可以使用这种候选方法。

它可能包含更多信息,具体取决于您使用的浏览器。 很多时候,我看到8-12冰候选人是由浏览器生成的。

来自@Ichigo 的答案是正确的,但是它稍微大一点。每个 ICE 都包含你的网络的“一个节点”,直到它到达外部。通过这种方式,你把这些 ICE 的信息发送给对方,这样他们就知道通过什么样的连接点可以联系到你。
把它看作一个大建筑物: 一个在建筑物里,需要告诉另一个(不熟悉的)如何通过它。这里也一样,如果我有很多网络设备,接入的连接需要找到正确的方式到我的计算机。
通过提供所有节点,RTC 连接自己找到最短路径。所以当你连接到你旁边的计算机,它连接到同一个路由器/交换机/其他什么的,它使用所有的 ICE,并确定最短的,这是直接通过这一点。你的同事申请移民海关执法局的人越来越少是因为他们要通过的设备数量太多了。

请注意,每个网络适配器在您的计算机有一个 IP 地址(我有一个 vEthernet 交换机从超 v) ,它也创建一个 ICE 为它。

一护有一个很好的答案,但是没有强调每个候选人是如何被使用的,我认为 MarijnS95的答案是完全错误的:

每个 ICE 都包含你的网络的“一个节点”,直到它到达外部

通过提供所有节点,RTC 连接自己找到最短路径。

首先,他指的是移民海关执法局候选人,但这部分没问题。也许我误解了他的意思,但是通过说“直到它到达外面”,他让客户(最初的同伴)看起来像是洋葱最里面的一层,并且建议 ICE 候选人帮助你剥洋葱,直到你到达“互联网”,在那里可以得到回应的同伴,也许剥另一个洋葱得到它。这不是真的。如果发起对等端未能通过传输地址到达响应对等端,它将丢弃这个候选对象并尝试另一个候选对象。它不在候选项中的任何位置存储任何节点。ICE 候选人在与应答对等方进行任何通信之前生成。一个候选人并不能帮助你剥开众所周知的 NAT 洋葱。同样关于我从他的回答中引用的第二句话,他使它看起来像 ICE 是在最短路径算法中使用的,其中“最短”根本不显示在 ICE RFC 中。


来自 RFC8445术语表:

ICE 允许探员们发现足够的信息 关于它们的拓扑,以便潜在地找到一个或多个路径,通过这些路径 他们可以建立一个数据会话。

ICE 的目的是发现哪对地址可以工作。ICE 做到这一点的方法是系统地尝试所有可能的配对(按照仔细排序的顺序) ,直到找到一个或多个合适的配对。

候选人,候选人信息: 一个 运输地址是一个 接收数据的潜在联络点。候选人也 具有属性——它们的类型(服务器自反、中继或 主机)、优先级、基础和基础。

传输地址: IP 地址和 传输协议(如 UDP 或 TCP)端口。


所以你有它,(ICE)候选人是定义(一个 IP 地址和端口,可能是一个接收数据的地址,这可能不起作用) ,并解释了选择过程(工作的第一个传输地址对)。注意,它不是一个节点列表或洋葱皮列表。

不同的用户可能会有不同的候选人,因为“收集候选人”的过程。有不同类型的候选者,其中一些是从本地接口获得的。如果你有一个额外的虚拟接口在你的设备上,然后一个额外的 ICE 将生成(我没有测试这一点!).如果你想知道 ICE 候选人是如何“聚集”的,请阅读 2.1. 收集候选人