如何使用 Web RTC 发送 UDP 数据包?
3 回答
您不能直接使用 WebRTC 发送 UDP 数据包。这将违反浏览器所需的基本安全约束。
您可以将SRTP发送到启用 ICE 的主机。这可能不是你要找的。
如果浏览器允许发送任意 UDP 数据包,那么恶意应用程序就可以向任何主机发送数据包。
这听起来可能不是那么糟糕,毕竟 Internet 上的主机需要能够处理这个问题,对吗?问题是某些浏览器处于受保护的环境中,对网络的访问受到限制。在这些网络中,一些主机受到的保护远不如公共 Internet 上的主机受到的保护。这没关系,因为对网络的访问受到控制。
如果浏览器可以发送任意数据包,则可以说服该环境中浏览器上的用户将特制数据包发送到这些保护不佳的主机之一。这可能会导致网络运营商禁止浏览器,这是浏览器制造商非常希望避免的事情。
WebRTC 仅在特定条件下发送某些类型的 UDP 数据包。如果您有兴趣与之交谈的主机了解ICE并且能够通过SRTP或SCTP over DTLS使用RTP(我不太可能这么认为)。那么也许你可以强制浏览器发送一些东西。
您应该检查 sipml5,http://code.google.com/p/sipml5/ 获取代码并查看文件夹:sipml5/src/tinySIP/src/transports
@Martin Thomson 很好地解释了这个问题。通过从他的帖子中获取动力,这篇文章可能会为一些极客和新手提供指导。
据说 WebRtc 是两个或多个对等点之间Real-time
的Bi-directional
通信。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的基本实现请关注;
我希望这个解释可以帮助一些极客。谢谢