Traffic-Shaping

同時實現HTB、NetEM、TBF流量控制

  • March 22, 2014

我正在開發一個 bash 實用程序,它將使用 tc Linux 命令行實用程序的多個方面來模擬各種網路條件。我已經成功建構了幾個 qdisc 層次結構,一個用於 HTB 頻寬控制、NetEM 延遲和數據包操作以及 TBF 速率控制,以及用於 HTB-NetEM 和 TBF-NetEM 的組合處理程序我正在努力將這三個組合成一個單一的結構,適用於我需要在一個連接上控制所有這些因素的情況。這是我到目前為止所擁有的:

 sudo tc qdisc add dev $interface root handle 1:0 htb

 sudo tc class add dev $interface parent 1:0 classid 1:1 htb  #htb args

 sudo tc qdisc add dev $interface parent 1:1 handle 10:0 tbf  #tbf args

 sudo tc qdisc add dev $interface parent 10:1 handle 101:0 netem  #netem args

由於我的範圍較小,我知道問題不在於輸入的語法,而可能在於我的 tc qdiscs 和類的結構。當我嘗試在我的網橋的兩個乙太網埠中執行這些命令以及速率和頻寬整形參數(分別為 10 和 15 Mbit/s)時,在 TCP 或 UDP 中顯示 iperf 測試的頻寬沒有變化。任何意見,將不勝感激。

這是我的其他工作複合結構,以防它們可能有所幫助:

HTB 和 NetEM:

 sudo tc qdisc add dev $interface root handle 1: htb

 sudo tc class add dev $interface parent 1:0 classid 1:1 htb  #htb args

 sudo tc qdisc add dev $interface parent 1:1 handle 10:0 netem  #netem args

TBF 和 NetEM:

 sudo tc qdisc add dev $interface root handle 1:0 tbf  #tbf args

 sudo tc qdisc add dev $interface parent 1:1 handle 10:0 netem  #netem args

您想要的不是 HTB/TBF,而是 HFSC。

http://man7.org/linux/man-pages/man7/tc-hfsc.7.html

您可以將 netem 附加到葉類。

這是一個範例腳本,可幫助您入門..

#!/bin/bash
tc qdisc add dev veth1 parent root handle 1: hfsc default 11
tc class add dev veth1 parent 1: classid 1:1 hfsc sc rate 100mbit ul rate 100mbit
tc class add dev veth1 parent 1:1 classid 1:11 hfsc sc rate 50mbit
tc class add dev veth1 parent 1:1 classid 1:12 hfsc sc umax 1500 dmax 50ms rate 10mbit ul rate 10mbit
tc qdisc add dev veth1 parent 1:12 handle 12 netem delay 150ms
tc filter add dev veth1 parent 1: protocol ip u32 match ip sport 22 0xffff flowid 1:12

這將創建一個 100mbit 類,其中 50mbit 屬於預設類(但可以突發到 100mbit),而另一個類允許實時要求,因此 1500 字節數據包必須在 50ms 內離開隊列,該類的最大速率為 10mbit每時每刻。

最後,我們在該類上添加了一個葉子 qdisc,它實際上將離開隊列的數據包延遲了 150 毫秒。

進入實時類的流量是根據它具有源埠 22 屬性(因此所有 ssh 流量)來選擇的。

引用自:https://serverfault.com/questions/583788