80211 发送速率选择算法分析

转:https://blog.csdn.net/junglefly/article/details/48974077

 

1. 介绍
《802.11无线网络权威指南  第二版》中对于选速和降速的描述:

市面上所有802.11接口均支持某种降速机制,可以根据不同网络环境调整所使用的数据传输速率。速率选择主要决定一张网卡该在何时提高速率以提高链路品质。802.11标准并未规范工作站如何决定降速(或者升速),因此速率选择如何实现就留给芯片组厂商自行决定。几乎所有芯片组具有自己的一套选速机制,因此大多数802.11接口的操作方式均有所不同。速率选择是可编程的,一般由驱动程序控制。

最常被用来判断何时应该变速的算法,其实是通过一些不是那么严格的信号质量测量。信号质量可以直接就信噪比加以测量,或者间接观察有多少帧需要重传。直接测量信噪比可以针对最近一个帧的瞬间信号质量,或者就最近一段时间所接收到的一定数量的帧取平均数。有些芯片会直接测量信噪比,不过随后会将之转换为相应的“信号质量signal quality”。当信号质量变差,芯片就会以降速来应变。

至于间接测量,则是监测瞬间或者平均遗失多少帧,然后予以适当补偿。采用间接测量的算法简单来说就是:如果帧已经遗失且帧重试计数器已经用尽,那就降速到下一档,然后重试一遍。反复进行以上步骤直到帧送出,或者一直尝试到以最低速率都无法成功传送为止。采用间接信号质量测量的芯片组或许会稍微修改上述算法,以避免耗费过多时间在物理层所支持的所有速度间逐次降速。尤其是近来的芯片组均支持不少的速率,在较低速率上反复重试将会相当费时。

 

1.1 发送速率的选择
 

代码中的数据结构如下所示:

 

/* MIMO Tx parameter, ShortGI, MCS, STBC, etc.  these are fields in TXWI. Don't change this definition!!! */

typedef union _HTTRANSMIT_SETTING {

#ifdef RT_BIG_ENDIAN

         struct {

                   USHORT MODE:2;   /* Use definition MODE_xxx. */

                   USHORT iTxBF:1;

                   USHORT rsv:1;

                   USHORT eTxBF:1;

                   USHORT STBC:2;      /* SPACE */

                   USHORT ShortGI:1;

                   USHORT BW:1;         /* channel bandwidth 20MHz or 40 MHz */

                   USHORT MCS:7;       /* MCS */

         } field;

#else

         struct {

                   USHORT MCS:7;       /* MCS */

                   USHORT BW:1;         /* channel bandwidth 20MHz or 40 MHz */

                   USHORT ShortGI:1;

                   USHORT STBC:2;      /* SPACE */

                   USHORT eTxBF:1;

                   USHORT rsv:1;

                   USHORT iTxBF:1;

                   USHORT MODE:2;   /* Use definition MODE_xxx. */

         } field;

#endif

         USHORT word;

} HTTRANSMIT_SETTING, *PHTTRANSMIT_SETTING;

 

 

 

由上面的代码可知:

*  Ralink是通过APHardTransmit函数来发送所有的帧的。而驱动在发送数据时的速率是直接用节点的成员变量PMacEntry->HTPhyMode;

*  在发送一个报文时,它找到对应的节点,就可以取出当前的速率。

*  至于PMacEntry->HTPhyMode,driver中是通过APMlmeDynamicTxRateSwitching函数(call this routine every second ,walk through MAC table, see if need to change AP's TX rate towardeach entry)来实现对每个节点的速率的周期性维护。

 

2. 算法分析
2.1 算法的流程
在算法中会使用到如下的速率表,算法中会使用该表中的TrainUp以及TrainDown来决定是降速还是升速。

如下是传输速率表的一个例子:

 

UCHAR RateSwitchTable[] = {

/* Item No.   Mode   Curr-MCS   TrainUp   TrainDown                

Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF)*/

    0x11, 0x00,  0,  0,  0,                   /* Initial used item after association;连接后刚开始使用这个速率表项*/

    0x00, 0x00,  0, 40, 101,

    0x01, 0x00,  1, 40, 50,

    0x02, 0x00,  2, 35, 45,

    0x03, 0x00,  3, 20, 45,

    0x04, 0x21,  0, 30, 50,

    0x05, 0x21,  1, 20, 50,

    0x06, 0x21,  2, 20, 50,

    0x07, 0x21,  3, 15, 50,

    0x08, 0x21,  4, 15, 30,

    0x09, 0x21,  5, 10, 25,

    0x0a, 0x21,  6,  8, 25,

    0x0b, 0x21,  7,  8, 25,

    0x0c, 0x20, 12,  15, 30,

    0x0d, 0x20, 13,  8, 20,

    0x0e, 0x20, 14,  8, 20,

    0x0f, 0x20, 15,  8, 25,

    0x10, 0x22, 15,  8, 25,

    0x11, 0x00,  0,  0,  0,

    0x12, 0x00,  0,  0,  0,

    0x13, 0x00,  0,  0,  0,

    0x14, 0x00,  0,  0,  0,

    0x15, 0x00,  0,  0,  0,

    0x16, 0x00,  0,  0,  0,

    0x17, 0x00,  0,  0,  0,

    0x18, 0x00,  0,  0,  0,

    0x19, 0x00,  0,  0,  0,

    0x1a, 0x00,  0,  0,  0,

    0x1b, 0x00,  0,  0,  0,

    0x1c, 0x00,  0,  0,  0,

    0x1d, 0x00,  0,  0,  0,

    0x1e, 0x00,  0,  0,  0,

    0x1f, 0x00,  0,  0,  0,

};

 

表项对应的数据结构为:

typedef struct _RTMP_TX_RATE_SWITCH

{

         UCHAR   ItemNo;

#ifdef RT_BIG_ENDIAN

         UCHAR     Rsv2:2;

         UCHAR     Mode:2;

         UCHAR     Rsv1:1;    

         UCHAR     BW:1;

         UCHAR     ShortGI:1;

         UCHAR     STBC:1;

#else

         UCHAR     STBC:1;

         UCHAR     ShortGI:1;

         UCHAR     BW:1;

         UCHAR     Rsv1:1;

         UCHAR     Mode:2;

         UCHAR     Rsv2:2;

#endif      

         UCHAR   CurrMCS;

         UCHAR   TrainUp;

         UCHAR   TrainDown;

} RTMP_TX_RATE_SWITCH, *PRTMP_TX_RATE_SWITCH;

 

上面的接口中我们重点关注TrainUp和TrainDown。

如果发包错误率(PER: Packet Error Rate)大于等于TrainDown,并且一秒钟内发包数量大于一定数值,Driver就会选择降速;

如果发包错误率小于等于TrainUp, 并且一秒钟内发包数量大于一定数值,Driver就会选择升速;

  算法流程参见下图:

 

 

 

2.2算法的分析
*  如果上一秒统计的总的发送报文数<=15,那么仅根据Rssi来选择发送的速率,原则是选择出满足RSSI条件的最大的发送速率;

*  如果发送报文个数>15个,根据发包错误率来决定未来的传输速度。

       #  如果发包错误率(PER: Packet Error Rate)大于等于TrainDown,Driver就会选择降速;

       #  如果发包错误率小于等于TrainUp,Driver就会选择升速;

 
---------------------
作者:飞越丛林
来源:CSDN
原文:https://blog.csdn.net/junglefly/article/details/48974077
版权声明:本文为博主原创文章,转载请附上博文链接!

转载于:https://www.cnblogs.com/newjiang/p/10804495.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java xml导出_java 导出xml文件的四种方式

public class CreateXML {//DOM方式创建XML文件public void DOMcreateXML() {DocumentBuilderFactory factory DocumentBuilderFactory.newInstance();DocumentBuilder db null;try {db factory.newDocumentBuilder();Document document db.newDocument();document.setXmlS…

[html] 如果让你实现一个网页版的办公表格(类似excel),你觉得是否可行?如果可行应该怎么做?

[html] 如果让你实现一个网页版的办公表格&#xff08;类似excel&#xff09;&#xff0c;你觉得是否可行&#xff1f;如果可行应该怎么做&#xff1f; 尝试过写&#xff0c;底层还是用table,td,tr. 难点在于范围性选择单元格&#xff0c;横纵单元格合并互相不影响&#xff0c…

还是想继续写代码,不想这么快就去养猪~

前几天一个晚上我在想&#xff0c;除了写代码之外我还能做什么&#xff1f;没有头绪的打开163&#xff0c;xxx大学生意思是养猪发了&#xff0c;哥们我头绪来了&#xff0c;对养猪&#xff01; 再看下文&#xff0c;对人家对养猪技术&#xff0c;怎样怎样精通&#xff1f;怎样专…

【题解】序列

题目描述 一个长度为k的整数序列b1&#xff0c;b2&#xff0c;...&#xff0c;bk&#xff08;1≤b1≤b2≤...≤bk≤N&#xff09;称为“好序列”当且仅当后一个数是前一个数的倍数&#xff0c;即bi1是bi的倍数对任意的i&#xff08;1≤i≤k-1&#xff09;成立。 给定N和k&#…

[html] 写一个搜索框,聚焦时搜索框向左拉长并有动画效果

[html] 写一个搜索框&#xff0c;聚焦时搜索框向左拉长并有动画效果 为啥直接粘贴html发布以后就没有了呢个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

Struts2 文件上传

JSP界面&#xff1a; 必须把表单的enctype属性改为 multipart/form-data才能上传 Action&#xff1a; 程序如果多人使用&#xff0c;必须保证文件名是唯一&#xff0c;文件名相同会覆盖掉原来的文件&#xff0c;所以使用时间作为文件名。可以把生成的文件名直接存入数据库中&am…

[html] 你了解HTML5的download属性吗?

[html] 你了解HTML5的download属性吗&#xff1f; <a href"/wordpress/wp-content/themes/default/images/index_logo.gif" download"_5332_">下载</a> 没用过&#xff0c;也不了解&#xff0c;但是看了下兼容性还是挺大问题的&#xff0c;实…

看新闻的时间用的太多了

也不知从什么时候开始习惯每天看新闻,好像有五六年的习惯了,只是现在每天看新闻的时间用的太多了(每天都至少5-6小时),而且越来越严重了,除了看新闻,基本只剩下工作和睡觉时间了.cctv2,央视新闻频道,第一财经每天必看,新浪,搜狐,凤凰网,时寒冰,牛刀等等,从时事,到经济,到体育,到…

第五章学习小结

第5章学习树和二叉树 树 1.树的结构定义是一个递归定义&#xff1a;树的定义中又用到树的定义 2.结点的度即为结点的分支数&#xff0c;树的度是树内各结点度的最大值&#xff0c;二叉树每个结点至多只有两颗子树&#xff08;即二叉树中不存在度大于2的结点&#xff09; 二叉树…

[html] 浏览器内多个标签页之间的通信方式有哪些?

[html] 浏览器内多个标签页之间的通信方式有哪些&#xff1f; 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

SQL 内外连接

前两天去一家公司面试笔试&#xff0c;技术部人员问到“SQL语句左联接与内连接的区别”。记得上大学时。在学校做“实训教学管理系统”中曾用过该语句&#xff0c;印象中&#xff0c;还和同组中同学有过争吵&#xff08;技术上&#xff09;呢。 因此&#xff0c;当回答这道题时…

MySQL系列(一) MySQL体系结构概述

1 MySQL 的体系结构 连接池组件管理服务和工具组件SQL接口组件查询分析器组件优化器组件缓冲组件插件式存储引擎(体系结构的核心&#xff09;物理文件2 InnoDB 概述 InnoDB存储引擎支持事务&#xff0c;设计目标主要面向在线事务处理OLTP的应用&#xff0c;其特点是行锁设计&am…

[html] 元素的alt和title有什么区别?

[html] 元素的alt和title有什么区别&#xff1f; ALT 属性最常见用在 <img> 标签上&#xff0c;那我们先来看下 <img> 标签的 alt 属性。alt 属性是一个必需的属性&#xff0c;它规定在图像无法显示时的替代文本。假设由于下列原因用户无法查看图像&#xff0c;al…

java 优酷视频缩略图_java获取优酷等视频缩略图

类型&#xff1a;Android平台大小&#xff1a;6.8M语言&#xff1a;中文 评分&#xff1a;7.2标签&#xff1a;立即下载想获取优酷等视频缩略图&#xff0c;在网上没有找到满意的资料&#xff0c;参考了huangdijia的PHP版工具一些思路&#xff0c;写了下面的JAVA版代码。。其实…

hibernatedaosupport的使用

hibernatedaosupport的使用 一.“低耦合、高内聚”: 低耦合:就是软件在构造的时候&#xff0c;各个模块、各个功能、各个类都不会过度依赖于它周围的环境。只有这样&#xff0c;才能使我们的模块&#xff08;功能、类&#xff09;在周围发生变更时不受影响&#xff0c;做到易于…

java篇 之 变量存放位置

一&#xff1a;在方法中声明的变量&#xff0c;即该变量是局部变量&#xff0c;每当程序调用方法时&#xff0c;系统都会为该方法建立一个方法栈&#xff0c;其所在方法中声明的变量就放在方法栈中&#xff0c;当方法结束系统会释放方法栈&#xff0c;其对应在该方法中声明的变…

[html] 你认为table的作用和优缺点是什么呢?

[html] 你认为table的作用和优缺点是什么呢&#xff1f; 优点&#xff1a;写表格方便快捷&#xff0c;样式统一&#xff0c;居中对齐&#xff0c;减少使用div&#xff0c;seo较好 缺点&#xff1a;需要写的内容较多个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识…

cognos java api_Cognos API Connection

Cognos Connection, 通过 Cogons API 访问Cogons 已经安装好的平台&#xff0c;获取已经创建好的Report,修改此report&#xff0c;或者运行此report获取结果等。。。分析Connection. 简单代码如下&#xff1a;package test;import java.net.URL;import javax.xml.namespace.QNa…

流程管理软件如何适应变化

最近接触了一些关于SOA的相关理论&#xff0c;很是遗憾&#xff0c;没看出什么名堂来。最近为什么网络上比较流行SOA呢?个人认为这东西太悬乎了&#xff0c;凡是有什么好的软件思想或是方法都称之SOA,难怪架构师和软件企业那么热忠的去追捧它,似乎SOA万能&#xff0c;好多软件…

import json java_JAVA的JSON数据包装-博客园老牛大讲

标签&#xff1a;一、什么是json呢&#xff1f;{"id":"1","username":"老牛大讲堂","password":"123"}这就是json数据。用来和页面(HTMl)进行通信的。二、通信为什么用json呢&#xff1f;没有为啥&#xff0c;因为…