基于本节的Linux 高级路由和流量控制 HOWTO,我无法tc
限制我的计算机的网络速度。
该路由器是摩托罗拉 SurfBoard 调制解调器,具有一些路由功能和防火墙。我要限制流量的机器是192.168.0.5,并且脚本也正在运行192.168.0.5。
这是我对上面链接上的命令的改编/etc/NetworkManager/dispatcher.d/
:
#!/bin/sh -eu
# clear any previous queuing disciplines (qdisc)
tc qdisc del dev wlan0 root 2>/dev/null ||:
# add a cbq qdisc; see `man tc-cbq' for details
if [ $2 = up ]; then
# set to a 3mbit interface for more precise calculations
tc qdisc add dev wlan0 root handle 1: cbq avpkt 1000 \
bandwidth 3mbit
# leave 30KB (240kbps) to other machines in the network
tc class add dev wlan0 parent 1: classid 1:1 cbq \
rate 2832kbit allot 1500 prio 5 bounded isolated
# redirect all traffic on 192.168.0.5 to the previous class
tc filter add dev wlan0 parent 1: protocol ip prio 16 \
u32 match ip dst 192.168.0.5 flowid 1:1
# change the hashing algorithm every 10s to avoid collisions
tc qdisc add dev wlan0 parent 1:1 sfq perturb 10
fi
问题是我尝试过设置2832kbit测试时使用非常小的值(例如16kbit),但我仍然可以高速浏览网页。问题不在于NetworkManager
,因为我正在手动测试脚本。
编辑:我发现通过更改dst 192.168.0.5
为src 192.168.0.5
,上传速度受到可靠限制,但我仍然没有弄清楚如何使下载速度发挥作用,这对我来说是最重要的。
答案1
您无法限制目标计算机上的传入流量,因为它已经到达。
为了正确地做你想做的事,你需要把它放到tc
你的网关上。这可能不适合您,但这是方法。
入口流量只能受到监管,因为它会丢弃超过速度限制的数据包。这是低效的,因为您现在需要更多带宽才能再次接收相同的数据包。这有点粗略地工作,因为 TCP 旨在通过在数据包丢失时减慢速度来处理流量丢失,但随着 TCP 扩展,您最终会不断变慢和变快,正如您最近的评论显示您正在经历的那样。
然而,有一种方法可以让你的系统成为自己的网关,只需将一个“中间功能块设备”进入您的网络路径。我建议阅读它,然后尝试进行入站速率限制。
看到这个关于 INGRESS / EGRESS 塑造 / 监管的“理论”讨论在 Gentoo 网站上。