TDMA WIFI 技术

TDMA Background

        大多数802.11网络使用分布式协调函数(DCF)来仲裁对共享无线介质的访问。使用DCF,每个工作站首先使用通道控制访问(CCA)机制测试介质是否繁忙。如果该媒体被认为是“自由”的,那么这个工作站试图传输一个帧。传输尝试仍然可能发生冲突,在这种情况下,每个站点会在重试使用该媒体之前随机等待一小段时间。一旦帧传输完成,发送站可选地侦听来自接收站的确认帧。如果在超时内没有接收到Ack帧,则再次发送该帧。

        DCF是为相邻站点的网络设计的。在高度分布的网络中,站与站之间可能听不到对方的声音,从而导致冲突和过度的重发。这个问题称为“隐藏节点问题”。而且,对于非常长的距离,等待每一帧被确认所需要的时间会极大地影响性能。所有这些因素都促使使用不同于DCF的方案。

        时分多路复用访问(TDMA)通过给网络中的每个站分配一个可以传输的时间片来消除中介访问。当一个时间槽被分配给一个工作站时,不需要仲裁。TDMA是处理远程网络中介质访问的一种好方法,但是会潜在地增加包延迟和浪费带宽,因为工作站只能在它们的时间槽内传输。为了减少延迟问题,可以使用短时间间隔。通过动态分配时间槽或更改其大小可以减少未使用的带宽,但这会显著增加复杂性和开销。一般来说,延迟和吞吐量之间的平衡意味着TDMA网络中的时隙配置应该根据应用程序的需要来选择(例如,延迟必须足够低,以满足分组的语音数据)。

        TDMA需要一个时隙分配协议和一个同步算法,以确保时隙不会在时钟漂移时发生碰撞。单纯在软件中实现TDMA是可行的,但可以利用大量资源来保证实时约束。而且,基于软件的TDMA实现通常比那些有硬件支持的实现性能差。

在下面的部分中,我们将以以下方式描述TDMA网络配置:

•网络中的时隙数(“N”)。

•每个时间槽的长度(“slot_length”)。

•每个时隙之间的时间需要保护数据包传输在该时隙内(“guard_interval”)。各工作站时隙之间的时间称为超帧,定义为:

                   superframe=N∗(slot_length+guard_interval)

        无线网络的TDMA并不是一个新想法。有几种无线产品使用自定义硬件进行TDMA。IEEE 802.16(又名WiMAX)还包括TDD支持,可以执行动态插槽分配,它利用商用的802.11硬件实现TDMA。

 

FreeBSD TDMA Support

        FreeBSD中的TDMA支持由两个组件组成:适合于FreeBSD net80211网络层的802.11协议模块,以及对Atheros硬件的设备驱动程序支持。802.11协议组件独立于设备,设计用于支持TDMA BSS中的多个站点。协议支持使用供应商对802.11协议的扩展,以便它可以与其他802.11网络共存。设备驱动程序支持负责实现通过空中发送帧的TDMA调度机制。对于Atheros驱动程序,这段代码小到硬件非常适合执行TDMA的程度。

        在我们的TDMA设计中,一个工作站被定义为“主站”。当信标帧(beacon)开始工作时,主机需要广播信标帧(例如,定位要操作的信道)。这些信标帧包括一个特殊的TDMA信息元素(IE),该元素标识工作站在TDMA模式下运行,并包括诸如网络中是否有空闲插槽等信息。从站使用预先分配的SSID搜索主站。

        非TDMA站点不尝试加入TDMA BSS,因为信标帧缺乏必要的功能(BSS用于基础架构模式,IBSS用于特殊模式)。这与即将发布的802.11s规范用于区分Mesh站点和Infrastructure/IBSS站点的技术相同。

        一旦一个从站找到一个有空闲插槽的主站,它采用主站的TDMA配置并且开始传输它自己的信标帧。这些帧包括一个TDMA IE,识别它所选的TDMA插槽。主机看到从服务器的信标帧,并记录当前占用的插槽,此时从服务器可以自由地开始操作。如果多个站点试图同时加入BSS,则主站选择最老的TSF站点作为“赢家”。未获得插槽的工作站要么选择另一个插槽(如果可用),要么继续搜索具有开放插槽的BSS。

        信标帧被从站用来同步它们的时隙。使用当前的方案(下面将详细描述),主站操作时不需要调整计时器,而从站操作时则需要调整计时器以匹配。从站从不发送信标帧,除非响应从主站接收帧(在两个站网络中)。

        除了时隙同步信标帧还可以用来识别一个从站何时离开基站。如果一个从站停止从主站那里听到信标帧,它可能会漫游去寻找它。同样地,如果一个主站停止听到一个从站,它将标记时间插槽在BSS可用。协调的通道更改也可以使用通道切换公告(CSA)机制完成,该机制是802.11h的一部分。

         TDMA BSS中的主站负责将TDMA配置参数传播到BSS中的其他站点。例如,槽长度(以微秒为单位)由主机在从站加入BSS时发送出来。这种机制用于在站点连接时自动配置它们,也用于动态更新参数。

        TDMA插槽从0开始编号,主分配插槽为0,从插槽为1(当配置的从插槽中有两个以上的插槽编号为1到N-1时)。虽然TDMA协议是为支持多插槽网络而设计的,但在实践中它已经针对两个站点进行了优化;即点对点的链接。

 

Net80211 TDMA Support

        FreeBSD 8.0的无线网络是基于使用设备克隆来表示网络服务的虚拟无线电架构的。克隆设备被称为“vap”。TDMA适合这种模式;用户创建一个TDMA vap,它与其他802.11设备一样被克隆:

         ifconfig wlan create wlandev ath0 wlanmode tdma

上面描述的TDMA主从角色是通过为vap设置TDMA插槽来配置的。默认情况下,vap被分配到插槽1,它不会传输信标帧。要配置主操作一,只需覆盖这个插槽分配:

         ifconfig wlan0 tdmaslot 0

类似地,其他TDMA参数也可以用ifconfig配置:

         ifconfig wlan0 ssid freebsd-ap tdmaslotcnt 2 tdmaslotlen 2500 tdmaslot 0

回想一下,从站采用来自主站的TDMA配置,因此必须设置的唯一参数是SSID。不使用为作为从服务器操作的vap设置的参数。

扫描在TDMA vap被标记时自动发生。同样,信标小姐处理可能会触发扫描。这两个操作都使用net80211的标准组件状态机框架进行管理。如果对vap启用802.11h支持,则使用CSA支持协调的通道更改。

TDMA vap用于使用标准层2桥接构建点到点桥接机制。设置TDMA桥的主站非常简单:

         ifconfig wlan create wlandev ath0 ssid freebsd-tdma tdmaslot 0 up

ifconfig bridge create addm wlan0 up

固定的传输速率用于发送数据帧,因为没有Ack帧向速率控制算法提供反馈。默认速率被选择为最佳传输功率的最高可用速率。例如,在802.11a通道上操作时使用24Mb/s。这是配置在命令:

         ifconfig wlan0 ucastrate 24

FreeBSD 8.0要求TDMA BSS中的所有站点手动设置传输速率。即将进行的更改包括在每个信标帧中发送的TDMA配置参数中包含此参数。

 

Atheros Driver Transmit Support

        TDMA传输的驱动程序支持非常简单。Atheros设备支持多个硬件传输队列,这些队列被编程为根据几种调度算法之一将帧发送到协议控制单元(PCU)。

        通常数据帧使用“ASAP”调度算法,在帧出现在队列中时立即分派它们。对于接入点操作,硬件还支持帧调度算法,其中帧是根据信标定时器发送信标帧。将该帧调度算法应用于普通数据帧,硬件可以根据信标调度对数据帧进行调度。

        帧调度的唯一剩余要求是限制流量,以便帧只在指定的时间间隔内传输。通过根据TDMA插槽长度设置爆破帧的最大持续时间,可以很容易地解决这个问题。除了一些其他的小细节,这是所有需要有硬件计划和发送帧根据硬件信标定时器定义的定期计划。

        直接使用硬件的一个复杂问题是,传输DMA引擎遍历传输描述符的链表,然后异步地运行到驱动程序。通常驱动程序会触发描述符列表遍历,这样它就知道何时可以安全地回收已完成操作的传输描述符。但是在异步操作中,链中最后一个描述符中的“next descriptor”字段可能在任何时候被硬件重新读取,因此必须小心地回收描述符。

        DMA引擎的异步操作导致了一个相关问题。驱动程序通过编写一个寄存器来告诉硬件新的描述符,该寄存器保存描述符列表中第一个条目的地址。但是,如果硬件正在积极地遍历这个列表,则忽略任何写操作。驱动程序在执行这些写操作之前检查DMA引擎是否处于活动状态,如果是,则记录延迟写的需要,从而处理这个问题。当另一个包提交给传输或准备信标帧时,将处理延迟写。

        注意,上述更改适用于现有的驱动程序/硬件框架。这意味着,例如,即使根据TDMA调度WME/WMME服务传输帧,QoS帧的优先队列仍然是这样做的。这里描述的机制也适用于所有Atheros模块(尽管有些部件由于下面描述的原因不能使用)。

 

802.11 ACK Frames

        对于当前的TDMA实现,没有802.11 ACK帧。这是通过使用QoS报头封装所有流量,并将ACK策略字段设置为“不需要ACK”来完成的。不需要为此更改驱动程序。Net80211将相邻站点标记为使用QoS,以便对帧进行适当封装,并且用户配置强制执行ACK策略。

 

TDMA Clock Setup

         硬件传输机制由硬件信标定时器和各硬件传输队列的包集中控制驱动(bursting controls)。根据TDMA BSS的超帧,通过设置信标计时器间隔来安排每个站的时隙。时隙长度由分配给每个硬件传输队列的突发持续时间控制。

        AR5212 MAC中的信标计时器的粒度为1 TU(1024微秒),粒度非常粗。为了弥补这一限制,驱动程序必须将计算得到的超帧整数化为1 TU的倍数。

        在计算中一个更重要的因素是,硬件传输机制不会“杀死飞行中的帧”,这可能会超过突发长度。也就是说,硬件可能在插槽结束之前开始传输帧,然后溢出到下一个插槽。为了解决这个问题,我们计算了一个涵盖这种可能性的“保护时间”。当使用固定传输速率发送数据帧时,保护时间包括以固定速率发送最大帧的时间。使用可变传输速率要求以尽可能低的速率进行此计算。

 

TDMA Clock Synchronization

        一旦TDMA传输调度就位,另一个关键要求是同步每个站点的调度,这样帧就不会发生冲突。最明显的方法是在基站的所有站点上实现一个固定的时钟。当有三个或更多的站和/或有一个外部参考时钟(例如来自GPS)时,现有的算法可以做到这一点。但是在点对点网络中只有两个站,我们不能假定参考时钟源是可用的。取而代之的是一种新的算法,它利用从无线硬件获取的信息,只在两个工作站工作,没有参考时钟。该算法不仅可以同步网络中各站点的时隙调度,而且可以独立于站点之间的距离进行调度。这对于固定和移动应用程序都非常有用。

         上述算法的关键细节是在硬件信标计时器运行时,需要对其进行有效的子tu调整。信标计时器寄存器的粒度不高,但是如果小心的话,可以直接编写TSF。特别是硬件不能向后处理设置计时器。然而,由于我们不同步时钟,而只是时钟之间的差异,每个站的TSF的实际值并不重要。这意味着我们可以通过提前设置硬件计时器 (superframe-T)来实现负计时器调整T。再加上一些其他的硬技巧,就有可能在不锁定硬件的情况下做出必要的调整。需要注意的是,我们采用的技术仅适用于一类Atheros AR5212芯片;驱动程序通过只对有能力的设备启用TDMA支持来实现这一点。

        使用上述方案,时间槽通常在3微秒内同步。如果没有接收到信标帧,可能会出现更大的波动。同步丢失引起的传输/接收冲突表现为无线电记录的传输覆盖接收(TOR)错误。驱动程序还维护有关时钟同步的详细统计信息。每个信标帧返回另一个站点的最后一个信标帧的64位时间戳,这样站点就可以跟踪“往返时间”。

        注意计时器只从信标帧同步。默认信标间隔调度被选择为类似于普通基础设施BSS;例如,对于具有2.5毫秒时隙信标帧的双插槽BSS,每20个超级帧发送一次,这相当于接入点通常使用的100 TU值。信标的频率是发送和接收帧的开销和校准时钟的频率之间的权衡(它还限制了TDMA参数更改的速度)。Atheros 无线似乎有稳定的时钟,仅需要最小的调整。但是,如果注意到问题,可以使用更多的信标帧,并更经常地进行调整。还可以根据需要在中间超帧边界发送信标帧,而不会产生任何后果。

 

Performance

        TDMA实现的性能最初是使用一个试验台进行评估的,试验台中的工作站位于射频隔离室中,并通过电缆连接在一起。为了模拟长距离分离的传输延迟,使用了Spirent SR5500无线信道仿真器。每个工作站都由Gateworks 2348板、高传输功率Atheros无线卡(Wistron DCMA-82)和FreeBSD软件组成。衰减器用于避免系统中射频元件过载。

         使用netperf和iperf等工具测量基本网络性能,同时监视硬件和软件收集的吞吐量和错误统计信息。为了验证插槽定时同步,同时进行单向UDP“blast测试”,使通道在各个方向饱和。测试了不同的TDMA网络配置,同时改变信道延迟来模拟0到200英里之间的站间分离。Spirent设备使用数字信号复制,因此不会发生由于距离引起的信号衰减(允许在“不可能”的距离进行测试)。

        测试结果与TDMA参数计算的预期结果一致。包丢失为零。累积信道带宽是固定传输速率的70%或更多。当插槽长度减少到1毫秒时,会有一个下降,并且每个信标间隔所需的额外中断所需的主机开销会变得明显,从而影响包处理。

        在没有链路仿真器硬件的情况下,仅使用内联衰减器进行了重复测试,结果完全相同。表1显示了在802.11a通道36上运行的80 dB pad (RSSI 14-15 dBm)配置的结果。正如人们所期望的那样,更长的插槽长度具有更好的带宽。一个异常是,大于24Mb/s的传输速率比预期的性能差(特别是在插槽长度较大的情况下)。以54Mb/s的速度,这伴随着CRC错误,(到目前为止)无法解释。

        最后在不同条件下进行了室外试验,结果一致。在所有情况下,关键是验证可能由电缆或噪声源(如风扇、旋转介质和电源)引入的噪声的硬件设置。由于没有链路层确认,吞吐量对包丢失很敏感。通常情况下,我们可以从错误统计数据中识别原因,但有时如果没有独立的设备来监视通道,就无法识别原因。因此,总会有第三个监测站来进行被动监测。

        帧速率和详细的包跟踪也被收集来验证包间的间隙和媒体访问开销是最小的。最初,人们认为我们需要禁用CCA以获得最佳性能,但实验表明并非如此。这一点很重要,因为禁用CCA在大多数地区是不允许的,因为它违反了当地的法规要求。

        同时还测量了时隙抖动,对同步算法进行了评价。如前所述,从服务器上的TSF调整通常小于3微秒。这个值是用20个样本窗口的滚动平均值测量的。虽然这取决于信标发送的频率,但是丢失的信标帧似乎会出现更大的波动。一个有趣的观察结果是,在2.4GHz通道上运行时抖动明显比在5GHz通道上更严重。这可能是由于一些基带电路转换了MAC的内部时钟。当时钟变窄(5MHz和10MHz)或变宽(涡轮模式40MHz)时,这些异常结果没有被观测到。然而,即使增加了2.4GHz通道上的抖动操作也没有受到影响(例如,没有观察到由于时隙碰撞而导致的包丢失)。

 

Future Work

        FreeBSD 8.0 TDMA协议不包括信标帧中的所有网络配置参数。增加固定的传输速率将使从站能够完全自动配置。此外,还需要花费最少的精力来添加每个站点的“带宽分配”机制,该机制可用于更改每个站点的插槽长度。可以在每个信标间隔对这些参数进行动态更改,从而通过更改“上行/下行带宽”(如WiMAX等系统)来提高吞吐量。

        框架封装使用3地址802.11报头格式完成。这只适用于具有两个站点的网络(隐含的对等关联)。它还使加密通信变得笨拙。要支持两个以上的站点,需要切换到4地址格式报头。此更改还简化了密钥的处理,因为可以使用现有设施为BSS中的每一对工作站维护密钥。

        当前的方案没有提供链路层确认。包丢失通常很低,所以这并不重要。但当数据包丢失严重时,会影响TCP等高级协议。通常的TCP算法有一些扩展,它们试图解决在无线环境中可能遇到的有损链接。另一个选项是扩展TDMA支持,以包括显式确认和包重传。这可以通过与槽调度绑定的“批量ACK”机制轻松完成。但是如果没有足够短的插槽长度,在链路层完成的重传输就没有帮助,因为TCP ACK帧中的延迟仍然会被TCP协议注意到,从而导致吞吐量下降。

    802.11 TDMA协议支持最多可支持8个站的BSS,但时间同步算法仅在两站网络中进行了现场测试。一旦有两个以上的站点参与,许多其他算法都能很好地工作,但是这些算法都不能像当前算法那样处理任意的站点分离。可以将当前的插槽同步算法扩展到更多的站点(最多4个站点的实验结果令人鼓舞)。

        Atheros AR5212硬件限制了TDMA支持的有效性。1 TU信标计时器粒度和缺乏PCU包杀伤支持导致介质利用率严重不足。新的Atheros硬件解决了这两个问题:从AR5416开始,信标计时器的粒度为1微秒,当达到最大爆发持续时间时,硬件杀死排队等待到PCU的帧。更新的硬件还可以使用802.11n传输设备提高吞吐量。

 

Conclusions(总结)

    FreeBSD中的TDMA无线支持已被证明是部署网络的一个有价值的工具。它已经被用于从远程监控到构建网络基础设施的所有领域,而在这些领域使用常规设施是不切实际的。自动配置链路层参数而不考虑站点分离的能力对于固定点应用程序非常有用,并且在将来有望支持新的移动应用程序。软件支持易于理解、健壮,并且能够以非常低的成本构建系统。批量确认和动态带宽分配等功能可以完全在软件中完成,以改进服务。对新的802.11n硬件设备的支持将提高网络利用率并支持更大的带宽。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值