在openwrt的官方固件下,要使用石像鬼QoS还是很麻烦的,比较好用的就是qos-scripts,也能基本满足要求,可以定义端口和设备的优先级,并且不需要特别设置游戏的端口,就能保证很低的延迟。不过使用的时候还是有点问题,有时候一边bt一边看视频,bt的速度始终很高,不能保证视频的流畅播放,也就是80和443端口的优先没有得到保证。

查看了/etc/config下的qos文件,这是qos的配置文件,里面有一些默认设置,在luci界面里面是看不到的,如果需要修改,就vi这个文件。这里面定义了一些服务等级,每个等级的带宽比例,还有那些端口加到哪些服务等级里的规则。其中有两条很重要:

config default
option target "Bulk"
option portrange "1024-65535"

config default
option target "Express"
option proto "udp"
option pktsize "-500"

第一个是高位端口全都默认走Bulk服务,也就是大概1%的带宽比例。第二个是小于500byte的udp包,走Express通道。80和443端口走的是Normal通道,等级比Express低。

在bt/pt下载时,会产生大量的udp小包,这些小包就会挤占80和443的带宽,所以视频就不流畅了。带宽足够大时,比如20M以上,这样设置是没有问题的,udp小包再多,也不会把带宽占满,视频播放不会受影响,但总带宽较小时,这就很致命,视频播放总是一卡一卡的。另外几乎所有的游戏数据都是这样的小包(有不少游戏是用的TCP小包,如果需要,可以参照这一条写个TCP小包的规则),所以不需要特别设置游戏的端口,也不会造成很高的ping。真是成也萧何败也萧何。

删掉这个udp小包的规则以后,80和443端口的带宽终于能够保证了,视频再也不卡,不过游戏端口就要自己设置了。好在luci界面设置端口比石像鬼省事多了。