一、實驗拓撲與實驗現象
實驗拓撲如圖所示,在①號機上發送數據,③號機上接受數據,同時在④號機的eth1與eth2網口限制速率為115200kbps,命令如下
tc qdisc add dev eth1 root tbf rate 115200bps buffer 1600 limit 3000 tc qdisc add dev eth2 root tbf rate 115200bps buffer 1600 limit 3000
圖1 實驗拓撲
然后在④號機上使用ifstat查看網口狀態,得到結果如下:
我們可以看到eth1的入口速率為144KB/s左右,而eth2的出口速率為112KB/s左右,那么還有32KB/s的速率哪里去了呢?
二、令牌桶在端口限速的原理
首先讓我們了解下令牌桶限速的原理,如限速原理圖如下(此圖引自博文:令牌桶算法的應用 )
圖2 使用令牌桶做端口限速的原理圖
圖2展示是了linux系統中寬帶管理的實現,需由端口發送的報文通過分類器分類以后,進入隊列,這個隊列的大小由上面tc tbf命令中的limit設定,若令牌桶中有這個報文大小的令牌,則將此報文發送出去,否則在緩存隊列中等待,等待有足夠多的令牌后在發送,若在這個過程中緩存隊列溢出,則將導致部分報文被丟棄,這里值得注意的是發送報文是以包為單位發送的,但是令牌桶的實現是以字節為單位,而不是針對包進行的。
每個到來的令牌從數據隊列中收集一個數據包,然后從桶中被刪除。這個算法關聯到兩個流上——令牌流和數據流,於是我們得到3種情景:
1、數據流以等於令牌流的速率到達TBF。這種情況下,每個到來的數據包都能無延遲地通過隊列。
2、 數據流以小於令牌流的速度到達TBF。通過隊列的數據包只消耗了一部分令牌,剩下的令牌會在桶里積累下來,直到桶被裝滿。剩下的 令牌可以在需要以高於令牌流速率發送數據流的時候消耗掉,這種情況下會發生突發傳輸。
3、數據流以大於令牌流的速率到達TBF。這意味着桶里的令牌很快就會被耗盡。導致TBF中斷一段時間,稱為“越限”。如果數據包持續到 來,將發生丟包。
最后一種情景非常重要,因為它可以用來對數據通過過濾器的速率進行整形。
可見,令牌的積累可以導致越限的數據進行短時間的突發傳輸而不必丟包,但是持續越限的話會導致傳輸延遲直至丟包。
博客遷到個人博客網站:http://btdog.com.cn/index.php/home/article/detail/id/3.html