Chinaunix首页 | 论坛 | 博客
  • 博客访问: 659250
  • 博文数量: 175
  • 博客积分: 2457
  • 博客等级: 大尉
  • 技术积分: 1488
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-13 20:31
文章分类

全部博文(175)

文章存档

2012年(22)

2011年(153)

分类: C/C++

2011-09-09 20:22:55

今天就个人对误码率和丢包率的理解跟大家探讨一下,还是举个例子来说明比较直观:
 

假设如图所示为一段网络上传送的数据(当然必然是二进制了),长度为 34 比特。图中第一行是为方便说明我给每个比特编的序号;图中第三行是每个比特对应的包号,按我的假设这 34 个比特被分成 5 个包,即第一到第五个比特属于第一个包,第六到第第十三个比特属于第二个包,……;图中第四行表示比特误码的情况,“×”表示对应比特位出现误码,“○”表示对应比特位无误码。从图中可以看出 34 个比特中有 12 个出现误码(因为有 12 个“×”),那么我们就可以算出来这段数据的误码率是 35%。

我们知道数据在网络上传送到接收端是要经过网关的。而网关会对收到的数据进行 CRC 校验来判断是否有错误发生,如果网关在发现有误码时候直接将包含该误码的包丢掉而不传给接收终端,那么接收终端接收到的数据就只会出现整个包丢失的情况而不会出现一个包中某个比特出错的情况,所以这个时候接收终端感受到的就是丢包率。那么上面例子中丢包率是多少呢?从图中可以看出,前四个包都发生了误码,只有最后一个包没有误码,因此前四个包都会被网关丢掉而不传送给接收端,所以上面的例子的丢包率就是 80%。相反,如果网关在发现有误码的时候并不把包丢掉,而仍然传给接收终端,那么接收终端收到的数据就只会出现比特错误的情况而不会出现丢包的情况。

对于接收终端来说,接收终端接收到的数据要么出现丢包,要么出现误码,而不可能两者同时出现。而通常网络传送中的网关都是发现误码就把整个包丢掉。

我们通常说的误码率是针对数据在网络信道上而言的,而我们所说的丢包率则是针对数据在接收终端而言。因此一段数据的误码率与丢包率是有一定对应关系的,而这个对应关系则主要取决于两个因素:
1、数据包的大小:就像上面的例子,我假设了 5 个包,所以丢包率是 80%,如果整个 34 比特数据都属于一个包,那么丢包率就是 100% 了;
2、误码的分布:假设上面的例子中只有 2 个比特发生错误,那么很明显误码率是 5.88%。而如果这两个错误比特分别是第 1 和第 6 个比特,那么就有两个包会被网关丢掉,丢包率就是 40%;而如果这两个错误比特分别是第 1 和第 2 个比特,那么只有第一个包会被网关丢掉,丢包率就是 20%。
阅读(5330) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~