802.11成帧封装实现(一) 控制帧

以太网的帧封装十分简单,只要为帧加上同步信号、一些地址信息,以及在结尾加上检验码即可。相对而言,802.11的帧封装就比较复杂,因为无线介质必须将有线网络所没有的帧类型,以及各式管理功能纳入考虑。

802.11帧主要有三种类型。数据帧好比 802.11的驮马,负责在工作站之间传输数据。数据帧可能会因为所处的网络环境不同而有所差异。控制帧通常与数据帧搭配使用,负责区域的清空、信道的取得以及载波监听的维护,并于收到数据时予以正面的应答,借此促进工作站间数据传输的可靠性。管理帧负责监督,主要用来加入或退出无线网络,以及处理接入点之间连接的转移事宜。

 

1.1     控制帧

控制帧主要在协助数据帧的传递。它们可用来监督无线介质的访问(但非介质本身),以及提供MAC层次的可靠性。

1.1.1   一般的帧控制位

为控制帧均使用相同的 Frame Control(帧控制)位,如图1-1所示。

 

      图1-1:控制帧中的Frame Control 位

l  Protocol(协议版本)

在图1-1 中,协议版本的值为 0 ,因为这是目前绝无仅有的版本。未来可能会出     其他新的版本。

l  Type(类型)

控制帧的类型识别码为 01。定义上,所有控制帧均使用此识别码。

l  Subtype(次类型)

此位代表发送控制帧的次类型。

l  ToDS 与FromDS bit

控制帧负责处理无线介质的访问,因此只能够由无线工作站产生。传输系统并不会收送控制帧,因此这两个 bit必然为 0 。

l  More Fragments(尚有片段)bit

控制帧不可能被切割,这个 bit必然为 0 。

l  Retry(重试)bit

控制帧不像管理或数据帧那样,必须在序列中等候重送,因此这个 bit必然为0 。

l  Power Management (电源管理)bit

此bit用来指示、完成当前的帧交换过程后,发送端的电源管理状态。

l  More Data(尚有数据)bit

More Data bit 只用于管理数据帧,在控制帧中此 bit必然为0 。

l  Protected Frame(受保护帧)bit

控制帧不会经过加密。因此对控制帧而言,Protected Frame bit 必然为 0。

l  Order(次序)bit

控制帧是基本帧交换程序(atomic frame exchange operation )的组成要件,因此必须依序发送。所以这个 bit必然为 0 。

1.1.2   RTS (请求发送)

RTS帧可用来取得介质的控制权,以便传输「大型」帧。至于多大称之大型:是由网卡驱动程式中的 RTS threshold(门限)来定义。介质访问权只能保留给单点传播(unicast)帧使用,而广播(broadcast)与组播(multicast )帧只须发送便是了。RTS 帧的格式如图 1-2所示。

就和所有控制帧一样,RTS 帧只包含标头。帧主体中并未包含任何数据,标头之后即为FCS (帧检查码)。

 

        图1-2:RTS帧

RTS的MAC标头由四个位构成:

l   Frame Control(帧控制)

Frame Control位并没有任何特殊之处。帧的 subtype(次类型)位设定为 1011,代 表 RTS帧。除此之外,它与其他的控制帧具备相同位。(在 802.11规格书中,最高效 bit乃是最后一个bit,因此在 subtype 位中,第 7 个bit代表最高效 bit。)

l  Duration (持续时间)

RTS帧会试图预定介质使用权,供帧交换程序使用,因此 RTS 帧发送者必须计算 RTS帧结束后还需要多少时间。图 1-3说明了整个交换过程,总共需要三个 SIFS、一个CTS、最后的ACK,加上发送第一个帧或帧片段所需要的时间。(fragmentation burst 〔片段宣泄期〕会使用后续的帧片段来更新 Duration 位。)传输所需要的微秒数经过计算后会置于 Duration 位。假使计算的结果不是整数,就会被修正为下一个整数微秒。

 

        图1-3:RTS帧的Duration 位

 Address 1 位;Receiver Address (接收端地址)

接收大型帧的工作站的地址。

Address -2 位:Transmitter Address (发送端地址)

RTS帧的发送端的地址。

1.1.3   CTS (允许发送)

CTS帧有两种目的,其格式如图 1-4 所示。起初,CTS帧仅用于应答 RTS帧,如果之前没有RTS出现,就不会产生 CTS 。后来,CTS帧被 802.11g 防护机制用来避免干扰较旧的工作站。

 

        图1-4:CTS帧

CTS帧的 MAC标头由三个位构成:

l  Frame Control( 帧控制)

帧的subtype(次类型)位被设定为 1100,代表 CTS 帧。

l  Duration (持续时间)

用来应答 RTS 时,CTS帧的发送端会以 RTS 帧的 duration 值作为持续时间的计算基准。RTS会为整个 RTS-CTS-frame-ACK 交换过程预留介质使用时间。不过当 CTS 帧被发送出后,只剩下其他未帧或帧片段及其回应待传。CTS帧发送端会将 RTS 帧的duration 值减去发送CTS帧及其后短帧间隔所需的时间,然后将计算结果置于 CTS 的Duration 位。图 1-5显示了 CTS duration 与RTS diratopm的关系。

 

        图1-5二CTS的持续时间

l  Address 1 位:Receiver Address (接收端地址)

CTS帧的接收端即为之前 RTS帧的发送端,因此 MAC会将 RTS帧的发送端地址复制到CTS帧的接收端地址。802.11g保护操作所使用的 CTS 帧会被发送给发出 RTS 的工作站,而且只用来设定 NAV。

1.1.4   ACK (应答)

ACK帧(图 1-6 )就是 MAC以及任何数据传输(包括一般传输 RTS/CTS交换之前的帧、帧片段)所需要的正面应答(positive acknowledgment)。服务质量扩展功能放宽了个别数据帧必须各自得到应答的要求。

 

          图1-6:ACK帧

ACK帧的 MAC标头由三个位构成:

l  Frame Control(帧控制)

帧的subtype(次类型)位被设定为 1101,代表 ACK帧。

l  Duration (持续时间)

依照ACK信号在整个帧交换过程中位居何处,duration 的值可以有两种设定方式。在完整的数据帧及一连串帧片段的最后一个片段中,duration 会被设定为 0。数据发送端会将 Frame Control(帧控制)位中的 More Fragments(尚有片段)bit设定为 0,表示数据传输已经结束。

如果More Fragments bit 为0 ,表示整个传输已经完成,没有必要再延长对无线信道的控制权,因此会将 duration 设定为 0 。

如果More Fragments bit为1 ,表示尚有帧片段仍在发送中。此时Duration 位的用法和 CTS帧中的Duration 位相同。发送ACK以及短帧间隔所需要的时间,将由最近帧片段所记载的duration 中减去。如果不是最后一个 ACK帧,duration 的计算方式类似 CTS duration 的计算方式。事实上,802.11的规格书将 ACK帧中的duration 设定称为虚拟 CTS。

l  Address 1 位:Receiver Address (接收端地址)

接收端地址是由所要应答的发送端帧复制而来。技术上而言,它是由所要应答帧的Address 2 位复制而来。应答主要是针对数据帧、管理帧以及 PS-Poll帧。

 

        图1-7:非最终ACK帧的Duration 位

1.1.5   PS-Poll (省电模式一轮询)

当一部移动工作站从省电模式中苏醒,便会发送一个 PS-Poll帧给接入点,以取得任何暂存帧。PS-Poll帧的格式如图 1-8 所示。

 

          图1-8:PS-Poll帧

PS-Poll帧的 MAC标头由四个位构成:

l  Frame Control(帧控制)

帧的subtype(次类型)位被设定为 1010,代表 PS-Poll帧。

l  AID(连接识别码)

PS-Poll帧将会以 MAC标头的第三与第四 bit来代表连接识别码(association ID)。连接识别码是接入点所指定的一个数值,用以区别各个连接。将此识别码置入帧,可让接入点找出为其(移动工作站)所暂存的帧。

l  Address 1 位:BSSID

此位包含发送端目前所在 BSS 的BSSID ,此BSS 建立自目前所连接的 AP。

l  Address 2 位:Transmitter Address (发送端地址)

此为PS-Poll帧之发送端的 MAC地址

在PS-Poll帧中并未包含 duration 信息,因此无法更新 NAV。不过,所有收到 Ps-Poll帧的工作站,都会以短帧间隔加上发送 ACK信号所需要的时间来更新 NAV。此一自动调整机制使得接入点在发送 ACK信号时,比较不会与移动接入点发生碰撞。

【连接识别码(AID)在PS-Poll帧中,Duration/ID位是连接识别码,而非虚拟载波侦测功能所使用的数值。当移动工作站与接入点连接时,接入点会从1-2,007范围内指派一个值来做为连接识别码(AID)。】

 

原文地址:https://www.cnblogs.com/listenerln/p/6867458.html