从零实现高并发WebRTC服务器(六):OpenSSL协议,DTLS协议,RTP协议和SRTP协议

news2024/9/21 14:35:10

文章目录

  • 一、SSL协议
  • 二、OpenSSL
  • 三、TLS和DTLS
  • 四、DTLS的通信的步骤图
  • 五、RTP协议和SRTP协议
    • 5.1 详解RTP协议
    • 5.2 详解RTCP协议
    • 5.3 RTP && RTCP的协议的关键技术
  • 六、DTLS-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: 由思科开发的开源库。调用步骤如下图所示
在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/343435.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【CSS 布局】 Sticky Footer布局

Sticky footer布局是什么? 我们所见到的大部分网站页面,都会把一个页面分为头部区块、内容区块和页脚区块,当头部区块和内容区块内容较少时,页脚能固定在屏幕的底部,而非随着文档流排布。当页面内容较多时,…

大数据框架之Hadoop:HDFS(三)HDFS客户端操作(开发重点)

3.1 HDFS客户端环境准备 1.根据自己电脑的操作系统拷贝对应的编译后的hadoop jar包到非中文路径(例如:D:\javaEnv\hadoop-2.77),如下图所示。 2.配置HADOOP_HOME环境变量,如下图所示。 3&#…

分布式项目-品牌管理(7)

【今日成果】: //啊哈哈哈 , 莫名其妙入选了。 【快速回顾】: (1): 虽然提交表单的时候前端做了校验,但是通过PostMAN接口调试,我们发现不规范的数据还是会被存储到数据库中&am…

前端基础知识6

谈谈你对语义化标签的理解语义化标签就是具有语义的标签,它可以清晰地向我们展示它的作用和用途。 清晰的代码结构:在页面没有css的情况下,也能够呈现出清晰的代码内容 有利于SEO: 爬虫依赖标签来确定关键字的权重,因此可以和搜索…

Android 一体机研发之修改系统设置————声音

Android 一体机研发之修改系统设置————屏幕亮度 Android 一体机研发之修改系统设置————声音 Android 一体机研发之修改系统设置————自动锁屏 修改系统设置系列篇章马上开张了! 本章将为大家细节讲解声音。 对于声音功能大家都不陌生,在多…

Java虚拟机(JVM)调优思路

title: Java虚拟机(JVM)调优思路 date: 2022-04-09 00:00:00 tags: JVM性能调优 categories:Java 调什么 内存方面 JVM需要的内存总大小各块内存分配,新生代、老年代、存活区选择合适的垃圾回收算法、控制GC停顿次数和时间解决内存泄露的问…

Appium移动自动化测试——app控件获取之uiautomatorviewer

下载手机YY http://yydl.duowan.com/mobile/yymobile_client-android/5.4.2/yymobile_client-5.4.2-881.apk 若链接失效,请自行百度 新建maven空白工程 前置条件:安装eclipse,及其maven插件,请自行百度 新建的工程如下&#xf…

Kylin查询下压的设置、Sparder查询引擎详细介绍、HDFS文件目录含义

目录1. 查询下压设置2. Sparder查询引擎详细介绍3. HDFS文件目录含义1. 查询下压设置 如果未开启查询下压,则查询有很多限制。这是因为只能查询cube中的数据,而不能通过spark sql查询Hive中的源数据 开启查询下压,优先从cube中查询数据&…

百度前端常考vue面试题(附答案)

怎么实现路由懒加载呢 这是一道应用题。当打包应用时,JavaScript 包会变得非常大,影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问时才加载对应组件,这样就会更加高效 // 将 // import UserD…

因新硬件支持内核问题Ubuntu 22.04.2推迟发布

导读Ubuntu 22.04.2 LTS 原定于 2 月 9 日发布。但 Canonical 宣布该版本因各种问题不得不推迟两周,定于 2 月 23 日发布。 Ubuntu 22.04.2 LTS 原定于 2 月 9 日发布。但 Canonical 宣布该版本因各种问题不得不推迟两周,定于 2 月 23 日发布。 Canonica…

2023全网最火的接口自动化测试,一看就会

目录 接口自动化测试用例设计Excel接口测试用例访问MySQL接口测试用例访问PyTest测试框架接口自动化测试必备技能-HTTP协议request库实现接口请求 引言 与UI相比,接口一旦研发完成,通常变更或重构的频率和幅度相对较小。因此做接口自动化的性价比更高&…

AI是超越还是桎梏?从ChatGPT到5G+AI,我们在聊什么?

从家常里短聊到科技创新,从人文故事探讨到物理科学,诞生2个月用户即破亿的ChatGPT正成为火爆全球的AI应用工具,其强大的能力超乎人们想象。这款几乎博学多识的聊天机器人能运用AI系统进行简洁的交流,完成各种指令信息的表达。面对…

Prometheus 自动发现监控AWS EC2实例

本文章简述对接自动发现AWS云EC2实例 前提环境: PromethuesGrafanaAWS IAM权限 涉及参考文档: AWS EC2Grafana 通用监控模板 一、IAM 用户创建 1、创建Prometheus 策略 策略规则: {"Version": "2012-10-17",&quo…

【实际开发18】- 静态 3

目录 1. 调试与评估 2. 单元测试的管理 1. 单元测试的文档 3. 系统集成的模式与方法 1. 集成测试前的准备 2. 集成测试的模式 3. 大棒集成方法 ( Big-bang Integration) 4. 自顶向下和自底向上集成方法 1. 自顶向下法 ( Top-down Integration ) 2. 自底向上法 ( Bott…

linux如何查看编译器支持的C++版本(支持C++11、支持C++14、支持C++17、支持C++20)(编译时不指定g++版本,默认使用老版本编译)

文章目录C各个版本C11C14C17C20查看自己的编译器支持C哪个版本注意:编译时不指定g版本,默认使用老版本编译(存疑)C各个版本 C11 C11是一个重要的C标准版本,于2011年发布。C11带来了许多重要的改进,包括&a…

vue3封装数值动态递增组件

vue3封装数值动态递增组件前言源码举个例子:前言 1)使用技术: vue3.2 Ts 2)组件接收参数: 参数类型意义是否可选valuenumber数值大小必填durationnumber递增动画持续时间(单位:s)…

PyTorch学习笔记

PyTorch学习笔记(一):PyTorch环境安装 往期学习资料推荐: 1.Pytorch实战笔记_GoAI的博客-CSDN博客 2.Pytorch入门教程_GoAI的博客-CSDN博客 安装参考: 1.视频教程:3分钟深度学习【环境搭建】CUDA Anacon…

javascript测试二

一、 选择题(共10题,每题2分)1、在JavaScript中,想要一次跳出方法的多层循环结构需要用(C ) A) breakB) continueC) returnD) false2、 下列关于嵌套循环以下说法正确的一项是(A )。A) 每一种循环结构内部也…

Elipse报错:Failed to load the JNI shared library jvm.dll解决方法

情景 导入Elipse的项目中有jar包和64位版本的JDK不兼容。 于是我安装了32位版本的JDK。 配置好系统环境后,重启Eclipse却遇到了这个问题。 原因 搜索后了解到,是因为Eclipse版本与JDK版本不匹配。 我的Eclipse是64位的,但JDK配置是32位的…

科技云报道:2023年,可观测性迎来哪些新趋势?

科技云报道原创。 可观测性不是一个新鲜的名词,但是近年来随着云原生技术的发展,在带来效率、可用性提升的同时也增加了复杂度,而可观测性成为降低这种复杂度的唯一手段,因此被推到了前所未有的重要地位。 Gartner将应用可观测…