UDP 两种丢包处理策略:丢包重传(ARQ) 和 前向纠错(FEC)
1. 两种丢包处理策略
为了保证实时性,通常适应UDP协议来针对RTP数据进行传输,而UDP无法保证数据传输的质量,所以在网络环境不好的时候,丢包是经常出现的问题,有什么策略来改善这个问题吗?
常用的方法有: 丢包重传(ARQ)和前向纠错(FEC)。

通常抗丢包有两种方式,FEC和ARQ。FEC是前向冗余,举个例子,发送数据A和B,增加发送一个数据C等于A和B的异或。接收方接到这3个包的任意2个包,异或一下就可以得到第3个包。当然,实际的FEC没这么简单,通常会有比较复杂的矩阵运算。ARQ就是接收方发现丢包后,去发送方请求重传。
2. 前向纠错(FEC)
FEC传递简单,只需要单向传输就可以支持,延时小,缺点就是丢包率波动大时,抗丢包能力差。

FEC的实质就是异或。假如有4个数据,那么它们可以取4个异或值,其中每一个数据都可以由另外4个异或计算出来。还可以把ABCD和E想象成一个数据包,如果我们传输ABCD这四个数据包,第五个数据包传输的是E,这五个数据包可以丢失任何1个数据包。接收方收到数据之后,能够把它丢的数据恢复出来。前向纠错算法能处理的是连续数据里只丢1个包。同时丢失A和B,这个算法不能解决。
3. 丢包重传(ARQ)
ARQ的优点是网络携带率高,但延迟大,当延时大或拥塞丢包的情况,不能使用ARQ。拥塞丢包时,使用ARQ会加大传输量,导致拥塞更严重。
主要是根据RTP的序号(Sequence Number)来进行判断是否丢包,正常情况下序号是连续的。
[参考文献]
- 编风网沙龙.精彩内幕 | 腾讯音视频传输技术解密(上) https://www.jianshu.com/p/93d2935ab7ed
- 两种丢包处理策略:丢包重传 和 FEC(前向纠错) https://www.jianshu.com/p/6157e120ef99
UDP 两种丢包处理策略:丢包重传(ARQ) 和 前向纠错(FEC)的更多相关文章
- Spring Cloud Config采用Git存储时两种常用的配置策略
由于Spring Cloud Config默认采用了Git存储,相信很多团队在使用Spring Cloud的配置中心时也会采用这样的策略.即便大家都使用了Git存储,可能还有各种不同的配置方式,本文就 ...
- Springboot中IDE支持两种打包方式,即jar包和war包
Springboot中IDE支持两种打包方式,即jar包和war包 打包之前修改pom.xml中的packaging节点,改为jar或者war 在项目的根目录执行maven 命令clean pa ...
- java中两种添加监听器的策略
/*第一种:将事件的处理委托给其他对象,下面的例子是委托给了MyListener(implements ActionListener)*/ 1 import java.applet.Applet; i ...
- Wireshark的两种过滤器与BPF过滤规则
Wirshark使用的关键就在于过滤出想要的数据包,下面介绍怎么过滤. 抓包过滤器 Wirshark有两种过滤器,一个是抓包过滤器,一个是显示过滤器,他们之间的区别在于抓包过滤器只抓取你设置的规则,同 ...
- 两种简单的servlet实现反向代理
以下两种方法都需要引入jar包: <dependency> <groupId>org.mitre.dsmiley.httpproxy</groupId> <a ...
- Java连接Neo4j的两种方式
1.Neo4j数据库的两种方式 Neo4j可以以两种方式运行: Java应用程序中的嵌入式数据库 通过REST的独立服务器 不管哪一种方式,这个选择不会影响查询和使用数据库的方式. 它是由应用程序的性 ...
- 浅谈UDP(数据包长度,收包能力,丢包及进程结构选择)
UDP数据包长度 UDP数据包的理论长度 udp数据包的理论长度是多少,合适的udp数据包应该是多少呢?从TCP-IP详解卷一第11章的udp数据包的包头可以看出,udp的最大包长度是2^16-1的个 ...
- 【VS开发】浅谈UDP(数据包长度,收包能力,丢包及进程结构选择)
UDP数据包长度 UDP数据包的理论长度 udp数据包的理论长度是多少,合适的udp数据包应该是多少呢?从TCP-IP详解卷一第11章的udp数据包的包头可以看出,udp的最大包长度是2^16-1的个 ...
- maven生成war包的两种方式
war包即对WEB应用程序进行打包,用于应用容器的部署.如在jboss中只要把war包丢入deploy目录下即可发布自己的应用了.打包方式有很多中,很多工具本身就支持此功能.下面主要介绍通过maven ...
随机推荐
- Eclipse ALT+/ 代码没有提示功能
第一种配置如下: 第二: 第三: 以上三种方式是关于eclipse代码提示
- http相应状态码大全
100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部分 101 Switching Protocols 服务器将遵从客户的请求转换到另外一种协议 200 OK 一切正常,对GET ...
- java连SQLServer失败 java.lang.ClassNotFoundException:以及 javax.xml.bind.JAXBException
总结:jdk1.8及以下连sqlserver只需驱动,1.8以上除了驱动还需JAXB API. 1 java连SQLServer必须要先下驱动.否则出现: java.lang.ClassN ...
- python学习笔记:数据类型——列表/数组(list)
Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素.通过下标访问列表中的元素(又称索引.角标),下标从0开始计数.list定义,使用中括号[]. l ...
- raid 10
首先先创建五个新的硬盘,步骤参照 raid 5 建好硬盘以后开启虚拟机 打开终端,更改好主机名以后,重新打开终端 输入命令:fdisk -l 查看有没有加入进来 我们发现已经加入进来 然后开始分 ...
- PHP CURL 模拟form表单上传遇到的小坑
1:引用的时候 $parans ['img']=new \CURLFile($param); 传入的文件 在PHP版本5.5以上记得new CURLFile 不然会上传不成功 /** * http p ...
- 转 jmeter 实现loadrunner init end 功能
一.JMeter 介绍 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序).它可以用来测试静态和动态资源的性能,例如:静态文件, ...
- Python列表推导式中使用if-else
data_list=[] col=["a", "b", "c", "d"] jdata={"a":1 ...
- SqlServer 跨库访问
同实例跨库 只需要 库名.dbo.表 dbo可省略 如: use Test select * from rdrecords select * from oa.dbo.UserInfo 不同实例与不同i ...
- [轉]关于CR0.WP
关于CR0.WP 我们知道CR0的WP位可以关闭内核写保护.他和页表的R/W位有关.Intel手册中的描述绕来绕去似乎一直没有说到重点. When the processor is in superv ...