如何使用 Web RTC 发送 UDP 数据包?
如何使用 Web RTC - Javascript 发送 UDP 数据包?
您不能直接使用 WebRTC 发送 UDP 数据包。这将违反浏览器所需的基本安全约束。
您可以将SRTP发送到支持ICE 的主机。这可能不是你要找的。
如果浏览器允许发送任意 UDP 数据包,则恶意应用程序可以将数据包发送到任何主机。
这听起来可能没那么糟糕,毕竟互联网上的主机需要能够处理吗?问题是某些浏览器处于受保护的环境中,对网络的访问受到限制。在这些网络中,某些主机受到的保护远不如公共 Internet 上的主机受到的保护。这没问题,因为对网络的访问是受控制的。
如果浏览器可以发送任意数据包,则可以说服该环境中浏览器上的用户将特制的数据包发送到这些保护不佳的主机之一。这可能会导致网络运营商禁止浏览器,这是浏览器制造商非常希望避免的。
WebRTC 仅在特定条件下发送某些类型的 UDP 数据包。如果您有兴趣与之交谈的主机了解ICE并且能够通过 DTLS使用带有SRTP或SCTP 的RTP(我认为不太可能)。那么也许你可以强制浏览器发送一些东西。
您应该检查 sipml5,http://code.google.com/p/sipml5/ 获取代码并查看文件夹:sipml5/src/tinySIP/src/transsports
@Martin Thomson 已经很好地解释了这个问题。通过从他的帖子中获取动力,这篇帖子可能会为一些极客和新手提供指导。
它被说的WebRTC是Real-time
,Bi-directional
,Secure
两个或两个以上的同行之间的通信。我会更关注这个词:Secure。
企业网络通常需要过滤传入的安全策略未经请求的通信,阻止某些协议,做应用层过滤和扫描的spam
,malware
和intellectual property
。
现在想到了两个新问题;
- 为什么 TCP 遍历没有问题?
- 为什么UDP遍历有问题?
为什么 TCP 遍历没有问题?
TCP 清楚地表明了两件事;
- 流的开始
(SYN)
和, - 一个流的结束
(FIN or RST)
。
这被防火墙用于open
和close
针孔。例外的是,长时间没有收到流量的 TCP 连接也会关闭其针孔(以适应网络拓扑更改或两个 TCP 对等方的故障)。防火墙还执行协议验证以清理问题
- 窗口外 TCP 段和,
- 重叠 TCP 段
这允许防火墙保护网络并保护主机免受多种攻击媒介(重放攻击、主机 IP 地址探测、DDOS 攻击等)。
为什么UDP遍历有问题?
对于 UDP 流,防火墙将使用 5 元组上的第一个传出数据包作为start-of-session
指示符。但是UDP没有end-of-session
指示器,所以防火墙只two ways
需要关闭一个针孔:
interior host
几秒钟不发送流量后超时针孔或- 内部宿主生成一个致命的
ICMP error
.
因为没有可靠的方法来确定会话是否被停止,防火墙的工作要困难得多。它可以实现一个应用程序级网关,(ALG)
并了解由 UDP 之上的更高级别代码强加的任何语义。
它还可以依靠一组众所周知的应用程序服务器在会话开始和结束时通知它会话,但由于应用程序服务器独立于使用它们的网络托管,因此面临许多挑战。
使用
ALG
,防火墙可以确定呼叫何时终止并关闭为媒体会话创建的任何动态映射。但问题在于浏览器中运行的 WebRTC 应用程序与可能使用 TLS 的 Web 服务器之间的会话信令,在这种情况下,ALG 不再有权访问信令。
结论:
因此,在应用层网关,采用的WebRTC的组合SDP
和ICE
。WebRtc 基本上UDP
以这样的方式包装
- 对于音频、视频频道,WebRtc 使用
RTP
,RTCP
,SRTP
over 的组合DTLS
。 - 对于数据通道,webrtc 使用RFC 2960 中
(SCTP)
定义的流控制传输协议。
SCTP 是一种传输层协议,旨在替代
TCP
或UDP
。对于 WebRtc,我们将其用作在我们的 DTLS 连接上运行的应用层协议。
这些协议还带有一些新协议,例如STUN
,TURN
。WebRtc的基本实现请关注;
我希望这个解释可以帮助一些极客。谢谢