【问题标题】:How does bandwidth limiting (with, say, ipfw) work?带宽限制(例如,ipfw)如何工作?
【发布时间】:2015-06-26 03:23:34
【问题描述】:

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

【问题讨论】:

    标签: sockets network-programming ipfw


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 那么,在不丢包的情况下,不可能对传入流量进行带宽限制吗?假设我们使用 TCP,主机必须重新发送数据包,因为它没有收到 ACK?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    • 2011-04-26
    • 2023-03-28
    • 1970-01-01
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多