Networking

使用 tc 減少到特定目標地址的頻寬

  • April 10, 2020

我正在嘗試使用 Dijkstra 程式碼找到兩個主機 H1 和 H2 之間的最短路徑。在該路徑上的一個開關中設置條件。條件是:如果數據包發送到 H2 則自動改變路徑。

我正在使用 Mininet,我想使用tc通過過濾進入交換機並發送到 H2 的數據包來減少出站頻寬,然後 Dijkstra 程式碼將更改路徑。

我想問,我可以使用**(tc qdisc)**來控制給定鏈路上出站頻寬的使用嗎?tc對物理鏈路或模擬鏈路有影響嗎?

是的,它tc就是為此而設計的。TC 適用於任何類型的介面(物理和軟體)。最簡單的隊列調度器是htb分層令牌桶(Hierarchical Token Bucket)。

典型的簡單配置:

  • htb 根隊列規則
  • 根類(100% 頻寬)
  • 預設葉類(80% 頻寬保證,最高 100% 頻寬)
  • 頻寬受限葉類 1(10% 頻寬保證)
  • 頻寬受限葉類 2(10% 頻寬保證,最高 100% 頻寬)
  • 每個葉類上的 sfq 隊列規則,以公平共享流之間的限制

子類的匯總頻寬不應超過父類的頻寬。否則調度器將不准確。

猜測介面頻寬為100Mbit/s。因此,您的配置命令將如下所示:

tc qdisc add dev enp4s0f0 root handle 1: htb default 10

tc class add dev enp4s0f0 parent 1:  classid 1:1  htb rate 100Mbit ceil 100Mbit quantum 15000
tc class add dev enp4s0f0 parent 1:1 classid 1:10 htb rate 80Mbit  ceil 100Mbit quantum 15000
tc class add dev enp4s0f0 parent 1:1 classid 1:11 htb rate 10Mbit  ceil 10Mbit  quantum 15000
tc class add dev enp4s0f0 parent 1:1 classid 1:12 htb rate 10Mbit  ceil 100Mbit quantum 15000

tc qdisc add dev enp4s0f0 parent 1:10 handle 10: sfq
tc qdisc add dev enp4s0f0 parent 1:11 handle 11: sfq
tc qdisc add dev enp4s0f0 parent 1:12 handle 12: sfq

配置好類的層次結構後,就應該配置分類。有許多類型的分類器,具有各種特徵和不同級別的使用者友好度。分類器根據配置的標準檢查數據包。如果數據包匹配,則將類分配給該數據包。

tc filter add dev <iface> parent 1: prio 1 protocol ip 800::1 u32 match dst ip 192.168.10.2/32 classid 1:11
tc filter add dev <iface> parent 1: prio 1 protocol ip 800::2 u32 match dst ip 192.168.10.0/24 classid 1:12

在這個小例子中,發送到主機的數據包192.168.10.2將被傳遞到 1:11 類,因此受到 10Mbit/s 的限制。從子網到其他地址的數據包192.168.10.0/24將被傳遞到類 1:12。所有其他數據包將被傳遞到預設類 (1:10)。

tc這是使用該工具的快速起點。

如果你有問題,問它。

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