我对制作带宽控制实用程序很感兴趣,我需要动态限制传出或入站流量。为此,我可以使用ipfw管道,但这会产生对ipfw的依赖。 ipfw等程序如何在系统调用/套接字级别控制带宽?我的目标是实现类似的功能,为我的特定需求量身定制。
答案 0 :(得分:1)
所有带宽限制器都基于一个简单的原则 - 通过过滤(丢弃)数据包。然而,实现要复杂得多,需要熟悉TCP / IP堆栈以及过滤不同类型流量的后果。
带宽限制器以称为令牌桶的方式建模。令牌(代表要发送或接收的数据)以规则的时间间隔添加到桶中。由于如果存储桶已满,存储桶的容量有限,则会丢弃新的令牌(它们会溢出)。此存储桶用于管理流量。如果存储桶中有足够的令牌,则令牌的数量减少适当的数量(与数据包的大小成比例)并且发送或接收数据包。如果存储桶中没有足够的令牌,则丢弃该数据包。这是一个基本的解释,请阅读wiki或其他一些资源。
流量管理有两种基本类型 - 策略和整形。两者之间的基本区别在于整形器具有可以容纳一定量数据的队列或缓冲区。如果由于令牌数量较少而无法立即发送数据包,则将数据包放入此缓冲区并在有足够令牌后发送。此策略通常用于传出流量,而策略用于传入流量。
之后你应该想了解更多关于不同令牌桶机制,如何避免TCP流的全局同步,RED / WRED对非TCP流量的影响,以及链接到队列的许多其他东西服务质量。换句话说,我认为满足依赖性比实现所有这些更容易,所以我建议你使用已经工作的工具,并在它们之上构建你需要的东西。