带宽管理脚本调用tc说明

带宽管理脚本调用tc说明

我在 Linux 中有一些脚本来管理互联网带宽,但我不明白它们的作用。

以下脚本的含义是什么:

tc qdisc add dev $IF root handle 1: htb default 256
tc class add dev $IF parent 1: classid 1:1 htb rate $max 
iptables -F
iptables -t nat -F
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
#iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to 192.168.0.1:4001
echo 1 > /proc/sys/net/ipv4/ip_forward

和:

tc class add dev $IF parent 1:1 classid 1:$(($n)) htb rate "$1"kbps ceil "$2"kbps 
tc filter add dev $IF protocol ip parent 1:0 prio 2 u32 match ip dst "$line"/32 flowid 1:$(($n))

#ack   
tc filter add dev $IF parent 1: protocol ip prio 1 u32 match ip dst "$line"/32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 1:$(($n))

和:

tc class add dev $IF parent 1:1 classid 1:256 htb rate 60kbps

答案1

HTB 是非守恒 qdisc。它限制了输出速度。如果排队到接口的数据多于 HTB 在给定限制下可以出列的数据,则数据包将被丢弃。

该脚本不完整,因此不清楚它的作用。

排队到该接口的流量必须分配给某个类别。 1:0 是 qdisc,1:1、1:2、... 1:256 是属于该 qdisc 的类。每个类都可以有自己的配置。

tc filter确定哪个类负责某个数据包。如果没有找到,则 qdisc 定义将 1:256 设为默认类,该类是在您的情况下静态配置的。其他的都是“动态”配置的(但是,这不是您所显示的代码的一部分)。

似乎有一个目标主机(单个 IP 地址)列表,它们都具有保证的带宽。如果数据包针对这些主机之一,则将其放入负责该主机的类中。除了目标 IP 之外,还有更多的条件,但如果不查的话我就不明白 u8 和 u16 过滤器。这可以过滤 TCP 与 UDP、它们的端口、TCP 标志、数据包大小等。

相关内容