關於Traffic Control

如果您覺得您的問題不屬於 debian desktop 或是 debian server 版的範圍內,請在這裡發問。

版主: mufa

關於Traffic Control

文章訪客 » 週四 12月 23, 2004 5:43 pm

請問 TC可以準確的限制上下載嗎?
我使用TC指令限制下載時 還算蠻準確的
可是當我用TC限制上傳時 就變的相當不準確
我把上傳限制在64Kbit (大約8 KB)
上傳時用軟體觀察上傳速率
有時會跳到15KB ,16KB甚至25kB左右
有時又變成2KB
感覺上 算有限制流量 但是卻不穩定
目前這種狀況只出現在上傳
請問有沒有人也碰到這種情形?
訪客
 

re:關於Traffic Control

文章阿信 » 週五 12月 24, 2004 8:39 am

小弟不會呢...能成功限制在10Kbytes,不知道您的指令是如何下的...
頭像
阿信
版面大總管
版面大總管
 
文章: 4756
註冊時間: 週二 9月 03, 2002 11:58 pm
來自: 台灣 - 嘉義

re:關於Traffic Control

文章kaymo » 週五 12月 24, 2004 1:56 pm

不好意思 上面的問題是我問的
但我打錯幾個字 想要修改 卻發現忘記登入
這篇是修改過的 上面那偏麻煩板主刪了 真抱歉

您好 這篇問題是我發問的
我使用TC限制流量
但上下載都會有突然突破限制速度飆高的情形
限制在5Mbit(大約640KB)有時會飆到1MB,限制在64Kbit(大約8KB)有時會飆到25KB
並沒有穩定的限制在640KB 和8KB
測試環境是利用 LAN透過Linux server出去 直接到192.168.51.X段 的任意電腦上 抓檔案和丟檔案 然後觀察流量(使用Net Meter)
我是直接在windows介面複製檔案 貼上 並沒有用特殊軟體抓檔
Linux上的設定 (兩張網卡)
eth0 外網ip :192.168.51.35
eth1 內網ip :10.10.10.11
內網的電腦
eth1內兩台電腦中的其中一台(xp) ip:10.10.10.77 坪寬5Mbit
eth1 內兩台電腦中的其中另一台(2k sever) ip:10.10.10.99 坪寬64Kbit
以下是我的指令
1.先做NAT
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -F ---清除TABLES的舊規則
iptables -t nat -F ----清除NAT TABLES的舊規則
iptables -t nat -A POSTROUTING -s 10.10.10.77/32 -o eth0 -j SNAT --to 192.168.51.35 ---替10.10.10.77 作NAT
iptables -t nat -A POSTROUTING -s 10.10.10.99/32 -o eth0 -j SNAT --to 192.168.51.35 ---替10.10.10.99 作NAT

為流量控制做基於FW過濾器的標記
iptables -I PREROUTING -t mangle -p tcp -s 10.10.10.77/32 -j MARK --set-mark 1
iptables -I PREROUTING -t mangle -p tcp -s 10.10.10.99/32 -j MARK --set-mark 2

2.上傳
先為上傳速率做流量控制
KERNEL要求2.4.18以上,所以不够的要升级
由於只能控制網卡傳送封包的速率 所以上傳速率的限制要做在eth0上

刪除舊的陣列
tc qdisc del dev eth0 root

加入一個根陣列 速率用網卡的速率10Mbit
tc qdisc add dev eth0 root handle 100: cbq bandwidth 10Mbit avpkt 1000

加入一個根CLASS
tc class add dev eth0 parent 100:0 classid 100:1 cbq bandwidth 10Mbit rate 10Mbit allot 1514 weight 1Mbit prio 8 maxburst 8 avpkt 1000 bounded

加入一個子CLASS(10.10.10.77)速率限制為5Mbit
tc class add dev eth0 parent 100:1 classid 100:2 cbq bandwidth 10Mbit rate 5Mbit allot 1513 weight 500Kbit prio 5 maxburst 8 avpkt 1000 bounded

加入一個子CLASS(10.10.10.99)速率限制為64Kbit
tc class add dev eth0 parent 100:1 classid 100:3 cbq bandwidth 10Mbit rate 64Kbit allot 1513 weight 32Kbit prio 5 maxburst 8 avpkt 1000 bounded

設定陣列規則
tc qdisc add dev eth0 parent 100:2 sfq quantum 1514b perturb 15
tc qdisc add dev eth0 parent 100:3 sfq quantum 1514b perturb 15

把陣列和FW過濾器映射起來 其中handle 1 的1是開使用iptables 做的標記(mark 1),handle 2 的2也是開始用iptables 做的標記(mark 2)
tc filter add dev eth0 parent 100:0 protocol ip prio 1 handle 1 fw classid 100:2
tc filter add dev eth0 parent 100:0 protocol ip prio 2 handle 2 fw classid 100:3

3.下載
接下來限制下載的流量控制 过滤器是用u32
刪除舊的陣列
tc qdisc del dev eth1 root

加入一個根陣列 速率用網卡的速率10Mbit
tc qdisc add dev eth1 root handle 200: cbq bandwidth 10Mbit avpkt 1000

加入一個根CLASS
tc class add dev eth1 parent 200:0 classid 200:1 cbq bandwidth 10Mbit rate 10Mbit allot 1514 weight 1Mbit prio 8 maxburst 8 avpkt 1000 bounded

加入一個子CLASS(10.10.10.77)速率限制為5Mbit
tc class add dev eth1 parent 200:1 classid 200:2 cbq bandwidth 10Mbit rate 5Mbit allot 1513 weight 500Kbit prio 5 maxburst 8 avpkt 1000 bounded

加入一個子CLASS(10.10.10.99)速率限制為64Kbit
tc class add dev eth1 parent 200:1 classid 200:3 cbq bandwidth 10Mbit rate 64Kbit allot 1513 weight 32Kbit prio 5 maxburst 8 avpkt 1000 bounded

設定陣列規則
tc qdisc add dev eth1 parent 200:2 sfq quantum 1514b perturb 15
tc qdisc add dev eth1 parent 200:3 sfq quantum 1514b perturb 15

把陣列和FW過濾器映射起來
tc filter add dev eth1 parent 200:0 protocol ip prio 25 u32 match ip dst 10.10.10.77/32 flowid 200:2
tc filter add dev eth1 parent 200:0 protocol ip prio 25 u32 match ip dst 10.10.10.99/32 flowid 200:3

這是照著網路上的文章改的 很多指令其實我不太了解 只是依樣畫葫蘆
不知道是指令上錯誤 還是我在環境架設上有問題
才造成限制效果不佳
kaymo
可愛的小學生
可愛的小學生
 
文章: 2
註冊時間: 週五 12月 24, 2004 11:14 am

re:關於Traffic Control

文章訪客 » 週日 12月 26, 2004 8:55 pm

問題應該是在MARK封包的位置 把PREROUTING改成OUTPUT應該就能抓到正確的目標了
訪客
 

re:關於Traffic Control

文章kaymo » 週一 12月 27, 2004 2:43 pm

您好 我照著您的方法改了一下
我把
iptables -I PREROUTING -t mangle -p tcp -s 10.10.10.77/32 -j MARK --set-mark 1
iptables -I PREROUTING -t mangle -p tcp -s 10.10.10.99/32 -j MARK --set-mark 2

這兩行的PREROUTING 改成OUTPUT 變成以下兩行
iptables -I OUTPUT -t mangle -p tcp -s 10.10.10.77/32 -j MARK --set-mark 1
iptables -I OUTPUT -t mangle -p tcp -s 10.10.10.99/32 -j MARK --set-mark 2

以上下傳皆鎖在64Kbit的電腦為例子
結果上傳的部分 變成無法限制(上傳跑到400多KB)
下載還是維持在2KB~30KB內變化(其實大部分的時間有鎖在8KB附近但會周期性的跳到25KB左右, 蠻固定的週期性, 大約每30秒左右 就會突然暴增到25KB 之後又降下來)

請問我下的OUTPUT指令是不是錯了 還是其他的指令需要跟著變化?
kaymo
可愛的小學生
可愛的小學生
 
文章: 2
註冊時間: 週五 12月 24, 2004 11:14 am


回到 debian misc

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客