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

3
据我所了解,ICE协议用于从终端用户设备到“外部”的发现节点/设备。
我不明白为什么需要它。难道数据包路由不是路由器和交换机等网络设备的责任吗?它们应该找到从网关到终端用户设备的最短路径(实际上,路由器记住了之前发现的这些路由)。
此外,NAT协议用于将“内部IP”转换为“外部IP”及其相反操作。
那么,为什么其他用户需要熟悉我的内部网络设置呢?
2个回答

4

NAT是一种权宜之计,旨在节省IPv4地址,直到IPv6普及,但它破坏了IP的端到端连接承诺。因此,某些事情无法通过NAT正确工作。有各种各样的权宜之计来解决NAT问题,而ICE就是其中的一部分。这在RFC 5245, Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal for Offer/Answer Protocols中有所解释。

  1. 介绍

RFC 3264 [RFC3264]定义了一种用于建立多媒体会话的Session Description Protocol(SDP)消息[RFC4566]的两阶段交换机制。这种提议/回答机制被诸如Session Initiation Protocol(SIP)[RFC3261]等协议所使用。

使用提议/回答的协议在网络地址转换器(NATs)中操作起来很困难。因为它们的目的是建立媒体数据包的流,所以它们倾向于在其消息中携带媒体源和接收器的IP地址和端口,这已知在NAT中存在问题[RFC3235]。这些协议还试图直接在参与者之间创建媒体流,以便它们之间没有应用层中介。这样做是为了减少媒体延迟、减少数据包丢失和降低部署应用程序的运营成本。然而,这在NAT中很难实现。对此原因的全面处理超出了本规范的范围。

已经定义了许多解决方案,允许这些协议通过NAT进行操作。这些包括应用层网关(ALGs)、中间盒控制协议[RFC3303]、原始的Simple Traversal of UDP Through NAT(STUN)[RFC3489]规范,以及特定领域IP[RFC3102][RFC3103]和会话描述扩展,如用于实时控制协议(RTCP)[RFC3605]的Session Description Protocol(SDP)[RFC4566]属性。不幸的是,这些技术都有优缺点,使每种技术在某些网络拓扑中最优,但在其他情况下则是较差的选择。结果是管理员和实现者对其解决方案将部署的网络拓扑做出假设。这引入了复杂性和脆弱性到系统中。所需要的是一个单一的解决方案,足够灵活,能够在所有情况下都很好地工作。

本规范将交互式连通性建立(ICE)定义为基于UDP媒体流的NAT遍历技术(尽管ICE可以扩展到处理其他传输协议,例如TCP[ICE-TCP]),由提议/回答模型建立。ICE是提议/回答模型的扩展,通过在SDP提议和回答中包含多个IP地址和端口来工作,这些IP地址和端口随后通过对等连接性检查进行测试。在SDP中包括的IP地址和端口以及连接性检查是使用修订后的STUN规范[RFC5389]执行的,现在已重命名为用于NAT的会话遍历实用程序。新名称和新规范反映了它作为与其他NAT遍历技术(即ICE)一起使用的工具的新角色,而不是原始STUN规范所使用的独立NAT遍历解决方案。ICE还利用了绕过NAT的遍历(TURN)[RFC5766],这是STUN的一个扩展。因为ICE为每个媒体流交换了多个IP地址和端口,所以它还


2
防火墙。它们通常被配置为将来自互联网的任何未经请求的流量反弹回您。它们只批准您与服务器建立联系,然后允许服务器向您返回流量,基本上就是这样。除非您的朋友都拥有静态IP(很少有人可以证明),否则这对点对点通信来说是一个敌对环境。
ICE试图通过枚举另一方可以被到达的地址和端口,并尝试连接到这些地址,通过在两端发起出站请求或者如果万不得已,通过TURN服务器进行通信来解决这个问题。
请参见WebRTCHacks article以了解更多信息。
“为什么其他用户需要熟悉我的内部网络设置?”因为其他用户有时会在您的内部网络中,例如局域网游戏。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接