先来说说我的情况。我所住的小区因为线路老化,只能装上下行512k/512k的ADSL(该死的中国电信为什么不改造线路)。带宽小了,下BT的时候上网就比拨号还慢,大一点的图片显示不出来。我又不想限制BT带宽,因为本来就慢了,还限制的话一部电影要下几天啊。终于五一的时候忍不住卖了老的Linksys Befsr41,冲着番茄强大的QoS去买了WRT54GS 1.1回来。拿回来就刷了番茄。经过一段时间的研究,终于把番茄的QoS全部研究了一遍。现在BT满负荷下载,上网还是快如飞(当然没有不下BT的时候那么快,不过比不用qos快太多了),一个字,爽。好东西当然要分享给大家。下面给大家一一介绍吧
8 c2 P, C- z! T+ z0 I3 B# T/ N! l
( W5 A' L n, `Basic (基本设置)2 |0 s$ u; M' v
! o6 k& D }6 K, m5 v
Enable QoS 激活QoS,选定。4 ?8 q- Z) L5 N7 A
! w$ ^4 q$ d1 T" OPrioritize ACK 提升ACK优先级。大家知道TCP协议是基于发送-〉应答机制的。服务器只有收到客户端的应答之后才会发送下一个数据包。ACK就是这个应答。默认这个选项是选定的。不过值得注意的是P2P软件会产生大量的ACK数据包。比如说在下载BT的时候,如果这个选项被选定的话,你就会看到许多不明的Highest流量。这些Highest的流量就是BT产生的ACK数据。所以如果你经常下载P2P软件的话我推荐把这个选项关闭,以免产生不必要的Highest流量。干扰其他正常的网络应用。
; q6 I+ z) i$ \6 C- [" o D3 y' ]+ \3 b* q, ]% N& t3 F
Prioritize ICMP 提升ICMP的优先级。ICMP就是Ping之类的数据包。选定这个选项的话,ping值会好看一些。6 _! }+ t: E+ m- V( }- O
; x' b1 y& n& I- B- nStrict Rule Ordering 严格按照规QoS则顺序执行。选定这个选项的话,QoS的规则就会按照Classification里面的顺序从头到尾执行,直到碰到一个符合的规则。否则L7,IPP2P规则会先被执行,然后才执行基于端口,IP地址的规则。建议选定,以便于精确控制。
" q1 x& S1 Y$ A
% J' k& A/ b% b7 R. |Reset Classification When Making Changes 在设置被改变的时候重置Classification。选定的话每次改变qos设置,所有的连接都会被重新评估。否则你必须从启动正在下载的程序,重新连接才能使设置生效。推荐选上。
- ~% y# y( Z# @/ K5 e9 i; Q7 m$ \3 \) F6 A$ r* F3 m
Default Class 缺省QoS级别。这个指的是所有未被定义的协议的优先级。这个要配合classification里面的设置来决定。默认是Low。5 C4 V% f5 q0 H. `7 k- V
N5 o1 a! v$ P2 w; r5 U& W0 G
Outbound Rate / Limit 7 v! n) L+ l% |/ b) D3 C. y7 R9 ?
Max Bandwidth kbit/s上行速度。注意,这个值千万不能乱填。它直接决定了qos是否能够正常工作。不适当的值不但qos不工作,严重的话在下载的时候连网都上不去了。这个值应该是你网络上行的最大带宽x90%。填得太大的话QoS就会发送比你的网络能承受的更多的数据,从而使网络阻塞,QoS也失去效果了。
# Z) b, R, k# w8 s; O! R) {/ ?2 J" c/ {5 [$ s
而且必须是实际的最大带宽而不理论最大带宽。比如说ADSL最大理论上行是512K,但是我实测下来只有400多K。因为ADSL传输的时候要给每个包加载包头还有校验位,占用了一定的带宽。大家一定想我怎么才能知道我最大上行呢?其实用番茄就可以测到。随便找一个BT的种子下载,要下得人多的。然后不限制上行速度。观察番茄的流量监视表,当上行速度稳定为一条直线的时候就是你的最大上行带宽。4 }2 f% u3 l% f
[3 J# Z( C- t/ z0 t
番茄把从高到低级别分为了Highest – 〉Class E几个级别。Highest是最高的级别。Class A -> E是番茄作者自己定义的几个级别,他的优先级比Lowest还低 E/ z/ z1 p% g6 W1 L% e
下面是我的设置,大家要根据自己的实际带宽相应设置。
& ^* T/ t" A% j7 h; x' F# M
0 \ T' d8 J9 l6 P' s5 N0 lHighest 320 - 400 kbit/s
. s) t8 X/ H* H8 V2 i$ `6 \ |2 fHigh 40 - 396 kbit/s
' L3 [9 N; e5 Y2 _: s% iMedium 20 - 392 kbit/s
; O3 ~! {' r* [9 A7 [+ A/ z! \Low 12 - 388 kbit/s
% w7 t5 M+ D% \& SLowest 8 - 380 kbit/s+ E- o. D1 G; u( l0 \. f. [
Class A 4 - 200 kbit/s1 ^1 a9 i7 D% j, s/ `* K
Class B 4 - 160 kbit/s
7 z/ _$ k' J) P, N* {6 e$ B6 jClass C 4 - 120 kbit/s
- v" ^8 `' w$ J SClass D 4 - 80 kbit/s
/ q8 L) W* _1 `; c. {& G: UClass E 4 - 40 kbit/s5 N9 L& ~ j) Y% L
' B) ?0 e" H. t7 y7 {$ ]9 H
' p8 s& j* P* t7 W
. s1 j; O* |0 ^# m3 d8 w
Inbound Limit5 y8 I, ?% w; e2 f; |
Max Bandwidth kbit/s 下行速度。其实这一项实际意义不大。下行的qos是没有意义的,因为数据包已经通过网络瓶颈(你的宽带线路)到达你的路由器了,再限制速度的话路由器只能丢弃多余的数据包。直接结果就是这些数据包不得不重新传一遍,白白浪费了网络带宽。下行的qos只有ISP支持才可能实现。大家可能会想,我只用上行的QoS有什么作用呢?我要的就是能够控制下行的速率啊。其实控制了上行,间接的也就控制了下行。你想想如果某个协议的网络请求能够优先发送出去,返回的数据是不是也相应的会先到达呢?+ }! P5 r* X F+ Q$ a
8 S' c/ n& Z$ `. H( Q/ z这里我填入了一个很大的值10000K,其他全部选None,不限制下行速度。9 L5 A* {1 Y4 p9 s4 n1 O- q, k
/ k2 N% w, Q k1 o
当然在特定的情况下,这个选项还是有用的。具体我就没有研究了。毕竟我只有512k的带宽,当然要榨干它。* ^* C6 t! F1 Z* T. L( r
8 ]8 O# p, S/ m, o9 RClassification (分类设定)8 V: i0 S" _0 T8 A& z
7 s' p% d0 S! D& W ]
这里就是设定哪个网络协议拥有什么样的优先级的地方拉。一共有3行。
, }& I& a6 d' z$ q+ W
2 v6 o- h* Y0 j( Y" m7 C# z第一行:% t5 x% M$ J4 \3 M
地址:可以是源或目标IP地址或MAC地址。如果你想控制来自某个客户端的,就要在这里填上相应的值。5 _% |$ ?; i( e2 g! f
优先级:Highest -> Class E。定义符合这条规则的网络协议的优先级。
0 Y3 I, x) @9 y) b- t [. \% P8 ~描述:对这条规则的简单描述。, t& q- n4 w+ E$ {/ v) }: m
5 l5 l4 x; I1 ^' {6 a第二行:
1 V8 @* d; T( S6 }8 w& c/ e网络协议:一般选TCP/UDP。除非是一些特殊的网络应用。* x' j1 C! {9 k; n# S: @1 V' i9 V
端口:应用于所有经过这个端口的数据
# J! w$ C2 q3 j% F: h0 P& f- {# S0 b4 t. r8 A
第三行:
! Y [* A6 Y$ l1 c4 o% ]IPP2P: 这是一种P2P协议的过滤器。能够识别常见的P2P协议,比如BT,电驴。不过我实际使用下来发现基本没用。
1 A# L `& G: [. T) k4 z2 E4 I% iLayer 7:第七层过滤器。这是一种非常高级的过滤器,工作于网络的最高层:应用层。它能够识别数据包里面的字符串,从而识别数据包是那个应用程序发出来的。番茄里面包含了许多常见的网络应用程序,如BT,电驴,迅雷,CS,魔兽等。
' H$ V8 L% D/ g& k
( c+ C( C0 N5 O/ [) T8 P0 e值得注意的是L7过滤器因为非常复杂,所以要小心使用。有些过滤器会overmatch,也就是说会把许多其他程序发出的数据包误认,比如说SkypeOut过滤器。有些过滤器会undermatch,也就是说不捕捉到全部的流量,比如说BT过滤器。实际使用中我发现Skype out过滤器会把大约5%的BT数据认为是skype的数据,而BT过滤器则有20%左右的BT数据没认出来。在这里我们要尽量把overmatch的过滤器放在后面,undermatch的放在前面,以减少误报的可能性。有些过滤器是另一些得子集,如果你把这些子集放在他们的父集后面,他们是不会生效的,因为父集过滤器已经把数据包截获了。例如,http-video是http得子集。另外,并不是所有的L7过滤器都能保证工作,有些实际上效果不佳。要了解更多的信息比如那些是overmatch/undermatch的,那些确定是有效的,请参看L7过滤器的主页http://l7-filter.sourceforge.net/protocols
0 \: _$ e1 Z' b2 _/ G: q: M4 Y
; u% _' s& Y( t* q9 n另外值得注意的是L7过滤器很占用系统资源,它会明显占用CPU和内存的使用。加载了不少L7的过滤器后,我的WRT54GS(32M内存)的内存使用稳定在21M左右。用WRT54G的兄弟可得悠着点,因为只有16M。内存溢出的话说不定就死机了。. C5 L) a# k- j8 `7 L
+ ^, S% J9 @6 [/ {9 Q
在这些设置里面,端口/IP地址的过滤器是最有效的,能够100%的有效,而且资源占用率最低。IPP2P和L7过滤器并不是100%有效。/ }+ a. X' M5 C* `
& X' s8 C) \* S. q' ^' ]: C下面是我的一些设置,大家还要根据自己的实际情况量身定做。。
$ g2 O5 x/ A$ Q* {. e9 ?& z0 r) v: D7 w" Q4 z6 \& [
TCP/UDP
) X( @7 }+ G' D$ \4 g( S7 b* X) z; n+ TDst Port: 53 Highest DNS
( S& Y1 Z# A& C3 t2 h/ |DNS非常重要,一定要设置为最高,并且放在最前面。不这样的话在大量下载的时候,DNS数据包可能会因为网络阻塞发送不出去,导致网页无法访问。
. i W1 }2 U, h1 B; s2 V3 a( L* Z* E0 ]0 X1 ~& b7 T& a
; h" A5 S2 ^/ V4 Y! Z( ?8 W7 c1 W$ W
TCP/UDP
0 }3 D& E6 d5 O! t' ^Port: 500,1701,1723,4500,3389,33089 High VPN,RDP5 _; }( F9 ?; ?( h e! L
我经常使用公司的VPN,把VPN设为高,保证VPN连接可靠。- m' I- F/ i1 J& O. I' i
( g2 c& P s; w* X
TCP$ g. h1 W) `, r! e7 _6 T
Dst Port: 80,4437 m7 H) W, C j" T7 Y+ z- i @! n
Transferred: 0 - 1024KB Medium HTTP 0-1024k
% m7 W: U' R9 U4 r6 ?TCP# @ M& V. F- g4 J- Z, u- O' D
Dst Port: 80,443! C# L% {; x" c7 R3 F. f9 i& |
Transferred: 1024KB+ Low HTTP 1024k+
/ s8 D2 M/ o6 mHTTP优先级设为中。也就是浏览网页的优先级。每个http连接流量超过1024k后优先级为低,保证了HTTP下载文件不会影响网络的浏览。
* n: }" y1 B7 D
- I5 o, \6 D( a. ^$ l! A5 |; P4 YTCP3 {8 n! l! K, }+ D3 i- j
Dst Port: 21 Low FTP) i1 e( F' U" m" S$ \( l$ ~
ftp优先级为低,保证ftp下载不会影响网络浏览。% X8 c0 J- X8 C
% z7 w4 K8 n9 iL7: bittorrent Lowest BT
* n' z9 n& Z! k& M& V% _) C5 `* ^TCP/UDP9 {" ~; Y5 \- d! q g4 t' R
Port: 25000 Lowest BT
* o2 q& J2 f! J4 X0 c$ HBT 优先级设为最低,BT下载不会影响其他任何应用。在这里我使用了L7和端口两种过滤器,完全保证了所有BT流量都被过滤了。另外需要注意的是BT客户端的连接数不要设的太高了,否则效果打折扣。我512k的带宽,BitComet设置全局100个下行连接50个上行连接正好。 |