Linux下的流量整形
我想知道在哪里可以学习如何在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。