无线传感器网络:差错控制

news2025/1/12 6:14:44

文章目录

  • Power control
  • Automatic repeat request (ARQ)
    • Stop and Wait
    • Go Back N
    • Selective Repeat
  • Forward error correction (FEC)
  • Hybrid ARQ (HARQ)
  • References


严格意义来说,文章中提到的数据包都应为数据帧更为恰当,这里提出,希望不要给大家造成混淆。

Power control

可以通过调整天线的发射功率来控制节点的有效通信范围。

传输功率的控制可以在无线通信中实现期望的错误率。较高的传输功率可以增加 SNR,因此减小丢包率,但高功率也意味着能耗的增加和节点之间干扰的增大。

功率控制需要一个较为复杂的协议,实际运行时会增加一定的内存消耗。如果执行逐包(per-packet)的功率控制,那么对于资源有限的节点来说显然是一个很大的开销。


Automatic repeat request (ARQ)

ARQ 错误控制依靠重传丢失或损坏的数据包来保证可靠性,我们会在数据包的有效载荷中添加一个头部字段来指明源节点。

一个低复杂度的错误检测算法(例如,循环冗余校验,CRC)会被用来计算数据包的校验和(checksum),这个校验和会被添加到数据包尾部。接收节点会再次计算收到的数据包的校验和,并将其与数据包中的校验和进行比较。如果结果一致,它就会返回 positive acknowledgement(ACK),否则返回 negative acknowledgement(NACK)。

ARQ 的主要策略可以概括为以下三种:

  • Stop and wait
  • Go back N
  • Selective repeat

Stop and Wait

一个接着一个传,只有上一个被 ACK 了,才会进行接下来的传输。如果收到了 NACK,那自然要进行重传,可如果 NACK 或者 ACK 在回传过程中丢失了怎么办?答案是设定一个计时器,计时完之后还没有收到任何回复就直接进行重传。

但如果包被成功接收了,但 ACK 直到 timeout 之后才回传回来,此时节点已经将包重传了,这时接收节点可就懵逼了,因为它发送 ACK 之后期望接收到下一个包,此时包来了,但和上一个包一模一样,而它并不知道这是一个新的数据包还是原来的数据包。为了避免接收端收到重复的数据包,我们可以使用序列数字给包标个号。我已经收到 packet 0 了,期望收到 packet 1,结果又来个 packet 0,就直接把这个包丢弃就可以了。

相应的,接收节点可以使用带有 packet number 的确认帧替代直接使用 ACKNACK,来表明我现在期望收到哪个包。

总结一下,在发送端,初始的序列数 SN=0:

  1. 从高层接到数据包,并为该数据包标号为 SN;
  2. 打包成数据帧,进行传输;
  3. 等待确认帧
    • 如果收到确认帧,且确认帧序号 RN>SN,那么令 SN=RN,回到步骤 1
    • 如果在指定时间内没有收到回复,则回到步骤 2,也就是重传数据包 SN

在接收端,初始的序列号 RN=0:

  1. 当从发送端接收到一个无错的数据包,且数据包 SN=RN,那么就将该数据包交付给上层处理,并令 RN += 1;
  2. 给发送方回传序列号为 RN 的确认帧

下面我们讨论一下停等协议的效率。

error free scenario,无错情况下:

在这里插入图片描述

scenario with error,有错情况下:

不管是否发生错误,效率的计算公式总是 packet trans time / total time,在有错误的情况下,我们假设错误发生的概率为 p p p,那么这个包需要传输 i i i 次才能成功传输的概率为
p i − 1 ( 1 − p ) p^{i-1}(1-p) pi1(1p)
即前 i − 1 i-1 i1 次都出错了,最后一次传输成功。这 i − 1 i-1 i1 次每次耗费的时间都为发送节点设置的 timeout 时间, T O TO TO,而最后一次成功传输的时间就是我们上面无错情况下的 S S S

在平均情况下,我们的传输次数期望值为:
∑ i = 1 ∞ i p i − 1 ( 1 − p ) = 1 1 − p \sum_{i=1}^\infty ip^{i-1}(1-p)=\frac{1}{1-p} i=1ipi1(1p)=1p1

因此除去一次成功传输耗费的 S S S,剩下的 1 1 − p − 1 = p 1 − p \frac{1}{1-p}-1=\frac{p}{1-p} 1p11=1pp 次传输都耗费 T O TO TO,所以总时间即为 S + T O p 1 − p S+TO\frac{p}{1-p} S+TO1pp,效率为
E = D T P S + T O p 1 − p E=\frac{D_{TP}}{S+TO\frac{p}{1-p}} E=S+TO1ppDTP

Go Back N

停等协议每个轮次只能发送一个数据包,只有当前数据包被 ACK,才可以发送下一个数据包。Go-Back-N 协议利用滑动窗口,使得我们能够一次性发送多个包含在窗口中的数据包。每次最早发送的数据包被确认后,滑动窗口就可以继续滑动,将包含在窗口中的新数据包发送出去。

在这里插入图片描述

假设窗口大小为 N N N,对于发送方来说,在数据包 i i i 被确认之前,是不可能发送数据包 i + N i+N i+N 以及之后的数据包的,而接收端的表现和停等协议是差不多一样的。当到达的数据包不是收方期望的 R N RN RN 时,发送方需要重传数据包 R N RN RN 及之后所有的数据包。因此当通信质量差时,Go-Back-N 协议的效率可能很糟糕。

接收方还可以使用叫作累计确认的机制,即不对每个数据包逐一确认,而是等收到一组数据包后累计确认,例如返回 ACKn 表示数据包 n n n 之前的数据包都被成功接收了。这虽然可以减小网络开销,但在某些情况下可能会发生错误。

例如,我们使用三比特的序列号(0~7)。发送方发送数据帧 0 之后收到了 ACK1,然后开始传输数据帧 1,2,3,4,5,6,7,0,并且又收到了 ACK1,问题在于,这个 ACK1 是表明前面发送的数据帧都被正确接收了还是都在传输过程中丢失了,这一点显然无法分辨。

Go-Back-N 协议的效率(无错情况下):

在这里插入图片描述

如图所示,如果 N > S / D T P N>S/D_{TP} N>S/DTP,那么在收到一个包 ACK 的总时间内我们实际上一直在发送数据包,因此效率为 1,如果 N < S / D T P N<S/D_{TP} N<S/DTP,那么我们的效率则直接为 N ∗ D T P / S N*D_{TP}/S NDTP/S,所以有
E = min ⁡ { 1 , N ∗ D T P / S } E=\min\{1, N*D_{TP}/S\} E=min{1,NDTP/S}

Selective Repeat

在 Go-Back-N 中,接收方不能接收乱序的包,发送方需要重传包括丢失数据包之内的所有之后发送的数据包。Selective Repeat 则指重传丢失的那一个数据包,这就需要接收方能够接收乱序的数据包并存储在缓存中。

在 Go-Back-N 基础之上,如果某个数据包未在 timeout 内被发送方确认或者收到了 NACK,那么发送方重传该数据包。接收方会一直存储乱序的数据包直到某个丢失的数据包收到了,缓冲中的数据包都有序了,就把它们交付给上层。


Forward error correction (FEC)

FEC 编码(或信道编码)给传输的数据包增加了冗余,这样,即使接收方收到一定数量的错误比特,也能无误地接收。具体来说,一个(n, k, t)FEC 码会将 n-k 比特数的冗余添加到 k 比特数的有效载荷上。

在这里插入图片描述

因此,t 位以内的比特错误可以被恢复,并且在没有任何重传的情况下,整体的错误概率会降低。

有很多种 FEC 码,如线性分组码(BCH 和 Reed Solomon)以及卷积码,它们针对特定的数据包大小、信道条件进行编解码。

我们需要根据应用需求来决定是否使用 FRC 码,如果应用需求的错误率不是很低,那么我们可能并不需要使用 FEC,因为编码导致的数据包长度增加会消耗额外的能量。


Hybrid ARQ (HARQ)

信道条件较好时,我们可能会选择使用 ARQ,因为无需添加冗余比特来保证可靠传输;而在信道条件差时,ARQ 会将整个数据包进行重传,在这种情况下,选择 FEC 可能更合适,因为我们只需添加一定数量的比特数来避免重传。

相信大家也猜到了,HARQ 就是想同时利用 ARQ 以及 FEC 的优势。

首先我们会发送一个无编码或者轻微编码(冗余少,纠正的错误比特数少,消耗的能量也少)的数据包,当发生错误需要重传时,HARQ 提供两种选择:

  • Type Ⅰ:重传的数据包会使用更强的 FEC 编码
  • Type Ⅱ:只有添加的冗余比特才被传输,所以接收方需要暂时存储出错的数据包

References

Chapter 6, Wireless Sensor Networks by Ian F Akyildiz and Mehmet C Vuran.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/42555.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3.9 拆解小红书爆文,流量密码原来是这些【玩赚小红书】

具体如何撰写1篇爆文&#xff0c;解决这一问题前&#xff0c;我们先把爆文四要素&#xff0c;选题、首图、标题和正文进行拆解&#xff0c;真正做到选题正确&#xff0c;用户坐着封面、标题、正文滑滑梯&#xff0c;站内留下点赞评&#xff0c;站外去拔草。 ​ 一、选题&#…

了解模型开发与部署,看这里!

11月24日下午15&#xff1a;00顶象第十期业务安全系列大讲堂系列课程《Xintell 模型平台 》正式开讲。 顶象人工智能专家&研发总监无常从模型平台的现状与需求出发&#xff0c;带大家了解了模型平台的开发环境与部署环境&#xff0c;并且就顶象的Xintell 模型平台 为大家做…

[附源码]Python计算机毕业设计DjangoON-FIT

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

1988-2020年分省、城市、农村基尼系数数据集(含计算程序和算法)

1、数据来源&#xff1a;《中国统计年鉴》 2、时间跨度&#xff1a;1988-2020 3、区域范围&#xff1a;全国所有省份 4、指标说明&#xff1a; 参照田为民的文章《中国基尼系数计算及其变动趋势分析》里基尼系数的计算方法 部分数据如下 二、基尼系数计算及相关经典文献 …

win10怎么把两个盘合成一个,win10怎么把分区合并

在Windows10系统中&#xff0c;为了更加充分地利用磁盘空间&#xff0c;其中合并分区是很常见的操作之一。由于很多用户都不知道win10怎么把两个盘合成一个&#xff0c;所以&#xff0c;为了防止人为误操作而导致的磁盘数据丢失&#xff0c;在本文中&#xff0c;易我小编在本文…

1024短信盲盒 | 暖心短信陪你过节,还有更多好礼

掘友你好&#xff0c;见字如面。 一年一度的程序员节快要到了&#xff0c;我们为此准备了一个特别的短信盲盒活动。现在报名&#xff0c;活动期间每天都会定时收到一条来自掘金的短信&#xff0c;在活动最后一天10.24日&#xff0c;可能还会收到掘金团队不同成员的祝福哦&#…

给容灾找对象!数据流转更自由,拓宽云上更多场景

云计算高速发展&#xff0c;企业却有新问题&#xff1f; 1979年&#xff0c;软件和IT服务公司SunGard在美国费城建立了世界上第一个灾备中心&#xff0c;对数据和系统进行备份&#xff0c;标志着数据灾备行业的起源。20世纪80-90年代&#xff0c;计算机网络技术的迅速发展和普及…

文本表示(Representation)

文本表示&#xff08;Representation&#xff09; 这里写目录标题文本表示&#xff08;Representation&#xff09;独热编码(one-hot representation)整数编码Word2vec模型整体理解我的理解CBoW & Skip-gram Model改进方案Hierarchical SoftmaxNegative Sampling代码GloveG…

Servlet请求转发与重定向

目录 一、请求转发 1、RequestDispatcher 接口 2、请求转发的工作原理 3、request 域对象 4、示例 二、重定向 1、response.sendRedirect() 2、示例 3、转发和重定向的区别 一、请求转发 Web 应用在处理客户端请求时&#xff0c;经常需要多个 Web 资源共同协作才能生成…

工作中规范使用Java集合

目录 一、前言 二、规范使用Java集合 1.【强制】关于 hashCode 和 equals 的处理&#xff0c;遵循如下规则&#xff1a; 2.【强制】判断所有集合内部的元素是否为空&#xff0c;使用 isEmpty() 方法&#xff0c;而不是 size() 0 的方式。 3.【强制】在使用 java.util.str…

防火墙原理讲解——练习实验

♥️作者&#xff1a;小刘在C站 ♥️每天分享云计算网络运维课堂笔记&#xff0c;一起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的&#xff0c;绽放。 目录 一防火墙基础 二防火墙配置 三防火墙的高级应用 四.实验图纸 五.实验命令 一防火…

使用SPARK进行特征工程

文章目录特征工程预处理特征选择归一化离散化Embedding向量计算效果对比特征工程 在机器学习领域&#xff0c;有一条尽人皆知的“潜规则”&#xff1a;Garbage in&#xff0c;garbage out。它的意思是说&#xff0c;当我们喂给模型的数据是“垃圾”的时候&#xff0c;模型“吐…

1. Vue 3.0介绍

Vue3.0介绍 1.Vue.js 3.0 源码组织方式 Vue2.x与Vue3.0的区别 源码组织方式的变化 Vue3.0的源码全部采用TypeScript重写使用Monorepo方式来组织项目结构&#xff0c;把独立的功能模块都提取到不同的包中。 packages下都是独立发行的包&#xff0c;可以独立使用。 Compositi…

[U3D ShaderGraph] 全面学习ShaderGraph节点 | 第二课 | Input/Geometry

ShaderGraph是可视化的着色器编辑工具。您可以使用此工具以可视方式创建着色器。 本专栏可以让你更了解ShaderGraph中每个节点的功能&#xff0c;更自如的在做出自己想要的效果。 如果你想学习在unity中如何制作一个特效&#xff0c;如何在unity中让模型更炫酷&#xff0c;那就…

Python实现导弹自动追踪

自动追踪算法&#xff0c;在我们制作射击类游戏时经常会用到。这个听起来很高大上的东西&#xff0c;其实并不是军事学的专利&#xff0c;从数学上来说就是解微分方程。 这个没有点数学基础是很难算出来的。但是我们有了计算机就不一样了&#xff0c;依靠计算机极快速的运算速…

【Scala专栏】走进Scala

官方文档: https://www.scala-lang.org/ 一、What is Scala? Scala是一种针对JVM 将面向函数和面向对象技术组合在一起的编程语言。Scala编程语言近来抓住了很多开发者的眼球。它看起来像是一种纯粹的面向对象编程语言&#xff0c;而又无缝地结合了命令式和函数式的编程风格…

服务访问质量(QoS)——流量整形与拥塞管理

作者简介&#xff1a;一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.流量整形和监管配置 1.流量整形配置两种方式 ①流量整形的命…

从零开始上手 MQTT over QUIC:快速体验下一代物联网标准协议

前言 QUIC(RFC9000) 是下一代互联网协议 HTTP/3 的底层传输协议&#xff0c;与 TCP/TLS 协议相比&#xff0c;它在减少连接开销与消息延迟的同时&#xff0c;为现代移动互联网提供了有效灵活的传输层。 EMQX 5.0 是首个将 QUIC 引入 MQTT 的开创性产品。在长期的客户服务和技…

eunomia-bpf项目重磅开源!eBPF 轻量级开发框架来了

近日&#xff0c;在 2022 云栖大会龙蜥峰会 eBPF & Linux 稳定性专场上&#xff0c;来自 eBPF 技术探索 SIG Maintainer 、浙江大学的郑昱笙分享了《eunomia-bpf&#xff1a;eBPF 轻量级开发框架》技术演讲&#xff0c;以下为本次演讲内容&#xff1a; 大家好&#xff01;…

【新知实验室-TRTC开发】实时音视频之web端云监工系统(Vue3+Element plus+TS+Pinia)

在线上线下一体化、虚拟现实加速融合的趋势下&#xff0c;音视频已经演进成一种基本能力&#xff0c;深刻变革了社会的交互方式。未来&#xff0c;音视频作为全真互联时代的重要基石&#xff0c;将持续推动互联网和实体产业的数字化创新与升级。 今天我们将体验腾讯的实时音视…