什么是ICE候选人,他们之间的对等连接如何select?

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

当对方创build一个连接时,他们得到ICE候选人,并交换他们,并最终将他们设置为peerconnection。

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

我注意到我的同事在他的机器上执行这个应用程序的候选人较less,可能是候选人数量不同的原因是什么?

ICE代表Interactive Connectivity Establishment (互联网连接build立) ,它是在NAT(networking地址转换器)中用于establishing communication for VOIP, peer-peer, instant-messaging, and other kind of interactive media.

通常情况下,ice候选人会提供有关将要交换数据的ipaddress和端口的信息。

它的格式是如下所示

a =候选:1 1 UDP 2130706431 192.168.1.102 1816典型主机

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

另一种types是relay ,表示这个候选可以在防火墙之外进行通信时使用。

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

@Ichigo的答案是正确的,但它是一个较大的小点。 每个ICE都包含networking的“节点”,直到它到达外部。 通过这个,你把这些ICE发送给另一个同行,这样他们就知道他们可以通过什么连接点到达你。 把它看作是一座大型的build筑:一个在build筑物里,需要告诉另一个(谁不熟悉)如何穿过它。 同样在这里,如果我有很多的networking设备,传入连接不知何故需要find正确的方式到我的电脑。 通过提供所有的节点,RTC连接本身find最短的路由。 所以当你连接到你旁边的计算机,连接到相同的路由器/交换机/任何,它​​使用所有的ICE,并确定最短的,这是直接通过这一点。 你的同事减less了ICE考生的数量,与它所需要的设备数量有关。 请注意,您的计算机内的每个networking适配器都有一个IP地址(我有一个来自hyper-v的vEthernet交换机),它也为它创build一个ICE。

Interesting Posts