WebRTC:數據傳輸相關協議簡介

對網絡協議來講,須要作的一般就兩件事情:一、創建鏈接,二、傳輸數據,WebRTC也不例外。html

假設WebRTC應用的兩端已經創建了鏈接,那麼,剩下就是如何傳輸數據的問題了。git

WebRTC同時支持傳輸音視頻數據、自定義應用數據。這其中,涉及多種協議,包括UDP、RTP/SRTP、RTCP/SRTCP、DTLS、SCTP。github

這些協議名字比較類似,很容易讓人混淆,簡單總結下:安全

  1. 傳輸音視頻數據相關協議:UDP、DTLS、RTP/SRTCP;
  2. 傳輸自定義應用數據相關協議:UDP、DTLS、SCTP;

下面就簡單介紹下,這些協議是作什麼的,有什麼區別,存在什麼聯繫。markdown

加密信道創建:UDP、DTLS

對WebRTC應用來講,無論是音視頻數據,仍是自定義應用數據,都要求基於加密的信道進行傳輸。DTLS 有點相似 TLS,在UDP的基礎上,實現信道的加密。網絡

DTLS的主要用途,就是讓通訊雙方協商密鑰,用來對數據進行加解密。oop

  1. 通訊雙方:經過DTLS握手,協商生成一對密鑰;
  2. 發送方:對數據進行加密;
  3. 發送方:經過UDP傳輸加密數據;
  4. 接收方:對加密數據進行解密;

音視頻數據傳輸:RTP/SRTP、RTCP/SRTCP

首先,咱們先來看下RTP、RTCP的大概用途:加密

  1. RTP(Realtime Transport Protocol):實時傳輸協議,主要用來傳輸對實時性要求比較高的數據,好比音視頻數據。
  2. RTCP(RTP Trasport Control Protocol):RTP傳輸控制協議,跟RTP在同一份RFC中定義,主要用來監控數據傳輸的質量,並給予數據發送方反饋。

也就是說:spa

  1. RTP用來傳輸音視頻數據;
  2. RTCP用來傳輸(質量)控制數據;好比監控傳輸的質量,並在會話雙方之間進行同步,方便WebRTC根據傳輸質量進行動態調整,好比傳輸的速率、視頻的碼率等。

至於SRTP、SRTCP,分別在RTP、RTCP的基礎上加了個S(Secure),表示安全的意思,這個就是DTLS作的事情了。設計

結合前面內容,總結一下音視頻數據的發送過程:

  1. 通訊雙方:經過DTLS握手,協商生成一對密鑰;
  2. 數據發送方:將音視頻數據封裝成RTP包,將控制數據封裝成RTCP包;
  3. 數據發送方:利用加密密鑰,對RTP包、RTCP包進行加密,生成SRTP包、SRTCP包;
  4. 數據發送方:經過UDP傳輸SRTP包、SRTCP包;

備註:SRTP/SRTCP包中,除了加密數據,還有其餘信息,這裏不展開細節。

自定義應用數據傳輸:SCTP

SCTP(Stream Control Transmission Protocol):流控制傳輸協議。

以前介紹過,RTP/RTCP主要用來傳輸音視頻,是爲了流媒體設計的。而對於自定義應用數據的傳輸,WebRTC中使用了SCTP協議。

一樣的,SCTP依賴DTLS創建的加密信道,對於自定義應用數據的發送,流程以下:

  1. 通訊雙方:經過DTLS握手,協商生成一對密鑰;
  2. 數據發送方:將自定義應用數據,經過密鑰進行加密,生成SCTP包;
  3. 數據發送方:經過UDP傳輸SCTP包;

寫在後面

爲了便於講解,跳過了不少協議的細節,有些地方可能會不夠嚴謹,感興趣的同窗能夠進行進一步研究,好比如下問題:

  1. 傳輸層用了UDP,UDP自己是不可靠的,那麼,音視頻數據、自定義用戶數據的時序、質量是如何保證的?
  2. RTP用來傳遞音視頻數據,爲何還須要有RTCP?
  3. 爲何說RTP不適合傳輸自定義用戶數據?
  4. SCTP如何從協議層面兼顧傳輸的效率和質量?如何實現自定義數據的高效傳遞?
  5. 其餘

相關連接

RTP: A Transport Protocol for Real-Time Applications
tools.ietf.org/html/rfc355…

Stream Control Transmission Protocol
tools.ietf.org/html/rfc496…

Datagram Transport Layer Security
tools.ietf.org/html/rfc434…

github博客:github.com/chyingp/blo…
新浪微博:weibo.com/chyingp
站酷主頁:www.zcool.com.cn/u/346408/

相關文章
相關標籤/搜索