15.9. 限制单个主机或网络掩码的速率

虽然在其他地方和我们的手册页中对此有非常详细的描述,但这个问题经常被问到,幸运的是,有一个简单的答案,不需要完全理解流量控制。

这个三行脚本就能解决问题

	  tc qdisc add dev $DEV root handle 1: cbq avpkt 1000 bandwidth 10mbit 

	  tc class add dev $DEV parent 1: classid 1:1 cbq rate 512kbit \
	  allot 1500 prio 5 bounded isolated 

	  tc filter add dev $DEV parent 1: protocol ip prio 16 u32 \
	  match ip dst 195.96.96.97 flowid 1:1
	

第一行在你的接口上安装一个基于类的队列,并告诉内核,为了计算,可以假定它是一个 10mbit 的接口。如果你弄错了这一点,不会造成实际的危害。但是,正确设置它会使一切更加精确。

第二行创建一个 512kbit 的类,并带有一些合理的默认值。有关详细信息,请参阅 cbq 手册页和第 9 章

最后一行告诉哪些流量应该进入整形类。未被此规则匹配的流量不会被整形。要进行更复杂的匹配(子网、源端口、目标端口),请参阅第 9.6.2 节

如果你更改了任何内容并想要重新加载脚本,请执行 'tc qdisc del dev $DEV root' 以清理你现有的配置。

通过添加最后一行可选的 'tc qdisc add dev $DEV parent 1:1 sfq perturb 10',可以进一步改进该脚本。有关其作用的详细信息,请参阅第 9.2.3 节