爱好网络 发表于 2006-1-14 21:41:18

试译ros官网“带宽控制”资料片段

资料片段的原文地址:http://www.mikrotik.com/docs/ros/2.9/root/queue

下面是靠金山词霸帮助,试译的片断,其中的例子代表性很强。理解不足请大家指正。
。。。。。
。。。。。。。
应用例子:
效仿(模拟?)一个上传64kbps,下载128kbps线路的例子:
假想,我们希望给网络192.168.0.0/24,模拟一条上传64kbps,下载128kbps的出口线路。
网络192.168.0.0/24的服务由ros的本地接口穿过,基本网络设置如下图:
http://skong.net.cn/temp/image/r1.jpg

解决这个问题,我们将使用simple queues(简单队列?)
ros里的ip地址列表:
ip address> print
Flags: X - disabled, I - invalid, D - dynamic
#   ADDRESS            NETWORK         BROADCAST       INTERFACE
0   192.168.0.254/24   192.168.0.0   192.168.0.255   Local
1   10.5.8.104/24      10.5.8.0      10.5.8.255      Public
ip address>

和路由列表:
ip route> print
Flags: X - disabled, A - active, D - dynamic,
C - connect, S - static, r - rip, b - bgp, o - ospf
#   DST-ADDRESS      G GATEWAY         DISTANCE INTERFACE
0 ADC 10.5.8.0/24                                 Public
1 ADC 192.168.0.0/24                              Local
2 A S 0.0.0.0/0          r 10.5.8.1               Public
ip route>

添加一个 simple queue规则,那个将被限制下载128kbps,上传64kbps的客户网络是192.168.0.0/24,服务通过本地接口

queue simple> add name=Limit-Local interface=Local \
\... target-address=192.168.0.0/24 max-limit=65536/131072
queue simple> print
Flags: X - disabled, I - invalid, D - dynamic
0    name="Limit-Local" target-addresses=192.168.0.0/24 dst-address=0.0.0.0/0
      interface=Local parent=none priority=8 queue=default/default
      limit-at=0/0 max-limit=65536/131072 total-queue=default
queue simple>

max-limit参数设定下载的最大带宽。
从用户的观点看,值65536/131072,意味着他们将得到的最大数是131072bps下载,65536bps上传。target-addresses参数定义目标网络(或用逗号隔开的多个网络)。

现在看流量负荷:
interface> monitor-traffic Local
received-packets-per-second: 7
       received-bits-per-second: 68kbps
      sent-packets-per-second: 13
         sent-bits-per-second: 135kbps

interface>

大概,你想将服务器排除在限制之外,如果这样,添加一个没有任何限制的队列给它(max-limit=0/0 表示没有限制),并把它移到列表的最前端。
queue simple> add name=Server target-addresses=192.168.0.1/32 \
\... interface=Local
queue simple> print
Flags: X - disabled, I - invalid, D - dynamic
0    name="Limit-Local" target-addresses=192.168.0.0/24 dst-address=0.0.0.0/0
      interface=Local parent=none priority=8 queue=default/default
      limit-at=0/0 max-limit=65536/131072 total-queue=default

1    name="Server" target-addresses=192.168.0.1/32 dst-address=0.0.0.0/0
      interface=Local parent=none priority=8 queue=default/default
      limit-at=0/0 max-limit=0/0 total-queue=default
queue simple> mo 1 0
queue simple> print
Flags: X - disabled, I - invalid, D - dynamic
0    name="Server" target-addresses=192.168.0.1/32 dst-address=0.0.0.0/0
      interface=Local parent=none priority=8 queue=default/default
      limit-at=0/0 max-limit=0/0 total-queue=default

1    name="Limit-Local" target-addresses=192.168.0.0/24 dst-address=0.0.0.0/0
      interface=Local parent=none priority=8 queue=default/default
      limit-at=0/0 max-limit=65536/131072 total-queue=default
queue simple>

使用Masquerading的queue tree(队列树?)例子:

前一个例子,我们为本地网络模拟一个下载128kbps和上传64kbps的流量。
在这个例子,我们将保证给本地网络设备256kbps下载(128kbps给服务器,64kbps给工作站,64kbps给笔记本)128kbps上传(分别给64/32/32)。
如果那里有空闲的带宽,就把它共享给每一个用户。在这个例子,如果我们关闭笔记本,服务器和工作站会共享它的64kbps下载和32kbps上传带宽。

使用masquerading,你用new-connection-mark标记外出连接,动作(action)是mark-connection,当这个完成时,你能用new-packet-mark标记所有数据包中那些属于这个连接的数据包,动作是mark-packet。

http://skong.net.cn/temp/image/r2.jpg

1.首先,标记服务器的下载和上传数据流。地一条规则我们将标记外出连接,第二条标记所有的数据包中,那些属于这个连接。

ip firewall mangle> add src-address=192.168.0.1/32 \
\... action=mark-connection new-connection-mark=server-con chain=prerouting
ip firewall mangle> add connection-mark=server-con \
\... action=mark-packet new-packet-mark=server chain=prerouting
ip firewall mangle> print
Flags: X - disabled, I - invalid, D - dynamic
0   chain=prerouting src-address=192.168.0.1 action=mark-connection
   new-connection-mark=server-con

1   chain=prerouting connection-mark=server-con action=mark-packet
   new-packet-mark=server
ip firewall mangle>

2.笔记本和工作站也一样:
ip firewall mangle> add src-address=192.168.0.2 \
\... action=mark-connection new-connection-mark=lap_works-con chain=prerouting
ip firewall mangle> add src-address=192.168.0.3 \
\... action=mark-connection new-connection-mark=lap_works-con chain=prerouting
ip firewall mangle> add connection-mark=lap_works-con \
\... action=mark-packet new-packet-mark=lap_work chain=prerouting
ip firewall mangle> print
Flags: X - disabled, I - invalid, D - dynamic
0   chain=prerouting src-address=192.168.0.1 action=mark-connection
   new-connection-mark=server-con

1   chain=prerouting connection-mark=server-con action=mark-packet
   new-packet-mark=server

2   chain=prerouting src-address=192.168.0.2 action=mark-connection
   new-connection-mark=lap_works-con

3   chain=prerouting src-address=192.168.0.3 action=mark-connection
   new-connection-mark=lap_works-con

4   chain=prerouting connection-mark=lap_works-con action=mark-packet
   new-packet-mark=lap_work
ip firewall mangle>

你可以看到,我们给笔记本和工作站的数据流同样的标记。


3.在 /queue tree里添加规则,限制服务器的下载荷上传。
queue tree> add name=Server-Download parent=Local \
\... limit-at=131072 packet-mark=server max-limit=262144
queue tree> add name=Server-Upload parent=Public \
\... limit-at=65536 packet-mark=server max-limit=131072
queue tree> print
Flags: X - disabled, I - invalid
0   name="Server-Download" parent=Local packet-mark=server limit-at=131072
   queue=default priority=8 max-limit=262144 burst-limit=0
   burst-threshold=0 burst-time=0s

1   name="Server-Upload" parent=Public packet-mark=server limit-at=65536
   queue=default priority=8 max-limit=131072 burst-limit=0
   burst-threshold=0 burst-time=0s
queue tree>

类似地分配流量给笔记本和工作站:
queue tree> add name=Laptop-Wkst-Down parent=Local \
\... packet-mark=lap_work limit-at=65535 max-limit=262144
queue tree> add name=Laptop-Wkst-Up parent=Public \
\... packet-mark=lap_work limit-at=32768 max-limit=131072
queue tree> print
Flags: X - disabled, I - invalid
0   name="Server-Download" parent=Local packet-mark=server limit-at=131072
   queue=default priority=8 max-limit=262144 burst-limit=0
   burst-threshold=0 burst-time=0s

1   name="Server-Upload" parent=Public packet-mark=server limit-at=65536
   queue=default priority=8 max-limit=131072 burst-limit=0
   burst-threshold=0 burst-time=0s

2   name="Laptop-Wkst-Down" parent=Local packet-mark=lap_work limit-at=65535
   queue=default priority=8 max-limit=262144 burst-limit=0
   burst-threshold=0 burst-time=0s

3   name="Laptop-Wkst-Up" parent=Public packet-mark=lap_work limit-at=32768
   queue=default priority=8 max-limit=131072 burst-limit=0
   burst-threshold=0 burst-time=0s
queue tree>

用户平分带宽例子(pcq?):

这个例子示范了如何将10mbps下载2mbps上传,均分给网络192.168.0.0/24中的活动的用户。
如果主机A下载2Mbps,主机B就只能获得8mbps,反之亦然。
有这样一种情况,他们都想获得最大带宽(10mbps),他们将各自获得5mbps,上传也一样。这个设置同样是用于更多用户的情形。
http://skong.net.cn/temp/image/r3.jpg

首先,所有来自本地网络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

bow 发表于 2006-1-15 13:33:26

2.9的流量控制在2.8上也通用的

爱好网络 发表于 2006-1-15 19:13:00

再来,
文中,第一个例子,示范了如何限制整个局域网的出口带宽,也说明了如何让某台设备不受这个限制。

第二个例子,示范了如何限制局域网内的具体设备的具体带宽,并且,当某一设备关闭后,其带宽将被其他活动的设备共享。

第三个例子,示范了如何让活动用户均分带宽。这个是不是常说的pcq限速?
注意,
/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
可以看出,是在forward链标记连接和数据包。为什么不是在prerouting链标记?很想知道,请大侠指点。

所创建的queue type ,pcq-download和pcq-upload里面的rate参数含义是分配比率,不用设置,默认平均分配。还有,queue tree add name=Download parent=Local max-limit=10240000
/queue tree add parent=Download queue=pcq-download packet-mark=users
这里的max-limit填你线路的最大带宽。upload也一样。
pcq再默认分配比率(rate)下,是不分老幼,一概平等的带宽分配。
这时个人的理解,请大家指正,说说自己的理解。

请教大家,queue tree中parent参数的含义,simple queue中Target address和dst address的含义,区别?
pcq中rate(比率)参数的用途。
bow斑竹,你用的是2.8?   2.9多了许多命令。

bow 发表于 2006-1-15 22:11:14

2.9和2.8在手册中这段用的最后一个例子不同 ,但我试验过在2.9和2.8上都可以实现的。
2.9和2.8改变了点界面但实质的东西没有变。queue tree这块基本没变。

lectureke 发表于 2006-1-16 01:35:50

这个真的不错,是我看到的关于限速说的最清楚的了,不过对于mangle中的一些概念我还是不是很清楚哦!
1、为什么要先做一个mark-connection再做一个mark-packet?直接mark-packet不行吗?
2、先做mark-routing,再根据mark-routing做mark-packet行吗?

ilovesc 发表于 2006-1-17 18:00:33

可以列入标准教材了.
不知道为什么以前的那个"Ros说明文档翻译计划"要取消?建议重新启动.

miximixi007 发表于 2006-1-23 11:09:56

学习

kkanlin 发表于 2006-2-7 20:32:37

太好了,,,也正在学习中....

王珏清 发表于 2006-2-8 20:41:15

我喜欢封端口和IP

woodboy 发表于 2006-2-15 10:07:27

楼主,第三个例子28的怎么整,能写详细点吗?

haifengcn 发表于 2006-2-16 11:24:37

xuexi

混乱系 发表于 2006-2-22 02:12:27

原帖由 lectureke 于 2006-1-16 01:35 发表
这个真的不错,是我看到的关于限速说的最清楚的了,不过对于mangle中的一些概念我还是不是很清楚哦!
1、为什么要先做一个mark-connection再做一个mark-packet?直接mark-packet不行吗?
2、先做mark-routing, ...
我也是不明白。。真晕

cpu2222 发表于 2006-2-26 15:38:08

回复 #12 混乱系 的帖子

很好,谢谢楼主

cracks 发表于 2006-3-3 13:12:44

http://219.147.65.2/

lemonl 发表于 2006-3-4 00:25:34

我觉得先标记连接,再标记数据包把上传和下载的数据包都能够正确完整的标记到需要的数据包,
如果只标记数据包,在public界面上,下载的数据包大概辨认不出来。
页: [1] 2
查看完整版本: 试译ros官网“带宽控制”资料片段