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 ...
随机推荐
- ARMv8 内存管理架构.学习笔记
http://blog.csdn.net/forever_2015/article/details/50285955 版权声明:未经博主允许不得转载,请尊重原创, 谢谢! 目 录 第1章 分级存储 ...
- 数据库SQL调优的几种方式(转)
原文地址:https://blog.csdn.net/u010520146/article/details/81161762 在项目中,SQL的调优对项目的性能来讲至关重要,所有掌握常见的SQL调优方 ...
- 驱动中PAGED_CODE的作用
参考:http://blog.csdn.net/broadview2006/article/details/4171397 里面的内容出自<Windows内核情景分析> 简而言之,Wind ...
- Eureka 系列(04)客户端源码分析
Eureka 系列(04)客户端源码分析 [TOC] 0. Spring Cloud 系列目录 - Eureka 篇 在上一篇 Eureka 系列(01)最简使用姿态 中对 Eureka 的简单用法做 ...
- 什么是索引?Mysql目前主要的几种索引类型
一.索引 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的My ...
- 10个艰难的Java面试题与答案
10个最难回答的Java面试题 这是我收集的10个较难回答的 Java 面试题.这些问题主要来自 Java 核心部分 ,不涉及 Java EE 相关问题.这些问题都是容易在各种 Java 面试中被问到 ...
- C++之循环体内变量
今天做PAT题目时候看人家解答: #include <cstdio> #include <set> using namespace std; int main() { int ...
- HashSet、LinkedHashSet、TreeSet的区别
HashSet:哈希表是通过使用称为散列法的机制来存储信息的,元素并没有以某种特定顺序来存放: LinkedHashSet:以元素插入的顺序来维护集合的链接表,允许以插入的顺序在集合中迭代: Tree ...
- grep中正则表达式使用尖括号表示一个单词
比如 grep '\<bin\>' /etc/passwd --color
- HDU-4568 TSP+最短路
题意:给一个n行m列的矩阵,矩阵上的数字代表经过代价(这里要注意每经过一次都要付出代价),矩阵上有几个宝藏,猎人可以从任意边界进去矩阵取完所有宝藏后从任意边界出来. 解法:一看到宝藏数量小于等于13且 ...