Page 306 - Web性能权威指南
P. 306
• 流控制传输协议(SCTP,Stream Control Transport Protocol)用于传输应用数据。
18.5.1 通过DTLS实现安全通信
WebRTC 规范要求所有传输的数据(音频、视频和自定义应用数据)都必须加密。
当然啦,如果不是因为有赖于 TCP 的有序交付,TLS 是最合适的。既然是 UDP 连
接,所以 WebRTC 就使用 DTLS,它能提供与 TLS 相同的安全保护。
DTLS 在设计上有意与 TLS 保持一致,事实上,DTLS 本质上就是 TLS,只是为了
兼容 UDP 的数据报传输而做了一些微小的修改。特别地,DTLS 解决了下列问题:
(1) TLS 要求可靠的有序的适合分段的握手记录以协商信道;
(2) 如果在混合多个分组的基础上对记录分段,就不能保证 TLS 的完整性校验;
(3) 如果记录的顺序不对,也不能保证 TLS 的完整性校验。
要了解握手过程和记录协议结构的详细信息,请参考 4.2 节“TLS 握手”
和 4.6 节“TLS 记录协议”。
要解决 TLS 握手顺序的问题并不简单:每条记录都有特定用途,而且必须按照握手
算法规定的次序发送,而有些记录轻易就会包含多个分组。结果,DTLS 就针对握
手顺序实现了一个“迷你 TCP”(图 18-11)。
图 18-11:DTLS 握手记录中的序号和分段偏移字段
DTLS 对 TLS 记录协议的扩展,就是为每条握手记录明确添加了分段偏移字段和序
号。这样就满足了有序交付的条件,也能让大记录可以被分段成多个分组并在另一
端再进行组装。DTLS 握手记录严格按照 TLS 协议规定的顺序传输,顺序不对就报
错。最后,DTLS 还要处理丢包问题:两端都使用计时器,如果预定时间内没有收
到应答,就重传握手记录。
296 | 第 18 章