altq队列中的带宽限制不准确

我正在设置一个环境,我有一台Linux服务器,一台OpenBSD路由器和一台Linux客户端,我希望能够限制客户端应该能够使用的带宽。

我一直在用“netcat”和“time”(使用时间来测量netcat传输的时间)执行这些testing,以及在尝试这些testing时发生了什么(使用TCP协议,队列由于某种原因不起作用与UDP)是队列是不完全的。

例如:设置10mbit的带宽限制时,客户端不能使用超过5Mbit,设置100mbit的限制时,客户端不能使用超过50mbit。

configuration看起来像(在例子中使用100mbit限制):

#queue rules altq on { $int_if, $ext_if } cbq bandwidth 100Mb queue { def, low } queue def bandwidth 0Mb cbq(default) queue low bandwidth 100Mb cbq(default) #Passrules test pass out quick from $int_if to $ext_if queue low pass in quick from $ext_if to $int_if queue low pass out quick from $ext_if to $int_if queue low pass in quick from $int_if to $ext_if queue low 

根据我的经验,altq工作得很好,你真的需要在你的限制队列中joinredrio或者ecn选项,否则当你接近饱和(物理或者队列虚拟)时,你会遇到一些不愉快的情况。 请参阅altq howto关于RED(随机早期检测)的部分了解更多信息。

另外,上面的代码片段有两个问题:

  1. 你有两个default队列:这是不允许的(事实上pf应该适合)。
  2. 你的一个队列没有带宽(0Mb)? – 这可能不是你想要的/意思…