Wireless Fundamental(2) -- 802.11 MAC头格式解析(updating)

2023-10-05 17:30

本文主要是介绍Wireless Fundamental(2) -- 802.11 MAC头格式解析(updating),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文地址: http://hi.baidu.com/uestc_ay/blog/item/d7d5618afa0830c7fd1f1038.html?timeStamp=1299315457532


在上一篇中,简要概述了无线网络的通信机制,那么在下来就得开始介绍一下无线网络的通信细节了。说到这里,以后所说的内容会有《802.11 无线网络权威指南 第二版影印版》这本书内容的影子,还有内容中会加上通过wireshark抓包的分析以及IEEE关于wlan 80211协议的说明文档。虽然说这本书虽然讲得好,但是很多数据包细节上的问题还是需要我们亲手去做实验去验证的,一向认为学习不能仅仅看书,亲手去验证一些你认为疑惑的地方可能会比做几道课后题的效果要好得多得多 ^_^


1 MAC802.11数据帧格式

首先要说明的是mac802.11的帧格式很特别,它与TCP/IP这一类协议不同,它的长度是可变的。不同功能的数据帧长度会不一样。这一特性说明mac802.11数据帧显得更加灵活,然而,也会更加复杂。mac 802.11的数据帧长度不定主要是由于以下几点决定的


1.1 mac地址数目不定,根据帧类型不同,mac 802.11的mac地址数会不一样。比如说 ACK帧仅有一个mac地址,而数据帧有3个mac地址,在WDS模式(下面要提到)下,帧头竟然有4个mac地址。


1.2 802.11的管理帧所携带的信息长度不定,在管理帧中,不仅仅只有一些类似于mac地址,分片标志之类的这些信息,而且另外还会包括一些其它的信息,这些信息有关于安全设置的,有关于物理通信的,比如说我们的SSID名称就是通过管理帧获得的。AP会根据不同的情况发送包含有不同信息的管理帧。管理帧的细节问题我们会在后面的文章中讨论,这里暂时跳过。


1.3 加密(wep,wpa等)信息,QOS(quality of service)信息,若有加密的数据帧格式和没有加密的数据帧格式还不一样,加密数据帧格式还多了个加密头,用于解密用。然则QOS也是同样道理。


竟然mac 802.11数据帧那么复杂,我们就先从通用的格式开始说吧


帧控制(2 bytes):

用于指示数据帧的类型,是否分片等等信息,说白了,这个字段就是记录了mac 802.11的属性。

*Protocol version:表明版本类型,现在所有帧里面这个字段都是0x00

*Type:指明数据帧类型,是管理帧,数据帧还是控制帧

*Subtype:指明数据帧的子类型,因为就算是控制帧,控制帧还分RTS帧,CTS帧,ACK帧等等,通过这个域判断出该数据帧的具体类型

*To DS/From DS:这两个数据帧表明数据包的发送方向,分四种可能情况讨论

**若数据包To DS为0,From DS为0,表明该数据包在网络主机间传输

**若数据包To DS为0,From DS为1,表明该数据帧来自AP

**若数据包To DS为1,From DS为0,表明该数据帧发送往AP

**若数据包To DS为1,From DS为1,表明该数据帧是从AP发送自AP的,也就是说这个是个WDS(Wireless Distribution System)数据帧,至于什么是WDS,可以参考下这里的介绍 #传送门

*Moreflag:分片标志,若数据帧被分片了,那么这个标志为1,否则为0

*Retry:表明是否是重发的帧,若是为1,不是为0

*PowerManage:当网络主机处于省电模式时,该标志为1,否则为0.

*Moredata:当AP缓存了处于省电模式下的网络主机的数据包时,AP给该省电模式下的网络主机的数据帧中该位为1,否则为0

*Wep:加密标志,若为1表示数据内容加密,否则为0

*Order 这个表示用于PCF模式下,这里不予讨论


生存周期/Associate ID (2 bytes):

先前不是讲过虚拟载波监听的一个机制么,他的Network Allocation Vector(NAV)就存在这里,这里叫duration,即生存周期。当然不是所有时候这个字段存放的NAV值。在特定类型数据帧中,它也可能表示Associate ID。一旦有主机关联到AP了,AP都会为主机分配一个Associate ID。比如在网络主机通知AP自己要进入省电模式(power saving)的时候,网络主机发给AP的通知数据帧里面,这个域就表示的是Associate ID而不是NAV了。当然还可以通过最高位来判断这个域的含义:

*在15bit为0的时候,该域表示duration

*在15bit为1,14bit为1的时候,表示Associate ID。


序列控制(2 bytes:4 bits/12 bits):这个域分2部分,一个是分片序列号和标识帧列号。分片序列号就是记录分片序号的。比如一个帧A被分片成a1,a2,a3,那么a1,a2,a3这三个分片帧的分片序列分别是0,1,2。这个和IP分段原理一样的,该域占4个比特位。剩下的12个比特位就用于标识帧的序号,这个跟IP头里面的序列号一样。


MAC地址 1-4

这四个地址在不同帧中有不同含义。这些以后会讨论。

以后我们可能会碰到以下类型的mac地址

RA(receiver address):无线网络中,该数据帧的接收者

TA(transmitter address):无线网络中,该数据帧的发送者

BSSID(Basic Service Set ID):在infrastructure BBS中,BSSID就是AP的mac地址。但是在IBBS中,它是一个随机即生成的46位二进制序列,还有最高两位分别是Universal/Local标志位和Individual/Group标志位。IBBS的BSSID中,Universal/Local标志位为1,表示本地MAC,Individual/Group标志位为0,表示是个人MAC。也就是说在IBBS中,BSSID地址应该类如 10xxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx(x表示随机数要么0要么1, 2进制表示

DA(destine address):该帧的目的mac地址

SA(source address):该帧的源mac地址

这里的DA和SA含义和普通以太网中的含义一样,在无线网络中可能我们需要通过AP把数据发送到其它网络内的某台主机中。但是有的人会奇怪,直接在RA中填这台主机的mac地址不就久好了么。但是请注意RA的含义,说的是无线网络中的接收者,不是网络中的接收者,也就是说这台目的主机不再无线网络范围内。在这种情况下我们的RA只是一个中转,所以需要多出一个DA字段来指明该帧的最终目的地,当然,如果有了DA那必须有SA,因为若目的主机要回应的话,SA字段是必不可少的。(假设没有SA字段,那么目的主机回应的数据包就只能发送到源主机所属的AP上了~)


最典型的一个例子就是在WDS模式下,数据帧会有4个地址,RA,TA表示接收端和发送端,这两个地址用于无线传输的时候。还有2个地址是DA和SA,分别跟以太网中一样表示源地址和目的地址。WDS帧的格式如下图:


打个比方说,AP1有主机A,AP2有主机B。如果A要和B同学,那么A会首先发送数据帧给AP1,然后AP1发送帧给AP2 。这个时候帧里面会有4个地址,分别是RA=mac(AP2),TA=mac(AP1),DA=mac(B),SA=mac(A)。

这篇关于Wireless Fundamental(2) -- 802.11 MAC头格式解析(updating)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/151687

相关文章

CSS place-items: center解析与用法详解

《CSSplace-items:center解析与用法详解》place-items:center;是一个强大的CSS简写属性,用于同时控制网格(Grid)和弹性盒(Flexbox)... place-items: center; 是一个强大的 css 简写属性,用于同时控制 网格(Grid) 和 弹性盒(F

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

全面解析HTML5中Checkbox标签

《全面解析HTML5中Checkbox标签》Checkbox是HTML5中非常重要的表单元素之一,通过合理使用其属性和样式自定义方法,可以为用户提供丰富多样的交互体验,这篇文章给大家介绍HTML5中C... 在html5中,Checkbox(复选框)是一种常用的表单元素,允许用户在一组选项中选择多个项目。本

Python包管理工具核心指令uvx举例详细解析

《Python包管理工具核心指令uvx举例详细解析》:本文主要介绍Python包管理工具核心指令uvx的相关资料,uvx是uv工具链中用于临时运行Python命令行工具的高效执行器,依托Rust实... 目录一、uvx 的定位与核心功能二、uvx 的典型应用场景三、uvx 与传统工具对比四、uvx 的技术实

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式

《C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式》Markdown凭借简洁的语法、优良的可读性,以及对版本控制系统的高度兼容性,逐渐成为最受欢迎的文档格式... 目录为什么要将文档转换为 Markdown 格式使用工具将 Word 文档转换为 Markdown(.

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

《Java中JSON格式反序列化为Map且保证存取顺序一致的问题》:本文主要介绍Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录背景问题解决方法总结背景做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为co