计算机网络:数据链路层 - CSMA/CA协议

计算机网络:数据链路层 - CSMA/CA协议

    • CSMA/CA概述
    • 帧间间隔
    • 工作原理
    • 退避算法
    • 虚拟载波监听


CSMA/CA概述

讲解CSMA/CA之前,我们回顾一下CSMA/CD的三个特性:

多址接入MA:多个主机连接在一条总线上,竞争使用总线
载波监听CS:每一个站点在发送帧之前,先要检测一下总线上是否有其他站点在发送帧
碰撞检测CD:每一个正在发送帧的同时,一边发送帧一边检测。一旦发现总线上出现碰撞,则立即停止发送,退避一段随机时间后再次重新发送

CSMA/CD 协议已经解决了有线局域网的传输问题,那么同样使用广播信道的无线局域网能不能也使用 CSMA/CD 协议呢?

在无线局域网中仍然可以使用载波监听CS以及多址接入MA,即在发送帧之前先对传输媒体进行载播监听。若发现有其他站在发送帧,就推迟发送,以避免发生碰撞

但是在无线局域网中不能使用碰撞检测CD,由于无线信道的传输条件特殊,其信号强度的波动范围非常大,无线网卡上接收到的信号强度往往会远远小于发送信号的强度,可能相差百万倍。如果要在无线网卡上实现碰撞检测,对硬件的要求非常高。

另外一个问题,就是隐蔽站问题:

在这里插入图片描述

这里有 4 个无线站点,A 的信号范围可以覆盖到 B,但不能覆盖到 C。C 信号范围可以覆盖到 B,但不能覆盖到 A。换句话说, A 和 C 都检测不到对方的无线信号。当 A 和 C 都要给 B 发送帧时,就会产生碰撞,但 A 和 C 无法检测到碰撞,这种未能检测出信道上其他站点信号的问题叫做隐蔽站问题。

当出了自己的检测范围,就无法识别到碰撞,那么在发送时检测碰撞也是没有有意义的。因此 802.11 无线局域网使用 CSMA/CA 协议在保留CSMA的基础上去掉了CD,也就是实时监测碰撞。增加了一个 CACA是一种避免碰撞的功能。

因此CSMA/CA协议的含义如下:

多址接入MA:多个主机在一个局域网中竞争使用信道
载波监听CS:每一个站点在发送帧之前,先要检测一下是否有其他站点在发送帧
避免碰撞CA:主机发送信号时,尽可能地避免发送碰撞

由于不可能避免所有的碰撞,并且无线信道误码率较高, 802.11 标准还使用了停止等待协议来保证数据被正确接收。


帧间间隔

802.11 标准规定所有的站点必须在持续检测到信道空闲一段指定时间后才能发送帧,这段时间称为帧间间隔 IFS

帧间间隔的长短取决于该站点要发送的帧的类型,高优先级帧需要等待的时间较短,因此可优先获得发送权。低优先级帧需要等待的时间较长,若某个站的低优先级帧还没来得及发送,而其他站的高优先级帧已发送到信道上,则信道变为忙状态,因而低优先级帧就只能在推迟发送了,这样就减少了发生碰撞的机会。

常用的两种帧间间隔如下:

  • 短帧间间隔 SIFS:长度为 28 微秒,是最短的帧间间隔,用来分隔开属于一次对话的各个帧,一个站点应当能够在这段时间内从发送方式切换到接收方式。

  • DCF帧间间隔 DIFS:长度为 128 微秒,它比短帧间间隔 SIFS 要长得多。在 DCF 方式中用来发送数据帧和管理帧。


工作原理

接下来我们来举例说明 CSMA/CA 协议的工作原理

如图所示:

在这里插入图片描述

以上站点都是无线站点,横坐标为时间假设无线信道是空闲的,源站有数据帧要发送,当源站检测到信道空闲,则在等待帧间间隔 DIFS 后发送该数据帧:

在这里插入图片描述

目的站若正确收到该数据帧,则经过帧间间隔 SIFS 后向源站发送确认帧ACK

在这里插入图片描述

需要说明的是,若源站在规定时间内没有收到确认帧ACK ,重传计时器超时后,就必须重传该数据帧,直到收到确认为止,或者经过若干次的重传失败后放弃发送。

源站为什么在检测到信道空闲后还要再等待帧间间隔 DIFS 后才发送数据帧呢?

这就是考虑到可能有其他的站有高优先级的帧要发送,若有就让高优先级帧先发送

目的站又是为什么在正确接收数据帧后,还要再等待一段时间 SIFS 才能发送ACK帧?

SIFS 是最短的帧间间隔,用来分隔开属于一次对话的各个帧。在这段时间内,一个目的站会从发送方式切换到接收方式。

如图所示,在源站和目的站的一次对话过程中,无线信道处于忙状态。若无线信道处于忙状态时,其他无线站点要发送数据,则必须退避
在这里插入图片描述

当信道从忙状态转换到空闲状态并经过帧间间隔 DIFS 后,其他要发送数据的无线站点需要退避一段随机时间后才能发送

既然信道已经由忙转为空闲,且经过帧间间隔 DIFS 后,为什么还要退避一段随机时间才能使用信道,而不是立即使用信道呢?

这样做的目的在于防止多个站点同时发送数据而产生碰撞。

当站点检测到信道是空闲的,并且没有连续发送数据,则不使用推避算法。

而以下情况必须使用退避算法

1.在发送数据帧之前检测到信道处于忙状态时,必须使用退避算法

  • 因为处于忙状态时,就可能会有多个站点准备发送,为了防止忙状态刚结束结束,多个站点同时发送数据,于是利用退避算法,把多个站点的发送交错开。

2. 在每一次重传一个数据帧时,必须使用退避算法
3. 在每一次成功发送后,要连续发送下一个帧时,必须使用退避算法

  • 这是为了避免一个站点长时间占用信道。

退避算法

在CSMA/CA协议中,采用了截断二进制指数退避算法来进行退避操作,以产生随机的数值进行退避,确保主机碰撞后退避的时间不同。

算法如下:

  1. 规定基本退避时间为一个时隙的长度t
  2. 定义参数 k = min(重传次数, 6)
  3. 从整数区间[0, 2 k − 1 2^{k} - 1 2k1]随机选一个数字r,最后的退避时间为 r × 2 τ {\color{Red} r \times 2\tau } r×2τ

接下来我再详细讲解以上算法的执行过程。

首先要设置一个基本的退避时间,该时间被设置为 2 t 2t 2t。而最后的总退避时间,就等于一个随机数r乘以这个基本退避时间 2 t 2t 2t,也就是 r × 2 t {\color{Red} r \times 2t } r×2t

那么现在的问题就是,要如何生成这个随机数r。该随机数r取自一个区间[0, 2 k − 1 2^{k} - 1 2k1],而这个k不是一个固定的数值,其与重传次数相关。

  • 如果重传次数小于6,那么 k 就是重传次数
  • 如果重传此处大于6,那么 k = 6

比如说当前是第2次重传,那么k = 2,r的取值范围就是[0, 2 2 − 1 2^{2} - 1 221],也就是[0, 3]。最后r在这个区间内随机取一个值,最终的退避时间就是 r × 2 t r \times 2t r×2t

再比如当前是第8次重传,由于重传次数超过6,那么k = 6,r的取值范围就是[0, 2 6 − 1 2^{6} - 1 261],也就是[0, 255]。最后r在这个区间内随机取一个值,最终的退避时间就是 r × 2 t r \times 2t r×2t

我们来举例说明。CSMA/CA协议的退避算法如图所示,ABCDE 是 5 个无线站点,横坐标为时间:

在这里插入图片描述

假设 A 正在占用无线信道发送帧,在 A 的发送过程中,B、C、 D 也要发送帧,我们用向上的箭头来表示。于是进行载波监听,发现信道忙,需要退避,根据退避算法选择出一个随机的退避时间,并在每个时期对信道进行一次检测,当检测到信道由盲状态转为空闲状态且经过帧间间隔 DIFS 后,退避计时器开始倒计时

在这里插入图片描述

假设 C 退避时间最短,当 C 退避计时器到时候, C 立即开始发送帧,此时信道由空闲状态转换为忙状态,当 B 和 D 检测到信道忙后,就冻结各自剩余的退避时间

在这里插入图片描述

假设在 C 占用无线信道发送帧的过程中, E 也要发送帧,于是进行载波监听,发现信道忙,需要退避,当检测到信道由盲状态转为空闲状态,经过帧间间隔 DIFS 后,退避计时器开始倒计时:

在这里插入图片描述

B 和 D 退避计时器从上次冻结的退避剩余时间开始。

倒计时 D 的退避计时器会首先到时 D 立即开始发送帧,此时信道由空闲状态转换为忙状态:

在这里插入图片描述

当 B 和 E 检测到信道忙后,就冻结各自剩余的退避时间。

当 D 发送完帧后,信道将转为空闲状态。当 B 和 E 检测到信道由忙状态转换为空闲状态,且经过帧间间隔 DIFS 后,退避计时器重新开始,从上次冻结的退避剩余时间开始倒计时:
在这里插入图片描述

E 的退避计时器结束, E 立即开始发送帧,此时信道由空闲状态转换为忙状态:

在这里插入图片描述

当 B 检测到信道忙后,就冻结自己剩余的退避时间。

当 E 发送完帧后,信道将转为空闲状态。当 B 检测到信道由盲状态转换为空闲状态,且经过帧间间隔 DIFS 后,退避计时器重新开始从上次冻结的退避剩余时间开始倒计时,当 B 的退避计时器到时候, B 立即开始发送帧:

在这里插入图片描述

若 B 发送完这一帧后还有帧要发送,则在检测到信道空闲且经过帧间间隔 DIFS 后,因为是相同的站点连续发送,还必须再退避一段随机时间后才能发送:

在这里插入图片描述


虚拟载波监听

接下来我们介绍CSMA/CA协议的信道预约和虚拟载波监听。

为了尽可能减少碰撞的概率和降低碰撞的影响, 802.11 标准允许要发送数据的站点对信道进行预约。

源站在发送数据帧之前先发送一个短的控制帧,称为请求发送RTS,它包括源地址、目的地址以及这次通信所需的持续时间

如图所示,当源站检测到信道空闲且经过帧间间隔 DIFS 后发送 RTS 帧:
在这里插入图片描述

若目的站点正确收到源站发来的RTS 帧,在检测到信道空前且经过帧间间隔 SIFS 后就发送一个响应控制帧,称为允许发送CTS。它也包括这次通信所需的持续时间:

在这里插入图片描述

源站收到 CTS 帧后再等待一个帧间间隔 SIFS 后,就可发送其数据帧:

在这里插入图片描述

若目的站正确收到了源站发来的数据帧,在等待一个帧间间隔 SIFS 后,就向源站发送确认帧ACK

在这里插入图片描述

如果 RTS 帧发生碰撞,源站就收不到 CTS帧,需要执行退避算法重传RTS 帧。由于 RTS 帧和 CTS 帧很短,发生碰撞的概率、碰撞产生的开销以及本身的开销都很小。而对于一般的数据帧,其发送时延往往大于传播时延,碰撞的概率很大,且一旦发生碰撞而导致数据帧重发,则浪费的时间就很多,因此用很小的代价对信道进行预约往往是值得的

由于利用虚拟载波监听机制,其它站点只需要监听到 RTSCTS数据帧中的任何一个,就能知道信道被占用的持续时间,而不需要真正监听到信道上的信号。因此,虚拟载破监听机制能减少隐蔽站带来的碰撞问题。

除源站和目的站以外的其他各站在收到 CTS 帧或数据帧后就推迟接入到无线局域网中。这样就保证了源站和目的站之间的通信不会受到其他站的干扰

例如,这是 4 个无线站点, A 和 C 互为隐蔽站, A 的信号可以覆盖到 B,但不能覆盖到C。 C 的信号可以覆盖到 B,但不能覆盖到 A:

在这里插入图片描述

A 在给 B 发送数据帧前,可以使用 RTS 帧来预约信道。尽管 C 收不到该 RTS 帧,但是 C 可以收到 B 发送给 A 的 CTS 帧:

在这里插入图片描述

这样 C 就知道了信道将被占用多长时间。在这段时间内,C 都不会征用信道,也就是说 A 给 B 发送数据不会受到 C 干扰。


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024年主流的java混淆工具有哪些

2024年,主流的Java混淆工具可能会包括: ProGuard:ProGuard 是一个免费的开源 Java 混淆工具,可用于压缩、优化和混淆 Java 字节码。它是Android开发者的首选混淆工具之一,并且在Java应用程序中也得到了广泛应用。 Dex…

Stable Diffusion超详细教程!从0-1入门到进阶

一、本地部署 Stable Diffusion 前言 目前市面上比较权威,并能用于工作中的AI绘画软件其实就两款。一个叫Midjourney(简称MJ),另一个叫Stable-Diffusion(简称SD)。MJ需要付费使用,而SD开源免费…

【洛谷 P8802】[蓝桥杯 2022 国 B] 出差 题解(带权无向图+单源最短路+Dijkstra算法+链式前向星+最小堆)

[蓝桥杯 2022 国 B] 出差 题目描述 A \mathrm{A} A 国有 N N N 个城市,编号为 1 … N 1 \ldots N 1…N 小明是编号为 1 1 1 的城市中一家公司的员工,今天突然接到了上级通知需要去编号为 N N N 的城市出差。 由于疫情原因,很多直达的交…

【GEE实践应用】统计遥感数据像元的观测值数量以及良好观测值数量

下面我们以贵州省毕节市2016年8月1号至2018年7月31号两年间像元的观测值数量以及良好的观测值数量为例,统计结果以图像形式进行输出,如图1所示: // 1. 定义研究区域 var studyArea table;// 获取 Landsat 和 Sentinel-2 数据集 var landsat…

第九届少儿模特明星盛典 全球赛首席体验官『韩嘉滢』精彩回顾

2024年1月30日-2月1日,魔都上海迎来了龙年第一场“少儿形体行业美育春晚”!由IPA模特委员会主办的第九届少儿模特明星盛典全球总决赛圆满收官!近2000名少儿模特选手从五湖四海而来,决战寒假这场高水准,高人气&#xff…

前端上传照片压缩 (适合 vue vant组件的)

为什么要这样做? (减小服务器压力 提升用户体验上传照片和加载照片会变快) 最近有一个需求,通过手机拍照后上传图片到服务器,大家应该都知道,现在的手机像素实在是太高了,随便拍一张都是10M以上…

物联网的核心价值是什么?——青创智通

工业物联网解决方案-工业IOT-青创智通 物联网,这个词汇在当今的科技领域已经变得耳熟能详。但当我们深入探索物联网的核心价值时,我们会发现它远不止是一个简单的技术概念,而是一种能够彻底改变我们生活方式和工作方式的革命性力量。 物联网…

Django之rest_framework(三)

一、GenericAPIView的使用 rest_framework.generics.GenericAPIView 继承自APIVIew,主要增加了操作序列化器和数据库查询的方法,作用是为下面Mixin扩展类的执行提供方法支持。通常在使用时,可搭配一个或多个Mixin扩展类 1.1、属性 serializer_class 指明视图使用的序列化器…

JVM之JVM栈的详细解析

Java 栈 Java 虚拟机栈:Java Virtual Machine Stacks,每个线程运行时所需要的内存 每个方法被执行时,都会在虚拟机栈中创建一个栈帧 stack frame(一个方法一个栈帧) Java 虚拟机规范允许 Java 栈的大小是动态的或者是…

npm配置阿里镜像库

1、配置阿里云镜像源 #查看当前使用的镜像地址命令 npm config get registry#设置阿里镜像源 npm config set registry http://registry.npmmirror.com 这里要注意下,之前的镜像源地址 https://registry.npm.taobao.org/ 已经不能用了,这里要更改为新…

Grok-1.5 Vision 预览 将数字世界与物理世界连接起来,首款多模态模型

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

android 创建module

文章目的: 快速创建module并使用 创建步骤: 1 创建module 2 修改module下的build.gradle文件 3 修改清单文件中MainActivity属性,否则APP会因为有多个启动界面而崩溃 4 在主项目build.gradle引用该object Module 至此,可在APP中…

golang 迷宫回溯算法(递归)

// Author sunwenbo // 2024/4/14 20:13 package mainimport "fmt"// 编程一个函数,完成老鼠找出路 // myMap *[8][7]int 地图,保证是同一个地图,因此是引用类型 // i,j表示对地图的哪个点进行测试 func SetWay(myMap *[8][7]int, …

【ARM 裸机】汇编 led 驱动之烧写 bin 文件

1、烧写概念 bin 文件烧写到哪里呢?使用 STM32 的时候烧写到内部 FLASH,6ULL 没有内部 FLASH,是不是就不能烧写呢?不,6ULL 支持 SD卡、EMMC、NAND FLASH、NOR FLASH 等方式启动,在裸机学习的工程中&#x…

参会记录|全国多媒体取证暨第三届多媒体智能安全学术研讨会(MAS‘2024)

前言:2024年4月13日上午,我与实验室的诸位伙伴共聚江西南昌的玉泉岛大酒店,参加了为期一天半的全国多媒体取证暨第三届多媒体智能安全学术研讨会(MAS’2024)。本届学术研讨会由江西省计算机学会、江西省数字经济学会主…

【学习笔记十七】波次管理、自动波次和WOCR介绍及配置

一、手工维护波次 波次是控制仓库活动(如拣配)的仓库请求项目(通常是出库交货订单项目)的分组。这些分组随后在后续流程中一起处理,例如,将分配到波次的所有仓库请求项目传输到仓库任务创建。 注意:仓库请求是出库交货订单、过账更改、库存转储(用于仓库中的内部移动)或入库…

最短网络kruskal算法

题目描述 农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场。当然,他需要你的帮助。约翰已经给他的农场安排了一条高速的网络线路,他想把这条线路共享给其他农场。为了用最小的消费&…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十一 简单给视频添加水印图片效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十一 简单给视频添加水印图片效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十一 简单给视频添加水印图片效果 一、简单介绍 二、简单给视频添加水印图片效果实现…

【保姆级讲解Element UI】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

负载均衡器如何工作,为什么如此重要?

现代应用程序和网站处理大量流量。负载均衡器是保证大型系统平稳运行的主要工具之一。 负载平衡器负责跨多个服务器路由客户端请求以分配负载并防止出现瓶颈。 这有助于最大限度地提高吞吐量、减少响应时间并优化资源使用。 负载均衡器的运行情况: (1).客户端请…