來源:互聯網
上載者:User
關鍵字
Linux
流量控制
高級篩檢程式
高級路由
就象在分類的佇列規定一段中解釋的,篩檢程式用與把資料包分類並放入相應的子佇列。 這些篩檢程式在分類的佇列規定內部被調用。
下面就是我們可用的分類器(部分):
fw
根據防火牆如何對這個資料包做標記進行判斷。 如果你不想學習tc的篩檢程式語法,這倒是一個捷徑。 細節請參見佇列那一章。
u32
根據資料包中的各個欄位進行判斷,如源IP位址等等。
route
根據資料包將被哪條路由進行路由來判斷。
rsvp, rsvp6
根據資料包的RSVP情況進行判斷。 只能用於你自己的網路,互聯網並不遵守RSVP。
tcindex
用於DSMARK佇列規定,參見相關章節。
通常來說,總有很多途徑可實現對資料包分類,最終取決於你喜歡使用哪種系統。
分類器一般都能接受幾個參數,為了方便我們列出來:
protocol
這個分類器所接受的協定。 一般來說你只會接受IP資料。 必要參數。
parent
這個分類器附帶在哪個控制碼上。 控制碼必須是一個已經存在的類。 必要參數。
prio
這個分類器的優先權值。 優先權值低的優先。
handle
對於不同篩檢程式,它的意義不同。
後面所有的節都假定你試圖對去往HostA的流量進行整形。 並且假定根類配置為1:,並且你希望把選中的資料包送給1:1類。
1. u32分類器
U32分類器是當前實現中最先進的篩檢程式。 全部基於雜湊表實現,所以當有很多篩檢程式的時候仍然能夠保持健壯。
U32篩檢程式最簡單的形式就是一系列記錄,每條記錄包含兩個部分:一個選擇器和一個動作。 下面要講的選擇器用來與IP包相匹配,一旦成功匹配就執行其指定的動作。 最簡單的動作就是把資料包發送到特定的類佇列。
用來配置篩檢程式的tc命令列由三部分組成:篩檢程式說明、選擇器和動作。 一個篩檢程式可以如下定義:
tc filter add dev IF [ protocol PROTO ]
[ (preference|priority) PRIO ]
[ parent CBQ ]
上面行中,protocol欄位描述了篩檢程式要匹配的協定。 我們將只討論IP協定的情況。 preference欄位(也可以用priority代替)設置該篩檢程式的優先權。 這非常重要,因為你可能有幾條擁有不同優先權的篩檢程式。 每個篩檢程式清單都按照輸入的順序被掃描一遍,然後優先權值低(更高的偏好值)的清單優先被處理。 「parent」欄位定義了篩檢程式所屬的CBQ的頂部(如1:0)。
上面描述的選項適用于所有篩檢程式,而不僅僅適用于U32。