CSMA/CA是写入IEEE802.11的无线网络MAC层标准协议,相信看到这篇文章的读者都知道它是用来做什么的。但许多短文对这个协议的解释都有所缺乏,因此本文用状态转换图的形式详细说明协议的工作流程。(好吧其实是作者看到一个状态图有感而发,见参考资料)

请看下面的状态转换图:

其中,CS=1(0)意味着载波被占用(可用),Q=1表示队列中有(无)待发送的帧(frame)。感兴趣的读者可以自行推断上述状态代表什么。

好了,首先说明,CS=1还是CS=0是怎么判断呢?有时是通过侦听载波,有时是通过RTS/CTS机制,虽然图中并未说明。下面沿着状态图简述CSMA/CA工作流程:

  (初始状态为I, 节点有待发的帧,于是开始侦听载波)

  I:idle,发送方侦听到信道忙,则转到D,否则转到T。

  D:defer,若信道忙,等待一段时间后,若信道空闲,转到B。

  T:transmit,若信道可用,等待一个DCF之后发送一个RTS。若收到的CTS中包含自己的地址,说明预约信道成功,开始传输数据帧。传输过程中遇到出错,则转到B,进入退避过程;遇到信道被占用时转到D。

  B:backoff,即CSMA/CA的退避机制,用于处理传输出错的情况。出错一般只由两种情况导致,即冲突(collision)和信道噪声(carrier noise)。退避时,从{1, 3, 7, 15, ... 2^m-1}中选择一个时间进行延时。

退避过程:DCF在退避状态下有一个竞争窗口机制,如果一次传输成功了,发送端需要将竞争窗口置为最小值(802.11中规定contention window最小为31)。对于重传的节点,每一次传输失败都将contention window的大小成倍放大,即第一次重传时窗口大小为63,第二次是127,直到达到重传次数上限,则作丢包处理。竞争窗口越小,越有利于竞争。

另附MAC层中自私行为的实现:

  1,增大CCA threshold。

CCA (空闲信道评估,Clear Channel Assessment)用于监测信道是否空闲。节点监测信道中的RSSI并于阈值进行比较,若超出阈值则认为信道忙,否则信道可用。自私节点通过增大这一阈值,使得自身对于信道是否可用不敏感,因此在信道忙的时候仍然发包,导致其他节点的传输收到干扰。这种行为属于暴力自私行为,因为在干扰下自私节点自身的包也会丢失。

  2,减小backoff time,即选择小甚至最小的CW。

通过选择最小的CW,自私节点在传输出错的时候总是先于冲突节点发包,从而导致不公平性。篡改backoff time的自私行为是最难以解决的问题之一。

参考资料:Utpal Paul, Passive Measurement of Interference in WiFi Networks with Application in Misbehavior Detection[J], TMC, 2013.

 

从状态转移看:载波侦听多路访问/冲突避免(CSMA/CA)的更多相关文章

  1. CSMA/CD协议(载波侦听多路访问/碰撞检测) 最小帧长理解

    以下的帧长有的是指帧的时间长度,帧的时间长度=  帧长/传输时延

  2. 介质访问控制子层-Medium Access Control Sublayer:多路访问协议、以太网、无线局域网

    第四章 介质访问控制子层-Medium Access Control Sub-layer 4.1介质访问控制子层概述 MAC子层不属于之前提到的OSI或TCP/IP架构的任何一层,这也是为什么这一层被 ...

  3. Rest(表述性状态转移)

    本文的主要内容有: 1.了解Rest 2.了解RESTful WebService 3.使用SpringMvc实现RESTful ------------------------------我是华丽的 ...

  4. 背包DP 存在异或条件的状态转移问题

    题目链接 分析:有大佬说可以用线性基写,可惜我不会,这是用DP写的 题目明确说明可到达的位置只与能值有关,和下标无关,我们就可以排个序,这样每个数可以转移的区间就是它的所有后缀 我们可以用dp[i][ ...

  5. ruby 状态转移

    0. 引言       昨天遇到一个问题,就是关于对象状态转移的问题,我姑且这样命名吧.简要描述一下就是:对于一个人,他有进食,帮助他人,恋爱等功能,但是这些功能是有先后顺序的,对于刚出生的人,他要先 ...

  6. 路由器基础配置之广播多路访问链路上的ospf

    我们将以上面的拓扑图进行实验,因为是要以不断广播的形式进行ospf,所有中间加了一个集线器,这种ospf和前一种不同,路由器之间会在配置好ospf之后选举出一个老大,DR,一个备份,BDR,而其他路由 ...

  7. 动态规划:HDU1160-FatMouse's Speed(记录动态规划状态转移过程)

    FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  8. 使用 tcpdump 抓包分析 TCP 三次握手、四次挥手与 TCP 状态转移

    目录 文章目录 目录 前文列表 TCP 协议 图示三次握手与四次挥手 抓包结果 抓包分析 TCP 三次握手 数据传输 四次挥手 TCP 端口状态转移 状态转移 前文列表 <常用 tcpdump ...

  9. 深入理解Java线程状态转移

    目录 前言 状态转移图 1.0 新建态到就绪态 1.1 就绪态到运行态 1.2 运行态到就绪态 1.2.1 时间片用完 1.2.2 t1.yield() .Thread.yield(); 1.3 运行 ...

随机推荐

  1. cocos2dx2.2.2登录场景中Checkbox选择框的实现

    在前两篇文章中,我们介绍了在注册场景中需要用到的输入框及弹出框的实现方式,这两篇文章中介绍的内容在登录场景同样会用到.而我们经常会在登录场景中见到的另一种元素就是自动登录或者记住密码的Checkbox ...

  2. iOS - OC & Xcode

    一.入门 1.1 iOS模版介绍 1.2 简单工程项目 1.3 设置App启动的设备方向 1.4 Xcode界面介绍 1.5 快速查找文件 1.6 快速更改同名变量 1.7 将代码提取为方法 1.8 ...

  3. Cocos2d-JS自定义粒子系统

    除了使用Cocos2d-JS的11种内置粒子系统外,我们还可以通过创建ParticleSystem对象,并设置属性实现自定义粒子系统,通过这种方式完全可以实现我们说需要的各种效果的粒子系统.使用Par ...

  4. 【学习笔记】【C语言】逗号运算符

    逗号运算符主要用于连接表达式,例如: int a = 9; int b = 10; a = a+1 , b = 3*4; * 用逗号运算符连接起来的表达式称为逗号表达式,它的一般形式为: 表达式1, ...

  5. 理解C#系列 / .NET体系结构

    .NET体系结构 索引 前提条件 编程 编程语言 编程语言之一:C# C#依赖.NET平台 .NET平台下的公共语言运行库 .NET平台下的基础类库 C#可以开发什么? 前提条件 [最低配置]知道什么 ...

  6. 南阳理工ACM954--N!

    http://acm.nyist.net/JudgeOnline/problem.php?pid=954 循环的可怕之处!! 所有的测试数据结果完全一样.只是超时!!TimeLimitExceeded ...

  7. 一款功能强大的iphone购物应用源码

    一款功能强大的iphone购物应用源码,这款应用源码比较完整的,并且还支持信用卡支付服务等功能的,基本实现了我们常用的购物应用功能了,实现商品的基本展示功能,还具有完整的用户管理,以及完整的购物流程等 ...

  8. Windows Phone 8 蓝牙编程

    蓝牙是手机的近距离无限传输的技术,在之前的Windows Phone 7系统手机里面仅支持蓝牙耳机功能,并不支持蓝牙文件信息传输,那么在Windows Phone 8手机里面将全面支持蓝牙技术,并且提 ...

  9. 利用rsyslog 对linux 操作进行审计

    环境:客户端和服务端都需要安装rsyslog服务 rsyslog  server端 cd /etc/rsyslog.d/ cat server.conf $ModLoad imtcp $InputTC ...

  10. keditor_php图片上传

    <script type="text/javascript" src="/statics/js/kindeditor/kindeditor-min.js" ...