802.11常见帧

落爺英雄遲暮 提交于 2019-12-16 00:04:49

1、802.11 帧类型

802.11协议有规定三种类型的帧,分别时管理帧,控制帧和数据帧。

(1)管理帧
有线通信和无线通信的最大区别是什么?那就是有没有用网线!有线客户端如果想连接某个网络,只要将网线接到对应的路由器上就好了,但是无线客户端想完成这个“接入”动作应该怎么办呢?这就需要管理帧的帮忙,管理帧的主要工作就是管理无线客户端的接入和断开。有线连接并不太需要管理帧的帮忙,插拔网线的动作也很简单,但是无线接入却复杂得多。管理帧是不带上层payload信息的,但是它携带一些固定大小的Information felds和可变大小的Information elements (IE)

管理帧主要包括下面这些种类:

Association request
Association response
Reassociation request
Reassociation response
Probe request
Probe response
Beacon
Announcement traffic indication message (ATIM)
Disassociation
Authentication
Deauthentication
Action

(2)控制帧

有线通信和无线通信另外一个区别是传输媒介的稳定性,无线因为传输媒介是电磁波,容易受到各种干而变得不稳定,为了保证数据的稳定传输,就需要控制帧的帮忙。控制帧不仅可以控制传输的速率,还可以用来清空通道(CTS/RTS),协商channel(DFS/ACS)和提供单播通知(PS-Poll/ACK)等功能

Power Save Poll (PS-Poll)
Request to send (RTS)
Clear to send (CTS)
Acknowledgment (ACK)
Contention Free-End (CF-End)
CF-End + CF+ACK
Block ACK Request (BlockAckReq)
Block ACK (BlockAck)

(3)数据帧

在802.11协议中,大部分数据帧都是通过携带MSDU来传输数据的,当然有一些特殊用途的空帧不会携带MSDU(比如用来通知power save status的帧),所以传输时不会对它进行加密。一般来说,控制帧、管理帧和空的数据帧都是不需要加密的。数据帧的类型主要包括下面这些:

Data (simple data frame)
Null function (no MSDU payload)
Data + CF-ACK
Data + CF-Poll
Data + CF-ACK + CF-Poll
CF-ACK (no MSDU payload)
CF-Poll (no MSDU payload)
CF-ACK + CF-Poll (no MSDU payload)
QoS data
QoS Null (no MSDU payload)
QoS data + CF-ACK
QoS data + CF-Poll
QoS data + CF-ACK + CF-Poll
QoS CF-Poll (no MSDU payload)

2、常见的帧
在802.11中的帧有三种类型:管理帧(Management Frame,例如Beacon帧、Association帧)、控制帧(Control Frame,例如RTS帧、CTS帧、ACK帧)、数据帧(Data Frame,承载数据的载体,其中的DS字段用来标识方向很重要)。帧头部中的类型字段中会标识出该帧属于哪个字段。

(1)ACK帧
单播(unicast)帧都需要用ACK来确认 ,ACK本身不是广播帧,ACK在MAC上是unicast的,帧中有receive地址字段(用来标识是对谁的确认),但是它却不需要再确认了。ACK只有接收地址(receive)而无源地址(src)和序号(sequence) ,因为发送和接受是一个整体,发送之后,其他人(除了这个发送的接受者)都不会再发送数据了(无线协议中的冲突避免机制),所以接受者会发送一个没有src的ack帧给receiver,而接收ACK的一端会根据这个知道它收到了一个ACK帧(其实根据协议,应当把发送单播帧和收到它相应的ACK看作一个原子的不可分割的整体,表示一次成功的通信)。

(2)Beacon帧
Beacon帧定时广播发送,主要用来通知网络AP的存在性。Station和AP建立Association的时候,也需要用到Beacon。Station可以通过Scan来扫描到Beacon,从而得知AP的存在,也可以在扫描的时候通过主动发送Probe来探寻AP是否存在。也就是说,建立Association的时候有主动的扫描或者被动的扫描两种方式。另外,Beacon还包含了关于Power Save、以及地区等信息。

(3)Association帧
通常Association帧都有Probe Request和相应的Probe Response。Association的Request中有其所需要的Channel以及Data Rate等状态,以便让AP决定是否让它与自己建立Association。而关联是否成功,主要是看Response中的Status code是否为Success

(4)Data帧
Data Frame具有方向,这个方向用DS(分布式系统)字段来标识,以区分不同类型帧中关于地址的解析方式;其它的类型Frame例如 Control Frame或者管理帧中,这个字段是全零。这个字段用两位表示,这两个位的含义分别表示“To Ds”和“From Ds”,大致含义如下:
(a)To DS:表示Station->AP,一般也叫Upload。
(b)From DS表示AP->Station,一般也叫Download。
这里,我们可以大致将DS看做AP,To/From是从AP的角度来考虑的。To DS就是让AP干活。另外Data Frame中还有一个比较重要的字段就是Sequence,表示帧的序号。重传帧序号一样,但是多了一个Retry的字段表示该帧是重传的。
为了便于理解,这里再次详细解释一下DS字段的含义:
To DS=0,From DS=0:表示Station之间的AD Hoc类似的通信,或者控制侦、管理侦。
To DS=0,From DS=1:Station接收的侦。
To DS=1,From DS = 0:Station发送的侦。
To DS=1,From DS = 1:无线桥接器上的数据侦。
这里,我们主要关注To DS和From DS分别是01和10的情况,DS虽然大致等于AP但是它不是AP,它其实是一个系统,从Station的角度来看,比较容易理解。并且To DS和From DS一定是无线网络上面数据侦才有的字段。

3、帧和大端小端
Ethernet和802.11都是按照Little Endian的方式来传输数据,也就是说,而MAC层传输的时候,是采用Little Endian的方式,一个字节一个字节的传输的,前面的低位字节先传输,后面的高位字节后传输(传输单位不是按位而是字节);在协议标准上描述一个帧的时候,一般是先按照Little Endian的方式对其进行总体描述,然后具体细节说每个字段的值,这时候这个字段值是Big Endian方式表示的,这一点应当注意。

例如,协议标准中可能能对某个帧格式做如下的描述:
|b0|b1|b2|b3|b4|b5|b6|b7|b8|b9|…|…|

这里,最低位b0在最前面,所以这里采用的就是小端的方式来描述帧的总体格式信息。传输的时候,就按照这里的方式,以字节为单位向物理层进行传输(先传b0b7然后b8b16等等)。 但是,在解释这个帧的各个域的时候却采用大端的方式进行描述。假设b3=0,b2=1,b1=0,b0=0四者共同组成一个名字为“FLAG”的域,那么会有类似如下的描述:
FLAG=4(即FLAG为0100):表示XXX。
所以,协议标准中具体描述某个域的时候,一般直接用大端方式表示的数值(b3b2b1b0=0100)来描述;而传输数据帧或者在协议标准中描述整体帧的时候,中给出的却是小端的方式(b0b1b2b3=0010)。 这里的每个字段都是帧的一个部分,在管理帧(后面会说)中长度不固定的部分又叫IE(information Element) 。

另外注意,内存地址是用来标记每个字节的而不是位,所以内存里面大端小端也是以字节而不是位为单位的(前面描述“大端“、”小端”的时候却以位序而非字节序,这一点需要明辨,不要混淆)。假设奔腾的机器,CPU为32位,采用Little Endian方式,那么表示1这个int类型整数的时候,假设它在数值上是十六进制的"00000001",那么存放在内存中却是由低位到高位依次存放的,由低到高地址依次为:“01”、“00”、“00”、“00”(也就是说小端方式存放在内存中的时候,是按照含有最低位的字节存放在低地址,注意是字节,在内存中“位”没有地址,所以没有大端小端一说)。在传递帧的时候,也是按照一个字节一个字节的传输,而一个字节内部在实际上其实没有什么端的分别,但是wireshark一律使用“b7b6b5b4b3b2b1b0”这样的方式来用大端的方式显示。

总之,需要注意网络层下面的帧的大端小端问题(不是网络中的字节序,TCP/IP中规定的网络字节序是Big Endian),大致就是:协议规定,传输的时候使用Little Endian;标准描述的时候用Big Endian和Little Endian都用;另外,Wire shark软件抓的包中,好象全都用Big Endian来进行标示(无论是信息窗口还是内存窗口都这样展示)。

4、帧的来源和目的地址
因为无线网络中没有采用有线电缆而是采用无线电波做为传输介质,所以需要将其网络层以下的帧格式封装的更复杂,才能像在有线网络那样传输数据。其中,仅从标识帧的来源和去向方面,无线网络中的帧就需要有四个地址,而不像以太网那样简单只有有两个地址(源和目的)。这四个地址分别是:

SRC:源地址(SA),和以太网中的一样,就是发帧的最初地址,在以太网和wifi中帧格式转换的时候,互相可以直接复制。
DST:目的地址(DA),和以太网中的一样,就是最终接受数据帧的地址,在以太网和wifi中帧格式转换的时候,互相可以直接复制。
TX:也就是Transmiter(TA),表示无线网络中目前实际发送帧者的地址(可能是最初发帧的人,也可能是转发时候的路由)。
RX:也就是Receiver(RA),表示无线网络中,目前实际接收帧者的地址(可能是最终的接收者,也可能是接收帧以便转发给接收者的ap)。
注意,其实,还有一个BSSID,用来区分不同网络的标识。
  • 1
  • 2
  • 3
  • 4
  • 5

在802.11帧中,有四个地址字段,一般只用到其中的三个,并且,这四个字段对应哪种地址或者使用哪些地址,根据帧中的另外一个DS字段以及帧的类型而有不同的解释。

举例:
(1)无线网络中的Station和以太网中的Host进行通信:
Station<- - - - ->AP<---------->Host
a)当Station->Host的时候:
首先Station->AP,这时候Src=Station,Dst=Host,Tx=Station,Rx=AP,然后AP->Host,这时候Src=Station,Dst=Host,因为AP转发的时候,是在以太网中,所以没有Tx和Rx

b)当Host->Station的时候:
首先Host->AP,这时候Src=Host,Dst=Station,然后AP->Station,这时候,Src=Host,Dst=Station,Tx=AP,Rx=Station。

(2)无线网络中的Station之间进行通信:

Station1<- - - - ->AP<- - - - ->Station2
a)当Station1->Station2时

首先Station1->AP,Src=Station1,Dst=Station2,Tx=Station1,Rx=AP,然后AP->Station2,Src=Station1, Dst=Station2, Tx=AP, Rx=Station2。

可见,在无线网络中,始终存在Tx和Rx,但是,这四个地址中还是只有三个地址足矣。

(3)当两个无线网络中的Station进行通信的时候:
Station1<- - - - ->AP1<- - - - ->AP2<- - - - - ->Station2
当Station1->Station2时:

首先Station1->AP1,Src=Station,Dst=Station2,Tx=Station1,Rx=AP1,然后AP1->AP2,Src=Station, Dst=Station2, Tx=AP1, Rx=AP2,然后AP2->Station2,Src=Station1,Dst=Station2,Tx=AP2,Rx=Station2。

注意,这个时候,AP起到桥接的作用,所以四个地址各不相同,同时,AP之间或者Station和AP之间的那部分连接,也可以是以太网。

综上可知, 无线网络中的Station想要通信,必须经过AP来进行“转发”,其实,Tx和Rx是无线网络中的发和收,也就是Radio;而Src和Dst是真正的发送源和接收者。

上面四个为4种可能性,具体用到那个,需要在规定的场景下使用,如下所示:

使用示例

1) 方案一:


     A和B 在同一个IBSS,A->B (Ad hoc无线自组网中的数据帧的地址格式)。

2) 方案二:


    从AP发出的无线数据帧中的地址格式。

3) 方案三:


    发到AP的无线数据帧中的地址格式。

4) 方案四:


    通过无线分布系统传输的无线数据帧中的地址格式。

5、建立Association
下面是Station和Ap建立开放Association的过程:

    (0)Ap周期性地广播Beacon帧
(1)Station广播Probe Request到达Ap

(2)Ap向Station发送Probe Reponse

(3)Station向Ap发送ACK

(4)Station向Ap发送Authentication Request

(5)Ap向Station发送ACK

(6)Ap向Station发送Authentication Reponse

(7)Station向Ap发送ACK

(8)Station向Ap发送Association Request

(9)Ap向Station发送ACK

(10)Ap向Station发送Association Reponse

(11)Station向Ap发送ACK

(12)Station和Ap开始相互通信。

可见,广播帧不用回复,单播帧需要用ACK确认,ACK本身不用被确认。

转自:https://blog.csdn.net/baidu_20152423/article/details/83110365

1、802.11 帧类型

802.11协议有规定三种类型的帧,分别时管理帧,控制帧和数据帧。

(1)管理帧
有线通信和无线通信的最大区别是什么?那就是有没有用网线!有线客户端如果想连接某个网络,只要将网线接到对应的路由器上就好了,但是无线客户端想完成这个“接入”动作应该怎么办呢?这就需要管理帧的帮忙,管理帧的主要工作就是管理无线客户端的接入和断开。有线连接并不太需要管理帧的帮忙,插拔网线的动作也很简单,但是无线接入却复杂得多。管理帧是不带上层payload信息的,但是它携带一些固定大小的Information felds和可变大小的Information elements (IE)

管理帧主要包括下面这些种类:

Association request
Association response
Reassociation request
Reassociation response
Probe request
Probe response
Beacon
Announcement traffic indication message (ATIM)
Disassociation
Authentication
Deauthentication
Action

(2)控制帧

有线通信和无线通信另外一个区别是传输媒介的稳定性,无线因为传输媒介是电磁波,容易受到各种干而变得不稳定,为了保证数据的稳定传输,就需要控制帧的帮忙。控制帧不仅可以控制传输的速率,还可以用来清空通道(CTS/RTS),协商channel(DFS/ACS)和提供单播通知(PS-Poll/ACK)等功能

Power Save Poll (PS-Poll)
Request to send (RTS)
Clear to send (CTS)
Acknowledgment (ACK)
Contention Free-End (CF-End)
CF-End + CF+ACK
Block ACK Request (BlockAckReq)
Block ACK (BlockAck)

(3)数据帧

在802.11协议中,大部分数据帧都是通过携带MSDU来传输数据的,当然有一些特殊用途的空帧不会携带MSDU(比如用来通知power save status的帧),所以传输时不会对它进行加密。一般来说,控制帧、管理帧和空的数据帧都是不需要加密的。数据帧的类型主要包括下面这些:

Data (simple data frame)
Null function (no MSDU payload)
Data + CF-ACK
Data + CF-Poll
Data + CF-ACK + CF-Poll
CF-ACK (no MSDU payload)
CF-Poll (no MSDU payload)
CF-ACK + CF-Poll (no MSDU payload)
QoS data
QoS Null (no MSDU payload)
QoS data + CF-ACK
QoS data + CF-Poll
QoS data + CF-ACK + CF-Poll
QoS CF-Poll (no MSDU payload)

2、常见的帧
在802.11中的帧有三种类型:管理帧(Management Frame,例如Beacon帧、Association帧)、控制帧(Control Frame,例如RTS帧、CTS帧、ACK帧)、数据帧(Data Frame,承载数据的载体,其中的DS字段用来标识方向很重要)。帧头部中的类型字段中会标识出该帧属于哪个字段。

(1)ACK帧
单播(unicast)帧都需要用ACK来确认 ,ACK本身不是广播帧,ACK在MAC上是unicast的,帧中有receive地址字段(用来标识是对谁的确认),但是它却不需要再确认了。ACK只有接收地址(receive)而无源地址(src)和序号(sequence) ,因为发送和接受是一个整体,发送之后,其他人(除了这个发送的接受者)都不会再发送数据了(无线协议中的冲突避免机制),所以接受者会发送一个没有src的ack帧给receiver,而接收ACK的一端会根据这个知道它收到了一个ACK帧(其实根据协议,应当把发送单播帧和收到它相应的ACK看作一个原子的不可分割的整体,表示一次成功的通信)。

(2)Beacon帧
Beacon帧定时广播发送,主要用来通知网络AP的存在性。Station和AP建立Association的时候,也需要用到Beacon。Station可以通过Scan来扫描到Beacon,从而得知AP的存在,也可以在扫描的时候通过主动发送Probe来探寻AP是否存在。也就是说,建立Association的时候有主动的扫描或者被动的扫描两种方式。另外,Beacon还包含了关于Power Save、以及地区等信息。

(3)Association帧
通常Association帧都有Probe Request和相应的Probe Response。Association的Request中有其所需要的Channel以及Data Rate等状态,以便让AP决定是否让它与自己建立Association。而关联是否成功,主要是看Response中的Status code是否为Success

(4)Data帧
Data Frame具有方向,这个方向用DS(分布式系统)字段来标识,以区分不同类型帧中关于地址的解析方式;其它的类型Frame例如 Control Frame或者管理帧中,这个字段是全零。这个字段用两位表示,这两个位的含义分别表示“To Ds”和“From Ds”,大致含义如下:
(a)To DS:表示Station->AP,一般也叫Upload。
(b)From DS表示AP->Station,一般也叫Download。
这里,我们可以大致将DS看做AP,To/From是从AP的角度来考虑的。To DS就是让AP干活。另外Data Frame中还有一个比较重要的字段就是Sequence,表示帧的序号。重传帧序号一样,但是多了一个Retry的字段表示该帧是重传的。
为了便于理解,这里再次详细解释一下DS字段的含义:
To DS=0,From DS=0:表示Station之间的AD Hoc类似的通信,或者控制侦、管理侦。
To DS=0,From DS=1:Station接收的侦。
To DS=1,From DS = 0:Station发送的侦。
To DS=1,From DS = 1:无线桥接器上的数据侦。
这里,我们主要关注To DS和From DS分别是01和10的情况,DS虽然大致等于AP但是它不是AP,它其实是一个系统,从Station的角度来看,比较容易理解。并且To DS和From DS一定是无线网络上面数据侦才有的字段。

3、帧和大端小端
Ethernet和802.11都是按照Little Endian的方式来传输数据,也就是说,而MAC层传输的时候,是采用Little Endian的方式,一个字节一个字节的传输的,前面的低位字节先传输,后面的高位字节后传输(传输单位不是按位而是字节);在协议标准上描述一个帧的时候,一般是先按照Little Endian的方式对其进行总体描述,然后具体细节说每个字段的值,这时候这个字段值是Big Endian方式表示的,这一点应当注意。

例如,协议标准中可能能对某个帧格式做如下的描述:
|b0|b1|b2|b3|b4|b5|b6|b7|b8|b9|…|…|

这里,最低位b0在最前面,所以这里采用的就是小端的方式来描述帧的总体格式信息。传输的时候,就按照这里的方式,以字节为单位向物理层进行传输(先传b0b7然后b8b16等等)。 但是,在解释这个帧的各个域的时候却采用大端的方式进行描述。假设b3=0,b2=1,b1=0,b0=0四者共同组成一个名字为“FLAG”的域,那么会有类似如下的描述:
FLAG=4(即FLAG为0100):表示XXX。
所以,协议标准中具体描述某个域的时候,一般直接用大端方式表示的数值(b3b2b1b0=0100)来描述;而传输数据帧或者在协议标准中描述整体帧的时候,中给出的却是小端的方式(b0b1b2b3=0010)。 这里的每个字段都是帧的一个部分,在管理帧(后面会说)中长度不固定的部分又叫IE(information Element) 。

另外注意,内存地址是用来标记每个字节的而不是位,所以内存里面大端小端也是以字节而不是位为单位的(前面描述“大端“、”小端”的时候却以位序而非字节序,这一点需要明辨,不要混淆)。假设奔腾的机器,CPU为32位,采用Little Endian方式,那么表示1这个int类型整数的时候,假设它在数值上是十六进制的"00000001",那么存放在内存中却是由低位到高位依次存放的,由低到高地址依次为:“01”、“00”、“00”、“00”(也就是说小端方式存放在内存中的时候,是按照含有最低位的字节存放在低地址,注意是字节,在内存中“位”没有地址,所以没有大端小端一说)。在传递帧的时候,也是按照一个字节一个字节的传输,而一个字节内部在实际上其实没有什么端的分别,但是wireshark一律使用“b7b6b5b4b3b2b1b0”这样的方式来用大端的方式显示。

总之,需要注意网络层下面的帧的大端小端问题(不是网络中的字节序,TCP/IP中规定的网络字节序是Big Endian),大致就是:协议规定,传输的时候使用Little Endian;标准描述的时候用Big Endian和Little Endian都用;另外,Wire shark软件抓的包中,好象全都用Big Endian来进行标示(无论是信息窗口还是内存窗口都这样展示)。

4、帧的来源和目的地址
因为无线网络中没有采用有线电缆而是采用无线电波做为传输介质,所以需要将其网络层以下的帧格式封装的更复杂,才能像在有线网络那样传输数据。其中,仅从标识帧的来源和去向方面,无线网络中的帧就需要有四个地址,而不像以太网那样简单只有有两个地址(源和目的)。这四个地址分别是:

SRC:源地址(SA),和以太网中的一样,就是发帧的最初地址,在以太网和wifi中帧格式转换的时候,互相可以直接复制。
DST:目的地址(DA),和以太网中的一样,就是最终接受数据帧的地址,在以太网和wifi中帧格式转换的时候,互相可以直接复制。
TX:也就是Transmiter(TA),表示无线网络中目前实际发送帧者的地址(可能是最初发帧的人,也可能是转发时候的路由)。
RX:也就是Receiver(RA),表示无线网络中,目前实际接收帧者的地址(可能是最终的接收者,也可能是接收帧以便转发给接收者的ap)。
注意,其实,还有一个BSSID,用来区分不同网络的标识。
  • 1
  • 2
  • 3
  • 4
  • 5

在802.11帧中,有四个地址字段,一般只用到其中的三个,并且,这四个字段对应哪种地址或者使用哪些地址,根据帧中的另外一个DS字段以及帧的类型而有不同的解释。

举例:
(1)无线网络中的Station和以太网中的Host进行通信:
Station<- - - - ->AP<---------->Host
a)当Station->Host的时候:
首先Station->AP,这时候Src=Station,Dst=Host,Tx=Station,Rx=AP,然后AP->Host,这时候Src=Station,Dst=Host,因为AP转发的时候,是在以太网中,所以没有Tx和Rx

b)当Host->Station的时候:
首先Host->AP,这时候Src=Host,Dst=Station,然后AP->Station,这时候,Src=Host,Dst=Station,Tx=AP,Rx=Station。

(2)无线网络中的Station之间进行通信:

Station1<- - - - ->AP<- - - - ->Station2
a)当Station1->Station2时

首先Station1->AP,Src=Station1,Dst=Station2,Tx=Station1,Rx=AP,然后AP->Station2,Src=Station1, Dst=Station2, Tx=AP, Rx=Station2。

可见,在无线网络中,始终存在Tx和Rx,但是,这四个地址中还是只有三个地址足矣。

(3)当两个无线网络中的Station进行通信的时候:
Station1<- - - - ->AP1<- - - - ->AP2<- - - - - ->Station2
当Station1->Station2时:

首先Station1->AP1,Src=Station,Dst=Station2,Tx=Station1,Rx=AP1,然后AP1->AP2,Src=Station, Dst=Station2, Tx=AP1, Rx=AP2,然后AP2->Station2,Src=Station1,Dst=Station2,Tx=AP2,Rx=Station2。

注意,这个时候,AP起到桥接的作用,所以四个地址各不相同,同时,AP之间或者Station和AP之间的那部分连接,也可以是以太网。

综上可知, 无线网络中的Station想要通信,必须经过AP来进行“转发”,其实,Tx和Rx是无线网络中的发和收,也就是Radio;而Src和Dst是真正的发送源和接收者。

上面四个为4种可能性,具体用到那个,需要在规定的场景下使用,如下所示:

使用示例

1) 方案一:


     A和B 在同一个IBSS,A->B (Ad hoc无线自组网中的数据帧的地址格式)。

2) 方案二:


    从AP发出的无线数据帧中的地址格式。

3) 方案三:


    发到AP的无线数据帧中的地址格式。

4) 方案四:


    通过无线分布系统传输的无线数据帧中的地址格式。

5、建立Association
下面是Station和Ap建立开放Association的过程:

    (0)Ap周期性地广播Beacon帧
(1)Station广播Probe Request到达Ap

(2)Ap向Station发送Probe Reponse

(3)Station向Ap发送ACK

(4)Station向Ap发送Authentication Request

(5)Ap向Station发送ACK

(6)Ap向Station发送Authentication Reponse

(7)Station向Ap发送ACK

(8)Station向Ap发送Association Request

(9)Ap向Station发送ACK

(10)Ap向Station发送Association Reponse

(11)Station向Ap发送ACK

(12)Station和Ap开始相互通信。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!