Linux
TC可以通過IP頭的Qos欄位來限制頻寬嗎
我們正在開發客戶端/伺服器應用程序。我們的伺服器應用程序中有三種類型的網路數據:實時數據,如影片/音頻,關鍵數據,如數據庫數據和 BestEfforts 數據,如普通文件傳輸。
我們打算設置每個IP包的QOS欄位來表示該ip包屬於上述三種數據類型中的哪一種,然後使用TC為這三種數據設置不同的Maximum rate。
據我所知,設置 qos 欄位是可行的,但我想知道我們是否可以通過指定 qos 值(IP 標頭中 QOS 欄位的值)來限制 ip 數據包的速率。
TOS
我猜你的意思是IPv4 數據標頭中的8 位欄位。你讀過LARTC HOWTO嗎?這是您絕對需要閱讀的指南。簡而言之,您需要**1) 定義
QDISCs
和CLASSes
**在其中對流量進行分類、優先級和整形(出口流量只能整形!!!)。一般來說,任何需要發送的數據包都會被排入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
我故意使用 iptables
tos
模組向您展示如何匹配TOS
欄位的特定值並相應地標記它。有關此模組的更多資訊,請執行iptables -m tos --help