802.11协议精读13:协议理论性能(Bianchi模型)

序言

为了更好理解一些802.11的后续设计,我们需要深入了解一下802.11的协议性能。我们之前简单描述了下协议性能的部分,这一段我们讨论下具体数学模型下的802.11性能(Bianchi模型)。


Bianchi模型出自于论文《Performance Analysis of the IEEE 802.11 Distributed Coordination Function》,该论文在2000年的时候发表在JSAC(IEEE Journal on selected areas in communications)上,根据google scholar上的记录,该论文的他引次数已经高达8267次(相应的资源:bianchi模型)。其实关于802.11的理论性能从协议刚开始出来的时候就有人研究,直到现在,这个问题还是在继续研究中,该论文是这个领域中最为有代表性的一篇文章,故凡是做802.11协议的,都会阅读理解这篇文章。

PS:本文并不是按照Bianchi原文以推导的形式给出,而是为了方便理解进行的倒叙。其中部分表述和定义如果存在一些错误,还请见谅。

Bianchi模型的假设

我们首先列举一些Bianchi模型中,所设定的一些假设。

  • Single-cell Network:可以简单认为是个单信道环境,即所有节点共享一个功能信道,并且这个网络中,所有的节点都是互相可以监听到对方的。
  • The collision processes of the nodes can be decoupled:即无论节点重传了几次,其在传输时候的冲突概率都是一个定值,且都是相对独立的。
  • Channel conditions are ideal:信道是一个理想信道,即传输错误仅仅由于传输碰撞造成,与物理层的信道质量无关。且由于Single-cell的假设,所有节点都可以互相监听,所以网络中也没有隐藏和暴露终端问题。
  • Saturation throughput:Bianchi模型分析为饱和情况下的吞吐量,即任意一个节点都是假设有数据包的,不存在节点竞争到信道之后,没有数据包待发送的情况出现。
  • No packet dropped:按照协议所述,如果数据包发送失败,节点是可以发起重传的。这个重传次数上限为6次,如果超过该次数,那么就需要丢包。而在Bianchi模型中,保留的重传次数上限为6次的这个设置,不过没有设定6次以后进行丢包,而是一直保持在第6次这个zhu

MAC层效率(归一化吞吐量)

在之前的一篇文章中,我们定义了MAC层的归一化吞吐量为传输真实数据(Data)的时间占总传输时间(Overhead + Data)的比例。

在Bianchi模型中,其具体定义如下(部分表述有稍微修饰一下)


其中S为归一化吞吐量(注:本文讨论的吞吐量都是系统的吞吐量,没有具体到某一个节点的吞吐量上,而是所有节点整体的吞吐量),分子分母都是一个数学期望,实际上就是平均时间。分母代表的是Generic slot(这个后面我们说明,与DCF中的标准slot时间存在区别),分子定义的是在这个Generic slot内,传输数据的时间。不严格的说,其物理意义和我们之前一篇描述的定义是一样的。

Generic Slot:这个是一个随机选择的时间,其与802.11中DCF的具体接入机制有关。一般意义上,我们理解其物理意义就是Backoff counter倒数1次的时间间隔。


如上图为Generic slot的3种可能取值。其中\sigma 代表协议中的slot时间(比如802.11g中的9μs),T_{s} 为成功传输所花费的总时间,T_{c} 为碰撞一次所花费的总时间。P_{tr} 为至少有一个节点准备发送的概率,P_{s} 为成功传输的概率(实际上理解成只有1个节点传输的概率,如果有多个那么就会造成冲突)。我们进一步阐述如下:

  • 情况1 — \sigma :若节点在Backoff过程中,经过1个slot,backoff counter未倒数到0。这个概率为1-P_{tr} ,消耗的时间就是一个slot,即\sigma 时间。

若节点经过这个slot,backoff counter正好倒数到0,那么节点就会发送数据(即概率 P_{tr} )。但是发送后,这里还存在两种情况,一者发送成功,一者发送失败。
  • 情况2 - T_{s} :若节点成功发送该数据,那么损耗时间为T_{s} ,其对应概率为P_{tr}*P_{s},即不仅发送,且发送成功。
  • 情况3 - T_{c} :若节点发送数据,但是由于冲突(比如多个节点backoff counter倒数同时至0),那么这个数据帧是没有无法成功被接收的,这个损耗的时间就是T_{c} 。其对应概率为P_{tr}*\left( 1-P_{s} \right) ,即虽然发送,不过发送失败。

具体的 T_{s} T_{c} 还与节点的工作模式有关(Basic模式或者RTS/CTS模式),我们分别解释:

Basic模式:该模式的简单流程如下图:


其中T_{s} T_{c} 的时间如下:


其中H代表物理层头部的传输时间,SIFSDIFS都是协议给定的帧间间隔,ACK为协议给定的ACK帧的传输时间,\delta为电磁波传播延迟(DATA-ACK过程由于是一来一回,所以传播延迟是两个)。E\left[ P \right] 为payload的期望,代表数据包(MSDU)传输时间的均值。E\left[ P^{*}  \right] 代表的是发生冲突时,冲突中较长数据帧的均值,因为冲突只有在较长数据帧发送完之后,信道才被释放。

RTS/CTS模式:该模式的简单流程如下图:


其中T_{s} T_{c} 的时间如下:


其中RTSCTS代表其数据帧对应的传输时间。上图中我们可以发现,RTS/CTS模式下,虽然传输时间是相应增加了(由于引入了RTS/CTS握手),但是冲突损耗是减少了。该设计能够保证,这个在节点较多的情况下(即碰撞概率较大的情况下),RTS/CTS的性能受到较小的影响。


本文为了简化,我们直接假设所有节点的数据包大小是一个定值,从而E\left[ P \right] 就等于传输这个数据包所花费的时间,且E\left[ P \right] =E\left[ P^{*}  \right] 。(在bianchi原文中没有进行该假设,只是为了简化本文的叙述,所以我们做数据包大小为定值的假设)


综合以上的Generic slot和其对应时间,我们可以具体给出归一化吞吐量S的具体计算公式。


其中分母就是Generic slot的均值(即事件概率乘以其对应时间),分子为在一个Generic内,成功传输数据(MSDU)部分的时间。

传输概率(P_{tr} )和成功传输概率(P_{s}

前面我们给出了归一化吞吐量S的表达式,该式中,由于T_{s} T_{c} 中的参数都是协议给定。为了计算吞吐量,我们只要求出概率P_{tr} P_{s} 就行了。


  • P_{tr} :其物理意义是至少有一个节点,在这个slot内准备传输。这里\tau 指的是发送概率,n指的是总的竞争节点数目(由于假设是one-cell network,并且饱和吞吐量,所以所有节点都在竞争信道)。我们可以这样理解P_{tr} 的物理意义:\left( 1-\tau  \right) 代表其中某1个节点没有发送的概率,\left ( 1-\tau  \right )^{n}所有节点都没有发送的概率,所以其反面,1-\left ( 1-\tau  \right )^{n}就是至少有1个节点可以发送的概率了。


  • P_{s} :这个实际上是个条件概率,物理意义是在有节点发送的前提下(即分母的P_{tr} ),成功传输的概率(即有且只有一个节点正在传输)。分子我们可以这样理解:\tau^{1}  * \left( 1-\tau \right) ^{n-1} ,其中\tau^{1} 代表代表有1个节点正在发送,\left( 1-\tau \right) ^{n-1} 代表其余n-1个节点都没有发送,即有且只有一个节点发送,那么才没有冲突。又是因为这个节点没有固定下来说,具体某一个节点,所以要做个排列组合,即一共n个节点,即n中情况,所以分子再乘以n

上面我们介绍了P_{tr} P_{s} 的具体表达式,其中n是节点数目,所以一般也是给定的。所以最后剩下来的参数就是\tau了,我们需要对该参数进行分析。

发送概率(\tau)和冲突概率(p

通过以上分析,我们最终只要知道每一个节点的发送概率\tau就可以求出吞吐量了,但是这个\tau就没有那么好求了,其主要是源于802.11协议中,发送和冲突是互相影响的。发送概率\tau中包含了冲突概率p,而冲突概率p中也包含了发送概率\tau

以下我们描述一下bianchi模型中具体分析的过程。bianchi模型实际上采用了一个二维的Markov chain,具体如下图:


我们先简单说明下其中的一些参数,然后在具体讨论。每一横行代表的是一次Backoff过程,每一纵行代表的是一次二进制指数增加CW窗口大小的过程。以第1行为例说明如下:


  • 状态\left( 0,W_{0}-1  \right) 0代表是第0次的Backoff过程(即CW窗口是默认大小),W_{0}-1代表Backoff counter选取数值为W_{0}-1(由于CW范围是从0开始,所以最大数值为CW-1),W_{0}就是第0次Backoff时候的CW大小。
  • 状态\left( 0,W_{0}-1  \right) 转移至\left( 0,W_{0}-2  \right) 代表了1次Backoff counter的回退(如图中红色1标识),其概率为1(因为不存在碰撞)。
  • 当Backoff counter倒数至0后,即转移至状态\left( 0,0 \right) 时,节点可以发送数据。
    • 若发送成功(即概率1-p ),如图中红色2标识,就需要重新在CW窗口内选择一个随机数(即某个随机数被选中的概率为1/ W_{0} ),并转移到该状态(比如转移到状态\left( 0,1 \right) ,其转移概率为\left( 1-p \right) / W_{0} )。
    • 若发送失败(即概率p ),如图中红色3标识,那么需要首先调节CW窗口大小(指数为2增长),即W_{0}变为W_{k},在第二轮中,k=1。然后节点需要在更新后的CW窗口大小W_{1}中选择一个随机数(概率为1/ W_{1} ),并转移至该状态(比如转移到状态\left( 1,1 \right) ,其转移概率为p  / W_{1} )。
  • 在Bianchi模型中,假设是没有丢包过程的。而二进制指数回退并不是上限无穷的增加CW窗口,其有个最大次数m次,在bianchi模型中。如果节点第m次回退后,还是发送失败,则不增加CW窗口大小,而是直接在这一轮设置的CW大小(W_{m})中,直接选择一个随机数进行重传(这个概率就是p  / W_{m} )。

更一般的我们用数学标识即是下面的式子:


下面我们先表示冲突概率


由于Bianchi模型中,已经假设节点之间的冲突过程是相对独立的。假设我现在是某个节点,我已经处于发送状态,所以剩余的n-1个节点都不能够发送(即概率\left( 1-\tau  \right) ^{n-1} ),如果有任意一个也处于发送状态(即概率1-\left( 1-\tau  \right) ^{n-1} ),那么就会发生冲突。

最终我们考虑发送概率\tau,参考下图


协议规定,如果节点Backoff counter倒数到0,那么就可以进行发送。由于节点可能处在不同的backoff状态(即初次传输,重传1次,重传2次等等),所以我们需要对转移到这些状态的概率做一个累加,即:


其中m代表CW最多增加m次,i是个index,代表第i次Backoff过程,b代表状态,b_{i,0} 代表第i次Backoff counter倒数到0。因为每一次发送完之后,节点都必须要转移到状态\left( 0,0 \right) 。所以我们可以直接计算转移到状态b_{0,0} 的条件概率。即如果发送没有发生冲突(即概率1-p),状态转移至b_{0,0} 的概率(即\frac{b_{0,0}}{1-p} )。

最后我们表示出b_{0,0} 状态时候的稳态概率即可


这个概率的物理意义有些繁杂,我们就不进行展开了,最终我们可以计算发送概率为:


从而获得以下的一个联立的方程(其中上式的\tau 和下面的联立表达还有一个参数带入的步骤,具体可以参考论文,这里直接跳跃到下面的结果了):


我们看到上面的表达中,p表达式中包含\tau ,同样\tau 中表达式也包含p。故我们需要采用fix-point的方法,才可以对其进行求解。具体求解方法我们在下一篇文章中进行讨论。

结果分析

以下我们直接参考Bianchi论文中给出的结果,大致说明一下:


上图横轴代表节点数目(节点数目从0到50),纵轴代表归一化吞吐量(即范围从0~1,图中是从0.5开始绘制)。图中一共绘制5组结果:

  • \triangle 代表Basic模式下,初始的CW窗口设置为32,CW窗口可以回退增大3次。
  • \square 代表Basic模式下,初始的CW窗口设置为32,CW窗口可以回退增大5次。
  • \circ 代表Basic模式下,初始CW窗口设置为128,CW窗口可以回退增大3次。

从这三组值的对比上可以看出,节点数越多,Basic模式的性能越差。其基本原因就是冲突概率的增加。通过增加CW窗口大小的方法,能够一定程度上避免冲突问题,所以能够缓解随着节点数增加,而造成的吞吐量下降。初始设置更大的CW比增加回退次数要更有效一些。

  • \ast 代表RTS/CTS模式下,初始的CW窗口设置为32,CW窗口可以回退增大3次。
  • \diamond代表RTS/CTS模式下,初始的CW窗口设置为128,CW窗口可以回退增大3次。

在RTS/CTS模式下,可以发现其吞吐量相比Basic模式,能够在节点数较多的时候,受到较小的影响,其基本原因在于冲突损耗上。Basic模式冲突一次是损失了一个数据帧的时间,而RTS/CTS模式下,冲突一次仅仅损耗了一个RTS时间。同时我们还可以看到,由于冲突损失较小的情况下,我们没有必要设置更大的CW窗口大小,因为更大的窗口大小就意味着更多的回退次数,从而消耗更多的时间。

相关推荐
<p> <b><span style="font-size:14px;"></span><span style="font-size:14px;background-color:#FFE500;">【Java面试宝典】</span></b><br /> <span style="font-size:14px;">1、68讲视频课,500道大厂Java常见面试题+100个Java面试技巧与答题公式+10万字核心知识解析+授课老师1对1面试指导+无限次回放</span><br /> <span style="font-size:14px;">2、这门课程基于胡书敏老师8年Java面试经验,调研近百家互联网公司及面试官的问题打造而成,从筛选简历和面试官角度,给出能帮助候选人能面试成功的面试技巧。</span><br /> <span style="font-size:14px;">3、通过学习这门课程,你能系统掌握Java核心、数据库、Java框架、分布式组件、Java简历准备、面试实战技巧等面试必考知识点。</span><br /> <span style="font-size:14px;">4、知识点+项目经验案例,每一个都能做为面试的作品展现。</span><br /> <span style="font-size:14px;">5、本课程已经在线下的培训课程中经过实际检验,老师每次培训结束后,都能帮助同学们运用面试技巧,成功找到更好的工作。</span><br /> <br /> <span style="font-size:14px;background-color:#FFE500;"><b>【超人气讲师】</b></span><br /> <span style="font-size:14px;">胡书敏 | 10年大厂工作经验,8年Java面试官经验,5年线下Java职业培训经验,5年架构师经验</span><br /> <br /> <span style="font-size:14px;background-color:#FFE500;"><b>【报名须知】</b></span><br /> <span style="font-size:14px;">上课模式是什么?</span><br /> <span style="font-size:14px;">课程采取录播模式,课程永久有效,可无限次观看</span><br /> <span style="font-size:14px;">课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化</span><br /> <br /> <br /> <span style="font-size:14px;background-color:#FFE500;"><strong>如何开始学习?</strong></span><br /> <span style="font-size:14px;">PC端:报名成功后可以直接进入课程学习</span><br /> <span style="font-size:14px;">移动端:<span style="font-family:Helvetica;font-size:14px;background-color:#FFFFFF;">CSDN 学院APP(注意不是CSDN APP哦)</span></span> </p>
<p> <span style="color:#337FE5;"><strong>【为什么还需要学习C++?】</strong></span> </p> <p style="margin-left:0cm;"> 你是否接触很多语言,但从来没有了解过编程语言的本质? </p> <p style="margin-left:0cm;text-align:start;"> 你是否想成为一名资深开发人员,想开发别人做不了的高性能程序? </p> <p style="margin-left:0cm;text-align:start;"> 你是否经常想要窥探大型企业级开发工程的思路,但苦于没有基础只能望洋兴叹? </p> <p style="margin-left:0cm;text-align:start;">   </p> <p style="margin-left:0cm;text-align:start;"> 那么C++就是你个人能力提升,职业之路进阶的不二之选。 </p> <p style="margin-left:0cm;text-align:start;"> <br /> </p> <p style="margin-left:0cm;text-align:start;"> <br /> </p> <p style="margin-left:0cm;"> <strong><span style="color:#337FE5;">【课程特色】</span></strong> </p> <p style="margin-left:0cm;text-align:start;"> 1.课程共19大章节,239课时内容,涵盖数据结构、函数、类、指针、标准库全部知识体系。 </p> <p style="margin-left:0cm;text-align:start;"> 2.带你从知识与思想的层面从0构建C++知识框架,分析大型项目实践思路,为你打下坚实的基础。 </p> <p style="margin-left:0cm;text-align:start;"> 3.李宁老师结合4大国外顶级C++著作的精华为大家推出的《征服C++11》课程。 </p> <p style="margin-left:0cm;text-align:start;"> <br /> </p> <p class="ql-long-24357476"> <span style="color:#337FE5;"><strong>【学完后我将达到什么水平?】</strong></span> </p> <p class="ql-long-24357476"> 1.对C++的各个知识能够熟练配置、开发、部署; </p> <p class="ql-long-24357476"> 2.吊打一切关于C++的笔试面试题; </p> <p class="ql-long-24357476"> 3.面向物联网的“嵌入式”和面向大型化的“分布式”开发,掌握职业钥匙,把握行业先机。 </p> <p class="MsoNoSpacing" style="margin-left:18pt;"> <br /> </p> <div> <br /> </div> <p> <br /> </p> <p style="margin-left:0cm;text-align:start;"> <span style="color:#337FE5;"><strong>【面向人群】</strong></span> </p> <p style="margin-left:0cm;text-align:start;"> <span style="color:#222226;font-family:PingFangSC-Regular, "font-size:14px;background-color:#FFFFFF;">1.希望一站式快速入门的C++初学者;</span> </p> <p style="margin-left:0cm;text-align:start;"> <span style="color:#222226;font-family:PingFangSC-Regular, "font-size:14px;background-color:#FFFFFF;">2.希望快速学习 C++、掌握编程要义、修炼内功的开发者;</span> </p> <p style="margin-left:0cm;text-align:start;"> <span style="color:#222226;font-family:PingFangSC-Regular, "font-size:14px;background-color:#FFFFFF;">3.有志于挑战更高级的开发项目,成为资深开发的工程师。</span> </p> <p style="margin-left:0cm;text-align:start;"> <br /> </p> <p> <br /> </p> <p> <span style="color:#337FE5;"><strong>【课程设计】</strong></span> </p> <p> 本课程包含3大模块 </p> <p> <strong>基础篇</strong><br /> 本篇主要讲解c++的基础概念,包含数据类型、运算符等基本语法,数组、指针、字符串等基本词法,循环、函数、类等基本句法等。 </p> <p> <br /> <strong>进阶篇</strong><br /> 本篇主要讲解编程中常用的一些技能,包含类的高级技术、类的继承、编译链接和命名空间等。 </p> <p> <br /> <strong>提升篇:</strong><br /> 本篇可以帮助学员更加高效的进行c++开发,其中包含类型转换、文件操作、异常处理、代码重用等内容。 </p> <p> <img src="https://img-bss.csdnimg.cn/202007091130239667.png" alt="" /> </p>
©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页