用户平分带宽例子(pcq)
2010-04-01 22:59
281 查看
这个例子示范了如何将10mbps下载2mbps上传,均分给网络192.168.0.0/24中的活动的用户。
如果主机A下载2Mbps,主机B就只能获得8mbps,反之亦然。
有这样一种情况,他们都想获得最大带宽(10mbps),他们将各自获得5mbps,上传也一样。这个设置同样是用于更多用户的情形。
首先,所有来自本地网络192.168.0.0/24的流,标记 一个用户标记。
/ip firewall mangle add chain=forward src-address=192.168.0.0/24 \
action=mark-connection new-connection-mark=users-con
/ip firewall mangle add connection-mark=users-con action=mark-packet \
new-packet-mark=users chain=forward
现在我们将添加两个新的PCQ类型。第一个命名pcq-download,将依据目的地址聚合所有流。我们将给本地接口使用这个queue type。它将为那些目的地址是网络192.168.0.0/24的下载,创建一个动态队列。
第二个命名为pcq-upload,将依据源地址聚合所有流。我们将给公网接口使用,所以它将为来自本地网络192.168.0.0/24到internet的上传,创建以一个动态队列。
/queue type add name=pcq-download kind=pcq pcq-classifier=dst-address
/queue type add name=pcq-upload kind=pcq pcq-classifier=src-address
最后,给下载流创建一个queue tree。
/queue tree add name=Download parent=Local max-limit=10240000
/queue tree add parent=Download queue=pcq-download packet-mark=users
给上传流的:
/queue tree add name=Upload parent=Public max-limit=2048000
/queue tree add parent=Upload queue=pcq-upload packet-mark=users
注意:如果你的ISP不能提供一个固定的流量,你可以在上传QUEUE规则和下载QUEUE规则中,直接在接口上使用QUEUE。
/queue tree add parent=Local queue=pcq-download packet-mark=users
/queue tree add parent=Public queue=pcq-upload packet-mark=users
/ip fir fil
add chain=forward src-address=192.168.0.0/24 action=add-src-to-address-list address-list=pcq_list address-list-timeout=5s comment="pcq_list_add"
/que typ
add name="pqc_http_down" kind=pcq pcq-rate=824000 pcq-limit=50 pcq-classifier=dst-address pcq-total-limit=200000
add name="pcq_up" kind=pcq pcq-rate=284000 pcq-limit=50 pcq-classifier=src-address pcq-total-limit=20000
/que sim
#取消对网关的限制#
add name="admin" target-addresses=192.168.0.0/24 dst-address=192.168.0.0/24 interface=all parent=none direction=both priority=1 queue=default/default limit-at=0/0 max-limit=0/0 total-queue=default disabled=no
#PCQ分配#
add name="pcq" target-addresses=192.168.0.0/24 dst-address=0.0.0.0/0 interface=LAN parent=none direction=both priority=8 queue=pcq_up/pqc_http_down limit-at=0/0 max-limit=384000/1000000 burst-limit=384000/1000000 burst-threshold=64000/256000 burst-time=3s/3s total-queue=default-small disabled=no
脚本1秒1次
:global maxdown
:global maxup
:global mindown
:global minup
:global resDown
:global resUp
:global yz
:global pcqup
:global pcqdown
:global pcqdownold
:global pcqupold
:global a
:global testup
:global testdown
:global pcqitem
:global curUp
:global curDown
:set maxdown 1024000
:set maxup 384000
:set mindown 120000
:set minup 80000
:set resDown 200000
:set resUp 100000
:set yz 100
:set pcqitem [:len [/ip firewall address-list find list=pcq_list]]
:if ($pcqitem!=0) do={
:set pcqdown [/queue type get [/queue type find name=pqc_http_down] pcq-rate]
:set pcqdownold $pcqdown
:set pcqup [/queue type get [/queue type find name=pcq_up] pcq-rate]
:set pcqupold $pcqup
:set curDown 1
:set curUp 1
/int mon PPPOE once do={:set curDown $"received-bits-per-second"}
/int mon PPPOE once do={:set curUp $"sent-bits-per-second"}
:set testdown ($maxdown+-$curDown+-$resDown)
:if ($testdown>0) do={
:set pcqdown ($pcqdown+($testdown/$yz))
}
:if ($testdown<=0) do={
:set pcqdown ($pcqdown+$testdown)
}
:set a ($maxdown+-$resDown)
:if ($pcqdown>$a) do={:set pcqdown $a}
:set a ($maxdown/$pcqitem)
:if ($pcqdown<$a) do={:set pcqdown $a}
:set testup ($maxup+-$curUp+-$resUp)
:if ($testup>0) do={
:set pcqup ($pcqup+($testup/$yz))
}
:if ($testup<=0) do={
:set pcqup ($pcqup+$testup)
}
:set a ($maxup+-$resUp)
:if ($pcqup>$a) do={:set pcqup $a}
:set a ($maxup/$pcqitem)
:if ($pcqup<$a) do={:set pcqup $a}
:if ($pcqdown!=$pcqdownold) do={
:if ($pcqdown>$mindown) do={
/queue type set [/queue type find name="pqc_http_down"] pcq-rate=$pcqdown
} else={
/queue type set [/queue type find name="pqc_http_down"] pcq-rate=$mindown
}
}
:if ($pcqup!=$pcqupold) do={
:if ($pcqup>$minup) do={
/queue type set [/queue type find name="pcq_up"] pcq-rate=$pcqup
} else={
/queue type set [/queue type find name="pcq_up"] pcq-rate=$minup
}
}
}
如果主机A下载2Mbps,主机B就只能获得8mbps,反之亦然。
有这样一种情况,他们都想获得最大带宽(10mbps),他们将各自获得5mbps,上传也一样。这个设置同样是用于更多用户的情形。
首先,所有来自本地网络192.168.0.0/24的流,标记 一个用户标记。
/ip firewall mangle add chain=forward src-address=192.168.0.0/24 \
action=mark-connection new-connection-mark=users-con
/ip firewall mangle add connection-mark=users-con action=mark-packet \
new-packet-mark=users chain=forward
现在我们将添加两个新的PCQ类型。第一个命名pcq-download,将依据目的地址聚合所有流。我们将给本地接口使用这个queue type。它将为那些目的地址是网络192.168.0.0/24的下载,创建一个动态队列。
第二个命名为pcq-upload,将依据源地址聚合所有流。我们将给公网接口使用,所以它将为来自本地网络192.168.0.0/24到internet的上传,创建以一个动态队列。
/queue type add name=pcq-download kind=pcq pcq-classifier=dst-address
/queue type add name=pcq-upload kind=pcq pcq-classifier=src-address
最后,给下载流创建一个queue tree。
/queue tree add name=Download parent=Local max-limit=10240000
/queue tree add parent=Download queue=pcq-download packet-mark=users
给上传流的:
/queue tree add name=Upload parent=Public max-limit=2048000
/queue tree add parent=Upload queue=pcq-upload packet-mark=users
注意:如果你的ISP不能提供一个固定的流量,你可以在上传QUEUE规则和下载QUEUE规则中,直接在接口上使用QUEUE。
/queue tree add parent=Local queue=pcq-download packet-mark=users
/queue tree add parent=Public queue=pcq-upload packet-mark=users
/ip fir fil
add chain=forward src-address=192.168.0.0/24 action=add-src-to-address-list address-list=pcq_list address-list-timeout=5s comment="pcq_list_add"
/que typ
add name="pqc_http_down" kind=pcq pcq-rate=824000 pcq-limit=50 pcq-classifier=dst-address pcq-total-limit=200000
add name="pcq_up" kind=pcq pcq-rate=284000 pcq-limit=50 pcq-classifier=src-address pcq-total-limit=20000
/que sim
#取消对网关的限制#
add name="admin" target-addresses=192.168.0.0/24 dst-address=192.168.0.0/24 interface=all parent=none direction=both priority=1 queue=default/default limit-at=0/0 max-limit=0/0 total-queue=default disabled=no
#PCQ分配#
add name="pcq" target-addresses=192.168.0.0/24 dst-address=0.0.0.0/0 interface=LAN parent=none direction=both priority=8 queue=pcq_up/pqc_http_down limit-at=0/0 max-limit=384000/1000000 burst-limit=384000/1000000 burst-threshold=64000/256000 burst-time=3s/3s total-queue=default-small disabled=no
脚本1秒1次
:global maxdown
:global maxup
:global mindown
:global minup
:global resDown
:global resUp
:global yz
:global pcqup
:global pcqdown
:global pcqdownold
:global pcqupold
:global a
:global testup
:global testdown
:global pcqitem
:global curUp
:global curDown
:set maxdown 1024000
:set maxup 384000
:set mindown 120000
:set minup 80000
:set resDown 200000
:set resUp 100000
:set yz 100
:set pcqitem [:len [/ip firewall address-list find list=pcq_list]]
:if ($pcqitem!=0) do={
:set pcqdown [/queue type get [/queue type find name=pqc_http_down] pcq-rate]
:set pcqdownold $pcqdown
:set pcqup [/queue type get [/queue type find name=pcq_up] pcq-rate]
:set pcqupold $pcqup
:set curDown 1
:set curUp 1
/int mon PPPOE once do={:set curDown $"received-bits-per-second"}
/int mon PPPOE once do={:set curUp $"sent-bits-per-second"}
:set testdown ($maxdown+-$curDown+-$resDown)
:if ($testdown>0) do={
:set pcqdown ($pcqdown+($testdown/$yz))
}
:if ($testdown<=0) do={
:set pcqdown ($pcqdown+$testdown)
}
:set a ($maxdown+-$resDown)
:if ($pcqdown>$a) do={:set pcqdown $a}
:set a ($maxdown/$pcqitem)
:if ($pcqdown<$a) do={:set pcqdown $a}
:set testup ($maxup+-$curUp+-$resUp)
:if ($testup>0) do={
:set pcqup ($pcqup+($testup/$yz))
}
:if ($testup<=0) do={
:set pcqup ($pcqup+$testup)
}
:set a ($maxup+-$resUp)
:if ($pcqup>$a) do={:set pcqup $a}
:set a ($maxup/$pcqitem)
:if ($pcqup<$a) do={:set pcqup $a}
:if ($pcqdown!=$pcqdownold) do={
:if ($pcqdown>$mindown) do={
/queue type set [/queue type find name="pqc_http_down"] pcq-rate=$pcqdown
} else={
/queue type set [/queue type find name="pqc_http_down"] pcq-rate=$mindown
}
}
:if ($pcqup!=$pcqupold) do={
:if ($pcqup>$minup) do={
/queue type set [/queue type find name="pcq_up"] pcq-rate=$pcqup
} else={
/queue type set [/queue type find name="pcq_up"] pcq-rate=$minup
}
}
}
相关文章推荐
- 用户空间与kernel空间通信的例子(利用mmap)
- WebWork完成用户注册的例子
- 用户私自增加带宽的秘密[一般人我不告诉他]
- awk 提取用户areacode的例子
- Django1.7+JQuery+Ajax验证用户注册集成小例子
- 用户管理例子
- trickle 限制用户空间带宽
- javaweb中Cookie对用户密码保存的例子
- 从一个工作流流转中人员设定的例子看WBISF流程引擎所定义的用户授权安全模型
- ActiveMQ单队列多用户收发的java例子
- 用户自定义ID Generator的例子(http://www.hibernate.org.cn/viewtopic.php?t=6281&highlight=IdentifierGenerator)
- 当局域网内某台主机使用P2P进行下载时,P2P软件会占用局域网到互联网出口的大量的带宽,导致其他用户网速慢、卡等现象。BT等软件在下载的同时又作为种子为其他人提供下载服务
- MongoDB 新建数据库用户例子
- 用户空间与kernel空间通信的例子(利用mmap)
- 使用 Struts2 校验器校验用户注册信息的例子
- jquery用户评星小例子
- mybatis学习之根据id查找用户例子
- 转:用户自定义ID Generator的例子(JavaJason)
- 【AS400系列】通过程序例子说明检查AS400用户密码的API-QSYGETPH