以下情况:
该怎么办:
网关路由器是具有两个接口的Linux系统。 我发现我可以使用tc来configurationstream量整形。
我的命令:
sudo tc qdisc add dev eth0 handle 1: root tbf rate 300000 burst 500000 latency 1ms
iperf的速度testing给了我265千比特/秒的结果。
问:如何设置正确的tc规则来限制每个客户端的stream量和优先级TCP ACK?
会有这么多要求妥善回答,以及这么多可能的暗示,我只是做一些假设,并提出一个解决scheme,你可以稍后修改。
您可以使用TCP标志和conntrack(在Linux内核中的连接机器)来查找哪些连接是B到A的TCP连接。 然后,您可以使用CONNMARK目标在连接机器上标记它们。 通过这种方式,使用-j CONNMARK --restore-mark目标,当此连接中的数据包在A到B的方向上时,它将被标记为100。
TC方面,我使用htb作为一个有类的QDISC。 如果stream量过大,HTB类将丢弃数据包。 fq_codel被用作队列。 fq_codel确实在每个类中组织队列。
根htb qdisc发送没有在类1:1000中标记的数据包。 标记的包将以1:100进行。 tc filter用于识别标记的100个数据包,并将它们发送到1:100类。
tc class用于设置限制带宽。
以下代码假设您的最大带宽是1Mb / s,您的networkingB接口是eth0,您的Anetworking是eth1,而您的层是以太网。
# Spread connmark to mark iptables -t mangle -A POSTROUTING -o eth0 -j CONNMARK --restore-mark # New TCP connections from B to A : connmark 100 iptables -t mangle -A POSTROUTING -o eth1 -p tcp --syn -m state --state NEW -j CONNMARK --set-mark 100 # Interface : eth0, qdisc : htb, default leaf : 1000 tc qdisc add dev eth0 root handle 1:0 htb default 1000 # Interface eth0, parent branch node : 1:0, branch id : 1:10 tc class add dev eth0 parent 1:0 classid 1:10 htb rate 1000kbit ceil 1000kbit # CLASS - B to A TCP branch tc class add dev eth0 parent 1:10 classid 1:100 htb rate 700kbit ceil 1000kbit burst 5k prio 0 linklayer ethernet # QDISC - Queue tc qdisc add dev eth0 parent 1:100 handle 110: fq_codel # FILTER - Filter tc filter add dev eth0 parent 1:0 protocol ip prio 0 handle 100 fw flowid 1:100 # CLASS - Default branch tc class add dev eth0 parent 1:10 classid 1:200 htb rate 300kbit ceil 500kbit burst 5k prio 7 linklayer ethernet # QDISC - default branch queue tc qdisc add dev eth0 parent 1:1000 handle 1010: fq_codel
我可能不像B想要的那么清楚,问我任何你不明白的事情。