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. LINUX下查看php运行的用户

    <?php echo shell_exec("id -a"); ?> 打开网页,显示 uid=2(daemon) gid=2(daemon) groups=2(daem ...

  2. 慎用memset();

    <span style="font-family: Arial, Helvetica, sans-serif;">void *(memset) (void *s,int ...

  3. Part 2 How are the URL's mapped to Controller Action Methods?

    Part 2 How are the URL's mapped to Controller Action Methods? The answer is ASP.NET Routing.Notice t ...

  4. 20150320--安全性,Membership类

    安全性--验证与授权,成员资格与角色. 一.成员资格与角色, 第一步:注册数据库,在VS中运行dos命令窗口中,输入:aspnet_regsql,建立数据库表. 如何启动VS的dos命令窗口,在  . ...

  5. 利用Nutch和Tomcat构建搜索引擎

    利用Nutch和Tomcat构建搜索引擎 1.安装环境及软件版本介绍 本教程是在Linux Ubuntu 12.04 desktop i386操作系统上搭建,结合使用了Nutch-1.2和Apache ...

  6. oracle连接和执行流程总结

    参考关于oracle连接及一个事务的完整流程分析的资料,做整理如下 参考资料: http://blog.csdn.net/wyzxg/archive/2010/08/16/5815335.aspx h ...

  7. 自定义textbox加入左右晃动效果

    应用开发过程中经常会要求用户在textbox进行输入.例如:登陆,发布. 而一般没进行输入的时候我们都会简单的进行弹窗提示用户输入. 前阵子ios的同学搞了一个左右晃动的效果,觉得还不错,于是也搞了个 ...

  8. nginx总结

    kill int 2333  进程号   停止程序 kiil quit 2322  优雅停止服务 kill -HUP 2333  优雅重启 从新读取配置文件 kill -HUP 'cat logs/n ...

  9. WPF 绑定三(绑定List中指定的字符串)

    xaml: <Window x:Class="WpfApplication1.Window3" xmlns="http://schemas.microsoft.co ...

  10. PHP学习之数组的定义和填充

    数组就是把一组数据按顺序放在一起.PHP的数组和其它的语言数组有一点点不同:第一,保存的数据是可以是任何类型的:第二,数组的索引可以是数字,也可以是字符串. PHP的数组,说白了,就是关联数据每一条数 ...