1 前言
掐指一算,貌似快两年没写博客了。最近在看有关音频视频直播相关的东西,其中就包括WebRTC。WebRTC并不是一个协议,而是一项实时通讯技术,其中使用了许多的协议,这篇文章就来总结一下WebRTC中的各种协议。这篇文章需要读者对WebRTC有一定的了解。
2 传输层协议
开门见山的说,WebRTC使用UDP作为传输层协议。使用TCP作为传输层协议的话,如果中间出现丢包的情况,由于TCP需要保证传输的可靠性,会反复向发送端索取丢失的包,已经获取的包会被缓冲起来。而UDP则不保证传输的可靠性,适合WebRTC实时性大于可靠性的需求。
3 RTCPeerConnection相关协议
在WebRTC中,RTCPeerConnetcion API负责把获取到的媒体流传输到另外一台视频播放设备,其中涉及到了多种协议。
3.1 P2P内网穿透
3.1.1 NAT协议
网络地址转换协议(Network Address Translator),其作用是将内网IP映射为外网IP,也叫做网络掩蔽或者IP掩蔽(IP masquerading),是一种在IP数据包通过路由器或防火墙时重写来源IP地址或目的IP地址的技术。这种技术被普遍使用在有多台主机但只通过一个公有IP地址访问因特网的私有网络中,NAT协议减缓IPv4地址的消耗。
值得一提的是,NAT协议的功能是由几个层共同完成的,一般认为NAT协议工作在网络层但是要结合传输层共同来实现。后续将计划单独写一篇博客来介绍NAT协议相关知识。
3.2 流媒体协议
WebRTC采用SRTP和SRTCP作为其流媒体协议,用于传输音视频,但SRTP和SRTCP与另外两个协议——RTP和RTCP关系比较密切,这里也一并介绍了。
3.2.1 RTP
实时传输协议 (Real-time Transport Protocol)是用于Internet上针对多媒体数据流的一种传输层协议。RTP协议详细说明了在互联网上传递音频和视频的标准数据包格式,RTP协议是建立在UDP协议上的。
RTP 由两个紧密链接部分组成: RTP ― 传送具有实时属性的数据;RTP 控制协议(RTCP) ― 监控服务质量并传送正在进行的会话参与者的相关信息。
3.2.2 RTCP
实时传输控制协议(Real-time Transport Control Protocol或RTP Control Protocol或RTCP)是RTP的一个姐妹协议。RTCP为RTP媒体流提供信道外控制。RTCP本身并不传输数据,但和RTP一起协作将多媒体数据打包和发送。RTCP定期在会话参加者之间传输控制数据。RTCP的主要功能是为RTP所提供的服务质量提供反馈。
RTCP收集相关媒体连接的统计信息,例如:传输字节数,传输分组数,丢失分组数,jitter,单向和双向网络延迟等等。网络应用程序可以利用RTCP所提供的信息试图提高服务质量,比如限制信息流量或改用压缩比较小的编解码器。RTCP本身不提供数据加密或身份认证。SRTCP可以用于此类用途。
3.2.3 SRTP
安全实时传输协议(Secure Real-time Transport Protocol) ,是在实时传输协议(Real-time Transport Protocol或RTP)基础上所定义的一个协议,旨在为单播和多播应用程序中的实时传输协议的数据提供加密、消息认证、完整性保证和重放保护。
3.2.4 SRTCP
安全实时传输控制协议(Secure RTCP或SRTCP),类似于RTP和RTCP之间的关系,SRTP同样也有一个伴生协议,即为SRTCP协议。
3.3 数据协议
3.3.1 DTLS
数据包传输层安全性协议(Datagram Transport Layer Security) UDP是不安全的,但是WebRTC要求所有传输的数据(音频、视频和自定义应用数据)都必须加密,所以这里就要引入一个DTLS协议的概念。
DTLS就是因为TLS无法保证UDP上传输的数据的安全,所以在现存的TLS协议架构上提出了扩展,用来支持UDP。
3.3.2 TLS
安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性,是SSL 3.0的后续版本。
4 DataChannel相关协议
除了传输音频和视频数据,WebRTC 还支持通过 DataChannel API 在端到端之间传 输任意应用数据。DataChannel 依赖于 SCTP,而 SCTP 在两端之间建立的 DTLS 信道之上运行的.
4.1 STCP
流控制传输协议(Stream Control Transmission Protocol),是一种在网络连接两端之间同时传输多个数据流的协议。
SCTP同时具备了TCP和UDP中最好的功能:
- 面向消息的 API
- 可配置的可靠性及交付语义
- 内置流量和拥塞控制机制
TCP与SCTP对比如下:
- TCP是单流有序传输,SCTP是多流可配置传输
- TCP是单路径传输,SCTP是多路径传输
- SCTP两端之间的连接可以绑定多条IP,只要有一条连接是通的,那么就是通的
- TCP连接建立是三次握手,SCTP则需要四次握手
- TCP以字节为单位传输,SCTP以数据块为单位传输