13. UDP协议与RTP协议

2024-06-10 16:36
文章标签 rtp 协议 udp 13

本文主要是介绍13. UDP协议与RTP协议,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

UDP协议

UDP协议比较简单:
在这里插入图片描述
UDP的长度是固定的,用总长度-UDP长度就是数据长度。
UDP是不保证他的有序性和可靠性的。对于音频和视频是这样是比较好的,因为这段丢了,我们可以从下一段在开始解码。

RTP

RTP 协议概述

RTP(Real-time Transport Protocol)是用于 Internet 上针对多媒体数据流的一种传输层协议,RTP 协议和 RTP 控制协议 RTCP 一起使用。RTP 被定义为在一对一或一对多的传输情况下工作,其目的是提供时间信息和实现流同步。RTP 的典型应用建立在 UDP 上,但也可以在 TCP 或 ATM 等其他协议之上工作。

RTP 不像 http 和 ftp 可完整的下载整个影视文件,它是以固定的数据率在网络上发送数据,客户端也是按照这种速度观看影视文件,当影视画面播放过后,就不可以再重复播放,除非重新向服务器端要求数据。

RTP 本身只保证实时数据的传输,并不能为按顺序传送数据包提供可靠的传送机制,也不提供流量控制或拥塞控制,它依靠 RTCP 提供这些服务。

RTP 工作机制

rtp 协议就是提供了时间标签,序列号以及其它的结构用于控制适时数据的流放。在流的概念中” 时间标签” 是最重要的信息。发送端依照即时的采样在数据包里隐蔽的设置了时间标签。在接受端收到数据包后,就依照时间标签按照正确的速率恢复成原始的适时的数据。不同的媒体格式调时属性是不一样的。

但是 rtp 本身并不负责同步,rtp 只是传输层协议,为了简化运输层处理,提高该层的效率。 将部分运输层协议功能(比如流量控制)上移到应用层完成。同步就是属于应用层协议完成的。它没有运输层协议的完整功能,不提供任何机制来保证实时地传输数据,不支持资源预留,也不保证服务质量。rtp 报文甚至不包括长度和报文边界的描述。同时 rtp 协议的数据报文和控制报文的使用相邻的不同端口,这样大大提高了协议的灵活性和处理的简单性。

rtp 协议和 udp 二者共同完成运输层协议功能。udp 协议只是传输数据包,不管数据包传输的时间顺序。rtp 的协议数据单元是用 udp 分组来承载的。在承载 rtp 数据包的时候,有时候一帧数据被分割成几个包具有相同的时间标签,则可以知道时间标签并不是必须的。而 udp 的多路复用让 rtp 协议利用支持显式的多点投递,可以满足多媒体会话的需求。

RTP 协议的报文结构

每一个 RTP 数据报都由头部(Header)和负载(Payload)两个部分组成,其中头部前 12 个字节的含义是固定的,而负载则可以是音频或者视频数据。

RTP 头格式如图所示:
在这里插入图片描述
开始 12 个八进制出现在每个 RTP 包中,而 CSRC 标识列表仅出现在混合器插入时。各段含义如下:

  1. 版本(V)
    2 位, 标识 RTP 版本。

  2. 填充标识(P)
    1 位,如设置填充位,在包尾将包含附加填充字,它不属于有效载荷。填充的最后一个八进制包含应该忽略的八进制计数。某些加密算法需要固定大小的填充字,或为在底层协议数据单元中携带几个 RTP 包。

  3. 扩展(X)
    1 位,如设置扩展位,固定头后跟一个头扩展。

  4. CSRC 计数(CC)
    4 位,CSRC 计数包括紧接在固定头后 CSRC 标识符个数。

  5. 标记(M)
    1 位,标记解释由设置定义,目的在于允许重要事件在包流中标记出来。设置可定义其他标示位,或通过改变位数量来指定没有标记位。

  6. 载荷类型(PT)
    7 位,记录后面资料使用哪种 Codec ,receiver 端找出相应的 decoder 解码出来
    在这里插入图片描述

  7. 序列号
    16 位,序列号随每个 RTP 数据包而增加 1,由接收者用来探测包损失。序列号初值是随机的,使对加密的文本攻击更加困难。TCP也是有一个sequence number的,TCP中的sequence number通过ACK进行回复的,以达到排序的效果。

  8. 时间戳
    32 位,时间戳反映 RTP 数据包中第一个八进制数的采样时刻,采样时刻必须从单调、线性增加的时钟导出,以允许同步与抖动计算。时标可以让 receiver 端知道在正确的时间将资料播放出来。
    在这里插入图片描述
    由上图可知,如果只有序列号,并不能完整按照顺序的将 data 播放出来,因为如果 data 中间有一段是没有资料的,只有序列号的话会造成错误,需搭配上让它知道在哪个时间将 data 正确播放出来,如此我们才能播放出正确无误的信息。

  9. SSRC
    32 位,SSRC 段标识同步源。此标识不是随机选择的,目的在于使同一 RTP 包连接中没有两个同步源有相同的 SSRC 标识。尽管多个源选择同一个标识的概率很低,所有 RTP 实现都必须探测并解决冲突。如源改变源传输地址,也必须选择一个新 SSRC 标识以避免插入成环行源。

  10. CSRC 列表
    0 到 15 项,每项 32 位。CSRC 列表表示包内的对载荷起作用的源。标识数量由 CC 段给出。 如超出 15 个作用源,也仅标识 15 个。CSRC 标识由混合器插入,采用作用源的 SSRC 标识。
    RTP 用到的地方就是 PLAY ,服务器往客户端传输数据用 UDP 协议,RTP 是在传输数据的前面加了个 12 字节的头(描述信息)。

RTP 载荷封装设计本文的网络传输是基于 IP 协议,所以最大传输单元(MTU)最大为 1500 字节,在使用 IP/UDP/RTP 的协议层次结构的时候,这其中包括至少 20 字节的 IP 头,8 字节的 UDP 头,以及 12 字节的 RTP 头。这样,头信息至少要占用 40 个字节,那么 RTP 载荷的最大尺寸为 1460 字节。以 H264 为例,如果一帧数据大于 1460,则需要分片打包,然后到接收端再拆包,组合成一帧数据,进行解码播放。

实时传输 TCP/UDP协议的选择

在这里插入图片描述
当网络很卡的时候,他的实时性是不能保证的。比如说客户端给服务器端发送一个,等到1s还没有收到sck。下次也是那么这个TCP的实时性是不能保证的。TCP虽然可以保证包的有序可靠到达,但是代价失去了实时性。尤其是在极端情况下。
所以我们需要选择UDP,但是UDP需要解决丢包,乱序,这些都要在应用层解决。这也就是我们为什么都使用WebRTC,因为这些事情他都帮你解决了。

TCP在实时通信的作用

当UDP不通的时候可以使用TCP,比如说跟国外的人进行通讯,这时候UDP不行,可以使用TCP来保证联通率。因为企业级的通讯软件他的连通率要达到99%以上。如果TCP也不通的话,就用https,https底层也是TCP和一些安全的机制。
也就是一开始用UDP,如果UDP不通的话,就用TCP,TCP也不通的话就用https。
用TCP和https就是为了增加连通率。

这篇关于13. UDP协议与RTP协议的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1048686

相关文章

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

2024.9.8 TCP/IP协议学习笔记

1.所谓的层就是数据交换的深度,电脑点对点就是单层,物理层,加上集线器还是物理层,加上交换机就变成链路层了,有地址表,路由器就到了第三层网络层,每个端口都有一个mac地址 2.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?答案:子网 3.将源 IP 与目的 IP 分别同这个子网掩码进行与运算****,相等则是在一个子网,不相等就是在不同子网 4.A 如何知道,哪个设备是路由器?答案:在 A

Modbus-RTU协议

一、协议概述 Modbus-RTU(Remote Terminal Unit)是一种基于主从架构的通信协议,采用二进制数据表示,消息中的每个8位字节含有两个4位十六进制字符。它主要通过RS-485、RS-232、RS-422等物理接口实现数据的传输,传输距离远、抗干扰能力强、通信效率高。 二、报文结构 一个标准的Modbus-RTU报文通常包含以下部分: 地址域:单个字节,表示从站设备

13 transition数组的动画使用

划重点 动画:transitiontransition-group :数组动画数组的 添加 / 删除 豆腐粉丝汤 清淡又健康 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><me

网络原理之TCP协议(万字详解!!!)

目录 前言 TCP协议段格式 TCP协议相关特性 1.确认应答 2.超时重传 3.连接管理(三次握手、四次挥手) 三次握手(建立TCP连接) 四次挥手(断开连接)  4.滑动窗口 5.流量控制 6.拥塞控制 7.延迟应答 8.捎带应答  9.基于字节流 10.异常情况的处理 小结  前言 在前面,我们已经讲解了有关UDP协议的相关知识,但是在传输层,还有

【CTF Web】BUUCTF Upload-Labs-Linux Pass-13 Writeup(文件上传+PHP+文件包含漏洞+PNG图片马)

Upload-Labs-Linux 1 点击部署靶机。 简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。 注意 1.每一关没有固定的通关方法,大家不要自限思维! 2.本项目提供的writeup只是起一个参考作用,希望大家可以分享出自己的通关思路