WebRTC服务器理论铺垫(六):OpenSSL协议,DTLS协议,RTP协议和SRTP协议
文章目錄
- 一、SSL協(xié)議
- 二、OpenSSL
- 三、TLS和DTLS
- 四、DTLS的通信的步驟圖
- 五、RTP協(xié)議和SRTP協(xié)議
- 5.1 詳解RTP協(xié)議
- 5.2 詳解RTCP協(xié)議
- 5.3 RTP && RTCP的協(xié)議的關鍵技術
- 六、DTLS-SRTP協(xié)議
一、SSL協(xié)議
SSL的全名叫做secure socket layer(安全套接字層),最開始是由一家叫網景的互聯(lián)網公司開發(fā)出來,主要是防止信息在互聯(lián)網上傳輸的時候不被竊聽或者篡改,后來網景公司提交SSL給ISOC組織做標準化,改名為TLS(transport layer security)。其實在互聯(lián)網的數據傳輸中,對數據進行竊聽和修改是非常容易的,如果你上網連得的是wifi,那么你的數據一定會經過wifi路由器,通過對路由器做些手腳就可以拿到這些數據。
SSL主要簡化有以下幾個步驟:
二、OpenSSL
上面的SSL只是一個協(xié)議,openssl則是SSL的實現(xiàn)工具,另外openssl還包含了公鑰私鑰的生成,摘要生成等各種工具。
OpenSSL由三部分組成:
三、TLS和DTLS
TLS是基于TCP協(xié)議的,DTLS是基于UDP協(xié)議的。
DTLS協(xié)議的握手過程如下:
DTLS的安全性在以下幾個方面得到了保障:
- DTLS在握手時進行Cookie校驗,防止dos攻擊(放重放)。
- DTLS在握手時具有身份證書和數據簽名,防止篡改和冒充。
- DTLS在握手時使用公鑰密碼進行加密,防止秘密密鑰被泄露。
- DTLS在通信時使用秘密密鑰進行加密,防止通信內容泄露(機密性)。
- DTLS在傳輸方面使用HMAC對數據完整性進行校驗,防止數據被篡改(完整性).
簡單的來說,DTLS是TLS的升級版,兩者的握手過程基本上是一致的,差別以及特別說明如下:
- DTLS中HelloVerifyRequest是為防止DoS攻擊增加的消息。
- TLS 沒有發(fā)送證書申請,這個也不是必須的,是反向驗證即服務器驗證客戶端。
- DTLS的Record協(xié)議 新增了序號和紀元,以及ClientHello中新增了Cookie,以及握手中新增了碎片信息(防止超過UDP的MTU),都是為了適應UDP的丟包以及容易被攻擊做的改進。
- DTLS最后的警報是將客戶端的加密警報消息,解密之后直接響應給客戶端的,實際上服務器應該回應加密的消息,這里服務器回應明文是為了解析客戶端加密的那個警報包是什么。
四、DTLS的通信的步驟圖
注意,在STUN Request中會將ICE的username和password帶過去。
如下圖中的ice-ufrag和 ice-pwd
五、RTP協(xié)議和SRTP協(xié)議
RTP(Real Time Transport Protocol)是針對Internet上多媒體數據流的一個傳輸協(xié)議。其被定義為在一對一或者一對多的傳輸情況下工作,其目的是提供時間信息和實現(xiàn)流同步。RTP本身只能保證實時數據的傳輸,并不能為按順序傳送數據包提供可靠的傳送機制,也不能提供流量控制或者擁塞控制,它依靠RTCP提供這些服務。
Real-time Transport Control Protocol或RTP Control Protocol或簡寫RTCP)是實時傳輸協(xié)議(RTP)的一個姐妹協(xié)議。RTCP由RFC 3550定義(取代作廢的RFC 1889)。RTP 使用一個 偶數 UDP port ;而RTCP 則使用 RTP 的下一個 port,也就是一個奇數 port。RTCP與RTP聯(lián)合工作,RTP實施實際數據的傳輸,RTCP則負責將控制包送至電話中的每個人。其主要功能是就RTP正在提供的服務質量做出反饋。
5.1 詳解RTP協(xié)議
從下圖可看出RTP被劃分在傳輸層,它建立在UDP上。同UDP協(xié)議一樣,為了實現(xiàn)其實時傳輸功能,RTP也有固定的封裝形式。RTP用來為端到端的實時傳輸提供時間信息和流同步,但并不保證服務質量。服務質量由RTCP來提供。
RTP的數據報文格式如下:
填充位(1bit)若p=1則在該報文的尾部填充一個或多個額外的八位組,它們不是有效載荷的一部分。填充可能用于某些具有固定長度的加密算法或者用在底層數據單元中傳輸多個RTP包
擴展(X):1個比特,置“1”表示RTP報頭后緊隨一個擴展報頭
參與源數(CSRC計數(CC) )4b,CSRC計數包括緊接在固定頭后CSRC標識符個數。
標記(M):1個比特,其具體解釋由應用文檔來定義。例如,對于視頻流,它表示一幀的結束,而對于音頻,則表示一次談話的開始
有效載荷類型,7個比特,它指示在用戶數據字段中承載數據的載荷類別,記錄后面資料使用哪種編碼,接收端找出相應的 decoder 解碼出來。
音頻:μ律PCM(0),GMS(3)
A律PCM(8),G.722(9),G728(1)
視頻:活動JPEG(26)、H.261(31)、
MPEG1(32)、MPEG2(33)等
5.2 詳解RTCP協(xié)議
RTCP也是用UDP來傳送的,但RTCP封裝的僅僅是一些控制信息,因而分組很短,所以可以將多個RTCP分組封裝在一個UDP包中。RTCP有如下五種分組類型。
1、SR:
發(fā)送端報告包,用于發(fā)送和接受活動源的統(tǒng)計信息
2、RR:
接收者報告包,用于接收非活動站的統(tǒng)計信息;
3、SDES:
源描述包,用于報告和站點相關的信息,包括CNAME;
4、BYE:
斷開RTCP包,是站點離開系統(tǒng)的報告,表示結束;
5、APP:
應用特定函數。
5.3 RTP && RTCP的協(xié)議的關鍵技術
-
時間戳
-
時延:
影響時延的因素有多個方面: - 編解碼
- 網絡
- 防抖動的緩沖:抖動指的是一對包中接收機相對于發(fā)射機的時間跨度的差值的平均偏差。該值等于兩個包相對傳輸時間的差值,相對傳輸時間指的是包的RTP時間標志和到達時刻接收機時鐘,以同一單位的差值。
比如我們假設Si是包i的開始傳輸RTP時間標志,Ri是包i到達時刻的RTP時間標志值。對于兩個包i和j,D可以表達為:
D(i,j) = (Rj - Ri) - (Sj - Si) = (Rj - Sj) - (Ri - Si).
到達時刻抖動J可以在收到從源SSRC_n來的每個數據包i后連續(xù)計算,利用該包和前一包i-1的偏差D。
根據公式 J(i) = J(i-1) + (|D(i-1,i)| - J(i-1))/16 計算
SRTP其實是在RTP的基礎上,對數據(Encrypted RTP payload)進行加密的協(xié)議.
六、DTLS-SRTP協(xié)議
在WebRTC中,DTLS要解決的問題是交換密鑰,確認雙方的加密算法(比如AES128)。
在WebRTC中,SRTP要解決的問題是對數據加密保證數據安全,保證數據完整性。
LIBSRTP: 由思科開發(fā)的開源庫。調用步驟如下圖所示
總結
以上是生活随笔為你收集整理的WebRTC服务器理论铺垫(六):OpenSSL协议,DTLS协议,RTP协议和SRTP协议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件工程经济学复习题答案
- 下一篇: AI产品经理入门