使用 tc 进行流量控制

这个周末我遇到了一个有趣的难题。我需要将大约 2GB 的数据传输到一台远程机器。下载这点东西不算多,但在异步上传的家庭互联网连接上,上传速度慢得可怜,这可能会很痛苦!所以,我开始了传输,但你知道吗,进行到一半时,我的室友下班回来了。由于我的室友在旧金山市中心一家名为 Blinkx 的创业公司工作,他几乎每天 24 小时都在工作。我不想打扰他的工作,但也不想取消我的传输。黑客该怎么办呢 :-(

在感到沮丧了大约五分钟,并且不知道如何限制当前的流量连接后,我偶然发现了一些东西。tc!是的,tc 可以完成你需要的任何流量限制。太棒了。稍稍阅读了 man 手册,十分钟后,我现在可以愉快地传输数据,而不会占用我室友的所有上传带宽。以下是我如何将我的上传限制到大约 30KB/秒,从我们的上限大约 100KB/秒。

# tc qdisc add dev eth1 root handle 1: tbf rate 300kbit burst 300kbit latency 1

现在,这个命令非常粗糙。我实际上并没有费心去寻找最适合这项工作的选项,但话说回来,我也没有太多时间。上面的命令仅仅是使用令牌桶过滤器机制将我的无线设备的连接限制到大约 30KB/秒。

我强烈建议读者找到 tc 的更多高级用法,并编写一些漂亮的流量整形规则。如果你不需要这么多控制,那么你可以考虑其他有用的工具,例如 trickle/trickled(用户空间)和 wondershaper。祝你编程愉快 :-)