从 sgcWebSockets 2022.8.0 起,sgcWebSockets 库新增了 TsgcRTCPeerConnection 组件。
TsgcRTCPeerConnection 是一个客户端组件,允许通过 UDP 以 P2P 方式连接对等节点。流程分为 4 个步骤:- 信令
- 连接
- 加密
- 通信
为实现上述步骤,客户端使用以下协议:
- WebSocket:用于信令,客户端交换会话描述协议以及本地、公网和中继 IP 地址。
- UDP:传输协议,客户端使用 UDP 在对等节点之间收发消息。
- DTLS:类似于 TLS,是加密规范,保护对等节点之间消息安全,防止第三方读写。
- STUN:获取公网 IP 地址的协议。
- TURN:对等节点位于 NAT 后时中继 IP 地址的协议。
- ICE:查找对等节点之间可访问的 IP 地址和端口的协议。
信令
客户端启动时不知道将与谁通信,也不知道通信内容。信令使用 SDP(会话描述协议),包含如下详情:
- 可访问对等节点的 IP 和端口
- 用于保护通信的指纹证书
- 用户名和密码
- ...
信令使用 WebSocket 协议交换数据,通过子协议实现,在服务器端由 TsgcWSPServer_RTCPeerConnection 组件实现。
TsgcRTCPeerConnection 内部已创建绑定了 TsgcWSPClient_RTCPeerConnection 的 WebSocket 客户端。
为获取 IP 和端口,客户端使用 STUN/TURN 协议获取此信息。因此也需要 STUN/TURN 服务器。
相关链接:
- RTCPeerConnection WebSocket Server
- RTCPeerConnection WebSocket Client
- RTCPeerConnection STUN TURN
- RTCPeerConnection Signaling
连接
当两个对等节点获知候选者和 SDP 后,客户端使用另一种标准协议 ICE。
ICE(交互式连接建立)允许在两个对等节点之间建立连接。对等节点可在同一网络或 NAT 之后……ICE 是无需中央服务器即可建立直接连接的解决方案。若无法建立 P2P 连接,ICE 将使用 TURN 服务器中继数据。
ICE 找到可连接两个对等节点的有效候选者后,下一步是加密通信。
相关链接:
加密
对等节点连接后,通信必须是安全的。这通过 DTLS 实现,DTLS 是用于保护 UDP 上通信的加密协议。
DTLS 握手成功处理后,使用另一种协议 SRTP(安全实时传输协议),目前 SRTP 尚未实现。
相关链接:
通信
两个对等节点使用安全协议后,通信通过 2 种协议进行:
- RTP:实时传输协议,用于交换经 SRTP 加密的媒体数据。
- SCTP:流控传输协议,用于发送和接收经 DTLS 加密的 DataChannel 消息。
这些协议目前尚未实现,但您可以通过 UDP 上的 DTLS 发送/接收数据。
