1.mac所面临的挑战
射频链路品质 radio link 容易受到干扰 802.11采用肯定确认机制 所有传送出去的帧都必须得到响应 工作站发送请求帧 基站收到后发送确认帧 此操作过程称为原子操作 不可分割的单一事物单元 single transactional unit
无线链路质量会影响网络操作的速度
隐藏节点的问题 无线网络界限模糊 距离果园的两个节点 无法收到对方的无线电波 两者互为隐藏节点
由隐藏节点导致的冲突问题相当难以监测 因为无线收发器 wireless transceiver 工作模式是半双工 模式 无法同时接收和发送数据 为防止冲突发生 需要工作站使用rts请求发送和cts清除发送 信号来清空传送区域 rts帧 cts帧 数据帧以及最后的响应帧被视为相同原子操作的一部分
过程:发送一个rts帧启动过程 rts的目的 1.预约无线链路的使用权
2.要求收到这一帧的其他sta保持沉默 退避 backoff
接收端收到rts 会议cts帧应答 目的与rts一样 cts帧会令附近的sta保持沉默
rts和cts交互完成之后 即可传送待传的帧
802.11驱动支持 用户可以通过调整rts阈值threshold来控制rts/cts交换过程 只要大于次阈值 rts/cts交换过程就会进行 小于此阈值会直接传送帧
2.mac访问模式与时机
无线媒介的访问是由协调功能 coordination function 控制
dcf分布式协调功能 控制
pcf点协调功能控制 构建于dcf之上
hcf混合协调功能 介于以上两个之间的模式
3.载波监听功能与网络分配矢量
主要用来判断媒介是否处于可用状态
具备两种载波侦听功能 :物理载波监听 和虚拟载波侦听 两者同时显示媒介空闲时 才能用媒介
物理载波侦听 取决于媒介和调制方式
虚拟载波侦听 由网络分配矢量 所提供 802.11帧通常会包含一个duration字段 预定一段媒介时间 其实就是一个定时器
可以保证工作站的原子操作不受干扰
interframe spacing 帧间间隔 没有任何操作之处会使用
distributed interframe space DIFS 分布式帧间间隔 完成整个过程 之后的一段时间使用
contention window 竞争窗口
4.帧间间隔
分类 四种 其中三种用来决定媒介的访问
不同的帧间间隔会为不同类型的传输产生不同的优先次序
逻辑:当媒介闲置下来时 高优先级的数据等待的时间较短
相同的物理层 帧间隔时间固定 与传输率无关 不同的物理层 则可以指定不同的帧间间隔时间
a short interframe space 简称 sifs 短帧间间隔
用于高优先级的传输场合 例如rts/cts以及肯定确认帧
b PCF interframe space 简称PIFS 帧间间隔
主要用于pcf使用在无竞争操作中 有时候被误称为priority interframe space 优先级帧间间隔
c DIFS DCF interframe space 帧间间隔
DIFS 是竞争式服务中最短的媒介闲置时间 媒介时间大于difs 则sta立即对媒介进行访问
d 扩展帧间间隔 Extended interframe space 简称EIFS
非固定的时间间隔 帧传送出现错误时才会用到EIFS
原书中3-5 sifs被硬要在不同单位的原子操作之间 接收端会在sifs之后相应cts 任何试图在rts结束之后访问媒介的sta至少必须等候一段difs 若在difs进行时 sifs已经先行结束 则会开始传送cts
利用dcf进行基于竞争的访问
DCF 分布式协调功能 大部分的传输操作基于此方式 基于竞争
如果媒介处于忙碌状态的时间过长 sta必须延迟访问 利用指数退避 exponential backoff 算法来避免发生冲突
基本规则:1.媒介闲置时间长于DIFS 可以立即传输 载波侦听可以同时物理与虚拟两种方式进行
a.如果之前的帧接收无误 则媒介鼻血至少空出一段 difs
b.如果之前的帧传输出现错误 则媒介必须至少空出一段 eifs
2.如果媒介处于忙碌状态 则sta必须等候到信道再度闲置 称为访问延迟 access deferral 一旦访问延迟 sta 会等候媒介闲置一段DIFS 同时 准备指数退避过程 exponential backoff procedure
特定情况下会用到一些额外的规则 其中有一些规则取决于线上 on the wire 与之前传送的结果有关
1.错误恢复 error recovery 发送端的责任 原子操作 发出去的帧必须得到确认
a 收到确认才算成功 否则认定丢失 需要重发
b 所有单播数据必须确认 广播 则不确认 所以单播质量高
c 发送失败 重试计数器 就会累加 retry counter 之后重新发送
2.多帧序列可以在传送过程中的每个步骤中更新nav 当收到的媒介预定时间比当前的nav还长时 sta会更新nav 设定anv 以个别的帧为基准
3.SIFS之后传输 优先级较高 确认帧 acknowledgment 、RTS/CTS交换过程中的CTS以及片段序列中的帧片段
a 只要发送出第一个帧 sta就会控制信道 后续帧几确认均可使用SIFS进行传送 锁定信道 不被其他sta使用
b 传输中 后续帧讲nav更新成该媒介预计使用的时间
4.如果较高层的包 higher-level packet的大小超过所设定的阈值 则必须使用扩展帧序列 extended frame sequence
a 包的大小超过rts阈值 必须使用rts/cts交换过程
b 长度超过分段阈值 则必须加以分段
DCF与错误恢复
错误检测与更正 error detection and correction由开始原子帧交换过程的sta来担任 一旦检测到错误 该sta必须负责重发送
每个帧或帧片段分别对应一个重试计数器 sta本身有两个重试计数器 :短帧重试计数器 short retry counter与长帧重试计数器 long retry counter 长度小于RTS阈值的帧被视为短帧 长度大于该阈值的帧则为长帧 重试计数由0开始算起
重试计数器清零情况
短帧
1.之前传送的rts得到cts响应
2.之前传送的未分段帧得到mac层的响应
3.收到广播broadcast或者组播 multicast的帧
长帧
1.之前传送的帧大于rts阈值并且得到mac层的响应 因为mac会处理此帧 不用重传
2.收到广播或组播的帧
除了相应的重试计数器 mac会赋予每个帧片段一个最长的生存时间 lifetime
第一个帧片段传送后 此计时器会启动 超时 此片段帧会丢弃 所欲不会重试剩余的片段帧
上层协议可能检测到数据丢失而予以重传 实际上重传的还是新的帧 所有重试计数器会清零
使用重试计数器
802.11通过重传机制提供可靠性 reliability 数据传送通过原子步骤 整个过程完成才算传送成功
该帧或帧片段 如果传送失败 相应的重试计数器便会累加
根据不同长度额帧来调整网络的稳定性 两种不同的重传限制的主要是放宽长帧的重传限制 以减少所需的缓存空间
DCF的退避算法
idfs之后紧接的一段时间称为竞争窗口 contention window或者backoff window 可以进一步分割为时隙 slot
slot因媒介而异 速度高的物理层时隙短
sta随机挑选某个时隙 等时隙到来 即可访问媒介 所有时隙的选择机会均等
取得第一个时隙 即最小时隙编号的sta可以优先传送
传送失败时 竞争窗口(时隙的数量)随着重传次数的增加 呈现指数倍数的增长 值为指数倍数减一
ds物理层限制最多1023个时隙 当帧传送成功 竞争窗口被重设为最小者 重试计数器到达上限 则该帧被丢弃
帧的分段与重组
上层包必经过分段 分段封包可提高可靠性 提高有效吞吐量
封包大小超过分段阈值 就会进行帧的分段
每个帧片段有相同的帧序号 以及一个递增的帧片段编号 (重组使用) 帧控制信息用来指示是否还有其他帧片段 待收
下图显示nav与sifs组合来控制媒介的访问 构成整个帧的所有帧片段会在所谓的片段突发期 fragmentation burst传送
帧片段与其确认之间以sifs区隔 因此sta一直有信道的掌控权 nav确保其他sta在此片段突发期不使用该信道
每个帧片段都会设定nav 继续掌握媒介的使用权 直到下个帧的确认结束
当最后一个侦片段及其确认送出时 nav即会被设定为0 代表媒介即将在片段突发期完成之后释放
帧格式*******************************************************
mac 包括使用四个地址字段 不同类型的帧使用不同地址字段 字段的传送顺序由左至右 最高有效位最后出现
1.frame control 帧控制字段 2个字节
protocol 协议版本 2bit
type 与subtype字段 帧类型
type =00 subtype 意义
此为管理帧 0000 关联请求
0001 关联响应
0010 重新关联请求
0011 重新关联响应
等等
type=01 控制帧
subtype 意义
1010 省电-轮询
1011 请求发送
1100 清除发送
1101 ack 确认
等等
type=10 数据帧
subtype 意义
0000 数据
0001 data+cf-ack
0010 data+cf-poll
0011 data+cf-ack+cf-poll
0100 null data 无数据:未传送数据
等等
type=11 当前尚未使用
to DS与from DS位
指示目的地是否为分布式系统
to DS=0 To DS=1
from DS=0 所有管理、控制帧 基础型网络里无线sta传送的数据帧
ibss里的数据帧
(非基础结构型)
from DS=1 基础结构性网络里无线sta收到 无线桥接器上的数据帧
的数据帧
more fragments位
除最后一个片段 其他片段都会讲此位设定为1
retry位
重传帧位
power management 位
电源管理
more data位
服务省电模式中的sta ap将从分布式系统接收来的帧加以缓存 ap设定此位 代表至少有一个帧待传给休眠中的 sta
protected frame位
安全协议保护 设定为1
order位
帧与帧片段依次传送 代价高 会设为1
2.duration/id字段
2个字节 功能较多
三种形式
duration 设定nav
15位为0 此字段用于nav 虚拟监听 即计时器
sta必须监视所收到的任何帧头病更新nav
无竞争周期所传送的帧
contention-free period 简称 CFP
14 位为0 15位为1
ps-poll帧 省电轮询
14和15位同时设置为1
sta关闭天线 省电 休眠中的sta定期醒来处理帧
3.Address字段 每个6字节
四个不同的地址段 经过编号 根据帧类型的不同 作用也不同
address1代表接收端 address2代表发送端 address3被接收端过滤地址
地址本身48位 实际媒介第一位为0 则代表单一sta 单播
第一位为1 则代表一组实体sta 称为组播
所有位为1 属于广播 broadcast
目的地地址
来源地址 第一位必然为0
接收端地址 代表处理该帧的设备 如果为sta则此地址为目的地地址 如果帧的目的地是与ap相连的 ethernet节点 接收端即为ap的无线接口 目的地地址可能是一台路由器
发送端地址 代表将帧传送至无线媒介的无线接口 通常只用于无线桥接
bssid基本服务集标识 即为ap无线接口所使用的mac地址 在基础型结构型中 infrastructure
使用多少地址字段取决于帧的类型 大部分数据帧 会用到3个字段 来源 目的地以及bssid 大部分用3个
帧的传送路径决定地址字段的编号与排列方式
4.顺序控制字段sequence control 2个字节
目的是重组帧片段以及丢弃重复帧 由4位片段编号字段以及12位的顺序编号字段组成 控制帧不使用顺序编号所以无此字段
上层帧被mac赋予一个顺序编号 作用为已传帧的计数器 从0算起
每处理一个封包就会加1 如果分段处理 则所有帧片段会具有相同的顺序编号 如果是重传帧 怎顺序编号不会有 任何改变
帧片段之间的差异在于片段编号 第一个片段为0 以后累加1
总结 fragment number 顺序编号 帧之间有用
sequence number 片段编号 帧片段之间的作用
注意 Qos (服务质量) 的 sta对此字段稍有不同 因为要维护多组传送的队列
帧主体
frame body 也叫数据字段 data field
负责在sta之间传递上层有效载荷payload
最多2304 个字节
802.2llc 逻辑链路控制 标头8个字节 最多2296个字节的有效载荷
mtu 1500字节
802.11帧中没有任何上层协议的标记可以区别
帧校验序列FCS
结尾 循环冗余校验 crc码
帧送到无线接口先计算fcs 然后再经过射频链路传送出去
802.11对上层协议的封装
RFC1042与802.1h 均衍生自802.2的子网访问协议 SNAP mac地址会被复制到封装帧的开头 然后插入snap标头
snap标头以目的地服务接入点 DSAP与源服务接入点 SSAP 同时包换控制字段 ui和高层数据链路协议字段oui
802.1h与rfc1042之间的唯一差异在于所使用的OUI 一个是0x00-00-00 另一个是0x00-00-f8
基于竞争的数据服务
数据交换过程必须被视为、单一的一个整体 单播数据必须得确认 DCF在帧交换方式在802.11mac中占有决定性的地位 从某个sta在DIFS之后取得闲置媒介的使用权时开始
广播域组播数据或管理帧
此类帧不需要响应
广播帧 address1
组播帧 address1
广播管理帧 address1(beacon probe request以及ibss atim帧)
组播帧不分段 无需得到确认 整个原子交换过程只牵涉到一个帧 基于竞争的访问控制 等待DIFS之后再竞争窗口倒数随机产生的延迟时间 nav设置为0 不用虚拟载波侦听来防止其他sta的访问
单播帧
sta所传送的帧成为直接数据 称为单播 一般只用于数据帧
基本的肯定确认 最后一个片段
帧分段
上层的网络协议或多或少都会用到帧分段 fragmentation 之后接收端重组 如果某片段遗失 整个封包必须重传
最后的帧与之前类似 nav设置完全相同 不过倒数第二个帧之前的所有帧会使用nav为下一个帧锁定媒介
数据帧的nav的时间设定足以涵盖ACK1 下一个帧片段及其确认ACK2 3个SIFS 帧间隔
确认帧ack中nav设定 涵盖下一个数据帧 下一个数据帧的确认ack以及2个sifs 帧间隔
data frag3中的more fragments位设定为0 ack3中的nav设定为0
帧分段有mac的分段阈值参数控制
RTS/CTS
与上面的帧分段无不同 只是rts帧中不携带数据
rts/cts可以用在所有的帧交换 非帧交换或者介于两者之间 由rts/cts中的阈值来控制 超过阈值 就用rts/cts来清空 媒介 否则较小的数据帧被直接传送
RTS/CTS 与帧的分段
两种通常是并行的 rts/cts过程所确保的媒介使用权 通常将两者的阈值设为一样
省电程序
多种速率支持
sta距离改变时 速度也会随之改变
1.每个sta有操作速率列表 记录sta与所连接bss均支持的所有速率 比较新的产品可以让用户根据虚拟接入点自定义 操作速率 虚拟ap 即虚拟ssid
2.每个BSS必须负责维护一组基本的速率 即打算加入此bss的sta必须支持的速率列表 任何传送到组播地址的帧必 须以基本速率传送 确保所有sta都可以正确解读 可以理解为最低的速率 向下兼容
3.用来开始帧交换的控制帧 必须以基本速率集中的一种速率来进行传送 确保cts响应rts的sta能够以相同速率操作
控制帧需要向下兼容 比较旧的sta
4.发送给特定sta的帧会在address1字段记载单播目的地址 可以用目的端支持的人一个速率传送
5.ack或cts之类的确认帧必须以基本速率集所包含的速率传送 但不能快于这次传送的初始帧 响应帧必须使用与初始帧相同的调制方式 dsss cck或者ofdm
迭速与降速
802.11未定义 有厂商自行决定 驱动程序控制 信号质量测量 重传计数器
帧的处理与桥接
ap核心就是桥接器 负责在无线与有线媒介之间转换帧
需要了解ap与ethernet之间的传送方式 相当重要
一 无线媒介到有线媒介 802.11到ethernet 操作过程如下
1.ap接收一个帧 检测该帧的完整性 针对所使用的物理层 查看物理层标头 验证802.11帧上的fcs
2.验证fcs无误后 继续查看是否应该进一步处理该帧
a 帧中的mac地址 即bssid 作为802.11mac标头的address1字段 不匹配的ap的bssid的帧会丢弃
b 接着检测并移除重复的帧 常见的情况是确认帧在传送过程中遗失或损坏 为简化上层协议操作 由 802.11MAC负责提出重复的帧
3.ap认为该帧需要进一步处理 立即解密(链路层的安全算法保护)
4.解密之后 ap查看该帧是否是帧片段 是否需要重组 完整性保护针对完整帧 而非帧片段
5.2a的bssid校验无误 判断ap要桥接此帧 802.11mac标头会转换为ethernet帧头
a address3字段里的目的地地址会被复制到ethernet的目的地址
b address2里的来源地址会被复制到ethernet的来源地址
c data字段里的snap标头 将type字段中的类型代码复制到ethernet里的type里 如果ethernet帧也是用snap 则复制整个snap标头
d 顺序信息主要供帧片段重组用 当被桥接之后被丢弃
e qos quality of service 处理存在 则在此进行有线接口的qos的映射
6.重算FCS帧校验码 算法与ethernet相同 不过两种协议的帧头长度内容均不同
7.将产生的新帧 交付给ethernet接口传送
二 有线到无线的传送 ethernet到802.11
将帧从有线端桥接到无线媒介的
1.验证ethernet FCS后 ap查看目的地址是否属于当前与接入点关联的sta
2.SNAP标头附加在ethernet帧的数据之前 上层封包以snap标头进行封装 type从ethernet帧的类型代码复 制而来 如果ethernet帧也是用SNAP 则复制整个SNAP标头
3.对帧的传送进行调度 802.11包含复杂的省电操作 将帧置于传送队列 transmit queue之前 ap可能 会将帧缓存于缓冲区
4.帧位于队列 待传 分配顺序编号
可以用完整性的校验值保护
分段 根据阈值进行分段 sequence control字段中的片段编号也会被赋值
5.则对帧主体加密
6.根据ethernet标头产生802.11标头
a.e的dmac复制到802的mac标头的address1字段
b.bssid存放在address2字段以作为无线媒介上帧的发送者
c.将帧的来源地址复制到mac标头的address3字段
d.预计传送时间---》duration字段 将适当的标记填入frame control字段
7.重新计算FCS
8.产生的新帧交付给802.11接口传送
- 第二章(java程序设计)第三章(语言基础)
第二章 2.1 对象 对象的概念是由现实世界引入问题模型: 对象包含有:状态和行为.具体地来说是: 数据封装:对象的方法的作用就是:将内部变量封装起来,提供给外界交互的窗口.(实现对数据的隐藏) 继承 ...
- CentOS6安装各种大数据软件 第三章:Linux基础软件的安装
相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...
- Objective-C 基础教程第三章,面向对象编程基础知
目录 Objective-C 基础教程第三章,面向对象编程基础知 0x00 前言 0x01 间接(indirection) 0x02 面向对象编程中使用间接 面向过程编程 面向对象编程 0x03 OC ...
- 【转载】Java垃圾回收内存清理相关(虚拟机书第三章),GC日志的理解,CPU时间、墙钟时间的介绍
主要看<深入理解Java虚拟机> 第三张 P84 开始是垃圾收集相关. 1. 1960年诞生于MIT的Lisp是第一门采用垃圾回收的语言. 2. 程序计数器.虚拟机栈.本地方法栈3个区域随 ...
- 第三章:Python基础の函数和文件操作实战
本課主題 Set 集合和操作实战 函数介紹和操作实战 参数的深入介绍和操作实战 format 函数操作实战 lambda 表达式介绍 文件操作函数介紹和操作实战 本周作业 Set 集合和操作实战 Se ...
- 802.11MAC基础
做无线网络测试已经大半年了,在这过程中发现<802.11权威指南>真是以本好书,在这里分享一下学习到的知识,也帮助我记忆. 1.MAC: mac(媒介访问控制层),它位于物理层之上,控制着 ...
- 第三章、vue基础精讲
3.1VUE实例 组件:全局组件,局部组件,vue的每个组件也是一个实例,有自己的实例属性和实例方法. 在console中调试vue,vm为vue的实例,凡是以$开头的都是vue的实例属性或者vue的 ...
- 第三章 Java的基础程序设计结构
一个简单的 Java 应用程序 访问修饰符 public,private,protected main 方法必须时public修饰的,C#则不必须 数据类型 可以用16进制表示浮点数 可以用2,8,1 ...
- 第三章:PCL基础3.1
架构师为了确保在PCL中所有代码风格的一致性,使得其他开发者及用户容易理解源码,PCL开发者制定并遵循着一套严格的编写规范,PCL的开发者都默认此规范. 3.1PCL推荐的命名规范 1.文件命名 1) ...
随机推荐
- iOS开发 - Protocol协议及委托代理(Delegate)
因为Object-C是不支持多继承的,所以很多时候都是用Protocol(协议)来代替.Protocol(协议)只能定义公用的一套接口,但不能提供具体的实现方法.也就是说,它只告诉你要做什么,但具体怎 ...
- uvm_reg_backdoor——寄存器模型(十)
寄存器有前门和后门两种访问方式,这儿只看后门访问方式 //----------------------------------------------------------------------- ...
- 安装新版REDIS
http://redis.io/ # wget http://download.redis.io/redis-stable.tar.gz tar zxvf redis-stable.tar.gz -C ...
- ASP.NET WebForm & MongoDB
ASP.NET WebForm & MongoDB 最近在朋友介绍下,也跟着看AngularJS 买了一本三合一的书,Node.JS+MongoDB+AngularJS http://www. ...
- [转]maven项目部署到tomcat
其实maven项目部署到tomcat的方式很多,我从一开始的打war包到tomcat/webapps目录,到使用tomcat-maven插件,到直接使用servers部署,一路来走过很多弯路. 下面就 ...
- 日常-acm-开灯问题
开灯问题.有n盏灯,编号1-n.第一个人把所有的灯打开,第二个人按下所有编号为二的倍数的开关(全关掉),第三个人按下所有编号为三的倍数的开关,以此类推.一共k个人,问最后开着的灯的编号.输入n和k,输 ...
- Windows UEFI 安装策略的一个细节
在计算机已连接任何带Windows Boot Manager的硬盘的时候,系统自己不会创建EFI分区,而是用之前的
- 使用Python生成ASCII字符画
使用Python生成ASCII字符画 在很多的网站主页中或者程序的注释中会有一些好看的字符注释画.显得很牛逼的样子 例如: 知乎 _____ _____ _____ _____ /\ \ /\ \ / ...
- mysql中添加数据时,报错(incorrect string value:'\xf0\x9f ) 字符转换不正确
这个问题,原因是UTF-8编码有可能是两个.三个.四个字节.Emoji表情或者某些特殊字符是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去. 在网上搜了一下解决问题的方案,我选了一 ...
- cocos2d-x中解决暂停并保存画面和开始的功能
1.调用所有对象的pauseSchedulerAndActions().太麻烦,不太现实,而且有很多对象不易获取. 2.CCDirector::sharedirector()->pause(). ...