zoukankan      html  css  js  c++  java
  • 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)。】

     

  • 相关阅读:
    Unity 3(一):简介与示例
    MongoDB以Windows Service运行
    动态SQL中变量赋值
    网站发布IIS后堆栈追踪无法获取出错的行号
    GridView Postback后出错Operation is not valid due to the current state of the object.
    Visual Studio 2010 SP1 在线安装后,找到缓存在本地的临时文件以便下次离线安装
    SQL Server 问题之 排序规则(collation)冲突
    IIS 问题集锦
    linux下安装mysql(ubuntu0.16.04.1)
    apt-get update 系列作用
  • 原文地址:https://www.cnblogs.com/aixin0813/p/3208579.html
Copyright © 2011-2022 走看看