Linux下的流量整形

5 投票
4 回答
4377 浏览
提问于 2025-04-15 14:58

我想知道在哪里可以学习如何在Linux系统下控制或查询网络接口。我希望能够获取特定应用的上传和下载速度,并且能够为某个特定的应用设置速度限制。

我特别想要一些信息,帮助我用Python编写一个流量控制的应用程序。

4 个回答

1

针对特定应用程序(这里以谷歌浏览器为例)进行带宽限制:

trickle -d 600 -u 200 google-chrome

单位是千比特(kbits)

对以太网设备进行总带宽限制:

sudo wondershaper eth0 600 200

单位同样是千比特。把 eth0 改成你的网络接口名称。这个方法使用了 tc tbf 和 htb...

想要掌握 Linux 的网络连接,你需要学习的命令和程序有:

ip
ifconfig
route
iptables
netstat
tc
wondershaper
trickle
iftop
iptraf-ng
wget 
curl
nslookup
dig

你需要参考的文档是:

https://www.lartc.org/howto/index.html

这份文档里有很好的示例。

还有一篇易读的博客页面是:

https://www.cnblogs.com/zengkefu/p/5635100.html

别忘了在实验中享受乐趣哦;)

6

其实,要根据每个应用来调整流量,使用Linux内核工具是挺困难的,除非这个应用使用的是特定的IP地址和/或端口,这样你才能找到匹配的地方。

如果是这种情况,你就需要了解一下 iptables,特别是fwmarks。你还需要了解一下 tc。这两个工具结合起来可以实现你想要的功能。你可以从 Linux高级路由与流量控制 开始学习。

如果你的应用没有使用可预测的端口或IP地址,那你就需要使用像 Trickle 这样的用户空间流量整形工具。这个工具会在应用和内核之间插入,负责在用户空间中调整该应用的流量。

我觉得这些工具没有直接的Python接口,但你可以很简单地用Python编写脚本,直接调用这些可执行文件。

6

你需要使用iproute2这个工具包,在里面你会用到tc这个命令。tc命令的格式看起来像这样:

tc class add dev eth2 parent 1: classid 1:1 htb rate 100Mbit ceil 100Mbit quantum 1600

这里有一个现成的Python流量控制应用,它使用了iproute2。

撰写回答