自动限制造成大量流量的用户的网络带宽

自动限制造成大量流量的用户的网络带宽

是否有人知道基于 FreeBSD、Linux 或 Windows 的产品可以自动降低在最后一分钟造成大量网络流量的用户的网络数据包的优先级?(FreeBSD 的标准 pf 和 A​​LTQ 机制无法做到这一点。)

我是不是谈论为某些协议或端口号定义数据包优先级;我想根据用户的实际带宽使用情况动态降低优先级。

答案1

这些 Windows 解决方案非常接近您的需求:带宽分配器带宽管理器

如果我使用 Linux,我会用它tc来操纵峰值上限和 SNMP 来计算交换机端口上传输的 GB 数,以便惩罚重度用户(使用数据包优先级或降低上限)。

答案2

在某种程度上,您可以使用 ALTQ 来实现这一点。使用 ALTQ 可以做的是,在使用 HFSC 时,在特定时间后降低特定管道的带宽。这是否真正满足您的需要在很大程度上取决于协议。

了解有关 PF 和 HFSC 的详细信息这里您将看到选项 7 的实现。它不是“一段时间后降低优先级”,而是“最初授予更多带宽”。这可以产生相同的预期最终结果。

答案3

我编写了一个脚本来为 Linux 设置 HFSC + SFQ(使用 tc);HFSC 应该可以满足您的要求,而 SFQ 则可确保批量流之间的公平性。结果对我来说效果很好,即使面对多个批量上传或下载,也能实现低延迟。

脚本如下:https://gist.github.com/939373

答案4

我不是 PF/ALTQ 专家,但我知道 IPFW/DummyNet,它基本上可以实现你所追求的目标,即根据速率使用情况安排优先级。

一个非常简单的例子(因为我不知道你的路由器是如何设置的):

ipfw pipe 1 bw 300Kbit/s
ipfw sched 1 config pipe 1 mask src-ip 0xffffffff
ipfw queue 1 config sched 1
ipfw add 10 queue 1 ip from 192.168.1.0/24 to any

我不建议不加改变地使用这些规则......

它们只是接收来自 192.168.1.0 的所有流量,并通过队列 1 运行。
队列 1 与计划 1 相关联,
计划 1 使用 FWQ+ 分配带宽(当可用带宽不足时),基于最少使用率获得最高优先级。流量按源 IP 地址分组(我假设您希望来自特定 IP 的所有流量都得到相同处理)。
计划受管道约束,管道告诉它有 300Kbps 可供使用(否则它会假设它具有以太网接口的整个速度,而您的互联网连接可能没有那么快)。您可以将 300Kbps 更改为您的实际连接速度。

简单解释一下它的作用:这将构建一个数据包队列,默认情况下深度为 50 个数据包。假设您的网络上有两个用户,一个正在通过连接使用 BitTorrenting 文件,另一个只是在查看电子邮件;两者都不会以任何方式限制他们的使用。BitTorrent 客户端发送的 IP 将生成足够的流量来填满队列并使 Internet 连接饱和。当查看电子邮件的人发送某些内容时,它将被放在队列的第一位(因此将尽快发送出去),因为他们没有发送数据。如果情况是两个 BT 客户端,他们每个人都会获得一半的连接,因为他们的队列都会一直处于饱和状态。

DummyNet 允许使用正确的选项进行非常复杂的流量整形,您只需非常具体地说明要完成的任务即可。另外请记住,路由器只能控制其发送的内容,而无法控制接收的内容(因为这由发送者控制)。想象一下,如果像您的邮箱一样,邮递员决定您收到的内容,您决定通过它发送的内容。

相关内容