我在iOS 10的MPC应用程序中看到以下错误,并且正在寻求一些帮助来解释它们。对等方建立连接后,下面的一些错误会弹出。对等端最终会连接,但是比iOS 9中的连接要慢(似乎导致错误消息的事件发生在主线程上)。在
[ViceroyTrace] [ICE][ERROR] Send BINDING_REQUEST failed(C01A0041).
Not in connected state, so giving up for participant [47CD8292] on channel [0].
任何投入将不胜感激!
最佳答案
NAT
为了解释错误的原因和含义,我们必须从NAT开始(如果您熟悉此部分,则可以跳过此部分)。
NAT是一种为同一局域网中的多个设备映射相同的“全局” IP地址的方法,即多个设备共享相同的地址(可能在不同的时间,可能在使用不同的端口-NAPT),这样我们就可以保存大量的“全局”地址,并缓解了ipv4地址的枯竭。也正因为如此,设备的本地地址只能在LAN中使用,而不能在外部使用。要发送到外部的数据报将通过NAT设备(总是一个路由器),这会将报头中的地址修改为全局地址。还有一点是,不同LAN中的设备可能使用相同的IP地址。
|
| /------------ 'Global'
X1':x1'|/ Address
+------------+
| NAT |
+------------+
|
| /------------ Local
X:x |/ Address
+--------+
| |
| Agent |
| |
+--------+
冰
现在,我们要使对等方直接通信,因此我们必须知道对等方的地址。但是,正如我们所知,使用NAT使设备的地址只是一个本地地址,不能在Internet外部使用并且无法使用它进行通信。
ICE的目的是发现对等方应使用哪个地址直接与其他对等方进行通信。
收集候选人地址
第一阶段收集候选人地址:
其接口(interface)的地址
为了获得公共(public)端地址,设备将向公共(public)服务器(称为STUN服务器,外部LAN)发送“绑定(bind)请求”,服务器将回发的地址称为“绑定(bind)响应”。
连接检查
当设备拥有它们拥有的地址时,它们将通过信令信道发送给其他对等方。当对等方(我们称其为“R”)从我们的设备(我们称其为“L”)接收地址列表时,R将收集其自己的地址并响应其自己的列表。在此过程结束时,将生成 CANDIDATE PAIRS 。
为了查看哪个对有效,每个代理程序安排一系列带有“绑定(bind)请求”和“绑定(bind)响应”的CHECKS。
L R
- -
STUN request -> \ L's
<- STUN response / check
<- STUN request \ R's
STUN response -> / check
结论
因此,总而言之,在更多细节之前可能的原因:
意见建议:
引用:
关于network-programming - iOS10中的多对等连接错误 "Send BINDING_REQUEST failed",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41313951/