level 1
先说说我的情况.小小网吧.才五十台客户端.宽带只一条,是100M下行 2M上行.
用ROS也快四年了.当年选择ROS就是因为ROS超级灵活.
对ROS是爱不释手.故看了不少文章和教程.最终自己写了个适合自己使用的限速方案.供各位参考
ROS版本:5.26
标记非常简单,简单粗暴实用省事. (请不要直接复制.这不是脚本.这仅仅是说明如何标记而已)
标记1 chain=forward dst-address=192.168.16.0/24 action=mark-packet new-packet-mark=allDownPacket passthrough=yes
标记2 chain=forward src-address=192.168.16.0/24 action=mark-packet new-packet-mark=allUpPacket passthrough=yes
标记3 chain=prerouting src-address=192.168.16.0/24 action=mark-packet new-packet-mark=allUpPacketPre passthrough=yes
2016年07月05日 06点07分
1
level 1
接下来是队列类型(queue type)
pcq1 name=allUpPacket pcq-rate=256000 burst-rate=400000 burst-threshold=57000 burst-time=10 pcq-classfier=src-address
pcq2 name=name=allUpPacketPre pcq-rate=128000 burst-rate=176000 burst-threshold=12000 burst-time=20 pcq-classfier=src-address dst-address dst-port
pcq3 name=allDownPacket pcq-rate=40000000 pcq-classfier=dst-address
2016年07月05日 07点07分
3
这不是脚本.仅仅是说明如何设置而已.
2016年07月05日 07点07分
level 1
接下来是队列树(queue tree)
queueTree1 name=allDownPacket parent=global-out packet-mark=allDownPacket queue=allDownPacket
queueTree2 name=allUpPacket parent=global-out packet-mark=allUpPacket queue=allDownPacket
queueTree3 name=allUpPacketPre parent=global-out packet-mark=allUpPacketPre queue=allDownPacket
2016年07月05日 07点07分
4
这不是脚本.仅仅是说明如何设置而已.
2016年07月05日 07点07分
level 1
script2 name=testQueues_Down 脚本如下:
:local allUpPacketPre "";
:local allUpPacket "";
:local servicePacket "";
:set allUpPacketPre [/queue type get [find name=allUpPacketPre] pcq-rate];
:set allUpPacket [/queue type get [find name=allUpPacket] pcq-rate];
:set servicePacket [/queue type get [find name=servicePacket] pcq-rate];
:if ($allUpPacketPre > 96000) do={/queue type set [find name=allUpPacketPre] pcq-rate=($allUpPacketPre - 16000);};
:if ($allUpPacket > 256000) do={/queue type set [find name=allUpPacket] pcq-rate=($allUpPacket - 16000);:log info ("pcq down = " . ($allUpPacket - 16000) / 1000 . "k
bp
s");};
:if ($servicePacket > 100000) do={/queue type set [find name=servicePacket] pcq-rate=($servicePacket - 100000);};
2016年07月05日 07点07分
6
脚本使用前.应当适量修改.以适合自己的网络使用.
2016年07月05日 07点07分
level 1
script3 name=testQueues_Up 脚本如下:
:local allUpPacketPre "";
:local allUpPacket "";
:local servicePacket "";
:set allUpPacketPre [/queue type get [find name=allUpPacketPre] pcq-rate];
:set allUpPacket [/queue type get [find name=allUpPacket] pcq-rate];
:set servicePacket [/queue type get [find name=servicePacket] pcq-rate];
:if ($allUpPacketPre < 172000) do={/queue type set [find name=allUpPacketPre] pcq-rate=($allUpPacketPre + 4000);};
:if ($allUpPacket < 396000) do={/queue type set [find name=allUpPacket] pcq-rate=($allUpPacket + 4000);:log info ("pcq up = " . ($allUpPacket + 4000) / 1000 . "kbps");};
:if ($servicePacket < 1000000) do={/queue type set [find name=servicePacket] pcq-rate=($servicePacket + 50000);};
2016年07月05日 07点07分
7
脚本使用前.应当适量修改.以适合自己的网络使用.
2016年07月05日 07点07分
level 1
schedule很简单.设置间隔为两秒运行一次.就运行changePCQ就行了.
schedule name=schedule1 on-event=changePCQ interval=2s
就是这么简单
2016年07月05日 07点07分
8
level 1
可能没有用上小包.也没有用上端口优先.有些人看了可能觉得不行.但我也是一个使用过小包优先.使用过端口优先的人.收集端口花了我不知多少时间.小包优先不知道调了几次. 最终是心灰意冷 上面我写的限速方案,我自己已经使用很长时间了.比较满意
2016年07月05日 07点07分
9