【问题标题】:What are ICE Candidates and how do the peer connection choose between them?什么是 ICE 候选者以及对等连接如何在它们之间进行选择?
【发布时间】:2014-01-12 00:57:03
【问题描述】:

我新写了一个简单的聊天应用程序,但我并没有真正了解 ICE Candidates 的背景。

当对等点创建连接时,他们会获得 ICE Candidates,然后交换它们并设置 他们最终连接到对等连接。

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

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

【问题讨论】:

标签: webrtc candidate ice-protocol


【解决方案1】:

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

【讨论】:

  • 您是否发送 ICE 或候选人? ICE 不只是收集候选人的方法(协议)的名称吗?
  • @Cozzbie 这个答案是很久以前写的,那时我的英语比现在还差。我从没想过这种“顺便说一句,通过查看 ICE 候选人我可以看到这个”类型的答案会获得如此多的支持(这是迄今为止我最支持的答案)。我应该更新措辞和写作,但要回答你的问题:是的,ICE是协议的缩写,你发送的东西是ICE candidates
  • 也许回答者误解了 ICE 候选人是什么。他所说的“所有节点”是什么意思?他是否建议在最短路径算法中使用 ICE 来找到发起节点和响应节点之间的最佳路径?
【解决方案2】:

ICE代表Interactive Connectivity Establishment,它是establishing communication for VOIP, peer-peer, instant-messaging, and other kind of interactive media.的NAT(网络地址转换器)中使用的一种技术

通常,ice Candidate 会提供有关要交换数据的 IP 地址和端口的信息。

格式如下

a=candidate:1 1 UDP 2130706431 192.168.1.102 1816 类型 主机

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

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

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

【讨论】:

  • 但是为什么我会得到这么多候选人,为什么我必须与其他同行交换他们?
  • ICE 协议不会包含有关浏览器的数据...这就是 SDP(会话描述协议)的用途(也用于共享 RTC 将用于什么类型的数据) ,例如音频、视频、编解码器等)
  • 在建立 WebRTC 连接时,如何在 ice 候选者之间进行选择?我有八个左右的选项(在我的开发环境中)。有些执行音频,有些丢失视频。真的很奇怪:)
  • 正如我上面提到的关于各种类型的ICE候选人,理想情况下你应该处理所有的ICE候选人,你只需将所有的ICE候选人提供给webrtc,webrtc会做剩下的工作。
  • 我们可以为会话缓存它们吗?假设一个人在 android 上同时拨打多个电话。我们应该遵循什么样的缓存删除策略?我们是否应该在网络更改(类型和连接性)时清除缓存。
【解决方案3】:

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

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

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

首先,他的意思是 ICE 候选人,但那部分很好。也许我误解了他,但通过说“直到它到达外面”,他让客户(发起方)看起来像是洋葱的最内层,并建议 ICE 候选人帮助你剥去这些层直到你到达“互联网”,在那里可以到达响应的对等方,也许剥另一个洋葱来到达它。 这不是真的。 如果发起节点未能通过传输地址到达响应节点,它会丢弃该候选节点并尝试不同的候选节点。它不会在候选中的任何位置存储任何节点。 ICE 候选者是在与响应对等方进行任何通信之前生成的。冰候选人不能帮助您剥掉众所周知的 NAT 洋葱。另外关于我从他的回答中引用的第二句话,他认为 ICE 似乎用于最短路径算法,其中 ICE RFC 中根本没有出现“最短”。


来自RFC8445 术语列表:

ICE 允许代理发现足够的信息 关于他们的拓扑结构,以潜在地找到一条或多条路径 他们可以建立数据会话。

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

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

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


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

由于“收集候选人”的过程,不同的用户可能有不同的ICE候选人。候选有不同的类型,有些是从本地界面获取的。如果您的设备上有一个额外的虚拟接口,那么将生成一个额外的 ICE(我没有测试这个!)。如果您想了解 ICE 候选人是如何“聚集”的,请阅读2.1. Gathering Candidates


我希望打破洋葱神话没有让你哭泣。不要冰你的洋葱。 骰子他们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多