如何使用Web RTC - Javascript发送UDP数据包?

19

如何使用Web RTC发送UDP数据包?


嘿,用户,我正在处理WebRTC并很乐意提供帮助,但您必须提供更多细节;否则,这将被关闭为不是一个真正的问题。您能展示一下您试图做什么的例子吗?WebRTC实际上并不使用UDP,它使用WebSocket上的TCP(或TCP上的WebSocket)。因此,没有进一步的澄清,我真的不确定这是否有意义。 - jamesmortensen
当然,这里有一个使用ICE类似的示例:http://www.html5rocks.com/en/tutorials/webrtc/basics但我正在寻找更简单的东西。比如聊天示例。 - Taurian
2
好的,我不确定你是否理解Stack Overflow的目的。 它真的不是为人们编写代码,而是解决他们面临的真实、实际、具体的问题。 您在这里提出的问题仍然相当模糊。 你想做什么? 我建议你[编辑]帖子,以包括更多关于问题的细节。 已经有WebRTC的示例存在了,所以如果你正在做与此不同的事情,请解释一下是什么。 祝好运! :) - jamesmortensen
http://apprtc.appspot.com << 在两个不同的启用了Chrome WebRTC的浏览器中加载... - jamesmortensen
我改正了!WebRTC在数据传输的RTP部分使用UDP。您可以通过进行TCPdump来查看此内容。但是,SIP消息传递是通过WebSockets完成的,全部使用TCP。就像spicyramen所说,可以查看sipml5。希望这有所帮助! - jamesmortensen
这是另一个示例:http://simpl.info/dc - Janus Troelsen
3个回答

24

在WebRTC中,你无法直接发送UDP数据包。这将违反浏览器所需的基本安全约束。

你可以向启用ICE的主机发送SRTP。但这可能不是你正在寻找的。

如果浏览器允许发送任意UDP数据包,则恶意应用程序可能会向任何主机发送数据包。

听起来可能并没有那么糟糕,毕竟Internet上的主机需要处理这些数据包,对吧?问题在于,某些浏览器处于受保护的环境中,网络访问受到限制。在这些网络中,一些主机的保护程度要比公共Internet上的主机低得多。这本身没有问题,因为网络访问受到控制。

如果浏览器能够发送任意数据包,那么在该环境中使用浏览器的用户可能会被说服向其中一个这些较差保护的主机发送特别设计的数据包。很可能,这将导致网络运营商禁止该浏览器,而浏览器制造商非常希望避免这种情况发生。

WebRTC只在特定条件下发送某些类型的UDP数据包。如果您想要与的主机理解ICE并且能够使用SRTPSCTP over DTLS消费RTP(我认为这不太可能)。那么也许您可以强制浏览器发送一些内容。

5
你没有区分任意有效载荷和任意目标地址。如果浏览器实现与 TCP 相同的安全限制,但更加严格(例如,将目标 IP 地址限制为脚本所加载的主机),那么这不会成为一个问题。 - Kenney

4

2
“@Martin Thomson 很好地解释了这个问题。通过受到他帖子的启发,这篇文章可能为一些极客和新手提供指导。
据说WebRtc是两个或多个对等方之间的实时、双向、安全通信。我将更加关注这个词:安全。”
企业网络的安全策略通常需要过滤传入的未经请求的流量,阻止某些协议,并进行应用层过滤和垃圾邮件、恶意软件和知识产权的扫描。
现在有两个新问题:
1. TCP穿越为什么不成问题? 2. UDP穿越为什么成问题?
TCP穿越为什么不是问题?
TCP明确表示两件事情:
1. 流的开始(SYN) 2. 流的结束(FIN或RST)
这被防火墙用于打开和关闭针孔。异常情况下,长时间未接收到流量的TCP连接也会关闭其针孔(以适应网络拓扑变化或两个TCP对等体的故障)。防火墙还执行协议验证,清除以下问题:
1. 窗口外的TCP段 2. 重叠的TCP段
这使得防火墙可以保护网络并保护主机免受多种攻击向量(重放攻击、主机IP地址探测、DDOS攻击等)的攻击。
为什么UDP穿越存在问题?
对于UDP流,5元组中的第一个出站数据包将被防火墙用作“会话开始”的指示器。但是UDP没有“会话结束”的指示器,因此防火墙只有“两种方式”来关闭针孔:
- 在“内部主机”不发送流量几秒钟后超时针孔 - 内部主机生成致命的“ICMP错误”。
由于没有可靠的方法确定会话是否停止,防火墙的工作就变得更加困难。它可以实现应用程序级网关(ALG)并了解UDP之上的高级代码强制执行的任何语义。
它也可以依赖一组众所周知的应用程序服务器,在会话开始和结束时通知它,但这会面临许多挑战,因为应用程序服务器独立于它们所使用的网络上托管。
使用ALG,防火墙可以确定呼叫何时终止,并关闭为媒体会话创建的任何动态映射。但问题在于WebRTC应用程序在浏览器中运行和Web服务器之间的会话信令可能使用TLS,这种情况下,ALG不再能够访问信令。
结论:
在应用级网关中,WebRTC利用SDP和ICE的组合。WebRtc基本上以这样的方式包装UDP:
1. 对于音频、视频通道,WebRtc使用RTP、RTCP、SRTP的组合来覆盖DTLS。 2. 对于数据通道,webrtc使用流控制传输协议(SCTP),定义在RFC 2960中。
SCTP是一个传输层协议,旨在作为TCP或UDP的替代品。对于WebRtc,我们使用它作为运行在DTLS连接上的应用层协议。
这些协议还带有一些新的协议,如STUN、TURN。有关WebRtc的基本实现,请参阅;

我希望这个解释能够帮助一些极客。谢谢。


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