【译】ACK Timeouts及其对远程链路的影响

所有的802.11a/b/g无线设备使用IEEE规范定义的计时常量来侦听其他使用无线媒介的载波并避免冲突(802.3只侦听冲突),也用来重传丢失的帧。需重点考虑的常量有slottime,CTS timeout和ACK timeout。在多站(multiple stations)互联环境中的冲突避免或其中一个站尝试模拟全双工通信时,slottime显得更为重要;而ACK timeouts对点对点通信更为重要。其他的可抑制最大链路距离的参数有SIFS (Short Inter Frame Spacing,短帧间隔), DIFS (Distributed IFS,分布式协调功能帧间隔) 和PIFS (Point Coordination IFS,点协调功能帧间隔)。DIFS是stations在开始新的传输序列前,用来检测射频空闲状态的时间。SIFS是station在发送或接收一个RTS,CTS或ACK帧前必须等待的时长。PIFS是AP的一种称为点协调功能(point coordination function)的特殊访问模式下的DIFS。这些计时常量在定义时,赋予了RTS,CTS和ACK帧更高的优先级(例如,一旦包传输序列开始了,station将一直把持信道,直到传输完成)

在802.11b中,IEEE硬性规定了以下值:

  • slottime=20µs
  • SIFS=10µs
  • PIFS=SIFS+Slottime=30µs
  • DIFS=SIFS+2×Slottime=50µs

在802.11g中:

  • Slottime=9µs
  • SIFS=10µs
  • DIFS=SIFS+2×Slottime=28µs

在802.11a中:

  • Slottime=9µs
  • SIFS=16µs
  • DIFS=SIFS+2×Slottime=34µs

在2.4G 802.11n中:

  • slottime=9µs(纯ERP环境)或20µs(若有NoERP STA)
  • RIFS=2µs
  • SIFS=10µs
  • DIFS= SIFS+2×Slottime=28µs或50µs

在5G 802.11n中:

  • slottime=9µs
  • RIFS=2µs
  • SIFS=16µs
  • DIFS= SIFS+2×Slottime=34µs

注:DIFS/SIFS/PIFS被用作物理层载波侦听,而MAC层使用CTS和ACK timeouts实施冲突检测。CTS和ACK timeouts的默认值因厂家设定而异。

RTS/CTS握手的普通传输流程

发送方:等待DIFS,发送数据,等待SIFS,侦听并接收ACK(直到最大的ACK timeout),重复

接收方:侦听并接收数据,等待SIFS,发送ACK,等待DIFS

802.11b中的距离限制

最佳的ACK Timeout,Slottime和DIFS有些依赖于空中传播的时间。IEEE标准定义空中传播时间为1µs±(10% SIFS)。无线电波的传播速度约为300m/µs。

ACK Timeout:显然,如果ACK timeout小于最后一个数据包(+SIFS)传递到接收端的时间+对应包的ACK包回传到发送端的时间,那么发送端的MAC就会认为包已经丢失,并发起不必要的(多余的)数据包重传。重传的包最终将会与正在传播(on its way)的ACK碰撞,加上协议的back-off部分,因此会降低吞吐量。如果,相反地,ACK timeout设置得过长,发射机(transmitter)在重传任何丢包之前必须等待一段不必要的时间(直到ACK timeout超时),因此会降低链路的吞吐量(更重要的是,环境中bit error会增加)。在CTS timeout上,也可以得出同样的结论,然而RTS/CTS只是用来降低有隐藏节点的环境中的冲突,在大多数情况下,可以将其(RTS/CTS)关闭。大多数实现都假定IEEE推荐的是单向空中传播时间为1µs,因此将设备的ACK timeout调整为300米。这是802.11b兼容设备能达到高吞吐量的最大距离。当距离更远时,链路仍然可以工作,但吞吐量会随着距离的增加而降低。

举例:当电波以300m/µs的速度传播时,3000m的链路需要的传播时间为10µs(比平常多9µs)。ACK timeout必须是双向传播的时间,因此一条3000m的链路要达到最大的吞吐量,必须在标准的ACK timeout上额外加18µs。这个最大吞吐量会比近距离时能达到的最大吞吐量略小,但会比不更改ACK timeout时的吞吐量大很多。

Slottime:station只被允许在slottime的开始发送数据,因此这个时间(slottime)在电波到达接收端前不能停止(超时)。这给出了一个最大的距离 20µs×300m/µs=6000 m。假定ACK timeout也作了相应的增加,这就是在点对多点环境中(假定无隐藏节点)不蒙受严重的指数级backoff下的最大距离。

DIFS:station在发起新的传输前,必须等待一个DIFS时长,换句话说,802.11b中,station有50µs的时间侦听信道以避免远端节点发来的帧引起冲突。这意味着远端节点的最大距离可达到300m/µs×50µs=15000 m。假定ACK timeout作了相应的增加,这就是点对点环境中不更改slottime(DIFS是基于slottime得来的),吞吐量显著降低前能达到的最大距离。

802.11g/a长距离链路

原理是一样的,但数字不一样。默认的计时(timings)更为严格,因此任何适当距离的链路,其ACK timeout和slottime十之八九(可能)需要更改,即使是点对点链路。很多以太网网桥/网关设备提供很少或是没有方法修改这些,然而一些特定的miniPCI适配器,比如CM9,Senao和SuperRange卡在BSD或Linux下有驱动支持修改这些设置。适当调整后能达到的吞吐量(虽然不是完全的理论速率),比802.11b在相同距离下能达到的值高很多,值得努力。 

修改ACK timeoutSlottime

在300m的基础上每额外增加300m的距离,设备的Slottime增加1µs,ACK timeout和CTS timeout各增加2µs。

在同一信道上相连的所有station都需要设置相同的计时常量。

使用各节点间(任何两节点之间)的距离的最大值作为计算依据。

常用操作系统和驱动下的案例,可参考http://www.air-stream.org/Change_ACK

 

 定义

ACK Timeout = Air Propagation Time (max) + SIFS + Time to transmit 14 byte ACK frame [14 * 8 / bitrate in Mbps] + Air Propagation Time (max)

Slottime = MAC and PHY delays + Air Propagation Time (max)

DIFS = SIFS + 2 * Slottime

 

总结

适当的长距离802.11b链路,因不太严格的计时(timings)及一些厂商更宽松的MAC实现,可以工作得很好。使用正确的无线网卡并做一些调整,802.11b在非常长的链路上几乎能维持最大的理论吞吐量,因此是距离王。

然而802.11a仍然是吞吐量王,但是在远距离链路上需要使用允许调整的特别网卡。调整802.11g需要一块能锁定工作模式为11g的网卡,以防每次有11b客户端尝试连接时,slottime(自动)回调回去。802.11a胜过802.11g,因为在5.8G频谱上有更多的非重叠信道,意味着大多数11a链路将更可能维持其高吞吐量。

 

原文地址:http://www.air-stream.org.au/ACK_Timeouts

Tags: , , , , , , , ,

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>