通过改变ACK/CTS timeout和Slottime可以提升长距离链路的吞吐性能,见http://www.air-stream.org/ACK_Timeouts
RouterOS
ACK Timeout选项可在Winbox GUI网卡接口设置的“Advanced”标签中找到—-须确保“Advanced Mode”被勾选。RouterOS有一个特性,可以自动计算ACK Timeout,这是默认选项并且在大多数情况下都工作得很好。若要手动设置ACK Timeout,直接输入以微秒为单位的数字,然后点击apply即可。

使用athctrl修改Atheros网卡
athctrl是一个Linux下基于指定的以米为单位的最大距离更改ACK Timeout,CTS Timeout和Slottime的小工具。它的使用方法是:
athctrl [-h] [-i device] [-d distance]
目前基于atheros的网卡的acktimeout/ctstimeout的可能的最大值是409µs,可以工作的最大距离约为53-57km。
举例
| athctrl -d 1000 |
设置wifi0的最大距离为1000米
| athctrl -i wifi1 -d 5000 |
设置wifi1的最大距离为5000米
OpenWrt + Madwifi
物理层参数存储在/proc/sys/dev/wifiX中。查看参数,比如wifi0的acktimeout
| OpenWrt:~# sysctl dev.wifi0.acktimeout dev.wifi0.acktimeout = 22 |
举例
我想设置我的802.11a网卡wifi0,使其工作于8km的链路上。默认的slottime是9µs,默认的acktimeout就是上面的命令所得到的22µs。在原始的300米基础上,距离每增加300米,我都必须将slottime加1,acktimeout加2。这意味着,我必须为slottime添加额外的(8000-300)/300=25.7µs。保险起见,向上取26。因此,我的slottime就是9+26=35,acktimeout和ctstimeout都将是22+26*2=74。
这些设置可通过如下方式完成:
| OpenWrt:~# sysctl -w dev.wifi0.acktimeout=74 dev.wifi0.acktimeout = 74 OpenWrt:~# sysctl -w dev.wifi0.ctstimeout=74 dev.wifi0.ctstimeout = 74 OpenWrt:~# sysctl -w dev.wifi0.slottime=35 dev.wifi0.slottime = 35 |
为使设置的参数在系统启动时不变,我们需要将以下内容添加到/etc/sysctl.conf中:
| dev.wifi0.ctstimeout=74 dev.wifi0.acktimeout=74 dev.wifi0.slottime=35 |
BSD
可以在基于BSD的系统中使用sysctl访问和修改参数,格式是相似的。
举例
以修改网卡wl1为例:
| ~# sysctl -w dev.wl.1.acktimeout=74 dev.wl.1.acktimeout: 22 -> 74 ~# sysctl -w dev.wl.1.ctstimeout=74 dev.wl.1.ctstimeout: 22 -> 74 ~# sysctl -w dev.wl.1.slottime=35 dev.wl.1.slottime: 9 -> 35 |
为使设置的参数在系统启动时不变,我们需要将以下内容添加到/etc/sysctl.conf中:
| dev.wl.1.acktimeout=74 dev.wl.1.ctstimeout=74 dev.wl.1.slottime=35 |
OpenWrt Whiterussian + Broadcom
使用工具dctrl修改Whiterussian中的nbd或nvram设置,可以指定station之间的最大距离。dctrl的使用方法是:
dctrl [以米为单位的最大距离]
在Whiterussian RC5或更高版本中,nvram中的wl0_distance能用来控制以米为单位的最大距离。一个称为sdist的小工具,可以用来验证是否正确修改了寄存器。在更改nvram后,记得运行/sbin/wifi重新加载wifi设置。
举例:
使用sdist检查初始值,然后将wl0_distance改为20km,重新加载wifi设置。检查wifi卡的寄存器是否正确修改了,然后执行nvram commit (committing the nvram),以便系统重启后wl0_distance设置保持不变。
| OpenWrt:~# ./sdistshm: 0x9reg 684: 0×207 OpenWrt:~# nvram set wl0_distance=20000 OpenWrt:~# /sbin/wifi OpenWrt:~# ./sdist shm: 0x8f reg 684: 0x28d OpenWrt:~# nvram commit |
HostAP+Prism?
Do we care?
Note about Atheros:如果使用802.11g,将station的工作模式锁定为11g是一个很好的主意,这可以防止当有11b客户端尝试连接时,slottime发生重置。这可以通过在Linux/Madwifi下使用iwpriv <interface> mode 11g,在BSD下使用 ifconfig <interface> mode 11g实现。