QOS-配置擁塞避免機制
2018年7月7日
20:29
- 尾丟棄及其導致的問題:

- 隊列滿時路由器進行尾丟棄,即新到的所有數據包都全部丟棄
- 丟棄的結果造成高延遲、高抖動、喪失服務保證、TCP全局同步、TCP餓死等問題,從而導致應用超時、數據重傳和實時業務不可用等一系列問題
TCP全局同步:
- 沒有差別的丟棄會造成所有TCP流的報文幾乎在同一時刻丟棄,TCP又幾乎在同一時刻重傳。
- TCP窗口會在幾乎同一時刻縮小,然后又幾乎同一時刻增大
- 這將造成所有TCP連接的流量以相同的“頻率”持續震盪。TCP全局同步的結果是TCP傳輸效率急劇下降,並且帶寬的平均利用率大大降低。
解決方法:
- 增加隊列長度可以減少丟棄,但無法從根本上解決問題
- 隊列長度受限於資源,不能無限制增加
- 增加隊列長度也增加了報文的平均延遲和抖動
- 在尾丟棄發生前,使不同TCP連接的報文在不同時刻被丟棄,則各個TCP連接的流量震盪就不會同步。
RED介紹:

- RED(隨機早期檢測)可以有效防止TCP全局同步。其做法是在隊列滿之前就對已入隊的報文進行隨機丟棄
- RED的特點在於“早期”和“隨機”,這使得不同的流量在不同的時刻以“無規律”的方式丟棄,從而有效避免了所有的TCP連接發生同步震盪。

- Low-Limit:最低丟棄門限,平均隊列長度超過門限時,RED開始丟棄報文,值越低,隊列越早開始丟棄報文
- High-Limit:最高丟棄門限,平均隊列長度超過此門限時,RED將丟棄所有到來的報文。
- Pmax:最大丟棄概率,即RED丟棄報文條件下報文被丟棄的最大概率,這個值通常不為100%。
- 當前平均隊列長度小於Low-Limit時,不丟棄報文
- 當前平均隊列長度超過High-Limit時,丟棄所有到來的報文
- 當前平均隊列長度在Low-Limit和High-Limit之間時,開始隨機丟棄到來的報文。
WRED的原理:
引入:RED很好地解決了TCP全局同步和“餓死”等問題,但由於不能感知業務類型,對報文的丟棄不分輕重穩急,因此並沒有解決重要和緊急報文被丟棄的問題。
概念:WRED(加權隨機早期檢測)它允許不同優先級的報文配置不同的RED參數,從而保證了不同重要程度的報文獲得不同的服務,可以DSCP和IP Precedence參數。

- WRED可以對每個優先級分別設定最低丟棄門限、最高丟棄門限和最大丟棄概率。
- 最低丟棄門限越小意味着該隊列的報文越早被丟棄,在其他條件相同時總體被丟棄的報文就越多。

- 對AF類型的報文,每一隊報文有三個丟棄優先級,可以分別設定其對應不同的底限,從而體現出在丟包概率上的差異。
- EF類型的報文應該保證其具有最小的丟包概率和區間
WRED配置:
基於接口的WRED配置命令:
在接口上使能WRED:

配置計算平均隊列長度的指數:

配置各優先級的對應參數:

基於隊列的WRED表配置WRED表:
在系統視圖下配置WRED表:

配置計算平均隊列長度的指數:

配置WRED表的其他參數:

在接口或端口組視圖下應用WRED表:

其他類型WRED表的配置命令:
進入WRED表視圖:

配置計算平均隊列長度的指數:

配置WRED表的其他參數:

在接口或端口組視圖下應用WRED表:

WRED顯示和維護命令:

顯示WRED表:

Weighting-constant:(1~16默認為9)
- 該指數為權重因子,表征了平均隊列長度對實際隊列度變化的敏感程度
- 較大的n值將使平均隊列長度在當前隊列長度變化時具有較大的“慣性”
Discard-probability:
- 丟棄概率分母,用於設定平均隊列長度接近高限時的最大丟包概率
- 值大意味着丟包率小
