我在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)的地址
  • 在NAT(服务器自定义候选地址)的公共(public)端上转换的地址
  • (可选):TURN服务器上的地址(中继候选人)

  • 为了获得公共(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
    

    结论

    因此,总而言之,在更多细节之前可能的原因:
  • 无法连接到STUN服务器;
  • 测试地址对时正常失败;

  • 意见建议:
  • 检查有关ICE阶段的信息,以了解ios10与其他人之间ICE实现的区别。
  • This thread是有关MPC错误的一些讨论,这可能会激发您的灵感。

  • 引用:
  • ICS RFC
  • NAT
  • 关于network-programming - iOS10中的多对等连接错误 "Send BINDING_REQUEST failed",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41313951/

    10-11 02:42