限制的不是带宽,而是 linux 中每秒的数据包数
Limit not bandwith, but packets per second in linux
子问题 #1
tc
及其所有 qdisc
是限制带宽的完美方法,但是 Linux 中有什么方法可以限制输出数据包的 pps 吗?
我为什么要问呢
通常您只考虑一种资源 - 带宽(每秒字节数),但是当某些应用程序开始生成大量小数据包时(例如对不同站点的 http GET 请求,其中包含相对较少的字节数) ) 然后可能 pps 将是资源。
子问题 #2
所以,我想将所有流量分成两组 - A 组具有小 pps 和带宽(高优先级),B 组具有大 pps 和低优先级。然后我想限制摘要(来自两个组)输出 pps,优先考虑来自组 A 的数据包。
P.S。当然,我想在这两个组之间共享公共频道。所以我不能只限制B,因为当A根本不使用通道时,B必须使用100%。
可能吗?怎么样?
好的,这是对这个问题的决定。
你可以这样使用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。
下一步是编写 user-space 应用程序,它将从队列中读取数据包并发出判决 - 接受或丢弃。
Here is 对如何构建此类应用程序的出色描述
并且整个应用程序的 here is implementation of this app. Main part 在 TScheduler::operator()
中
TVerdictAction Action;
if(QueueNum != TorClass) {
Action = TVerdictAction::Accept;
} else {
Action = CurrentRate > d->OverallRate ? TVerdictAction::Drop : TVerdictAction::Accept;
}
子问题 #1
tc
及其所有 qdisc
是限制带宽的完美方法,但是 Linux 中有什么方法可以限制输出数据包的 pps 吗?
我为什么要问呢
通常您只考虑一种资源 - 带宽(每秒字节数),但是当某些应用程序开始生成大量小数据包时(例如对不同站点的 http GET 请求,其中包含相对较少的字节数) ) 然后可能 pps 将是资源。
子问题 #2
所以,我想将所有流量分成两组 - A 组具有小 pps 和带宽(高优先级),B 组具有大 pps 和低优先级。然后我想限制摘要(来自两个组)输出 pps,优先考虑来自组 A 的数据包。
P.S。当然,我想在这两个组之间共享公共频道。所以我不能只限制B,因为当A根本不使用通道时,B必须使用100%。
可能吗?怎么样?
好的,这是对这个问题的决定。 你可以这样使用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。
下一步是编写 user-space 应用程序,它将从队列中读取数据包并发出判决 - 接受或丢弃。
Here is 对如何构建此类应用程序的出色描述
并且整个应用程序的 here is implementation of this app. Main part 在 TScheduler::operator()
TVerdictAction Action;
if(QueueNum != TorClass) {
Action = TVerdictAction::Accept;
} else {
Action = CurrentRate > d->OverallRate ? TVerdictAction::Drop : TVerdictAction::Accept;
}