PCZONE 討論區

PCZONE 討論區 (http://www.pczone.com.tw/vbb3/)
-   -- 網 路 技 術 版 (http://www.pczone.com.tw/vbb3/forum/29/)
-   -   【教學】Coyote Linux 頻寬管制 (QoS) 設定教學 (http://www.pczone.com.tw/vbb3/thread/29/116666/)

linux_xp 2005-10-03 10:22 AM

【教學】Coyote Linux 頻寬管制 (QoS) 設定教學
 
[b]Coyote Linux 頻寬管制 (QoS) 設定教學[/b]

[color=#333399][B]前言:[/B][/color]
----------------------------------------------------------------------
此篇教學以 Coyote Linux 軟體路由器為範例系統
演示如何以 tc 指令設定 QoS 頻寬管制

由於 Coyote Linux,即是精簡型 Linux
所以此篇 Linux QoS 設定原理,亦適用任何 Linux distro 發行版

以下教學內容會有點複雜,但完成的效果,可以媲美一台幾萬元的硬體路由器,物超所值。


[color=#333399][B]名詞解釋:[/B][/color]
--------------------------------------------------------------------
[B]QoS (Quality of Service):[/B]網路服務品質保證,俗稱的頻寬管制。

[B]佇列規則 (qdisc):[/B]
佇列 (Queue) 是網卡存放外送封包的地方
可以想像成是高速公路的閘道管制
如同閘道管制是用來管制高速公路(網路)的車流量(封包流量)
佇列規則就是用來管制網路流量的規則

若沒有設定,預設的規則是 FIFO (First In First Out,先進先出) ,意即完全無管制。

Linux QoS 的佇列規則有兩種:CBQ,HTB
CBQ (Class Based Queueing) 的設定比較複雜,但可設定的東西較多,彈性較大
HTB (Hierarchy Token Bucket) 是 CBQ 的改良版 ,設定較精簡,效能也比 CBQ 來的好
此篇教學,以 HTB 為主。


[B]類別 (class):[/B]
類別是一個集合,舉例要把頻寬分成:看網頁類,玩線上遊戲類,P2P 下載類....等等
P2P 下載類:不需要即時反應,所以給予最少的頻寬,最低的優先權
看網頁類:頻寬大一點,才不會等到睡著,但優先權用普通的即可
玩線上遊戲類:玩線上遊戲最怕的就是和人 PK 時網路 LAG,LAG 一下可能就輸了,所以優先權要最高,這是無庸置疑的


[B]過濾器:[/B]
檢查封包該屬於哪個類別,並給予歸類的東西,稱作過濾器。
Linux QoS 過濾器有兩種:u32,fw
u32: 設定比較複雜,需懂封包結構,才有辦法設定
fw:fw 是靠 iptables 給封包貼標籤,設定比較簡單
此篇教學,以 fw 為主。


[B]iptables 指令:[/B]
Linux 負責防火牆功能的,是一個叫 NetFilter 的模組,而 iptables 就是用來設定 NetFilter 模組的指令。

[B]tc 指令:[/B]
Linux 負責QoS (頻寬管制) 功能的,是一個叫 Traffic Control 的模組,而 tc 就是用來設定 Traffic Control 模組的指令。

[B]shell script:[/B]
俗稱腳本檔(劇本),Linux 作業系統會依照裡面的內容,逐行執行程式
類似 windows 下的 .bat 自動批次檔,但 shell script 功能比較強

在設定 QoS 的時候,往往要打上幾十行的指令
但是打了這一大堆東西,重開機之後就會消失
所以要把這些指令,編輯成一個腳本檔,讓電腦一開機就執行。


###############################################################################

教學開始 ↓

[color=#333399][B]規劃篇:[/B][/color] (分配頻寬,定義類別)
-----------------------------------------------------------------------
由於 QoS 要先計算出整體頻寬,給予分配,才有辦法設定
所以在設定之前,必須先進行規劃的前置作業

[B]導讀:[/B]
講解「類別」原理的部份,因為較深入可能會比較煩,可省略跳過
最重要的部分,是要完成那個頻寬計算分配表,因為底下實作時必須填入分配的數字。

[img]http://home.pchome.com.tw/art/linux2005/images/web/pczone/tc/001.gif[/img]

此次教學示範的網路架構如上

對外網卡:eth1
對內網卡:eth0

將分配頻寬給三台 PC 電腦
每台電腦可以得到各自的保證的頻寬,以及可借用的最大頻寬

另有一台 伺服器,上面有 web、e-mail、dns 三個服務
近來利用 ADSL 在家裡架設伺服器的人數也有增多的趨勢
故此次教學,也示範如何管制伺服器的頻寬

default (預設) 類別
指如果封包不屬於那三台電腦,也不屬於伺服器,則歸類於 default 類別,進行頻寬控管
具體來說,此種情況就是筆記型電腦,PDA,PSP掌上遊戲機....... 等等之類,有使用到網路頻寬的設備


[img]http://home.pchome.com.tw/art/linux2005/images/web/pczone/tc/002.gif[/img]

首先,第一步要計算出「合理的頻寬分配」

分配頻寬,就像在分家產一樣,務必公平合理,否則 QoS 便無法運作,或者無法達到預期的效果

請拿出紙、筆、計算機,或者利用試算表軟體,進行計算

此次的範例是 ADSL 2M/51K

HTB 佇列規則用的是 KByte/s ,所以要先換算

ADSL 的頻寬單位,是 bps (bits per second)
--------------------------------------
8 bps = 1 Byte/s

下載 2Mbps = 256 KB/s
上傳 512Kbps = 64 KB/s


保證下載,保證上傳:是手動填入的數字

「保證」指的是無論如何,別的「類別」都不能來搶這個頻寬

這個值不宜設太大,因為還可以借用頻寬,且保證設太大,整體頻寬都用完了,就失去意義了
一般建議值是每台電腦的保證上傳,最少要有 32Kbps = 4KB/s


其餘數值,是公式計算所得,計算方式如下:
-----------------------------------------------------------------
剩餘頻寬 (可借用的頻寬量) = 總頻寬 - 保證頻寬總和

最大下載 = 保證下載 + 下載剩餘頻寬
最大上傳 = 保證上傳 + 上傳剩餘頻寬

最大下載,最大上傳:亦可填入固定數字

「最大」指的是無論如何,該「類別」能使用的頻寬不會超過這個數字


優先權:指誰可以有較大權力搶用剩餘頻寬,由 0 開始的整數,數字愈小,優先權愈高,0 為最高優先權。

以上表的例子來說
192.168.1.1 這台電腦是筆者所用,俗話說肥水不落外人田,當然優先權為 0 最高
其餘電腦設 1,優先權普通,但若有特別的下載狂,可考慮降低他的優先權
至於伺服器的 http、smtp、dns 等對外的服務,服務的是外面的人
優先權可設小一點,以不干擾自己內部的人使用網路為原則


[img]http://home.pchome.com.tw/art/linux2005/images/web/pczone/tc/003.gif[/img]

[img]http://home.pchome.com.tw/art/linux2005/images/web/pczone/tc/004.gif[/img]

Linux QoS 有三要素:[B]佇列規則、類別、過濾器[/B]

完成了這三項的設定,也就完成了 Linux QoS 的設定
在計算分配好頻寬表的前置作業之後,接著要做的事,是規劃「類別」

---------------------------------------------------------------------------
[b]Q.為什麼「類別」規劃,會分成 下載、上傳 兩部份?[/b]

前面提到「佇列」是網卡存放外送封包的地方,故「佇列規則」也只能管制外送的封包

『Linux Advanced Routing & Traffic Control HOWTO』文件
用一個生動的比喻,來解釋這種情況:
"我們只能規定自己寫多少信給別人,無法限制每天會有多少人寫信給我們"

簡單的說,Linux QoS 只能管制網卡往外傳送的流量

不過這並不是說 Linux QoS 只能管制上傳
因 NAT 主機上,會有兩片網卡

「對外網卡」往外傳送,稱之為:上傳
「對內網卡」往外傳送,稱之為:下載

所以若要同時進行 上傳/下載 的雙向管制,必要條件為兩片網卡

整個 Qos 的設定,亦會分成兩部分,上傳 和 下載

-------------------------------------------------------------------------

類別規劃圖,看起來像一張樹狀圖
實體網卡的佇列規則,稱作「根」佇列規則
其下的類別,就像葉子一樣,又稱「葉類別」
而最末尾的「葉類別」,必須帶有「葉佇列規則」

您可能會注意到,每個「佇列規則」、「類別」都有編號
這是因為待會實作下指令時,必須用到

編號中的冒號為必須
「佇列規則」只有冒號左邊有數字
「葉類別」冒號左邊數字是指掛在哪個「根佇列規則」,右邊則是「葉類別」的編號

編號是隨人高興取的,但習慣上,會有一些固定的取法
「根佇列規則」會取編號 10:
第 1 層,第 1 個「葉類別」,取編號 10:1
第 2 層,第 1 個「葉類別」,取編號 10:10
第 2 層,第 2 個「葉類別」,取編號 10:20 ..........以此類推
最末尾的「葉佇列規則」,取編號 101: 、102: ......以此類推


此範例圖,是只有二層架構的樹狀圖
實際上,Linux QoS 的類別規劃,最多可以到八層,應用在規劃網段的頻寬管制
但一般用途,規劃到二層即夠使用,故不再做多層規劃的範例
若對多層規劃有興趣,請參考 Linux QoS 相關書籍

類別規劃圖,可畫也可不畫
畫出來的話,可以幫助 QoS 設定更容易了解
不過下面的實作教學,將會提供參考用原始碼,小部份修改後,直接套用即可 ^^


#################################################################################

[color=#333399][B]實作篇:[/B][/color] (開始實際設定 Linux QoS )
-----------------------------------------------------------------------------------------

實作篇,將開始用 tc 指令,和 iptables 指令,撰寫 shell script,實現 Linux QoS

原理講解的部份,由於上面規劃篇的時候,已經差不多都講解完了
再者指令的語法是變化多端的,礙於篇幅
因此底下實作篇將不做任何原理方面的講解
改以直接秀出參考用原始碼的方法,小部分修改後,套用即可


[B]Coyote 自定義 QoS 設定步驟:[/B](看圖說故事)

STEP.1
[img]http://home.pchome.com.tw/art/linux2005/images/web/pczone/tc/005.gif[/img]

STEP.2
[img]http://home.pchome.com.tw/art/linux2005/images/web/pczone/tc/006.gif[/img]

STEP.3
[img]http://home.pchome.com.tw/art/linux2005/images/web/pczone/tc/007.gif[/img]

STEP.4
[img]http://home.pchome.com.tw/art/linux2005/images/web/pczone/tc/008.gif[/img]

STEP.5
[img]http://home.pchome.com.tw/art/linux2005/images/web/pczone/tc/009.gif[/img]

STEP.6
[img]http://home.pchome.com.tw/art/linux2005/images/web/pczone/tc/010.gif[/img]

STEP.7
[img]http://home.pchome.com.tw/art/linux2005/images/web/pczone/tc/011.gif[/img]

##############################################

[color=#333399][B]Linux QoS 參考用原始碼[/B][/color]

基本說明:

1.凡是以 # 符號開頭,代表該行為註解,不會被系統執行
2.第一行的 #!/bin/sh 為 shell script 必要語法,不可刪除
3.Coyote 不支援 Big5 中文,所以中文註解貼上後會變成亂碼,是正常的
4.若要顯示中文註解,需轉碼成 UTF-8 (無 BOM格式)


[B] tc 指令 ( /etc/rc.d/rc.local ) :[/B]
[code]#!/bin/sh
#
# Coyote local command init script

# 清除 eth1 所有佇列規則
tc qdisc del dev [color=#CC0000]eth1[/color] root 2>/dev/null

# 定義最頂層(根)佇列規則,並指定 default 類別編號
tc qdisc add dev [color=#CC0000]eth1[/color] root handle [color=#CC0000]10:[/color] htb default [color=#CC0000]70[/color]

# 定義第一層的 10:1 類別 (總頻寬)
tc class add dev [color=#CC0000]eth1[/color] parent [color=#CC0000]10: [/color] classid [color=#CC0000]10:1[/color] htb rate [color=#CC0000]64[/color]kbps ceil [color=#CC0000]64[/color]kbps

# 定義第二層葉類別
# rate 保證頻寬,ceil 最大頻寬,prio 優先權
tc class add dev [color=#CC0000]eth1[/color] parent [color=#CC0000]10:1[/color] classid [color=#CC0000]10:10[/color] htb rate [color=#CC0000]2[/color]kbps ceil [color=#CC0000]4[/color]kbps prio [color=#CC0000]2[/color]
tc class add dev [color=#CC0000]eth1[/color] parent [color=#CC0000]10:1[/color] classid [color=#CC0000]10:20[/color] htb rate [color=#CC0000]2[/color]kbps ceil [color=#CC0000]4[/color]kbps prio [color=#CC0000]2[/color]
tc class add dev [color=#CC0000]eth1[/color] parent [color=#CC0000]10:1[/color] classid [color=#CC0000]10:30[/color] htb rate [color=#CC0000]32[/color]kbps ceil [color=#CC0000]40[/color]kbps prio [color=#CC0000]3[/color]


tc class add dev [color=#CC0000]eth1[/color] parent [color=#CC0000]10:1[/color] classid [color=#CC0000]10:40[/color] htb rate [color=#CC0000]8[/color]kbps ceil [color=#CC0000]16[/color]kbps prio [color=#CC0000]0[/color]
tc class add dev [color=#CC0000]eth1[/color] parent [color=#CC0000]10:1[/color] classid [color=#CC0000]10:50[/color] htb rate [color=#CC0000]4[/color]kbps ceil [color=#CC0000]12[/color]kbps prio [color=#CC0000]1[/color]
tc class add dev [color=#CC0000]eth1[/color] parent [color=#CC0000]10:1[/color] classid [color=#CC0000]10:60[/color] htb rate [color=#CC0000]4[/color]kbps ceil [color=#CC0000]12[/color]kbps prio [color=#CC0000]1[/color]
tc class add dev [color=#CC0000]eth1[/color] parent [color=#CC0000]10:1[/color] classid [color=#CC0000]10:70[/color] htb rate [color=#CC0000]4[/color]kbps ceil [color=#CC0000]12[/color]kbps prio [color=#CC0000]1[/color]


# 定義各葉類別的佇列規則
# parent 類別編號,handle 葉類別佇列規則編號
# 由於採用 fw 過濾器,所以此處使用 pfifo 的佇列規則即可
tc qdisc add dev [color=#CC0000]eth1[/color] parent [color=#CC0000]10:10[/color] handle [color=#CC0000]101:[/color] pfifo
tc qdisc add dev [color=#CC0000]eth1[/color] parent [color=#CC0000]10:20[/color] handle [color=#CC0000]102:[/color] pfifo
tc qdisc add dev [color=#CC0000]eth1[/color] parent [color=#CC0000]10:30[/color] handle [color=#CC0000]103:[/color] pfifo
tc qdisc add dev [color=#CC0000]eth1[/color] parent [color=#CC0000]10:40[/color] handle [color=#CC0000]104:[/color] pfifo
tc qdisc add dev [color=#CC0000]eth1[/color] parent [color=#CC0000]10:50[/color] handle [color=#CC0000]105:[/color] pfifo
tc qdisc add dev [color=#CC0000]eth1[/color] parent [color=#CC0000]10:60[/color] handle [color=#CC0000]106:[/color] pfifo
tc qdisc add dev [color=#CC0000]eth1[/color] parent [color=#CC0000]10:70[/color] handle [color=#CC0000]107:[/color] pfifo

# 設定過濾器
# 指定貼有 10 標籤 (handle) 的封包,歸類到 10:10 類別,以此類推
tc filter add dev [color=#CC0000]eth1[/color] parent [color=#CC0000]10:[/color] protocol ip prio 100 handle [color=#CC0000]10[/color] fw classid [color=#CC0000]10:10[/color]
tc filter add dev [color=#CC0000]eth1[/color] parent [color=#CC0000]10:[/color] protocol ip prio 100 handle [color=#CC0000]20[/color] fw classid [color=#CC0000]10:20[/color]
tc filter add dev [color=#CC0000]eth1[/color] parent [color=#CC0000]10:[/color] protocol ip prio 100 handle [color=#CC0000]30[/color] fw classid [color=#CC0000]10:30[/color]
tc filter add dev [color=#CC0000]eth1[/color] parent [color=#CC0000]10:[/color] protocol ip prio 100 handle [color=#CC0000]40[/color] fw classid [color=#CC0000]10:40[/color]
tc filter add dev [color=#CC0000]eth1[/color] parent [color=#CC0000]10:[/color] protocol ip prio 100 handle [color=#CC0000]50[/color] fw classid [color=#CC0000]10:50[/color]
tc filter add dev [color=#CC0000]eth1[/color] parent [color=#CC0000]10:[/color] protocol ip prio 100 handle [color=#CC0000]60[/color] fw classid [color=#CC0000]10:60[/color]
tc filter add dev [color=#CC0000]eth1[/color] parent [color=#CC0000]10:[/color] protocol ip prio 100 handle [color=#CC0000]70[/color] fw classid [color=#CC0000]10:70[/color]



# QoS eth0 下載方面
#

# 清除 eth0所有佇列規則
tc qdisc del dev [color=#CC0000]eth0[/color] root 2>/dev/null

# 定義最頂層(根)佇列規則,並指定 default 類別編號
tc qdisc add dev [color=#CC0000]eth0[/color] root handle [color=#CC0000]10:[/color] htb default [color=#CC0000]70[/color]

# 定義第一層的 10:1 類別 (總頻寬)
tc class add dev [color=#CC0000]eth0[/color] parent [color=#CC0000]10: [/color] classid [color=#CC0000]10:1[/color] htb rate [color=#CC0000]256[/color]kbps ceil [color=#CC0000]256[/color]kbps

# 定義第二層葉類別
# rate 保證頻寬,ceil 最大頻寬,prio 優先權
tc class add dev [color=#CC0000]eth0[/color] parent [color=#CC0000]10:1[/color] classid [color=#CC0000]10:10[/color] htb rate [color=#CC0000]2[/color]kbps ceil [color=#CC0000]32[/color]kbps prio [color=#CC0000]2[/color]
tc class add dev [color=#CC0000]eth0[/color] parent [color=#CC0000]10:1[/color] classid [color=#CC0000]10:20[/color] htb rate [color=#CC0000]2[/color]kbps ceil [color=#CC0000]32[/color]kbps prio [color=#CC0000]2[/color]
tc class add dev [color=#CC0000]eth0[/color] parent [color=#CC0000]10:1[/color] classid [color=#CC0000]10:30[/color] htb rate [color=#CC0000]32[/color]kbps ceil [color=#CC0000]212[/color]kbps prio [color=#CC0000]3[/color]

tc class add dev [color=#CC0000]eth0[/color] parent [color=#CC0000]10:1[/color] classid [color=#CC0000]10:40[/color] htb rate [color=#CC0000]16[/color]kbps ceil [color=#CC0000]196[/color]kbps prio [color=#CC0000]0 [/color]
tc class add dev [color=#CC0000]eth0[/color] parent [color=#CC0000]10:1[/color] classid [color=#CC0000]10:50[/color] htb rate [color=#CC0000]8[/color]kbps ceil [color=#CC0000]188[/color]kbps prio [color=#CC0000]1[/color]
tc class add dev [color=#CC0000]eth0[/color] parent [color=#CC0000]10:1[/color] classid [color=#CC0000]10:60[/color] htb rate [color=#CC0000]8[/color]kbps ceil [color=#CC0000]188[/color]kbps prio [color=#CC0000]1[/color]
tc class add dev [color=#CC0000]eth0[/color] parent [color=#CC0000]10:1[/color] classid [color=#CC0000]10:70[/color] htb rate [color=#CC0000]8[/color]kbps ceil [color=#CC0000]188[/color]kbps prio [color=#CC0000]1[/color]

# 定義各葉類別的佇列規則
# parent 類別編號,handle 葉類別佇列規則編號
tc qdisc add dev [color=#CC0000]eth0[/color] parent [color=#CC0000]10:10[/color] handle [color=#CC0000]101:[/color] pfifo
tc qdisc add dev [color=#CC0000]eth0[/color] parent [color=#CC0000]10:20[/color] handle [color=#CC0000]102:[/color] pfifo
tc qdisc add dev [color=#CC0000]eth0[/color] parent [color=#CC0000]10:30[/color] handle [color=#CC0000]103:[/color] pfifo
tc qdisc add dev [color=#CC0000]eth0[/color] parent [color=#CC0000]10:40[/color] handle [color=#CC0000]104:[/color] pfifo
tc qdisc add dev [color=#CC0000]eth0[/color] parent [color=#CC0000]10:50[/color] handle [color=#CC0000]105:[/color] pfifo
tc qdisc add dev [color=#CC0000]eth0[/color] parent [color=#CC0000]10:60[/color] handle [color=#CC0000]106:[/color] pfifo
tc qdisc add dev [color=#CC0000]eth0[/color] parent [color=#CC0000]10:70[/color] handle [color=#CC0000]107:[/color] pfifo

# 設定過濾器
tc filter add dev [color=#CC0000]eth0[/color] parent [color=#CC0000]10:[/color] protocol ip prio 100 handle [color=#CC0000]10[/color] fw classid [color=#CC0000]10:10[/color]
tc filter add dev [color=#CC0000]eth0[/color] parent [color=#CC0000]10:[/color] protocol ip prio 100 handle [color=#CC0000]20[/color] fw classid [color=#CC0000]10:20[/color]
tc filter add dev [color=#CC0000]eth0[/color] parent [color=#CC0000]10:[/color] protocol ip prio 100 handle [color=#CC0000]30[/color] fw classid [color=#CC0000]10:30[/color]
tc filter add dev [color=#CC0000]eth0[/color] parent [color=#CC0000]10:[/color] protocol ip prio 100 handle [color=#CC0000]40[/color] fw classid [color=#CC0000]10:40[/color]
tc filter add dev [color=#CC0000]eth0[/color] parent [color=#CC0000]10:[/color] protocol ip prio 100 handle [color=#CC0000]50[/color] fw classid [color=#CC0000]10:50[/color]
tc filter add dev [color=#CC0000]eth0[/color] parent [color=#CC0000]10:[/color] protocol ip prio 100 handle [color=#CC0000]60[/color] fw classid [color=#CC0000]10:60[/color]
tc filter add dev [color=#CC0000]eth0[/color] parent [color=#CC0000]10:[/color] protocol ip prio 100 handle [color=#CC0000]70[/color] fw classid [color=#CC0000]10:70[/color]

[/code]

說明:
--------------------------------
這邊的 eh1 是對外網卡,eth0 是對內網卡
若與您的實際環境不同,請自行修改

主要過程:
1.清除網卡上的所有佇列規則 (不論有或沒有)
2.定義網卡的佇列規則
3.定義各類別
4.定義各類別的佇列規則
5.定義過濾器

rate 後面的數字:保證頻寬
ceil 後面的數字:最大頻寬
單位只有:KByte/s ,不過上面要寫 kbps,因為這是 HTB 的規定語法

prio 後面的數字:優先權,數字愈低愈高,0最大

classid 後面的編號:完整類別編號
parent 後面的編號:父類別,或者佇列規則,亦即該項目上一層的物件


這裡列出了 7 個類別,可以自行新增或減少

default 類別,可有可無
較嚴謹的頻寬管制,可取消 default 類別,以避免內部有人鑽漏洞
一般情況,則建議設 default 比較好


註1:可參考前面的「類別規劃示意圖」,比較容易了解此處的設定用意

註2:這段參考用原始碼,只是一個範例,必須修改後,才能符合您的環境



[B] iptables 指令,過濾器 (編輯自定義防火牆規則) :[/B]
[code]# uploads
# 設定上傳方面,先利用 iptables 給封包貼標籤,再交由 fw 過濾器進行過濾

iptables -t mangle -A PREROUTING -s [color=#CC0000]192.168.1.6[/color] -m layer7 --l7proto [color=#CC0000]dns[/color] -j MARK --set-mark [color=#CC0000]10[/color]
iptables -t mangle -A PREROUTING -s [color=#CC0000]192.168.1.6[/color] -m layer7 --l7proto [color=#CC0000]smtp[/color] -j MARK --set-mark [color=#CC0000]20[/color]
iptables -t mangle -A PREROUTING -s [color=#CC0000]192.168.1.6[/color] -m layer7 --l7proto [color=#CC0000]http[/color] -j MARK --set-mark [color=#CC0000]30[/color]

iptables -t mangle -A PREROUTING -s [color=#CC0000]192.168.1.1[/color] -j MARK --set-mark [color=#CC0000]40[/color]
iptables -t mangle -A PREROUTING -s [color=#CC0000]192.168.1.2[/color] -j MARK --set-mark [color=#CC0000]50[/color]
iptables -t mangle -A PREROUTING -s [color=#CC0000]192.168.1.3[/color] -j MARK --set-mark [color=#CC0000]60[/color]

# downloads
# 下載方面

iptables -t mangle -A POSTROUTING -d [color=#CC0000]192.168.1.6[/color] -m layer7 --l7proto [color=#CC0000]dns[/color] -j MARK --set-mark [color=#CC0000]10[/color]
iptables -t mangle -A POSTROUTING -d [color=#CC0000]192.168.1.6[/color] -m layer7 --l7proto [color=#CC0000]smtp[/color] -j MARK --set-mark [color=#CC0000]20[/color]
iptables -t mangle -A POSTROUTING -d [color=#CC0000]192.168.1.6[/color] -m layer7 --l7proto [color=#CC0000]http[/color] -j MARK --set-mark [color=#CC0000]30[/color]

iptables -t mangle -A POSTROUTING -d [color=#CC0000]192.168.1.1[/color] -j MARK --set-mark [color=#CC0000]40[/color]
iptables -t mangle -A POSTROUTING -d [color=#CC0000]192.168.1.2[/color] -j MARK --set-mark [color=#CC0000]50[/color]
iptables -t mangle -A POSTROUTING -d [color=#CC0000]192.168.1.3[/color] -j MARK --set-mark [color=#CC0000]60[/color]

[/code]

說明:
--------------------
iptables 會去檢查封包,看它來自哪裡,或者 Layer-7 協定是哪種的 ,然後貼上標籤
之後 fw 過濾器,會依照標籤上的數字,來給封包歸類別

IP:電腦的 IP

Layer-7 協定種類:
此部份是採用 l7-filter 直接做過濾,例如:dns,smtp,http
P2P 下載的封包,也可以管制
l7-filter 詳細用法請參考 Coyote 的教學文章,補充說明

mark 後面的數字:「類別」的編號

註:這段參考用原始碼,只是一個範例,必須修改後,才能符合您的環境


#############################################################################

Linux QoS 設定,看似複雜,然其實可以做到非常彈性化 (可程式化)

其效能是取決 CPU、RAM、網卡晶片,可由使用者自行決定組裝等級
若使用高等配備,並不會輸給一台幾萬元的昂貴硬體路由器
且在價格上,更具優勢

昔日網路上的中文 Linux QoS 資料,非常稀少
即使是現在,雖然市面上已有幾本 Linux QoS 相關中文書籍了
但網路上的 Linux QoS 的中文討論,仍是寥寥可數
故小弟今日貼此一篇,望能拋磚引玉之效,開創 Linux QoS 風潮

Linux QoS 的技術
基礎的像此篇管制小型網路頻寬之應用
進階的可以配合 l7-filter 做 service 的頻寬管制
到深入一點,複雜一點的
更可以藉由 iproute2 多重路由,達到多WAN的架構


歡迎有興趣的朋友,一起加入研究討論的行列
若有任何心得,請發表此篇後面
謝謝

:)

##########################################
[color=#CC0000][b]補充 01: [/b] [/color] 2005/10/04
##########################################

[b]FW 過濾器使用方法補充說明 [/b]

[b]附加說明:如何限制 P2P 下載?[/b]

Linux QoS 有三要素:佇列規則,類別,過濾器

佇列規則是實際負責 QoS 的單位
類別是定義 「頻寬大小」的單位
而過濾器,顧名思義,就是用來過濾封包,判斷封包該屬於哪個類別的單位

換句話說,要限制 P2P....等等之類,關鍵就在於「過濾器」
只要「過濾器」有辦法把 P2P 的封包抓出來,那麼要管制它就不難了


FW 實際上是靠 iptables 給封包貼標籤
然後 FW 再依照標籤編號,給封包歸類別
所以下面講的,其實是 iptables 的語法.....


[b]iptables 語法簡單講解:[/b]
------------------------------------
iptables -t mangle -A PREROUTING -s 192.168.1.1 -j MARK --set-mark 10
iptables -t mangle -A POSTROUTING -d 192.168.1.1 -j MARK --set-mark 10

[b]-t mangle[/b]:指定使用 mangle 表格 (QoS 要用這個表格)
[b]-A[/b]:新增一條規則

[b]PPRROUTING[/b]:上傳方向,是內部電腦傳出去的,後面加 -s 來源端
[b]POSTROUTING[/b]:下傳方向,是外面網路傳進來的,後面 -d 目的地

[b]-s[/b]:來源端
[b]-d[/b]:目的地

[b]-j mark[/b]:處理動作,給予貼標籤
[b]--set-mark[/b]:貼什麼標籤,數字指定於後

※ 重要:
在 Linux下, 所有的指令和檔名,都有分英文大小寫
PREROUTING 和 prerouting 所代表的意義是不同的,後者是錯誤語法

--------------------------------------


iptables 給封包貼標籤時,「比對規則」有以下六種基本型態:
(基本型態可混搭,變成更嚴謹的複雜型態)


[color=#000099]1.針對 IP 過濾[/color]
iptables -t mangle -A PREROUTING [color=#CC0000]-s 192.168.1.1[/color] -j MARK --set-mark 10

[color=#000099]2.針對「網段」過濾[/color]
iptables -t mangle -A PREROUTING [color=#CC0000]-s 192.168.1.0/24[/color] -j MARK --set-mark 10

[color=#000099]3.針對 MAC 過濾[/color]
iptables -t mangle -A PREROUTING [color=#CC0000]-m --mac-source 00:00:AA:BB:CC:EE[/color] -j MARK --set-mark 10

[color=#000099]4.針對 PORT 過濾[/color]
iptables -t mangle -A PREROUTING [color=#CC0000]-p tcp --sport 80[/color] -j MARK --set-mark 10
iptables -t mangle -A POSTROUTING [color=#CC0000]-p tcp --dport 80[/color] -j MARK --set-mark 10

iptables -t mangle -A PREROUTING[color=#CC0000] -p udp --sport 53[/color] -j MARK --set-mark 10
iptables -t mangle -A PREROUTING [color=#CC0000]-p icmp[/color] -j MARK --set-mark 10

[color=#000099]5.針對 「網卡介面」過濾 (假如對內有多片網卡的話,-i 進入方向, -o 出去方向)[/color]
iptables -t mangle -A PREROUTING [color=#CC0000]-o eth0[/color] -j MARK --set-mark 10
iptables -t mangle -A POSTROUTING[color=#CC0000] -i eth0[/color] -j MRAK --set-mark 10


[color=#000099][b]6. l7-filter 過濾 [/b][/color]
iptables -t mangle -A PREROUTING [color=#CC0000]-m layer7 --l7proto bittorrent[/color] -j MARK --set-mark 10
( BT上傳方向的封包,給予貼標籤 10 )

iptables -t mangle -A POSTROUTING [color=#CC0000]-m layer7 --l7proto edonkey[/color] -j MARK --set-mark 10
( 驢子 下載方向的封包,給予貼標籤 10 )


若要管制 P2P 下載,就是把 bittorrent 和 edonkey 兩個 L7 協定
各設置 上傳/下載,共4條過濾器規則
並把這4條規則的封包,通通給予貼某一個類別的標籤,例如:90
讓過濾器把 P2P 的封包,丟給該類別 10:90 去處理即可

註:此部份僅是設定「過濾器」,實際在處理 QoS 的是「佇列規則」、「類別」,所以另一邊也必須有相對應的設定。例如:必須定義 10:90 這個類別的頻寬,整個 P2P 管制的 QoS 才會生效。


[b]附錄:Coyote 可用 l7-filter 協定一覽表[/b]
[img]http://home.pchome.com.tw/art/linux2005/images/web/pczone/coyote/l7-filter003.gif[/img]


----------------------------------------------------------------------------------


########################################
[color=#6633FF][b]補充 02:[/b] [/color] 2005/11/03
########################################

[b]淺談 Coyote 防火牆之工作原理[/b]
從底層 iptables 的角度來看

[img]http://home.pchome.com.tw/art/linux2005/images/web/pczone/coyote/f001.gif[/img]

Coyote 的防火牆,預設政策為「允許通過」

預設政策的意思是:
假如封包不符合任何使用者訂立的規則,則以預設政策來處理。


[img]http://home.pchome.com.tw/art/linux2005/images/web/pczone/coyote/f004.gif[/img]

iptables 的 filter 表格,內建只有三個鏈 (Chain):
[b]INPUT[/b]、[b]FORWARD[/b]、[b]OUTPUT[/b]

而 iptables 允許使用者新增自訂鏈
Coyote 在設計上,會自動新增一些自訂鏈

在「WEB 管理介面」中
有關防火牆方面的設定,其實是以 [b]Coyote 自訂的鏈[/b] 來處理
以下會進一步說明:


[img]http://home.pchome.com.tw/art/linux2005/images/web/pczone/coyote/f003.gif[/img]

上圖所示
在高級防火牆配置中,有兩種類型:
-------------------------------------
1.Admin (管理)
2.Access (訪問)

[img]http://home.pchome.com.tw/art/linux2005/images/web/pczone/coyote/f005.gif[/img]

1.Admin (管理) 實際上是寫入 Coyote 的自訂鏈:[b]remote-admin[/b]

此 [b]remote-admin[/b] 自訂鏈,是被安排在 [b]INPUT[/b] 鏈中

這說明了,所謂的類型 Admin (管理),是和 Coyote 本機有關的
它是用來管制誰能夠從遠端登入 Coyote 主機,進行操作


[img]http://home.pchome.com.tw/art/linux2005/images/web/pczone/coyote/f002.gif[/img]

2.Access (訪問) 實際上是寫入 Coyote 的自訂鏈: [b]access-acl [/b]

此 access-acl 自訂鏈:是被安排在 FORWARD 鏈中

所以它是和 NAT 有關係的
用來管制外部網路,和內部網路電腦的連線

至於 [b]Internet Interface (int-if)[/b] 和 [b]Internet (int-net)[/b] 選項的差別

如上圖所示,從 source (來源)端,我們可以看出:

Internet Interface (int-if),實際結果是 anywhere,和 any 選項是一樣的

Internet (int-net),則是指 ISP 的閘道端


經測試後發現
ISP 閘道端,並不等於 Internet (泛指網際網路 0.0.0.0)
阻擋 LAN 內電腦的封包,進入 ISP 閘道端
並無法阻擋其進入網際網路
所以這是一個詭異的選項,它實際上並沒有太大作用

若要從 WEB 管理介面設定防火牆
建議外部網路的選項,選擇 Internet Interface (int-if) 或者 any
才能真正起到保護作用

[b]註[/b]
在終端模式下,查詢 iptables 設定明細表的指令為:
----------------------------------------------
iptables -L (預設查詢 filter 表格)
iptables -t nat -L (指定查詢 nat 表格)
iptables -t mangle -L (指定查詢 mangle 表格)


######################################

其它補充....待續

:)

62chaokai 2005-10-03 03:25 PM

真是太讚了!佩服你的熱心,文我收下了。謝謝。應該請版主把這相關文章置頂。太有用的文章。

ropin 2005-10-03 04:37 PM

真是有用的資訊,不過看起來有點複雜,需要好好研究一下,這樣可以省下大把預算了,謝謝。
小弟覺得最有用的還是管理 P2P 方面。

rushoun 2005-10-03 07:10 PM

經典!經典!
linux_xp又出擊了!
真是感謝咧!趕快訂閱收起來!

joeing 2005-10-04 04:52 AM

真是鬨動武林,驚動萬教!
高手阿!!!!!
真是謝謝啦!!!!!

kevin0615 2005-10-04 04:33 PM

我的ADSL 1m/64k ,用上面的範例去修改,一台電腦每次上網開網頁時,另一台電腦在玩天堂2就會delay 2~3秒,可以幫我看一下哪邊有錯。

#!/bin/sh
#
# Coyote local command init script

# 清除 eth1 所有佇列規則
tc qdisc del dev eth1 root 2>/dev/null

# 定義最頂層(根)佇列規則,並指定 default 類別編號
tc qdisc add dev eth1 root handle 10: htb default 70

# 定義第一層的 10:1 類別 (總頻寬)
tc class add dev eth1 parent 10: classid 10:1 htb rate 8kbps ceil 8kbps

# 定義第二層葉類別
# rate 保證頻寬,ceil 最大頻寬,prio 優先權
tc class add dev eth1 parent 10:1 classid 10:10 htb rate 1kbps ceil 2kbps prio 2
tc class add dev eth1 parent 10:1 classid 10:20 htb rate 1kbps ceil 2kbps prio 2
tc class add dev eth1 parent 10:1 classid 10:30 htb rate 1kbps ceil 2kbps prio 3


tc class add dev eth1 parent 10:1 classid 10:40 htb rate 1kbps ceil 2kbps prio 0
tc class add dev eth1 parent 10:1 classid 10:50 htb rate 1kbps ceil 2kbps prio 1
tc class add dev eth1 parent 10:1 classid 10:60 htb rate 1kbps ceil 2kbps prio 1
tc class add dev eth1 parent 10:1 classid 10:70 htb rate 1kbps ceil 2kbps prio 1


# 定義各葉類別的佇列規則
# parent 類別編號,handle 葉類別佇列規則編號
# 由於採用 fw 過濾器,所以此處使用 pfifo 的佇列規則即可
tc qdisc add dev eth1 parent 10:10 handle 101: pfifo
tc qdisc add dev eth1 parent 10:20 handle 102: pfifo
tc qdisc add dev eth1 parent 10:30 handle 103: pfifo
tc qdisc add dev eth1 parent 10:40 handle 104: pfifo
tc qdisc add dev eth1 parent 10:50 handle 105: pfifo
tc qdisc add dev eth1 parent 10:60 handle 106: pfifo
tc qdisc add dev eth1 parent 10:70 handle 107: pfifo

# 設定過濾器
# 指定貼有 10 標籤 (handle) 的封包,歸類到 10:10 類別,以此類推
tc filter add dev eth1 parent 10: protocol ip prio 100 handle 10 fw classid 10:10
tc filter add dev eth1 parent 10: protocol ip prio 100 handle 20 fw classid 10:20
tc filter add dev eth1 parent 10: protocol ip prio 100 handle 30 fw classid 10:30
tc filter add dev eth1 parent 10: protocol ip prio 100 handle 40 fw classid 10:40
tc filter add dev eth1 parent 10: protocol ip prio 100 handle 50 fw classid 10:50
tc filter add dev eth1 parent 10: protocol ip prio 100 handle 60 fw classid 10:60
tc filter add dev eth1 parent 10: protocol ip prio 100 handle 70 fw classid 10:70



# QoS eth0 下載方面
#

# 清除 eth0所有佇列規則
tc qdisc del dev eth0 root 2>/dev/null

# 定義最頂層(根)佇列規則,並指定 default 類別編號
tc qdisc add dev eth0 root handle 10: htb default 70

# 定義第一層的 10:1 類別 (總頻寬)
tc class add dev eth0 parent 10: classid 10:1 htb rate 128kbps ceil 128kbps

# 定義第二層葉類別
# rate 保證頻寬,ceil 最大頻寬,prio 優先權
tc class add dev eth0 parent 10:1 classid 10:10 htb rate 1kbps ceil 86kbps prio 2
tc class add dev eth0 parent 10:1 classid 10:20 htb rate 1kbps ceil 86kbps prio 2
tc class add dev eth0 parent 10:1 classid 10:30 htb rate 1kbps ceil 86kbps prio 3

tc class add dev eth0 parent 10:1 classid 10:40 htb rate 16kbps ceil 101kbps prio 0
tc class add dev eth0 parent 10:1 classid 10:50 htb rate 8kbps ceil 93kbps prio 1
tc class add dev eth0 parent 10:1 classid 10:60 htb rate 8kbps ceil 93kbps prio 1
tc class add dev eth0 parent 10:1 classid 10:70 htb rate 8kbps ceil 93kbps prio 1

# 定義各葉類別的佇列規則
# parent 類別編號,handle 葉類別佇列規則編號
tc qdisc add dev eth0 parent 10:10 handle 101: pfifo
tc qdisc add dev eth0 parent 10:20 handle 102: pfifo
tc qdisc add dev eth0 parent 10:30 handle 103: pfifo
tc qdisc add dev eth0 parent 10:40 handle 104: pfifo
tc qdisc add dev eth0 parent 10:50 handle 105: pfifo
tc qdisc add dev eth0 parent 10:60 handle 106: pfifo
tc qdisc add dev eth0 parent 10:70 handle 107: pfifo

# 設定過濾器
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 10 fw classid 10:10
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 20 fw classid 10:20
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 30 fw classid 10:30
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 40 fw classid 10:40
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 50 fw classid 10:50
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 60 fw classid 10:60
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 70 fw classid 10:70

linux_xp 2005-10-04 08:35 PM

[QUOTE=kevin0615]我的ADSL 1m/64k ,用上面的範例去修改,一台電腦每次上網開網頁時,另一台電腦在玩天堂2就會delay 2~3秒,可以幫我看一下哪邊有錯。
[/QUOTE]

資訊太少,無法判斷

有幾台電腦需要頻寬管制?
網卡編號,哪個是對外,那個是對內?
頻寬分配表?

針對你的情況,以下為範例 :
(因為資訊不足,所以具體情況,都是用猜的,不一定完全符合你的環境,可能需要修改後才能套用)

[color=#3333FF][b]STEP.1[/b][/color]
首先要查出,對外網卡(管制上傳),對內網卡(管制下載),它們的編號是多少

[img]http://img397.imageshack.us/img397/3036/0016cc.gif[/img]

[img]http://img381.imageshack.us/img381/2706/0022jb.gif[/img]

如圖所示,這種情況的話,eth0 是對內網卡(管制下載),而 eth1 就是對外網卡(管制上傳)。

網卡的編號不是絕對的,可能每台機器都不相同,所以先觀察網卡編號,判斷哪個是「對外網卡」,那個是「對內網卡」。


[color=#3333FF][b]STEP.2[/b][/color]
先構想要如何分配頻寬

1M/64K,總下載 128KB/s,總上傳 8KB/s

假設只有兩台電腦好了,分別為:
192.168.1.1:玩天堂2專用的
192.168.1.2:看網頁用的

那麼規劃出 3 個類別:
---------------------------------------
[b]第一台電腦 - 玩天堂2用類別:[/b]線上遊戲要不LAG 最少要保證有4KB/s 上傳能力

[b]第二台電腦 - 看網頁用類別:[/b]看網頁首重下載,只要能動即可,速度不重要

[b]default 類別:[/b]為保留可能性額外加入的電腦,特地保留這個類別。例如有可能家中原本只有兩台電腦,某天臨時又插入一台需要上網,它就會吃 default 的類別頻寬。但是這個類別只是有備無患,並不一定會用到,所以保證頻寬設0。

[img]http://img111.imageshack.us/img111/2996/0032ca.gif[/img]


[color=#3333FF][b]STEP.3[/b][/color]

[b]tc 指令部份: (編輯任意檔:/etc/rc.d/rc.local )[/b]
[code]#!/bin/sh
#
# Coyote local command init script

#上傳方面
# 清除 eth1 所有佇列規則
tc qdisc del dev eth1 root 2>/dev/null

# 定義最頂層(根)佇列規則,並指定 default 類別編號
tc qdisc add dev eth1 root handle 10: htb default 30

# 定義第一層的 10:1 類別 (總頻寬)
tc class add dev eth1 parent 10: classid 10:1 htb rate 8kbps ceil 8kbps

# 定義第二層葉類別
# rate 保證頻寬,ceil 最大頻寬,prio 優先權
tc class add dev eth1 parent 10:1 classid 10:10 htb rate 4kbps ceil 6kbps prio 0
tc class add dev eth1 parent 10:1 classid 10:20 htb rate 2kbps ceil 4kbps prio 1
tc class add dev eth1 parent 10:1 classid 10:30 htb rate 0kbps ceil 2kbps prio 2

# 定義各葉類別的佇列規則
tc qdisc add dev eth1 parent 10:10 handle 101: pfifo
tc qdisc add dev eth1 parent 10:20 handle 102: pfifo
tc qdisc add dev eth1 parent 10:30 handle 103: pfifo
t
# 設定過濾器
tc filter add dev eth1 parent 10: protocol ip prio 100 handle 10 fw classid 10:10
tc filter add dev eth1 parent 10: protocol ip prio 100 handle 20 fw classid 10:20
tc filter add dev eth1 parent 10: protocol ip prio 100 handle 30 fw classid 10:30


# QoS eth0 下載方面
#

# 清除 eth0所有佇列規則
tc qdisc del dev eth0 root 2>/dev/null

# 定義最頂層(根)佇列規則,並指定 default 類別編號
tc qdisc add dev eth0 root handle 10: htb default 70

# 定義第一層的 10:1 類別 (總頻寬)
tc class add dev eth0 parent 10: classid 10:1 htb rate 128kbps ceil 128kbps

# 定義第二層葉類別
# rate 保證頻寬,ceil 最大頻寬,prio 優先權
tc class add dev eth0 parent 10:1 classid 10:10 htb rate 32kbps ceil 120kbps prio 0
tc class add dev eth0 parent 10:1 classid 10:20 htb rate 8kbps ceil 96kbps prio 1
tc class add dev eth0 parent 10:1 classid 10:30 htb rate 0kbps ceil 88kbps prio 2

# 定義各葉類別的佇列規則
tc qdisc add dev eth0 parent 10:10 handle 101: pfifo
tc qdisc add dev eth0 parent 10:20 handle 102: pfifo
tc qdisc add dev eth0 parent 10:30 handle 103: pfifo


# 設定過濾器
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 10 fw classid 10:10
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 20 fw classid 10:20
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 30 fw classid 10:30
[/code]


[color=#3333FF][b]STEP.4[/b][/color]

[b]iptables 設定方面: (高級防火牆配置 - 編輯自訂防火牆規則)[/b]
[code]
# uploads
# 設定上傳方面,先利用 iptables 給封包貼標籤,再交由 fw 過濾器進行過濾

iptables -t mangle -A PREROUTING -s 192.168.1.1 -j MARK --set-mark 10
iptables -t mangle -A PREROUTING -s 192.168.1.2 -j MARK --set-mark 20

# downloads
# 下載方面

iptables -t mangle -A POSTROUTING -d 192.168.1.1 -j MARK --set-mark 10
iptables -t mangle -A POSTROUTING -d 192.168.1.2 -j MARK --set-mark 20
[/code]


大致上就是這樣子
由於提供的資訊不足,所有環境的情況都是假設的
以上範例僅供參考,可能修要修改後才能套用

--------------------------------------------------------------

有時候指令看起來好像很長一大串,很複雜
其實去掉註解,就剩沒幾行了

再仔細去觀察去掉註解的指令串,可以發現
其實很多地方都是重複的,只有幾個數字在改變而已

仔細觀察一下,多實作幾次,就可以熟練了

:)

史萊姆 2005-10-28 12:17 AM

linux_xp你好:
我是用seednet 8m/640k
目前配置如下(上傳下載的速率可能要再確認過)
[img]http://home.pchome.com.tw/home/bell504/qos.jpg[/img]

不知這樣的配置還ok嗎??
我想請問
我是把emule和ftp放在同一台主機
它有辦法說分辦哪個優先嗎??
另ftp的保證上傳下載有限低限制嗎??
若某電腦有開機,但沒有做上網的動作(或者是關機)
那該保證上傳下載會空出來嗎??
謝謝

linux_xp 2005-10-28 04:44 PM

[QUOTE=史萊姆]linux_xp你好:

不知這樣的配置還ok嗎??
我想請問
我是把emule和ftp放在同一台主機
它有辦法說分辦哪個優先嗎??
另ftp的保證上傳下載有限低限制嗎??
若某電腦有開機,但沒有做上網的動作(或者是關機)
那該保證上傳下載會空出來嗎??
謝謝[/QUOTE]

1.OK,GOOD

2.
有,要辨識 P2P 封包,須使用 l7-filter
FTP 封包,建議也使用 l7-filter
因為 FTP 服務有兩組 port,其中一組是不固定的。


3.若不想讓 FTP 佔用太多頻寬,可將最大上傳/下載,手動調低,固定一個數字


4.保證頻寬(上傳/下載),不管任何時候,都不會被其它類別佔用
若該電腦沒開機使用,此頻寬就是空著浪費
所以此數字不宜設大,視服務需求而定

對反應速度比較要求的服務
需給予適當的保證頻寬,才能確保服務品質
例如:線上遊戲,網路視訊,網路電話....等等,對反應速度比較要求

若沒有保證頻寬,在頻寬分配的時候須搶頻寬,會有幾秒鐘不穩定的情況
這會導致玩線上遊戲一時 LAG,而造成角色趴掉,或者對戰時輸掉 SKYPE 講網路電話,會出現明顯斷斷續續....之類的

:)

史萊姆 2005-10-28 05:51 PM

[QUOTE=linux_xp]1.OK,GOOD

2.
有,要辨識 P2P 封包,須使用 l7-filter
FTP 封包,建議也使用 l7-filter
因為 FTP 服務有兩組 port,其中一組是不固定的。


3.若不想讓 FTP 佔用太多頻寬,可將最大上傳/下載,手動調低,固定一個數字


4.保證頻寬(上傳/下載),不管任何時候,都不會被其它類別佔用
若該電腦沒開機使用,此頻寬就是空著浪費
所以此數字不宜設大,視服務需求而定

對反應速度比較要求的服務
需給予適當的保證頻寬,才能確保服務品質
例如:線上遊戲,網路視訊,網路電話....等等,對反應速度比較要求

若沒有保證頻寬,在頻寬分配的時候須搶頻寬,會有幾秒鐘不穩定的情況
這會導致玩線上遊戲一時 LAG,而造成角色趴掉,或者對戰時輸掉 SKYPE 講網路電話,會出現明顯斷斷續續....之類的

:)[/QUOTE]
謝謝
那想再請問,我目前主機是用磁片來開機
開完機後skype可連線,msn不能連,而有一些網站可連一些又不行
這會是什麼原因…,電腦(非指主機,一般用的電腦)都要重開機再連線嗎??
(我本來是用Icop+硬碟在連線)

對於保證頻寬的部份
我可以說一台電腦設兩個部份(一個是一般使用,一個是skype)
然後skype保證頻寬為0,但優先權最高
這樣子可行嗎??謝謝


所有時間均為 +8。現在的時間是 10:40 AM



 XML   RSS 2.0   RSS 
本站使用 vBulletin 合法版權程式
站務信箱 : www@pczone.com.tw

本論壇所有文章僅代表留言者個人意見,並不代表本站之立場,討論區以「即時留言」方式運作,故無法完全監察所有即時留言,若您發現文章可能有異議,請 email :www@pczone.com.tw 處理。