所谓CSMA/CA机制,是在无线局域网802.11中避免截止访问冲突的一个非常重要的机制。CSMA/CA(Carrier Sense Multiple Access with Collision Avoidance)机制主要分成两个部分:载波监听(CSMA)以及冲突避免(CA).

载波监听指的是:在发送之前首先进行监听,如果介质为空,则节点传输帧;如果为忙,则等待到当前传输结束之后再进行传输。 对这部分不太熟悉的可以看一下文章最后面的拓展部分,有关于CSMA和ALOHA协定的详解。冲突避免指的是尽量避免无线传输冲突,协议中主要有两个部分,分别是随机后退算法优先级确认协议。

CSMA/CA机制如下:当一个主机要发送消息之前首先要进行监听信道。不论是否信道为忙,发送端必须以一个帧间间隔的等待来开始自己的发送。具体为:当信道为空的时候,首先等待一个帧间间隔,之后再监听信道,如果还为空,那么开始一个随机后退过程,随机后退过程之后,再次监听,如果还为空,那么就开始发送。在上述等待过程中,如果任何时候出现信道忙的情况,那么终止上面的等待过程,并等待信道为空,之后重复上面的过程(从等待一个帧间间隔开始)。流程图如下:

我们看这个流程图,从①到②之间,似乎等待了一个帧间间隔还为空就直接传输了,没有随机后退过程,这与我们说的似乎不相符。但是这仅仅是一种特殊情况:当信道很久没有被访问过之后(通常是主机的第一次监听),等待一个帧间间隔就认为也不会有信道访问冲突了,所以直接发送。但是在一般情况,信道经常被访问的情况下,还是要在等待一个帧间间隔之后再进行随机后退的,两者并不矛盾。

那么重点说说这个帧间间隔和随机后退过程:

1.帧间间隔:帧间间隔定义了不同种类帧的优先级,这样的好处是进一步避免信道使用冲突,避开不同帧的同时发送。帧间间隔有三种:SIFS(最高优先级) PIFS(中等优先级)以及DIFS(最低优先级)。最高优先级用于ACK(传输结束的确认)和CTS(避免隐藏节点的控制帧)的传输,DIFS用于一般数据的传输。对于这部分尤其是CTS和ACK不太明白的,可以看看文末拓展部分。他们的使用如下所示:

在监听到信道忙之后,首先等待一个帧间间隔(SIFS,PIFS或者DIFS,视想发送什么消息而定),之后进入随机后退过程(contention window),如果信道还是空闲,那么就发送。现在是不是和之前的CSMA/CA的描述对得上了?

为什么要指定不同的帧间间隔?我们知道数据是最普通的,而CTS和ACK是确定传输之后比较要紧的信息,理所应当首先发送他们。比如说A主机想发送数据信息,同时B主机想给C主机发送紧急的CTS信息,那么当信道空闲时候,AB都等一个帧间间隔,但是B等待的时间短,之后就开始随机后退,他期望的等待时间更短,所以更有可能比A先发送,而A还没有后退完,就发现信道又开始忙了(B给C发送CTS消息),只能再等待。从这个角度来说,帧间间隔的优先级保证了更要紧的消息更可能早的发送。

2.随机后退过程Contention Window

同CSMA/CD 协议一样,随机后退过程并不是简单的随机找一个时间后退,而是用二进制指数算法进行后退。假设已经冲突了i次,那么冲突窗口设置为Cw,Cw=(2^i-1). 那么进行随机后退的时候,后退时间Contention Window = randomT *单位时间,而这个randomT是从(0,Cw)之间随机选出来的。

也就是说,冲突次数越多,每次随机后退的期望也就随着冲突次数增加而指数增长。并且如果冲突大于10次,那么认为i恒为10,也就是避免冲突次数太大时候无穷无尽的后退。最大的后退时间就是(2^10-1)*单位时间。后退时间是随着Cw控制的,因为randomT是在(0,Cw)之间随机选出来的,但是显然Cw会随着冲突变多而一直增大,所以设计了一个控制的办法:每次传输成功了(收方发送的CTS被发送方收到)那么Cw减半,如果没有收到(也就是冲突发生)那么就按照上面的方法,Cw加倍。在这点上面,CSMA/CA和CSMA/CD是一样的。

弄明白了CSMA/CA之后,肯定会有疑问:为什么有线局域网802.11用的是CSMA/CD协议,而无线局域网用的是CSMA/CA协议呢?这个涉及到了无线局域网和有线局域网性质的区别。第一,CSMA/CA协议早期的帧间间隔有助于避免冲突,原因上文已经说了。在无线传输中,冲突并不好避免,并且付出的代价极其昂贵,所以在发之前一定要尽量避免冲突。第二,CSMA/CA协议有ACK的确认机制,用有无ACK来确定是不是有冲突,而CSMA/CD则没有这个机制。总结来看,就是无线网络更不好检测冲突,冲突也更难处理,所以只能在机制上面更加完善,来避免冲突,这就是CSMA/CA协议的由来。

我觉得要想弄懂CSMA/CA ,首先要弄明白CSMA/CD在有线局域网是怎么检测冲突的,两者比较,才能弄明白有线和无线局域网对于冲突的检测和避免到底是怎么回事。

延伸阅读:

载波监听多路访问CSMA以及CSMA/CD详解

802.11的隐藏节点和RTS/CTS机制

介质访问控制MAC以及ALOHA协议

802.11的CSMA/CA机制相关推荐

  1. 802.11的隐藏节点和RTS,CTS机制

    802.11协议适用于无线局域网,这一点和802.3有着本质性的不同.首先先了解一下无线传输相关的范围:         无线传输有三个非常重要的范围:传输范围,侦听范围和干扰范围. 1.传输范围:传 ...

  2. 802.11协议精读2:DCF与CSMA/CA

    序言 在802.11的MAC层中.分成了两种基本工作模式: DCF(Distributed Coordination Function) PCF(Point Coordination Function ...

  3. 简单叙述tcp/ip的工作原理和主要的协议_802.11协议精读3:CSMA/CD与CSMA/CA

    序言 在前一份文档中,我们详细记录了有关802.11中DCF模式以及其核心CSMA/CA的一些内容与细节.对比无线网络,有线网络的集线器和中继器设计中,采用了CSMA/CD技术.该技术早期是用来解决有 ...

  4. 802.11协议精读9:初探节能模式(PS mode)与缓存机制

    https://zhuanlan.zhihu.com/p/21505178 序言 由于802.11的协议工作机制,如果其一直处于工作状态下,那么能耗还是比较大的,尤其移动设备的电量有限,所以在802. ...

  5. 802.11 参考手册

    目录 一.802.11成帧封装实现    3 1.1控制帧    3 1.1.1 一般的帧控制位    3 1.1.2   RTS(请求发送)    4 1.1.3   CTS (允许发送)    5 ...

  6. 802.11协议:wifi

    802.11协议 博客链接:https://www.blog.23day.site/articles/71 一.协议简介 IEEE 802协议簇是指IEEE标准中关于局域网(LAN)和城域网(MAN) ...

  7. 《802.11无线网络权威指南》摘录

    <802.11无线网络权威指南>摘录 ---------------------------- 第一.二章: 无线频谱管控: 美国:FCC联邦通信委员会 欧洲:FRO欧洲无线通信局 其他地 ...

  8. 802.11无线网络权威——(三、MAC基础)

    MAC位于各式物理层之上,控制数据的传输.它负责核心成帧操作(core framing operation)以及与有线骨干网络之间的交互. 802.11采用载波监听多路访问 / 冲突避免(carrie ...

  9. 802.11 - (1)

    一.概论 1.1.简介 IEEE802家族是由一系列局域网络(Local Area Network,LAN)技术规格所组成,802.11属于其中一员. 载波检测多重访问/碰撞检测(Carrier Se ...

最新文章

  1. HTML5 通过 FileReader 实现文件上传
  2. C#软件自动更新程序
  3. 曾宝仪和机器人_你愿意和机器人成为终身伴侣吗?
  4. div不随滚动条左右移动而改变位置
  5. 巨型机是一种什么的超级计算机,这个世界其实是一个超级计算机
  6. 基本的排序算法php,php四种基础排序算法
  7. 2019胡润女企业家榜公布:碧桂园杨惠妍继续领跑
  8. 九、Promises
  9. freeCodeCamp:Title Case a Sentence
  10. 【总结】动态规划 or 组合数学解决棋盘(迷宫)路径问题(持续更新中)
  11. 基于python-scrapy框架的爬虫系统
  12. #UML# Astah+Doxygen 将C++源码映射为类图
  13. 腾讯云服务器购买详细教程
  14. 云计算机技术与应用学什么的,云计算技术与应用专业学什么 主要课程
  15. 自定义关机计算机,win7自定义定时关机设置方法是什么
  16. pcre2 知:介绍
  17. 拉卡拉考拉超收,关于它的全部信息!
  18. FFmpeg获取视频旋转角度rotate获取不到的问题解决
  19. 搭建直播平台过程中的全能“辅助”——流媒体服务器...
  20. Android aosp10,AOSP Android10 hook dlsym

热门文章

  1. python在电脑下载-Windows下下载及安装numpy、pandas及简单应用
  2. 有车的朋友注意了!全语音识别,车载微信终于来了!
  3. 前端接收到的Url参数有中文乱码
  4. 谷歌何时停止Android更新,谷歌宣布Android Studio将停止为32位系统提供更新
  5. python模板代码替换_Python - 安全替换字符串模板(safe_substitute) 详细解释
  6. asp.net 提取html div,asp.net – 将div固定在html中的某一点
  7. php extjs 教程,Exjs 入门篇_extjs
  8. vue 中使用rem布局
  9. 【模拟遍历】剑指offer:替换空格
  10. 分治法解决组合总和问题(leetcode216)