子问题#1
tc
及其所有qdisc
是限制带宽的完美方式,但Linux中是否有任何方法可以限制输出数据包的pps?
为什么我问它。
通常你只考虑一个资源 - 带宽(每秒字节数),但是当某个应用程序开始生成大量的小数据包时(例如对不同站点的http GET请求,其中包含相对少量的byres)可能 pps 将是资源。
子问题#2
所以,我想将我的所有流量分成两组 - A组带有小pps和带宽(高优先级),B组带有大pps和低优先级。然后我想限制汇总(来自两个组)输出pps,优先考虑来自A组的数据包。
P.S。当然,我想分享这两个群体之间的共同渠道。所以我不能只限制B,因为当A根本不使用通道时,B必须使用100%。
有可能吗?怎么样?
答案 0 :(得分:0)
好的,这是决定这个问题。 您可以这样使用iptables
sudo iptables -I OUTPUT 1 -m owner --uid-owner debian-tor -j NFQUEUE --queue-num 1
sudo iptables -A OUTPUT -j NFQUEUE --queue-num 0
这会将所有tor流量重定向到队列号1,将所有其他流量重定向到队列号0。
下一步是编写用户空间应用程序,它将从队列中读出数据包并发出判决 - 接受或删除。
Here is关于如何构建此类应用的精彩描述
此应用的here is实施。整个应用的Main part位于TScheduler::operator()
TVerdictAction Action;
if(QueueNum != TorClass) {
Action = TVerdictAction::Accept;
} else {
Action = CurrentRate > d->OverallRate ? TVerdictAction::Drop : TVerdictAction::Accept;
}