在802.11a/b/g中,所有的数据传输都要求接收机(the receiving radio)确认;如果发射机没有收到接收机发来的ACK,发射机就会发起若干重传尝试(注:有一些方法使用多播或多媒体特性发送无确认数据包)。因为发射机在等待一段有限的时间(ack timeout)后,就会尝试重传,因此确认(acknowledgments)会对长距离链路有影响。如果确认超时时间(ack timeout)设置得太短,发射机就可能在接收到接收机传来的ACK之前开始发起重传,而且这个重传还会干扰到正在空中传输(“on it’s way”)的ACK。(注:重传会发生在一个随机的random backoff后)。最终导致的结果就是实际的吞吐量很低,而重传次数很高。如果,相反的,ACK timeout设置得过长,接收机因收不到ACK而确实需要重传数据时,就会先等待一段不必要的长ACK timeout,这就带来了时间上的损失,从而降低链路的吞吐量。
除了ACK timeout,一些其他的计时常数也需要做出调整以适应长距离链路。这些计时常量用于协议的冲突侦听和避免部分。
设置的底线是,确定两无线端站的距离(或者移动环境下的最大距离),计算以微秒为单位的包传送时间,并将ACK timeout设置为比CTS timeout(一个来回传输的时间)稍高一点的值,并将slot time设置为单向传输时间值。这些设置在/proc/sys/dev/athX中表现为slottime,ctstimeout,acktimeout。最简单的方式是使用驱动所带的athctrl工具来更改设置。例如,athctrl –d 15000表示为相距约15000米(约9.4英里)的设备设置相关合理参数。有一点很重要,所有互相通信的设备需使用相同的参数值。因此,在点对多点环境中,其中一台client距离AP 10000米,另一台距离AP 15000米,则需在每台设备上都执行athctrl –d 15000(即按照最远的那台设备与AP的距离做参数调整)。
英文原文见:http://forums.wi-fiplanet.com/showpost.php?s=346e8ea4a7346fae75108b7f68ec0909&p=26917&postcount=2