Queueing機制的比較
參考資料:BDCOM QoS技术
依照我們常見的Queueing(佇列)技術,我們來一一介紹並且比較它們之間的差異性:
1. FIFO(Fist-In/Fist-Out Queue)
它不對Packet進行分類,當封包進入interface的速度大於interface的傳送速度時,FIFO按照封包到達interface的先後順序讓封包進入佇列,同時,在佇列的出口讓封包按照進入佇列的順序離開佇列。
2. PQ(Priority Queue)
將所有的Packet依據預先配置分成最多四類(High/Medium/Normal/Low),按照FIFO的方式分別進入四個優先等級不同的佇列。在封包離開佇列時,高優先等級的的佇列相對於較低優先等級的佇列具有絕對的優先權,等到高優先等級的佇列封包傳送完畢之後,較低優先等級的佇列才可以傳送封包出去,而且較低優先等級的封包在發生擁塞時會被較高優先等級的封包搶佔資源。因此採用這種佇列機制可以保證在網路發生擁塞的情況下,重要服務(設定成高優先等級)的數據傳輸可以得到絕對的優先傳送。但是如果較高優先等級的封包傳送速度總是大於interface的速度時,會使得較低優先等級的封包始終得不到發送的機會。
PQ是一種沒有量化的QoS/DiffServ服務,只定義了預先規定的高優先等級封包擁有優先轉發的權利,甚至有可能會導致較低優先等級的封包永遠沒有機會傳送出去。
3. CQ(Custom Queue)
根據設置將所有封包分成最多16類(Queue 1~16),然後按照FIFO的方式分別進入1個系統佇列(System Queue, Queue 0)和16個用戶佇列(Custom Queue, Queue 1~16)。在封包離開佇列的調度上,系統佇列具有絕對的優先權,系統總是先處理完該佇列後再處理用戶佇列(CQ);16個用戶佇列佔用出口頻寬的比例可以調整,CQ按照定義的比例使得各個佇列之間在佔用的interface頻寬上滿足管理者預先設置的比例關係。當擁塞發生時,CQ可以根據比例保持不同服務獲得相對應的頻寬使用,進而保證重要服務能夠獲得較多的頻寬,又不至於使得非重要服務無法得到頻寬(避免類似使用PQ時可能發生的問題)。
CQ是為了避免PQ在擁塞時,所有較低優先等級的流量資料都無法傳送的問題而發展出來的。
4. WFQ(Weighted Fair Queue)
對於進入路由器interface的封包按照資料流進行分類(相同來源地IP Address,目的地IP Address,來源地Port Number,目的地Port Number,Protocol Number,ToS數值相同的封包屬於同一個資料流),每一個資料流被分配到一個佇列。在離開佇列調度的時候,WFQ根據封包資料流的優先等級(Precedence)來分配每個資料流應該佔用的頻寬。優先等級(Precedence)數值愈小,所得到的頻寬愈少;優先等級(Precedence)數值愈大,所得到的頻寬愈多。在擁塞發生時,它能保證任何流量的資料流(服務),都能公平地得到一定的頻寬使用量,減少這個網路的延遲,並且當資料流(服務數量)的數目減少時,能自動增加現有資料流可佔用的頻寬。也就是說剩下仍在活動狀態的資料流會根據各自的優先權比例瓜分空出來的頻寬資源。
路由器的interface中同時存在8個資料流Sn(n=1~8),這些資料流的優先權Pn(n=1~8)分別為0、1、2、3、4、5、6、7,那麼第n個資料流所佔總頻寬的比重為:(Pn+1)/∑(Pn+1);如第二個資料流所佔總頻寬的比重為:(1+1)/(1+2+3+4+5+6+7+8)=2/36=5.56%。
一個資料流中,所有IP封包的ToS數值相同,所以某個資料流的優先權就是資料流中datagram的ToS值 - 一般情況下,絕大多數的IP封包的default值為0,也就是ToS值為000。
5. CBWFQ(Class-based Weighted Fair Queue)
根據類別加權公平佇列。對於IP封包,CBWFQ通常根據DSCP、input port、IP封包等資訊來對封包進行分類;不同類別的封包分別進入不同的BQ(Bandwidth Queueing)佇列中,如果不能匹配,則進入系統定義的預設佇列;除此之外,還有一個LLQ(Low Latency Queue),它是一個具有較高優先權的佇列,優先權僅次於二層協議佇列和RTP優先佇列。
在離開佇列調度時,如果LLQ中有封包,則總是優先發送LLQ的內容,直到LLQ為空或是超過為LLQ預留的最大頻寬時,才發送其他佇列中的封包 - 這一點和CQ的系列佇列、PQ的High佇列比較類似。
進入LLQ的封包,在interface沒有發生擁塞時(所有佇列中都沒有封包),所有屬於LLQ的封包都可以被發送;而發生擁塞時(佇列中有封包時),進入LLQ的封包能獲得空閒的頻寬,在interface擁塞的情況下,又可以保證屬於LLQ的封包不會佔用超出規定的頻寬,保障了其他封包的應得頻寬。另外,只要LLQ中有封包,系統就會發送LLQ中的封包,所以LLQ中的封包被發送的延遲最多是interface發送一個最大長度封包的時間,無論是時間延遲(Delay)或是抖動(Jitter),LLQ都可以將之降低為最低限度。這對於時間延遲敏感的應用如VoIP服務提供了良好的QoS保證。
BQ佇列在調度離開佇列時,按照用戶設定的頻寬數值將封包發送出去,可以實現各個類別佇列的公平調度。當interface中某些類別沒有封包時,BQ佇列的封包還可以公平地分享空閒的頻寬,大大提高了線路的利用率,當然,在擁塞的時候還可以保證各類別的封包可以得到用戶設定的最小頻寬。
當不能匹配用戶設定的所有類別時,封包會進入系統定義的預設類別(class-default),雖然允許為預設類別設置頻寬,使其作為BQ佇列進行以類別為基礎的佇列調度,但是更多的情況是為預設類別設置WFQ,使所有進入預設類別的封包進行以資料流為基礎的佇列調度。
6. RTP(Real Time Protocol)
這是一種用於解決即時服務(語音、視訊)QoS的簡單佇列技術,其原理就是將承載語音或視訊的RTP封包送入高優先級佇列,使其得到優先發送,保證最小的延遲和抖動。
RTP優先佇列可以同其他的佇列結合使用,它的優先等級是最高的,不過由於CBWFQ中的LLQ完全可以解決即時服務的QoS問題,所以不建議RTP與CBWFQ同時使用。
RTP對於進入的佇列的封包進行了限速,超出規定流量的封包將被丟棄,這樣在interface擁塞的情況下,也可以保證屬於RTP優先佇列的封包不會佔用超出規定的頻寬,保障了其他封包的應得頻寬,避免了PQ中高優先佇列的問題。
依照我們常見的Queueing(佇列)技術,我們來一一介紹並且比較它們之間的差異性:
1. FIFO(Fist-In/Fist-Out Queue)
它不對Packet進行分類,當封包進入interface的速度大於interface的傳送速度時,FIFO按照封包到達interface的先後順序讓封包進入佇列,同時,在佇列的出口讓封包按照進入佇列的順序離開佇列。
2. PQ(Priority Queue)
將所有的Packet依據預先配置分成最多四類(High/Medium/Normal/Low),按照FIFO的方式分別進入四個優先等級不同的佇列。在封包離開佇列時,高優先等級的的佇列相對於較低優先等級的佇列具有絕對的優先權,等到高優先等級的佇列封包傳送完畢之後,較低優先等級的佇列才可以傳送封包出去,而且較低優先等級的封包在發生擁塞時會被較高優先等級的封包搶佔資源。因此採用這種佇列機制可以保證在網路發生擁塞的情況下,重要服務(設定成高優先等級)的數據傳輸可以得到絕對的優先傳送。但是如果較高優先等級的封包傳送速度總是大於interface的速度時,會使得較低優先等級的封包始終得不到發送的機會。
PQ是一種沒有量化的QoS/DiffServ服務,只定義了預先規定的高優先等級封包擁有優先轉發的權利,甚至有可能會導致較低優先等級的封包永遠沒有機會傳送出去。
3. CQ(Custom Queue)
根據設置將所有封包分成最多16類(Queue 1~16),然後按照FIFO的方式分別進入1個系統佇列(System Queue, Queue 0)和16個用戶佇列(Custom Queue, Queue 1~16)。在封包離開佇列的調度上,系統佇列具有絕對的優先權,系統總是先處理完該佇列後再處理用戶佇列(CQ);16個用戶佇列佔用出口頻寬的比例可以調整,CQ按照定義的比例使得各個佇列之間在佔用的interface頻寬上滿足管理者預先設置的比例關係。當擁塞發生時,CQ可以根據比例保持不同服務獲得相對應的頻寬使用,進而保證重要服務能夠獲得較多的頻寬,又不至於使得非重要服務無法得到頻寬(避免類似使用PQ時可能發生的問題)。
CQ是為了避免PQ在擁塞時,所有較低優先等級的流量資料都無法傳送的問題而發展出來的。
4. WFQ(Weighted Fair Queue)
對於進入路由器interface的封包按照資料流進行分類(相同來源地IP Address,目的地IP Address,來源地Port Number,目的地Port Number,Protocol Number,ToS數值相同的封包屬於同一個資料流),每一個資料流被分配到一個佇列。在離開佇列調度的時候,WFQ根據封包資料流的優先等級(Precedence)來分配每個資料流應該佔用的頻寬。優先等級(Precedence)數值愈小,所得到的頻寬愈少;優先等級(Precedence)數值愈大,所得到的頻寬愈多。在擁塞發生時,它能保證任何流量的資料流(服務),都能公平地得到一定的頻寬使用量,減少這個網路的延遲,並且當資料流(服務數量)的數目減少時,能自動增加現有資料流可佔用的頻寬。也就是說剩下仍在活動狀態的資料流會根據各自的優先權比例瓜分空出來的頻寬資源。
路由器的interface中同時存在8個資料流Sn(n=1~8),這些資料流的優先權Pn(n=1~8)分別為0、1、2、3、4、5、6、7,那麼第n個資料流所佔總頻寬的比重為:(Pn+1)/∑(Pn+1);如第二個資料流所佔總頻寬的比重為:(1+1)/(1+2+3+4+5+6+7+8)=2/36=5.56%。
一個資料流中,所有IP封包的ToS數值相同,所以某個資料流的優先權就是資料流中datagram的ToS值 - 一般情況下,絕大多數的IP封包的default值為0,也就是ToS值為000。
5. CBWFQ(Class-based Weighted Fair Queue)
根據類別加權公平佇列。對於IP封包,CBWFQ通常根據DSCP、input port、IP封包等資訊來對封包進行分類;不同類別的封包分別進入不同的BQ(Bandwidth Queueing)佇列中,如果不能匹配,則進入系統定義的預設佇列;除此之外,還有一個LLQ(Low Latency Queue),它是一個具有較高優先權的佇列,優先權僅次於二層協議佇列和RTP優先佇列。
在離開佇列調度時,如果LLQ中有封包,則總是優先發送LLQ的內容,直到LLQ為空或是超過為LLQ預留的最大頻寬時,才發送其他佇列中的封包 - 這一點和CQ的系列佇列、PQ的High佇列比較類似。
進入LLQ的封包,在interface沒有發生擁塞時(所有佇列中都沒有封包),所有屬於LLQ的封包都可以被發送;而發生擁塞時(佇列中有封包時),進入LLQ的封包能獲得空閒的頻寬,在interface擁塞的情況下,又可以保證屬於LLQ的封包不會佔用超出規定的頻寬,保障了其他封包的應得頻寬。另外,只要LLQ中有封包,系統就會發送LLQ中的封包,所以LLQ中的封包被發送的延遲最多是interface發送一個最大長度封包的時間,無論是時間延遲(Delay)或是抖動(Jitter),LLQ都可以將之降低為最低限度。這對於時間延遲敏感的應用如VoIP服務提供了良好的QoS保證。
BQ佇列在調度離開佇列時,按照用戶設定的頻寬數值將封包發送出去,可以實現各個類別佇列的公平調度。當interface中某些類別沒有封包時,BQ佇列的封包還可以公平地分享空閒的頻寬,大大提高了線路的利用率,當然,在擁塞的時候還可以保證各類別的封包可以得到用戶設定的最小頻寬。
當不能匹配用戶設定的所有類別時,封包會進入系統定義的預設類別(class-default),雖然允許為預設類別設置頻寬,使其作為BQ佇列進行以類別為基礎的佇列調度,但是更多的情況是為預設類別設置WFQ,使所有進入預設類別的封包進行以資料流為基礎的佇列調度。
6. RTP(Real Time Protocol)
這是一種用於解決即時服務(語音、視訊)QoS的簡單佇列技術,其原理就是將承載語音或視訊的RTP封包送入高優先級佇列,使其得到優先發送,保證最小的延遲和抖動。
RTP優先佇列可以同其他的佇列結合使用,它的優先等級是最高的,不過由於CBWFQ中的LLQ完全可以解決即時服務的QoS問題,所以不建議RTP與CBWFQ同時使用。
RTP對於進入的佇列的封包進行了限速,超出規定流量的封包將被丟棄,這樣在interface擁塞的情況下,也可以保證屬於RTP優先佇列的封包不會佔用超出規定的頻寬,保障了其他封包的應得頻寬,避免了PQ中高優先佇列的問題。
Comments