对网络协议来说,需要做的通常就两件事情:1、建立连接,2、传输数据,WebRTC也不例外。

假设WebRTC应用的两端已经建立了连接,那么,剩下就是如何传输数据的问题了。

WebRTC同时支持传输音视频数据、自定义应用数据。这其中,涉及多种协议,包括UDP、RTP/SRTP、RTCP/SRTCP、DTLS、SCTP。

这些协议名字比较相似,很容易让人混淆,简单总结下:

  1. 传输音视频数据相关协议:UDP、DTLS、RTP/SRTCP;
  2. 传输自定义应用数据相关协议:UDP、DTLS、SCTP;

下面就简单介绍下,这些协议是做什么的,有什么区别,存在什么联系。

加密信道建立:UDP、DTLS

对WebRTC应用来说,不管是音视频数据,还是自定义应用数据,都要求基于加密的信道进行传输。DTLS 有点类似 TLS,在UDP的基础上,实现信道的加密。

DTLS的主要用途,就是让通信双方协商密钥,用来对数据进行加解密。

  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中定义,主要用来监控数据传输的质量,并给予数据发送方反馈。

也就是说:

  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
https://tools.ietf.org/html/rfc3550

Stream Control Transmission Protocol
https://tools.ietf.org/html/rfc4960

Datagram Transport Layer Security
https://tools.ietf.org/html/rfc4347

WebRTC:数据传输相关协议简介的更多相关文章

  1. 【转】 HTTP 协议简介

    一.TCP/IP 协议介绍 在介绍 HTTP 协议之前,先简单说一下TCP/IP协议的相关内容.TCP/IP协议是分层的,从底层至应用层分别为:物理层.链路层.网络层.传输层和应用层,如下图所示: 从 ...

  2. HTTP 协议简介

    HTTP 协议简介 博客分类: acl开发--HTTP协议篇 网络协议http协议  一.TCP/IP 协议介绍 在介绍 HTTP 协议之前,先简单说一下TCP/IP协议的相关内容.TCP/IP协议是 ...

  3. 面试题-------SSL协议简介

    SSL协议简介 SSL简介 Secure Socket Layer,为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之 ...

  4. Java开发工程师(Web方向) - 01.Java Web开发入门 - 第2章.HTTP协议简介

    第2章--HTTP协议简介 HTTP协议简介 Abstract: HTTP协议的特性,HTTP请求/响应的过程,HTTP请求/响应的报文格式等知识,最后会演示如何通过Chrome提供的开发者工具,去跟 ...

  5. 转:SATA协议简介

    SATA协议简介 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/FA99999/article/details/70738724 1.概述 本文档主 ...

  6. MODBUS-RTU通讯协议简介

    MODBUS-RTU通讯协议简介   什么是MODBUS? MODBUS 是MODICON公司最先倡导的一种软的通讯规约,经过大多数公司 的实际应用,逐渐被认可,成为一种标准的通讯规约,只要按照这种规 ...

  7. OAUTH协议简介

    OAUTH协议简介 原文来自:http://blog.csdn.net/hereweare2009/article/details/3968582 分类: Open API2009-03-08 12: ...

  8. HTTP协议简介详解 HTTP协议发展 原理 请求方法 响应状态码 请求头 请求首部 java模拟浏览器客户端服务端

    协议简介 协议,自然语言里面就是契约,也是双方或者多方经过协商达成的一致意见; 契约也即类似于合同,自然有甲方123...,乙方123...,哪些能做,哪些不能做; 通信协议,也即是双方通过网络通信必 ...

  9. (转)USB协议简介

    USB协议简介     USB是一种协议总线,即主机与设备之间的通信需要遵循一系列约定.协议内容较多,这里仅作一些简单介绍,深入学习,可参看USB规范(WWW.usb.org).     为了理解协议 ...

随机推荐

  1. 在WPF程序中将控件所呈现的内容保存成图像

    原文:在WPF程序中将控件所呈现的内容保存成图像 有的时候,我们需要将控件所呈现的内容保存成图像保存下来,例如:InkCanvas的手写墨迹,WebBrowser中的网页等.可能有人会说,这个不就是截 ...

  2. WPF 资源(StaticResource 静态资源、DynamicResource 动态资源、添加二进制资源、绑定资源树)

    原文:WPF 资源(StaticResource 静态资源.DynamicResource 动态资源.添加二进制资源.绑定资源树) 一.WPF对象级(Window对象)资源的定义与查找 实例一: St ...

  3. 【全面解禁!真正的Expression Blend实战开发技巧】第九章 FluidMoveBehavior完全解析之二平滑运动的滚动条

    原文:[全面解禁!真正的Expression Blend实战开发技巧]第九章 FluidMoveBehavior完全解析之二平滑运动的滚动条 这一章讲解FluidMoveBehavior的另一个应用, ...

  4. QTcpServer与QTcpSocket通讯

    TCP        TCP是一个基于流的协议.对于应用程序,数据表现为一个长长的流,而不是一个大大的平面文件.基于TCP的高层协议通常是基于行的或者基于块的.          ●.基于行的协议把数 ...

  5. Python在windows下的服务程序

    Python程序作为Windows服务启动,需要安装pywin32包.下载路径: 我是下载路径 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 2 ...

  6. C++字符串的操作(简单全面)

    void *memccpy (void *dest, const void *src, int c, size_t n); 从src所指向的对象复制n个字符到dest所指向的对象中.如果复制过程中遇到 ...

  7. x64内联汇编调用API(需intel编译器,vc不支持x64内联汇编)

    #include "stdafx.h" #include <windows.h> STARTUPINFOW StartInfo  = {0}; PROCESS_INFO ...

  8. Gps坐标有效性判定

    百科:纬度 是指某点与地球球心的连线和地球赤道面所成的线面角,其数值在0至90度之间.位于赤道以北的点的纬度叫北纬,记为N:位于赤道以南的点的纬度称南纬,记为S. var regex = new Re ...

  9. 你真的懂printf么?

    自从你进入程序员的世界,就开始照着书本编写着各种helloworld,大笔一挥: printf("Hello World!\n"); 于是控制台神奇地出现了一行字符串,计算机一句温 ...

  10. Md2All:好用的markdown文件转换工具,文章迁移微信公众号的利器

    目录 简介 使用体验 极速上手 更多功能 总结 简介 markdown以简单的语法和强大的功能,征服了无数技术创作者,几乎主流的技术博客网站都开始支持markdown语言撰写博客.但是微信公众号的文章 ...