“@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的基本实现,请参阅;
我希望这个解释能够帮助一些极客。谢谢。