TC可以透過IP頭的Qos欄位來限制頻寬嗎

TC可以透過IP頭的Qos欄位來限制頻寬嗎

我們正在開發客戶端/伺服器應用程式。我們的伺服器應用程式中存在三種類型的網路資料:即時資料(例如視訊/音訊資料)、關鍵資料(例如資料庫資料)和 BestEfforts 資料(例如普通檔案傳輸資料)。

我們計劃設定每個IP封包的QOS欄位來指示該ip封包屬於上述三種資料類型中的哪一種,然後使用TC為這三種資料類型設定不同的Maximum rates。

據我所知設定qos欄位是可行的,但我想知道我們是否可以透過指定qos值(IP頭中QOS欄位的值)來限制ip封包的速率。

答案1

TOS我猜你的意思是IPv4 封包標頭中的8 位元欄位。你讀過嗎拉特克指南?這是您絕對需要閱讀的指南。簡而言之,您需要

1) 定義QDISCsCLASSes其中流量被分類、優先順序和整形(只能調整出口流量!)。一般來說,任何需要發送的資料包都會排隊到QDISC網路介面。

CEIL=10
tc qdisc add dev eth0 root handle 1: htb default 15
tc class add dev eth0 parent 1: classid 1:1 htb rate ${CEIL}mbit ceil ${CEIL}mbit
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 4mbit ceil ${CEIL}mbit prio 0
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 1mbit ceil ${CEIL}mbit prio 1
tc class add dev eth0 parent 1:1 classid 1:12 htb rate 6mbit ceil ${CEIL}mbit prio 2
tc qdisc add dev eth0 parent 1:11 handle 110: sfq perturb 10
tc qdisc add dev eth0 parent 1:12 handle 120: sfq perturb 10

prio首先嘗試具有較低字段的類別。因此,1:10 類別可能專用於需要例如最小延遲的資料包。 1:11 和 1:12 等級附加了SFQ排隊規則,以確保更公平的頻寬共用。

2) 定義過濾器將資料包放入右側隊列CLASS

tc filter add dev eth0 parent 1:0 protocol ip prio 1 handle 10 fw classid 1:10
tc filter add dev eth0 parent 1:0 protocol ip prio 2 handle 11 fw classid 1:11
tc filter add dev eth0 parent 1:0 protocol ip prio 3 handle 12 fw classid 1:12

這只是表示帶有標記 10 的資料包屬於類別 10,依此類推。

3)定義iptables規則標記資料包以使其向右排隊CLASS

iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j MARK --set-mark 0x10
iptables -t mangle -A PREROUTING -m tos --tos Minimize-Cost -j MARK --set-mark 0x11
iptables -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j MARK --set-mark 0x12

我故意使用 iptablestos模組來向您展示如何匹配TOS字段的特定值並相應地對其進行標記。有關此模組的更多信息,請運行

iptables -m tos --help

相關內容