什么是ICE候选人,对等连接如何选择?


71

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

当对等方创建连接时,他们将获得ICE候选者,并交换它们并将其最终设置为对等方连接。

所以我的问题是,ICE候选人来自何处,如何使用它们?

我注意到我的同事在自己的计算机上执行应用程序时,候选人数量减少了,这是为什么候选人数量不同的原因?


3
也许不是那么容易理解,但是您可以查看RFC5245。–
Mikael Holmgren

8
有一个很好的演示文稿,可以解释ICE,STUN和TURN的概念viagenie.ca/publications/2008-08-cluecon-stun-turn-ice.pdf
Krystian

我建议看一下Krystian提供的链接!
菲利克斯·克拉佐拉

Answers:


97

@Ichigo的答案是正确的,但要大得多。每个ICE都包含您网络的“节点”,直到到达外部为止。通过这种方式,您可以将这些ICE发送给其他对等方,以便他们知道可以通过哪些连接点到达您。将其视为一栋大建筑物:一个在建筑物中,需要告诉另一个(不熟悉的人)如何穿过建筑物。同样在这里,如果我有很多网络设备,则传入连接需要以某种方式找到通往计算机的正确方法。通过提供所有节点,RTC连接本身会找到最短的路由。因此,当您连接到旁边的计算机(连接到同一路由器/交换机/任何设备)时,它将使用所有ICE并确定最短的计算机,而这恰好就是通过该点。您的同事获得的ICE候选人减少与它必须通过的设备数量有关。请注意,计算机内部的每个具有IP地址的网络适配器(我有来自hyper-v的vEthernet交换机),它也会为其创建一个ICE。


您发送ICE还是候选人?ICE不仅仅是收集候选人的方法(协议)的名称吗?
Cozzbie

1
@Cozzbie这个答案是很久以前写的,当时我的英语比现在还差。顺便说一句,我从来没有想到过这种“从ICE候选人中可以看到”这样的答案,以得到如此多的投票(这是迄今为止我投票最多的答案)。我应该更新措辞和文字,但要回答您的问题:是的,ICE是协议的缩写,您发送的是ICE candidates
MarijnS95,18年

答案可能是对ICE候选人的误解。“所有节点”是什么意思?他是否建议在最短路径算法中使用ICE来找到发起方和响应方之间的最佳路径?
Ben Butterworth

84

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

通常,ice候选人提供有关将要交换数据的ip地址和端口的信息。

它的格式如下

a =候选:1 1 UDP 2130706431 192.168.1.102 1816 typ host

这里UDP指定要使用的协议,typ host指定冰候选类型,主机表示候选对象是在防火墙内生成的。如果wireshark用于监视流量,则可以看到用于数据传输的端口与冰候选人中存在的端口相同。

另一种类型是relay,表示在防火墙外进行通信时可以使用此候选对象。

根据您使用的浏览器,它可能包含更多信息。很多时候,我已经看到8-12个冰候选人是由浏览器生成的。


但是,为什么我会得到这么多的候选人,为什么我必须与其他同行交流呢?
user1844505 2014年

1
ICE协议将不包含有关浏览器的数据...这就是SDP(会话描述协议)的用途(也用于共享RTC将用于哪种数据,例如音频,视频,编解码器等)。 )
MarijnS95,2014年

1
建立WebRTC连接时,如何在候选冰块之间进行选择?我有八个左右的选择(在我的开发环境中)。有些会执行音频,有些会丢失视频。这真的很奇怪:)
Costa

1
正如我在上面提到的有关各种类型的制冰对象的理想情况一样,理想情况下,您应该处理所有的制冰对象,您只需将所有的制冰对象提供给webrtc,webrtc就可以完成其余工作。
Ichigo Kurosaki 2015年

我们可以将它们缓存为一个会话。假设某人在android上同时拨打多个电话。我们应该遵循哪种缓存删除策略?我们是否应该在网络更改(类型和连接性)时清除缓存。
user2223032

2

Ichigo有一个很好的答案,但是没有强调每个候选人的使用方式。我认为MarijnS95的答案是完全错误的:

每个ICE都包含您网络的“节点”,直到到达外部为止

通过提供所有节点,RTC连接本身会找到最短的路由。

首先,他指的是ICE候选人,但是那部分还不错。也许我是在误解他,但是他说“直到它到达外面”,他才使客户(发起交易的同伴)看起来像是洋葱的最内层,并建议ICE候选人帮助您剥开洋葱皮。直到您到达“互联网”为止,在这里可以到达做出响应的对等方,或者剥去另一只洋葱也可以。这不是真的。如果启动对等方无法通过传输地址到达响应对等方,则它将丢弃该候选方,并将尝试其他候选方。它不会在候选位置中的任何位置存储任何节点。ICE候选者在与响应对等方进行任何通信之前生成。候选冰块不会帮助您剥落众所周知的NAT洋葱。关于我从他的答案中得到的第二个引号,他使ICE似乎在最短路径算法中使用,其中ICE RFC中根本没有出现“最短”算法。


RFC8445术语表中:

ICE使代理能够发现有关其拓扑的足够信息,从而有可能找到一条或多条路径来建立数据会话。

ICE的目的是发现可以使用的地址对。ICE进行此操作的方法是系统地尝试所有可能的对(以仔细排序的顺序),直到找到一个或多个可行的对为止。

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

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


因此,有了它,就定义(ICE)候选对象(可能是可能接收数据的IP地址和端口,这可能不起作用),并说明了选择过程(第一个有效的传输地址对))。注意,它不是节点或洋葱皮的列表。

由于“收集候选者”的过程,不同的用户可能具有不同的冰候选者。有不同类型的候选,有些是从本地接口获得的。如果您的设备上有一个额外的虚拟接口,则会生成一个额外的ICE(我没有对此进行测试!)。如果您想知道如何“收集” ICE候选人,请阅读2.1。收集候选人


我希望切开洋葱神话不会让你哭泣。不要冰洋葱。切成小方块

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.