stream量整形使用tc

我有一个1.5 Mbit / s的链接,我想与150个用户分享。

我的设置如下:

具有3个NIC的Linux盒eth0 – 公共IP eth1 – 子网A – 50个用户(静态ips)eth2 – 子网B – 100个用户(通过dhcp)

我使用squid作为端口3128上的透明代理。dhcp服务器使用端口67和68。

我正在创build,但我认为数据包不会排到正确的队列

#!/bin/bash DEV=eth0 RATE_MAIN=2048kbit CEIL_MAIN=2048kbit BURST=1b CBURST=1b RATE_DEFAULT=1024kbit CEIL_DEFAULT=$CEIL_MAIN PRIO_DEFAULT=3 RATE_P2P=1024Kbit CEIL_P2P=$CEIL_MAIN PRIO_P2P=4 RATE_IND=32kbit CEIL_IND=$CEIL_DEFAULT tc qdisc del dev $DEV root tc qdisc add dev $DEV root handle 1: htb default 30 tc class add dev $DEV parent 1: classid 1:1 htb rate $RATE_MAIN ceil $CEIL_MAIN tc class add dev $DEV parent 1:1 classid 1:10 htb rate $RATE_DEFAULT ceil $CEIL_MAIN burst $BURST cburst $CBURST prio $PRIO_WEB ## some other sub class for p2p other traffic tc class add dev $DEV parent 1:1 classid 1:20 htb rate $RATE_P2P ceil $CEIL_P2P burst $BURST cburst $CBURST prio $PRIO_P2P $IPS_NET1=50 $IPS_NET2=100 let $IPS=$IPS_NET1+$IPS_NET2 for ((i=1; i<= $IPS; i++)) do let CLASSID=($i+100) let HANDLE=($i+100) tc class add dev $DEV parent 1:10 classid 1:$CLASSID htb rate $RATE_IND ceil $CEIL_IND tc qdisc add dev $DEV parent 1:$CLASSID handle $HANDLE: sfq perturb 10 done ## Generate IP addresses ## IP_ADDRESSES="" # Subnet A BASE_IP=10.10.10. for ((i=2; i<=$IPS_NET1+1; i++)) do TEMP="$BASE_IP$i" IP=ADDRESSES="$IP_ADDRESSES $TEMP" done # Subnet B BASE_IP=192.168.0. for ((i=2; i<=$IPS_NET2+1; i++)) do TEMP="$BASE_IP$i" IP_ADDRESSES="$IP_ADDRESSES $TEMP" done ## FILTERS ## j=1 U32="tc filter add dev $DEV protocol ip parent 1:0 prio $PRIO_DEFAULT u32" for NET in $IP_ADDRESSES; do let CLASSID=($j+100) $U32_DEFAULT match ip src $NET/32 flowid 1:$CLASSID $U32_DEFAULT match ip dst $NET/32 flowid 1:$CLASSID let j=j+1 done 

你们能帮我弄清楚它有什么问题吗?

基本上我想要我的课程

1:1(1.5 Mbit)1:10(1024 Kbit)1:20(1024 Kbit)(200 ips每个32 kbit)

我仍然进入stream量塑造自己,发现HTB Linuxqueuing学科手册 – 用户指导一个伟大的阅读。 它的例子几乎完全描述你在做什么。

看起来您正在尝试为每个IP地址创build一个类,通常情况下还没有完成,特别是当您拥有如此less量的带宽时。

我会尝试像wondershaper第一次。

但有150个用户的1.5 Mbit / s? 这很可能只是不会工作。 你还没有说这些用户将会做什么,我希望他们已经locking了只允许运行内部网应用程序的机器。

如果你的链路只有1.5MBit / s,为什么你有一个2048kbit(超过2MBit / s)的RATE_MAIN? 如果你对tc的绝对最大带宽是什么,它将永远无法pipe理带宽,甚至接近你的configuration。

另外请注意,通常1.5 MBit / s是1500 kbit / s和1500000 bit / s。 但是,在1 mbit等于1024 kbit,等于1048576 bit / s。

如果您的链接是1.5 MBit / s,那么您的理论最大值是187500 bps( tc bps表示每秒BYTES ,而不是每秒位数),并且要进行有效的stream量过滤,您通常需要减less一些现实百分比。 如果不涉及额外的协议开销(TCP / IP除外,但已经由tc自动计算),则可能需要90%。 如果你有一个DSL线路(也许与SNAP + LLC + PPPoE + AAL5 + ATM),你最好只采取80%的。

最后但并非最不重要的一点是,您要为每个用户提供一个32 kbit(tc为32 * 1024 kbit / s)的类。

 150 * 32 = 4800 

你知道这是通过你的线速度,是吗?

如果你期望HTB能够正常工作,并且大多数人希望它能够正常工作,那么所有的孩子class级费率和上限的总和不得超过其父class级的费率和上限。 而你是这样的(1024是你的父类的价值)。