Posts Tagged 限速

锐捷NBR1200路由器限速命令

Posted by on 星期日, 17 10月, 2010

  在NBR1200路由器中,有两组限速命令:

  •  NBR1200(config)#ip rate-limit
  •  NBR1200(config)#ip bandwidth-auto-adjust

  分别对应Web界面中的固定限速(ip rate-limit)和弹性带宽(ip bandwidth-auto-adjust)。下面举例具体用法:

  •   固定限速

1. 单个IP限速

ip rate-limit ip <IP地址> inbound <上行带宽> outbound <下行带宽> interface <接口>

举例:
  将192.168.1.235在接口FastEthernet1/0上,上传限制为400K,下载1000K。

NBR1200(config)# ip rate-limit ip 192.168.1.235 inbound 400 outbound 1000 interface FastEthernet1/0

2. IP地址范围限速

ip rate-limit iprange <开始IP> <结束IP> inbound <上行带宽> outbound <下行带宽> interface <接口>

举例:
  将192.168.1.2到192.168.1.199所有机器在接口FastEthernet1/0上,上传限制为400K,下载800K

NBR1200(config)# ip rate-limit iprange 192.168.1.2 192.168.1.199 inbound 400 outbound 800 interface FastEthernet 1/0

  •   弹性带宽、游戏优先/P2P限制

1. 接口总带宽

  要使用弹性带宽、游戏优先、P2P限制等功能,必须先设定接口总带宽。

ip bandwidth-auto-adjust total-bandwidth inbound <上行总带宽> outbound <下行总带宽> interface <接口>

举例:
  将FastEthernet1/1口上行总带宽设为8M,下行总带宽设为640k

NBR1200(config)# ip bandwidth-auto-adjust total-bandwidth inbound 640 outbound 8000 interface FastEthernet 1/0

2. 自动计算

  当没有具体的IP限速时,应当启用该条规则对IP的带宽自动限制。

ip bandwidth-auto-adjust auto-config interface <接口>

举例:
  在接口FastEthernet1/1上启用带宽自动计算

NBR1200(config)# ip bandwidth-auto-adjust auto-config interface fastethernet1/1

3. 游戏优先/P2P限制

  在接口启用全局游戏优先/P2P限制。

ip bandwidth-auto-adjust base-on-application interface <接口>

举例:
  在接口FastEthernet1/1启用游戏优先/P2P限制策略

NBR1200(config)#ip bandwidth-auto-adjust base-on-application interface FastEthernet 1/1

4. 单个IP限速

  单个IP进行弹性限速,如果指定可选参数[application],同时将该规则适用游戏优先/P2P限制功能,即只对p2p、下载、在线视频等应用的限速,对游戏、web优先;如果省略[application]参数,则对IP不区分应用整体限速。

ip bandwidth-auto-adjust ip <IP地址> inbound minimum <上行带宽> outbound minimum <下行带宽> interface <接口> [application]

举例:
  对192.168.1.200在接口FastEthernet1/1上进行游戏优先/P2P限速,上传512K,下载1M

NBR1200(config)#ip bandwidth-auto-adjust ip 192.168.1.200 inbound minimum 512 outbound minimum 1024 interface FastEthernet 1/1 application

5. IP地址范围限速
  语法和参数基本与单个IP限速一直,只是一个参数由ip变为iprange。

ip bandwidth-auto-adjust iprange <开始IP> <结束IP> inbound minimum <上行带宽> outbound minimum <下行带宽> interface <接口> [application]

举例:
  将192.168.1.200到192.168.1.254的所有机器在接口FastEthernet1/1上进行不区分应用的标准弹性限速,上传512K,下载1M

NBR1200(config)#ip bandwidth-auto-adjust iprange 192.168.1.200 192.168.1.254 inbound minimum 512 outbound minimum 1024 interface FastEthernet 1/1

注意:
  这里的inbound和outbound是相对于路由器来说的;inbound为路由器入站方向,即网络内机器上传流量;outbound为路由器出站方向,即网络内机器的下行流量。
  这里的K一律指Kbps,即kilo bits per second(千比特每秒),与KBps(注意第二个B的大小写,小写一般指bit即比特,大写一般指byte即字节)Kilo Bytes per second(千字节每秒)相差8倍。
  固定限速(ip rate-limit)的优先级比动态限速(ip bandwidth-auto-adjust)优先级高,比如同时用ip rate-limit和ip bandwidth-auto-adjust对同一IP进行限速,那么生效的将是ip rate-limit。

用connection-bytes和connection-rate属性进行包标记的限速

Posted by on 星期六, 14 8月, 2010

  比传统的区分大小包要灵活、准确,浏览网页即使传输大包也会优先处理;下载的话如果是小包也会被限速。IE下载或迅雷下载完全不影响其他小带宽应用,如ping、web、游戏。


  用Mangle链表中的connection-bytes和connection-rate属性做包标记:


  需要分别对tcp和udp进行设置:


  connection-bytes属性是指:匹配指定流量的连接。注意是流量,不是带宽,比如说在192.168.1.1:1847->202.108.22.142:80这条连接上通过了100K的数据,则当connection-bytes=100000时,该连接将匹配该规则。


  connect-rate属性是指:连接的速度。比如192.168.1.1:1847->202.108.22.142:80这条连接进行通信的速率,比如说是60K。


  理解了这两个属性后,我们来看下面的脚本:


/ip firewall mangle
add action=mark-connection chain=prerouting comment="" connection-bytes=\
    500000-0 connection-rate=200k-100M disabled=no new-connection-mark=\
    con_heavy passthrough=yes protocol=tcp
#上面这段脚本,将连接流量在500K,并且连接速率在200K-100M之间的tcp连接标记出来,命名为:con_heavy 

add action=mark-connection chain=prerouting comment="" connection-bytes=\
    400000-0 connection-rate=100k-100M disabled=no new-connection-mark=\
    con_heavy passthrough=yes protocol=udp
#作用与上一段基本一致,只是协议改变为udp

add action=mark-packet chain=prerouting comment="" connection-mark=con_heavy \
    disabled=no dst-address-type=!local in-interface=LAN new-packet-mark=\
    pck_general_up passthrough=no
#将进入LAN口的数据,并且连接标记为con_heavy,同时目的地址不为ros接口IP的包标记为pck_general_up,标记之后数据包不继续向下走,将跳出prerouting链表

 add action=mark-packet chain=prerouting comment="" connection-mark=!con_heavy \
    disabled=no dst-address-type=!local in-interface=LAN new-packet-mark=\
    pck_small_up passthrough=no
#作用与上一段基本一致,只是将非con_heavy的连接标记为pck_small_up

 add action=mark-packet chain=postrouting comment="" connection-mark=con_heavy \
    disabled=no new-packet-mark=pck_general_down out-interface=LAN \
    passthrough=no src-address-type=!local
#将发送出LAN口的数据,连接标记为con_heavy,且源地址不为ros接口IP的数据包标记为pck_general_down,标记之后数据包不继续向下走,将跳出postrouting链表

 add action=mark-packet chain=postrouting comment="" connection-mark=\
    !con_heavy disabled=no new-packet-mark=pck_small_down out-interface=LAN \
    passthrough=no src-address-type=!local
#作用与上一段基本一致,只是将非con_heavy的连接标记为pck_small_down



  最后上个图:





个人研究成果,如有不足或错误之处,恳请原谅并欢迎指正,谢谢。


ros限速中burst参数的意义及应用

Posted by on 星期五, 9 7月, 2010

  当经过规则的流量,burst-time时间内的平均值小于burst-thershold时,流量的最大速率可以超过max-limit,达到burst-limit,如果burst-time时间内平均值大于burst-thershold,流量最大速度只能达到max-limit。

  如上例:

  如果客户机5秒内速率不超过3M时,它可用最大速率为4M;如果连续5秒内该机速率大于3M,那么5秒后它的最大可用速率为2M。

  burst在客户机上反应的表现为:开网页速度为4M,下载速度为2M。

PCQ限速,带宽平均使用

Posted by on 星期三, 9 6月, 2010

首先看Mangle脚本:


/ip firewall mangle
add action=mark-packet chain=postrouting comment="" disabled=no \
new-packet-mark=pck_small_down out-interface=LAN packet-size=1-512 \
passthrough=no

上面一行代码将在Mangle中添加一个mark-packet项目,用于把包大小为1-512的包标记为pck_small_down,在链表Postrouting于出接口LAN上,需要根据你的情况自行替换为你的内网端口。


add action=mark-packet chain=postrouting comment="" disabled=no \
new-packet-mark=pck_general_down out-interface=LAN packet-mark=\
!pck_small_down passthrough=no

上面一行代码则在Mangle中添加一个mark-packet项目,用于把除了pck_small_down以外的包标记为pck_general_down,同样在链表Postrouting于出接口LAN上,同样你需要根据你的情况替换这个接口。

上两行代码标记了下行方向所有数据,并且区分了小包和其他包,这样做的好处是不仅可以用PCQ均分带宽,而且利用queue tree的优先级还可以将小包优先,这样在带宽紧张的情况下,小包(例如ping)会得到一个比较低的延迟。
再说明一下为什么要在Postrouting链表上操作,因为PCQ中如果要均分带宽是需要根据dst.address来分类的,当然如果要实现内网带宽均分的话,dst.address应该是我们的内网地址,如192.168.0.0/24,这就说明,我们必须在nat以后才可以标记数据包,如果在Prerouting链表中标记数据包,dst.address就会是单一的WAN地址了,也就达不到均分的目的了。


add action=mark-packet chain=prerouting comment="" disabled=no in-interface=\
LAN new-packet-mark=pck_small_up packet-size=1-256 passthrough=no

上面一行代码在Prerouting链表于接口LAN标记了大小1-256的数据包。


add action=mark-packet chain=prerouting comment="" disabled=no in-interface=\
LAN new-packet-mark=pck_general_up packet-mark=!pck_small_up passthrough=\
no

上面一行代码在Prerouting链表于接口LAN标记了大小除了1-256的数据包。

上传是同样的道理,PCQ上传需要指定src.address,如果在nat以后的链表Postrouting,标记数据包,源地址会变成WAN地址,PCQ也失去了意义。
单击下载以上Mangle脚本

再来看看Queue Type脚本:


/queue type
add kind=pcq name=pcq_wan_down pcq-classifier=dst-address pcq-limit=50 \
pcq-rate=1000000 pcq-total-limit=2000
add kind=pcq name=pcq_wan_up pcq-classifier=src-address pcq-limit=50 \
pcq-rate=256000 pcq-total-limit=2000

Queue Type比较简单,添加了2个PCQ类型,pcq_wan_down和pcq_wan_up。他们最大的区别就是标记类不同,下行时候需要根据目的地址(dst.address)分类标记数据包;而上行需要根据源地址(src.address)分类标记数据包。
这里的pcq-rate相当于单机限速,比如说我的设置下行1Mbps,上行256Kbps。我的总带宽是2M,当一台机器下载的时候,下载速度最高100KBytes左右,两台机器下载的时候分别也平均在100KBytes左右,当4台机器一起下载的时候,平均每台机器50KBytes左右。
单击下载以上Queue Type脚本

然后是QueueTree脚本:


/queue tree
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \
max-limit=3512k name=WAN_DOWN packet-mark="" parent=LAN priority=8

在queue tree中添加一个WAN_DOWN项目,父点为LAN接口,最大速率3512Kbps,优先级8。注意parent节点,要与Mangle中mark-packet的Interface相同。


add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \
max-limit=3M name=wan_down_general packet-mark=pck_general_down parent=\
WAN_DOWN priority=8 queue=pcq_wan_down

在queue tree中添加一个wan_down_general项目,父节点为WAN_DOWN,最大速率为3Mbps,针对包标记pck_general_down限速,优先级8,队列类别pcq_wan_down。


add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=512k \
max-limit=2M name=wan_down_small packet-mark=pck_small_down parent=\
WAN_DOWN priority=2 queue=default-small

在queue tree中添加一个wan_down_small项目,父节点为WAN_DOWN,最大速率2Mbps,针对包标记pck_small_down限速,优先级2,队列类别default-small

上面代码完成了下行方向的HTB桶形限速,保证了大包的PCQ限速,同时保证了小包的快速通过。


add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \
max-limit=512k name=WAN_UP packet-mark="" parent=global-total priority=8

上面代码建立了名为WAN_UP的上行HTB,父节点为global-total,最大速率512Kbps,优先级为8。


add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \
max-limit=384k name=wan_up_general packet-mark=pck_general_up parent=\
WAN_UP priority=8 queue=pcq_wan_up

在queue tree中添加一个wan_up_general项目,针对pck_general_up限速,最大速率为384Kbps,父节点为WAN_UP,优先级为8,队列类型pcq_wan_up


add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=256k \
max-limit=512k name=wan_up_small packet-mark=pck_small_up parent=WAN_UP \
priority=2 queue=default-small

在queue tree中添加一个wan_up_small项目,针对pck_small_up,最大速率为256Kbps,父节点为WAN_UP,优先级为2,队列类型default-small。

至此上行HTB也设置完毕。
单击下载以上Queue Tree脚本

有疑难问题的留下联系方式我们共同研究。

ros中的pcq

Posted by on 星期日, 6 6月, 2010

通过观察发现,如果在postrouting链表中mark上传包,然后再queue tree中用pcq限速,不能达到预期的效果。

原因好像在postrouting链表中好像原地址已经nat过了,即源地址变成了WAN IP,难怪不pcq平均流量。

正在研究中,过一阵子放出更详细的配置和结果。

也请路过的高手不吝赐教,大家一起研究一下~~