【发布时间】:2015-06-26 03:23:34
【问题描述】:
我对制作带宽控制实用程序很感兴趣,我需要动态限制传出或入站流量。为此,我可以使用 ipfw 管道,但这会产生对 ipfw 的依赖。 像 ipfw 这样的程序如何在系统调用/套接字级别控制带宽?我的目标是实现类似的功能,为我的特定需求量身定制。
【问题讨论】:
标签: sockets network-programming ipfw
我对制作带宽控制实用程序很感兴趣,我需要动态限制传出或入站流量。为此,我可以使用 ipfw 管道,但这会产生对 ipfw 的依赖。 像 ipfw 这样的程序如何在系统调用/套接字级别控制带宽?我的目标是实现类似的功能,为我的特定需求量身定制。
【问题讨论】:
标签: sockets network-programming ipfw
所有带宽限制器的工作原理都很简单——过滤(丢弃)数据包。然而,实现要复杂得多,需要对 TCP/IP 堆栈以及过滤不同类型流量的后果有很好的了解。
带宽限制器以称为令牌桶的东西为模型。令牌(表示要发送或接收的数据)会定期添加到存储桶中。由于如果桶已满,桶的容量有限,因此新令牌将被丢弃(它们溢出)。此存储桶用于管理流量。如果桶中有足够的令牌,则令牌的数量会减少适当的数量(与数据包的大小成正比),然后发送或接收数据包。如果桶中没有足够的令牌,则丢弃数据包。这是一个基本解释,请在wiki 或其他资源上阅读更多内容。
流量管理有两种基本类型——policing和shaping。两者的基本区别在于整形器有一个队列或缓冲区,可以保存一定数量的数据。如果由于令牌数量少而无法立即发送数据包,则将数据包放置在此缓冲区中,并在有足够的令牌后发送。此技术通常用于传出流量,而监管用于传入流量。
在那之后你应该想知道更多关于不同的令牌桶机制,如何避免 TCP 流的全局同步,RED/WRED 对非 TCP 流量有什么影响,以及许多其他与队列和服务质量。换句话说,我认为满足依赖比实现所有这些更容易,所以我建议你使用已经工作的工具并在它们之上构建你需要的东西。
【讨论】: