Linux

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

  • September 26, 2013

我們正在開發客戶端/伺服器應用程序。我們的伺服器應用程序中有三種類型的網路數據:實時數據,如影片/音頻,關鍵數據,如數據庫數據和 BestEfforts 數據,如普通文件傳輸。

我們打算設置每個IP包的QOS欄位來表示該ip包屬於上述三種數據類型中的哪一種,然後使用TC為這三種數據設置不同的Maximum rate。

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

TOS我猜你的意思是IPv4 數據標頭中的8 位欄位。你讀過LARTC HOWTO嗎?這是您絕對需要閱讀的指南。簡而言之,您需要

**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

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