无法让 tc 限制网络流量

无法让 tc 限制网络流量

基于本节的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.5src 192.168.0.5,上传速度受到可靠限制,但我仍然没有弄清楚如何使下载速度发挥作用,这对我来说是最重要的。

答案1

您无法限制目标计算机上的传入流量,因为它已经到达。

为了正确地做你想做的事,你需要把它放到tc你的网关上。这可能不适合您,但这是方法。

入口流量只能受到监管,因为它会丢弃超过速度限制的数据包。这是低效的,因为您现在需要更多带宽才能再次接收相同的数据包。这有点粗略地工作,因为 TCP 旨在通过在数据包丢失时减慢速度来处理流量丢失,但随着 TCP 扩展,您最终会不断变慢和变快,正如您最近的评论显示您正在经历的那样。

然而,有一种方法可以让你的系统成为自己的网关,只需将一个“中间功能块设备”进入您的网络路径。我建议阅读它,然后尝试进行入站速率限制。

看到这个关于 INGRESS / EGRESS 塑造 / 监管的“理论”讨论在 Gentoo 网站上。

相关内容