为什么WebRTC需要ICE协议才能运行?

时间:2016-10-03 19:33:45

标签: networking protocols webrtc p2p

据我所知,ICE协议用于发现从最终用户设备到外部的节点/设备"。

我不明白为什么需要它。不是分组路由是路由器和交换机等网络设备的责任吗?他们应该找到从网关到最终用户设备的最短路径(实际上,路由器会记住他们以前发现的那些路由)。

此外,NAT协议用于转换内部ip"到"外部ip"反之亦然。

再次,
为什么其他用户需要熟悉我的内部网络设置?

2 个答案:

答案 0 :(得分:4)

NAT是一种kludge,用于尝试保护IPv4地址,直到IPv6变得无处不在,并且它打破了端到端连接,这是IP的承诺。因此,有些事情无法通过NAT正常工作。围绕NAT kludge有各种各样的工作,而ICE就是其中的一部分。这在RFC 5245, Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal for Offer/Answer Protocols

中有解释
  
      
  1. 简介
  2.         

    RFC 3264 [RFC3264]定义会话描述的两阶段交换   用于建立的协议(SDP)消息[RFC4566]   多媒体会议。协议使用此提议/应答机制   例如会话启动协议(SIP)[RFC3261]。

         

    使用提供/回答的协议很难通过网络运行   地址转换器(NAT)。因为他们的目的是建立一个   媒体数据包流,它们往往携带IP地址和端口   已知的消息中的媒体源和接收器   通过NAT [RFC3235]有问题。协议也寻求创造   媒体直接在参与者之间流动,所以没有   应用层介于它们之间。这样做是为了减少   媒体延迟,减少数据包丢失,并降低运营成本   部署应用程序。但是,这很难   通过NAT实现。对此的充分理由是   超出本规范的范围。

         

    已经定义了许多允许这些协议的解决方案   通过NAT运行。这些包括应用层网关(ALG),   中间件控制协议[RFC3303],原始简单   遍历UDP通过NAT(STUN)[RFC3489]规范和Realm   具体IP [RFC3102] [RFC3103]以及会话描述   使它们工作所需的扩展,例如会话描述   实时控制协议的协议(SDP)[RFC4566]属性   (RTCP)[RFC3605]。不幸的是,这些技术都有优点和缺点   在某些网络拓扑结构中,每个网络都是最优的,但是a   别人选择不好。结果是管理员和   实现者正在对该拓扑结构做出假设   将部署其解决方案的网络。这介绍了   系统的复杂性和脆弱性。我们需要的是一个   单一解决方案,足够灵活,可以很好地运作   的情况。

         

    此规范定义了交互式连接建立   (ICE)作为基于UDP的媒体流的NAT遍历技术   (尽管ICE可以扩展到处理其他传输协议,例如   作为TCP [ICE-TCP])由提议/答案模型建立。 ICE是一个   提供/答案模型的扩展,并通过包括一个   SDP中的多种IP地址和端口提供和解答,   然后通过点对点连接测试连接性   检查。 SDP中包含的IP地址和端口   使用修订的STUN规范执行连接性检查   [RFC5389],现在已重命名为NAT的Session Traversal Utilities。该   新名称和新规范反映了其作为工具的新角色   与其他NAT遍历技术(即ICE)一起使用而不是一个   独立的NAT遍历解决方案,作为原始的STUN规范   是。 ICE还利用NAT周围的遍历使用继电器(TURN)   [RFC5766],STUN的扩展。因为ICE交换了多样性   每个媒体流的IP地址和端口,它也允许   多宿主和双栈主机的地址选择,以及为此   它弃用RFC 4091 [RFC4091]和[RFC4092]。

    的原因

答案 1 :(得分:2)

防火墙。它们通常配置为将来自万维网的任何未经请求的流量反弹给您。他们只赞成你开始与服务器联系,然后只允许向你回流,这就是它。除非你的朋友都拥有静态IP(很少有人可以证明这一点),否则这是一个对等通信的恶劣环境。

ICE尝试通过枚举可能到达另一方的地址和端口来尝试解决此问题,并尝试连接到这些地址,通过在两端发起出站请求,或者如果所有其他方法都失败,则回退到通过一个TURN服务器,如果指定的话。

有关此问题的详情,请参阅此WebRTCHacks article

  

为什么其他用户需要熟悉我的内部网络设置?

因为其他用户有时在您的内部网络上。例如局域网游戏。