1

我对制作带宽控制实用程序很感兴趣,我需要动态限制传出或入站流量。为此,我可以使用 ipfw 管道,但这会产生对 ipfw 的依赖。像 ipfw 这样的程序如何在系统调用/套接字级别控制带宽?我的目标是实现类似的功能,为我的特定需求量身定制。

4

1 回答 1

1

所有带宽限制器的工作原理都很简单——过滤(丢弃)数据包。然而,实现要复杂得多,需要很好地了解 TCP/IP 堆栈以及过滤不同类型流量的后果。

带宽限制器以称为令牌桶的东西为模型。令牌(表示要发送或接收的数据)会定期添加到存储桶中。由于如果桶已满,桶的容量有限,因此新令牌将被丢弃(它们溢出)。此存储桶用于管理流量。如果桶中有足够的令牌,则令牌的数量会减少适当的数量(与数据包的大小成正比),然后发送或接收数据包。如果桶中没有足够的令牌,则丢弃数据包。这是一个基本解释,请在wiki或其他资源上阅读更多内容。

流量管理有两种基本类型——监管整形。两者的基本区别在于 shaper 有一个队列或缓冲区,可以保存一定数量的数据。如果由于令牌数量少而无法立即发送数据包,则将数据包放置在此缓冲区中,并在有足够的令牌后发送。此技术通常用于传出流量,而监管用于传入流量。

之后您应该想了解更多关于不同的令牌桶机制、如何避免 TCP 流的全局同步、RED/WRED 对非 TCP 流量的影响以及与队列和 QoS 相关的许多其他内容。换句话说,我认为满足依赖比实现所有这些更容易,所以我建议你使用已经工作的工具并在它们之上构建你需要的东西。

于 2015-04-21T20:01:16.893 回答