WebRTC服务器理论铺垫(六):OpenSSL协议,DTLS协议,RTP协议和SRTP协议


一、SSL协议

SSL的全名叫做secure socket layer(安全套接字层),最开始是由一家叫网景的互联网公司开发出来,主要是防止信息在互联网上传输的时候不被窃听或者篡改,后来网景公司提交SSL给ISOC组织做标准化,改名为TLS(transport layer security)。其实在互联网的数据传输中,对数据进行窃听和修改是非常容易的,如果你上网连得的是wifi,那么你的数据一定会经过wifi路由器,通过对路由器做些手脚就可以拿到这些数据。

SSL主要简化有以下几个步骤:

  1. 客户端向服务器端索要并验证对方证书
  2. 双方协商生成会话密钥(前两部合称为握手阶段,handshake)
  3. 双方采用会话密钥进行加密通信
  4. 断开连接

二、OpenSSL

上面的SSL只是一个协议,openssl则是SSL的实现工具,另外openssl还包含了公钥私钥的生成,摘要生成等各种工具。
OpenSSL由三部分组成:

  1. libencrpt库:加密解密库
  2. libssl库,实现SSL功能,用于通信加密的库
  3. openssl:多用途命令行工具

在这里插入图片描述

三、TLS和DTLS

TLS是基于TCP协议的,DTLS是基于UDP协议的。
DTLS协议的握手过程如下:
在这里插入图片描述
DTLS的安全性在以下几个方面得到了保障:

  • DTLS在握手时进行Cookie校验,防止dos攻击(放重放)。
  • DTLS在握手时具有身份证书和数据签名,防止篡改和冒充。
  • DTLS在握手时使用公钥密码进行加密,防止秘密密钥被泄露。
  • DTLS在通信时使用秘密密钥进行加密,防止通信内容泄露(机密性)。
  • DTLS在传输方面使用HMAC对数据完整性进行校验,防止数据被篡改(完整性).

简单的来说,DTLS是TLS的升级版,两者的握手过程基本上是一致的,差别以及特别说明如下:

  • DTLS中HelloVerifyRequest是为防止DoS攻击增加的消息。
  • TLS 没有发送证书申请,这个也不是必须的,是反向验证即服务器验证客户端。
  • DTLS的Record协议 新增了序号和纪元,以及ClientHello中新增了Cookie,以及握手中新增了碎片信息(防止超过UDP的MTU),都是为了适应UDP的丢包以及容易被攻击做的改进。
  • DTLS最后的警报是将客户端的加密警报消息,解密之后直接响应给客户端的,实际上服务器应该回应加密的消息,这里服务器回应明文是为了解析客户端加密的那个警报包是什么。

四、DTLS的通信的步骤图

在这里插入图片描述
注意,在STUN Request中会将ICE的username和password带过去。
如下图中的ice-ufrag和 ice-pwd
在这里插入图片描述

五、RTP协议和SRTP协议

RTP(Real Time Transport Protocol)是针对Internet上多媒体数据流的一个传输协议。其被定义为在一对一或者一对多的传输情况下工作,其目的是提供时间信息和实现流同步。RTP本身只能保证实时数据的传输,并不能为按顺序传送数据包提供可靠的传送机制,也不能提供流量控制或者拥塞控制,它依靠RTCP提供这些服务。

Real-time Transport Control Protocol或RTP Control Protocol或简写RTCP)是实时传输协议(RTP)的一个姐妹协议。RTCP由RFC 3550定义(取代作废的RFC 1889)。RTP 使用一个 偶数 UDP port ;而RTCP 则使用 RTP 的下一个 port,也就是一个奇数 port。RTCP与RTP联合工作,RTP实施实际数据的传输,RTCP则负责将控制包送至电话中的每个人。其主要功能是就RTP正在提供的服务质量做出反馈。

在这里插入图片描述

5.1 详解RTP协议

从下图可看出RTP被划分在传输层,它建立在UDP上。同UDP协议一样,为了实现其实时传输功能,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协议

在这里插入图片描述

RTCP也是用UDP来传送的,但RTCP封装的仅仅是一些控制信息,因而分组很短,所以可以将多个RTCP分组封装在一个UDP包中。RTCP有如下五种分组类型。

在这里插入图片描述
1、SR:
发送端报告包,用于发送和接受活动源的统计信息
2、RR:
接收者报告包,用于接收非活动站的统计信息;
3、SDES:
源描述包,用于报告和站点相关的信息,包括CNAME;
4、BYE:
断开RTCP包,是站点离开系统的报告,表示结束;
5、APP:
应用特定函数。

5.3 RTP && RTCP的协议的关键技术

  • 时间戳

  • 时延:
    影响时延的因素有多个方面:

    1. 编解码
    2. 网络
    3. 防抖动的缓冲:抖动指的是一对包中接收机相对于发射机的时间跨度的差值的平均偏差。该值等于两个包相对传输时间的差值,相对传输时间指的是包的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后连续计算,利用该包和前一包i-1的偏差D。
    根据公式 J(i) = J(i-1) + (|D(i-1,i)| - J(i-1))/16 计算

在这里插入图片描述
SRTP其实是在RTP的基础上,对数据(Encrypted RTP payload)进行加密的协议.

六、DTLS-SRTP协议

在WebRTC中,DTLS要解决的问题是交换密钥,确认双方的加密算法(比如AES128)。

在WebRTC中,SRTP要解决的问题是对数据加密保证数据安全,保证数据完整性。

LIBSRTP: 由思科开发的开源库。调用步骤如下图所示
在这里插入图片描述


  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值