【问题标题】:How to send a UDP Packet with Web RTC - Javascript?如何使用 Web RTC - Javascript 发送 UDP 数据包?
【发布时间】:2012-10-24 09:13:31
【问题描述】:

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

【问题讨论】:

  • 嘿用户,我正在开发 WebRTC,很乐意提供帮助,但您必须提供更多详细信息;否则,这将被关闭,因为这不是一个真正的问题。你能举例说明你正在尝试做什么吗? WebRTC 真的不使用 UDP,它使用 TCP over WebSockets(或 WebSockets over TCP)。因此,在没有进一步澄清的情况下,我真的不确定这是否有意义。
  • 当然,这里有类似的使用 ICE:html5rocks.com/en/tutorials/webrtc/basics 但我正在寻找更简单的东西。就像一个聊天的例子。谢谢
  • 好吧,我不确定你是否理解 Stack Overflow 的目的。它的真正目的不是为人们编写代码,而是解决他们面临的真实、实际、具体的问题。你在这里所拥有的仍然很模糊。你想做什么?我建议您 edit 在您的帖子中包含有关该问题的更多详细信息。已经有 WebRTC 的例子,所以如果你做的事情与此不同,请解释那是什么。祝你好运! :)
  • 我的立场是正确的! WebRTC 使用 UDP 进行数据传输的 RTP 部分。您可以通过执行 TCPdump 看到这一点。但是,SIP 消息传递是通过 WebSockets 完成的,而这都是 TCP。正如辣拉面所说,请查看 sipml5。希望这会有所帮助!

标签: javascript udp webrtc


【解决方案1】:

您不能直接使用 WebRTC 发送 UDP 数据包。这将违反浏览器所需的基本安全约束。

您可以将SRTP 发送到ICE-enabled 主机。这可能不是您想要的。

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

这听起来可能不是那么糟糕,毕竟 Internet 上的主机需要能够处理这个问题,对吧?问题是某些浏览器处于受保护的环境中,对网络的访问受到限制。在这些网络中,一些主机受到的保护远不如公共 Internet 上的主机受到的保护。这没关系,因为对网络的访问是受控的。

如果浏览器可以发送任意数据包,则可以说服该环境中浏览器上的用户将专门制作的数据包发送到这些保护不佳的主机之一。这可能会导致网络运营商禁止浏览器,而这是浏览器制造商非常希望避免的。

WebRTC 仅在特定条件下发送某些类型的 UDP 数据包。如果您有兴趣与之交谈的主机理解ICE 并且能够使用RTPSRTPSCTP over DTLS(不太可能)。那么也许你可以强制浏览器发送一些东西。

【讨论】:

  • 您不区分任意有效负载和任意目标地址。如果浏览器实现与 TCP 相同的安全约束,但更严格(例如,将目标 IP 地址限制为加载脚本的主机),这不会有问题。
【解决方案2】:

你应该检查 sipml5, http://code.google.com/p/sipml5/ 获取代码并查看文件夹: sipml5/src/tinySIP/src/transsports

【讨论】:

    【解决方案3】:

    @Martin Thomson 已经很好地解释了这个问题。通过采取 来自他的帖子的动机,这篇文章可能会为一些人提供指导 极客和新手。

    据说WebRtc是Real-timeBi-directionalSecure两个或多个peer之间的通信。我会更加关注这个词:安全


    企业网络的安全策略通常需要过滤传入的未经请求的流量阻止某些协议,并进行应用级过滤扫描spammalwareintellectual property

    现在想到了两个新问题;

    1. 为什么 TCP 遍历没有问题?
    2. 为什么 UDP 遍历有问题?

    为什么 TCP 遍历没有问题?

    TCP 清楚地表明了两件事;

    • 流程的开始(SYN) 和,
    • 流程结束(FIN or RST)

    这被防火墙用于openclose 针孔。特殊情况下,长时间没有收到流量的 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 使用了SDPICE 的组合。 WebRtc 基本上以这样的方式包装UDP

    1. 对于音频、视频通道,WebRtc 使用 RTPRTCPSRTPDTLS 的组合。
    2. 对于数据通道,webrtc 使用流控制传输协议(SCTP),在RFC 2960 中定义。

    SCTP 是一种传输层协议,旨在作为替代方案 到TCPUDP。对于 WebRtc,我们将其用作应用层 在我们的 DTLS 连接上运行的协议。

    这些协议还附带一些新协议,例如STUNTURN。 WebRtc的基本实现请关注;

    我希望这个解释可以帮助一些极客。谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-30
      • 2013-09-15
      • 1970-01-01
      • 2018-07-22
      • 1970-01-01
      相关资源
      最近更新 更多