文章目录
- 基础概念
- NAT (Network Address Translation) 打洞
- STUN(Session Traversal Utilities for NAT)
- 基于STUN协议的DDoS反射攻击 # TODO
- TURN(Traversal Using Relays around NAT)
- ICE(Interactive Connectivity Establishment)
- SDP(Session Description Protocol)
- 一个典型的WebRTC通信流程
基础概念
零基础快速入门WebRTC:基本概念、关键技术、与WebSocket的区别
真实世界中的WebRTC:STUN, TURN and signaling
- 标准的、低延迟的方式来传递媒体数据(视频&音频)。
- 客户端是以P2P的方式,使用UDP协议发送数据。
- ICE:客户端需要交换ICE和SDP 信令,才能建立链接。
- WebRTC协议不关心使用什么方式来交换信令,WebSockets、Socket.io、HTTP甚至人工交换都可以,实际上长字符串传递给其他人罢了。
NAT (Network Address Translation) 打洞
-
一对一 NAT:外部的IP和port可以映射到内部的IP和port。
-
IP 受限型 NAT:
-
端口受限型 NAT:
-
对称 NAT:Symmetric NAT 该方式是限制最多的一种,必须使用TURN服务。
-
NAT相关资料:
- P2P技术详解(一):NAT详解——详细原理、P2P简介
- 通俗易懂:快速理解P2P技术中的NAT穿透原理
STUN(Session Traversal Utilities for NAT)
- NAT给设备提供了一个IP地址以使用局域网,但是该地址不能在外部使用。由于没有公用地址,WebRTC端对端就无法进行通信,STUN用来解决这个问题。
- STUN服务器位于公共网络上。
- 只有一个简单的任务:检查客户端传入请求的IP地址(来自运行在NAT后面的应用程序),并将该地址作为响应发送回去。客户端为自己获得一个公网地址,然后通过信令机制将其传递给另一端以建立P2P直接连接。
- 简单理解:STUN服务器是用来获取外部地址的。
基于STUN协议的DDoS反射攻击 # TODO
新型DDoS来袭 | 基于STUN协议的DDoS反射攻击分析
-
STUN支持使用UDP协议来发送,STUN请求/响应事务的可靠性是通过客户端应用程序本身重新传输请求消息来实现的。黑客利用UDP无状态的这种机制,伪造攻击目标请求STUN服务器,把开启该服务的主机作为反射源,进行DDoS反射攻击,实现伪装和攻击。
-
STUN响应时会进行重试,黑客利用该机制可放大几倍的攻击量。
-
防护建议:对于STUN互联网应用提供者,可限制可访问的源IP的地址范围减少利用情况,或者 只准使用tcp发送STUN协议,对于企业用户,推荐接入DDoS防护产品对抗大流量DDoS攻击。
TURN(Traversal Using Relays around NAT)
- 两个客户端无法直接通信,只能依赖TURN服务。TURN服务往往作为后备。
- 所有的通信内容都要经过 TURN 服务器的转发,所以 TURN 服务器的维护成本比较高。
- TURN用于中继对等端之间的音频/视频/数据流,而不是信令数据。
- TURN服务器都支持 STUN,所以TURN服务器一般内置STUN服务器。
- 简单理解:TURN服务器是用来在客户端P2P直连失败的情况下进行中继转发数据流的。
ICE(Interactive Connectivity Establishment)
- ICE是用来对付NAT和防火墙,使用ICE来消除实际网络的复杂性,ICE会试图找到连接对方的最佳途径。
- ICE会会收集所有可用的通信路径,本地 IP 地址、STUN 和 TURN 服务器提供的地址等等。把收集到的所有地址都将放入 SDP 中,再送到对端,对端通过解析 SDP 来了解我方提供的重要信息。
SDP(Session Description Protocol)
- SDP信令 是一种用于表述 ICE Candidates 的格式,它描述了网络选项、媒体选项、安全选项和其他很多信息,甚至可以自定义 SDP 内容。
一个典型的WebRTC通信流程
- A 想要和B建立连接;
- A 创建了一个 offer,它寻找所有的 ICE candidate、安全选项、音视频选项等并创建 SDP(简单来说这个 offer 就是 SDP);
- A 将 SDP 信令传递给 B(Signaling);
- B 根据 A 的 offer 进行设置,并创建应答(answer);
- B 将 Answer 信令传递给 A(Signaling);
- 连接建立。