%!PS %%Title: Guide pratique de la gestion de bande passante d'une ligne ADSL %%Creator: html2ps version 1.0 beta5 %%EndComments save 2000 dict begin /d {bind def} bind def /D {def} d /t true D /f false D /FL [/Times-Roman /Times-Italic /Times-Bold /Times-BoldItalic /Courier /Courier-Oblique /Courier-Bold /Courier-BoldOblique /Helvetica /Helvetica-Oblique /Helvetica-Bold /Helvetica-BoldOblique] D /WF t D /WI 0 D /F 1 D /IW 471 F div D /IL 621 F div D /PS 791 D /EF [0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 2 2] D /EZ [11 9 19 17 15 13 12 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 8 8] D /Ey [0 0 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] D /EG [-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1] D /Tm [1 1 0.8 0.8 0.8 0.8 0.8 0.8 0 0 0 0 0 0 0.5 1 1 1 1 0 0 1.3 0 0] D /Bm [1 1 0.5 0.5 0.5 0.5 0.5 0.5 0 0 0 0 0 0 0.5 1 1 1 1 0 0 1 0 0] D /Lm [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 2 0 0 2 0 0 0] D /Rm [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0] D /EU [-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0] D /NO f D /YY [[{()}1][{()}0][{()}2]] D /ZZ [[{()}1][{()}0][{()}2]] D /Ts EZ 0 get D /TU f D /Xp t D /AU f D /SN 0 D /Cf f D /Tp f D /Fe f D /TI 1 Ts mul D /Fm 14 D /xL 71 D /xR 71 D /yL 706 D /yR 706 D /Wl 471 F div D /Wr 471 F div D /hL 621 F div D /hR 621 F div D /FE {newpath Fm neg Fm M CP BB IW Fm add Fm L IW Fm add IL Fm add neg L CP BB Fm neg IL Fm add neg L closepath} D /LA {PM 0 eq{/IW Wl D /IL hL D}{/IW Wr D /IL hR D}ie /W IW D /LL W D /LS W D TU PM 0 eq and{IW 56 F div add SA{Sf div}if 0 translate} {PM 0 eq{xL yL}{xR yR}ie translate F SA{Sf mul}if dup scale CS CF FS Cf{CA CL get VC}if /Bb f D}ie 0 0 M TF not Tc or {Cf{gsave SA{1 Sf div dup scale}if Cb VC FE fill grestore}if}if}D /Pi 0 Ts mul D /SG [0.8 1 1] D /Ab 15 D /J 0 D /Tc f D /NH 6 D /Nf f D /Pa f D /LH 1.2 D /XR f D /Xr {/pN E D ( [p ] )WB} D /Db [16#FF 16#FF 16#FF] D /Dt [16#00 16#00 16#00] D /eA f D /Fi f D /bT f D /Lc t D /Dl [16#00 16#00 16#00] D /LX f D /Br 0.25 D /IA ([IMAGE]) D /DS {/PF f D()WB NL NP()pop RC ZF} D /Gb f D /Mb t D /Hc [16#00 16#00 16#00] D /Bl 3 D /MI -15.2 D /DX (DRAFT) D /Di 0 D /Tt 113.385826771654 D /Th {()2 Al()BR ( ) 0 1 -1 H()4 FZ()ES()EH ( ) 0 2 -1 H (0author]) EH()Ea()BR()} D /tH {()0 1 -1 H (Table of Contents) EH()} D /FD 2 D /Dy 2 D /cD [16#F0 16#F0 16#F0] D /FW 0.6 D /FU [16#00 16#00 16#00] D /ET {/RM f D /A0 0 D /PN SN D /OU t D /Ou t D /W IW D /LL W D D1 Ms not TP and{Ip}if /TF f D} D %-- End of variable part -- /MySymbol 10 dict dup begin /FontType 3 D /FontMatrix [.001 0 0 .001 0 0 ] D /FontBBox [25 -10 600 600] D /Encoding 256 array D 0 1 255{Encoding exch /.notdef put}for Encoding (e) 0 get /euro put /Metrics 2 dict D Metrics begin /.notdef 0 D /euro 651 D end /BBox 2 dict D BBox begin /.notdef [0 0 0 0] D /euro [25 -10 600 600] D end /CharacterDefs 2 dict D CharacterDefs begin /.notdef {} D /euro{newpath 114 600 moveto 631 600 lineto 464 200 lineto 573 200 lineto 573 0 lineto -94 0 lineto 31 300 lineto -10 300 lineto closepath clip 50 setlinewidth newpath 656 300 moveto 381 300 275 0 360 arc stroke -19 350 moveto 600 0 rlineto -19 250 moveto 600 0 rlineto stroke}d end /BuildChar{0 begin /char E D /fontdict E D /charname fontdict /Encoding get char get D fontdict begin Metrics charname get 0 BBox charname get aload pop setcachedevice CharacterDefs charname get exec end end}D /BuildChar load 0 3 dict put /UniqueID 1 D end definefont pop /Cd {aload length 2 idiv dup dict begin {D} repeat currentdict end} D /EX {EC cvx exec} D /DU {} d /BB {pop pop}d /ie {ifelse} d /E {exch} d /M {moveto} d /R {rmoveto} d /L {lineto} d /RL {rlineto} d /CP {currentpoint} d /SW {stringwidth} d /GI {getinterval} d /PI {putinterval} d /Sg {setgray} d /LW {setlinewidth} d /S {dup () ne OU and{0 Co R AT 3 eq LB and HF not and A1 0 ne A2 0 ne or and {A2 0 32 A1 0 6 -1 roll awidthshow}{show}ie 0 Co neg R}{pop}ie OU PH 3 eq or{/Ms t D}if} D /U {OU{gsave CP currentfont /FontInfo get /UnderlinePosition get 0 E currentfont /FontMatrix get dtransform E pop add newpath M dup SW pop CJ 0 RL stroke grestore}if} D /B {OU Br 0 gt and{CP Ts neg Ts .33 mul R gsave 0 Sg CP newpath Ts Br mul 0 360 arc closepath UI 2 mod 0 eq{stroke}{fill}ie grestore M CP E Ts Br 1 add mul sub E BB /Ms t D}if}D /NP {Ms TP not or PA and OU and{TP{OR}if f1{mF k2 /mF E D /YC 0 D}if TP TU not PM 0 eq or and{showpage}if DU Ip TE not{LA}if 0.6 LW /CI 0 D /TP t D /Hs f D /hl 6 D /Hv 6 D /HI hi D /Ms f D}if Bs XO BO M} D /Np {LE sub CP E pop gt PL 0 eq and{NP}if}D /Ip {/PN PN 1 add D /Pn RM{1}{4}ie PN Ns D /PM PN SN sub 2 mod D} D /GP {E dup 3 -1 roll get PN 1 add 2 mod get dup type /integertype eq {get 0 get}{E pop}ie}d /Fc {dup 2 GP exec SW pop /S1 E D dup 1 GP exec SW pop /S2 E D 0 GP exec SW pop /S3 E D S1 0 gt{S2 2 mul S1 add S3 2 mul S1 add 2 copy lt{E}if pop}{0}ie S2 S3 add 2 copy lt{E}if pop IW .9 mul div dup 1 gt{1 E div}{pop 1}ie}D /OR {Df{Sd}if tp not{gsave SA{1 Sf div dup scale}if Fe{Cf{FU VC}if FW LW 1 setlinejoin FE stroke}if /YO {60 F div dup 40 gt{pop 40}if}D /cs CS D /cf CF D /CF 0 D /pf PF D /PF f D /Fn FN D /At AT D /AT 0 D /FN EF Hf 1 add get D Fz Fs FS ZZ Fc Fz mul Fs FS EU Hf 1 add get dup type /arraytype eq Cf and{VC}{pop 0 Sg}ie IW IL neg YO sub M ZZ 1 GP exec dup SW pop neg 0 R Sh 0 IL neg YO sub M ZZ 0 GP exec Sh ZZ 2 GP exec dup SW pop IW E sub 2 div IL neg YO sub M Sh Fz Fs FS NO{/AW IW Pn SW pop sub D AW 2 div IL neg YO sub S1 0 gt S2 AW .45 mul gt or S3 AW .45 mul gt or{Fz 2 mul sub}if M Pn Sh}if EU Hf get dup type /arraytype eq Cf and{VC}{pop 0 Sg}ie YY Fc /FN EF Hf get D Hz mul HS FS IW YO M YY 1 GP exec dup SW pop neg 0 R Sh 0 YO M YY 0 GP exec Sh YY 2 GP exec dup SW pop IW E sub 2 div YO M Sh /FN Fn D /AT At D t Pb XO SZ SL get neg R /PF pf D grestore /CF 0 D cs cf FS}if}D /Sh {dup () ne{CP Hz 4 div sub BB show CP CS add BB}{pop}ie}D /Pb {/OU E D /Ou OU D /PB t D 0 0 M Ba{/Sa save D /BP t D /Fl t D RC /PL 0 D /PH 0 D /W IW D /LE IL .7 mul D /EO 0 D SI ZF /YA 0 D /BO 0 D /C1 () D BA 0 Ts neg R Bb{Xl Yl Xh Yh}if Bb CP Sa restore M {/Yh E D /Xh E D /Yl E D /Xl E D}if /Fl t D}if BL /OU t D /HM f D /Ou t D /PB f D} D /Bs {/BP Ba not D}D /reencodeISO { dup dup findfont dup length dict begin{1 index /FID ne{D}{pop pop}ie}forall /Encoding ISOLatin1Encoding D currentdict end definefont} D /ISOLatin1Encoding [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon /less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N /O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright /asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m /n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/space/exclamdown/cent/sterling/currency/yen/brokenbar /section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot /hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior /acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine /guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex /Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis /multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute /Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis /aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave /iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex /otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis /yacute/thorn/ydieresis ] D [128/backslash 129/parenleft 130/parenright 141/circumflex 142/tilde 143/perthousand 144/dagger 145/daggerdbl 146/Ydieresis 147/scaron 148/Scaron 149/oe 150/OE 151/guilsinglleft 152/guilsinglright 153/quotesinglbase 154/quotedblbase 155/quotedblleft 156/quotedblright 157/endash 158/emdash 159/trademark] aload length 2 idiv 1 1 3 -1 roll{pop ISOLatin1Encoding 3 1 roll put}for /colorimage where{pop}{ /colorimage { pop pop /Pr E D {/Cv Pr D /Gr Cv length 3 idiv string D 0 1 Gr length 1 sub {Gr E dup /i E 3 mul D Cv i get 0.299 mul Cv i 1 add get 0.587 mul add Cv i 2 add get 0.114 mul add cvi put}for Gr} image} D }ie /pdfmark where{pop}{userdict /pdfmark /cleartomark load put}ie WF{FL{reencodeISO D}forall}{4 1 FL length 1 sub{FL E get reencodeISO D}for}ie /Symbol dup dup findfont dup length dict begin {1 index /FID ne{D}{pop pop}ie}forall /Encoding [Encoding aload pop] dup 128 /therefore put D currentdict end definefont D /SF {/CS E D SZ SL CS put FO SL FN put /YI CS LH neg mul D dup ST cvs ( ) join CS ST cvs join C1 E join ( NF ) join /C1 E D CS NF /Wf WF FN 0 gt or D /BW Wf{( ) SW pop}{0}ie D}D /NF {/cS E D /cF E D cF 0 ge{FL cF get}{cF -1 eq{/Symbol}{/MySymbol}ie}ie findfont cS scalefont setfont} D /FS {CF or /CF E D FR SL CF put CF CF 0 ge{FN 4 mul add}if E SF} D /PC {SH /BP f D fin not GL not and{NL}if /HM t D /LL LS D} D /BS {/TX E D Wf{/fin f D /CW 0 D /LK 0 D /SC 0 D /RT TX D {RT ( ) search{/NW E D pop /RT E D /WH NW SW pop D CW WH add LL gt {TX SC LK SC sub 1 sub NN GI GL{SH cF cS OC 2 copy cS ne E cF ne or{NF}{pop pop}ie}{PC /CW WH BW add D}ie /SC LK D} {GL{JC}if /CW CW WH add BW add D /HM t D}ie /GL f D /Ph f D /LK LK NW length 1 add add D}{pop exit}ie}loop /fin t D TX SC LK SC sub GI SH RT () ne{GL not{CC}if}if /LC TX length D /WH RT SW pop D CW WH add Hy{HC SW pop add}if LL gt {RT GL{SH cF cS OC 2 copy cS ne E cF ne or{NF}{pop pop}ie Hy{/Ph t D}if /LL LS D}{NL /LL LS D SH}ie} {RT PC Hy{CC}if /Ph Ph Hy or D}ie RT () ne{/GL t D /HM t D}if} {TX SW pop LL le{TX SH}{/NW () D 0 2 TX length 1 sub {/CW E D TX 0 CW GI dup SW pop LL gt{pop NW SH /HM t D NL/LL W XO sub MR sub D /CW CW 2 sub NN D /TX TX CW TX length CW sub GI D TX BS exit} {/NW E D}ie}for}ie}ie /HM t D}D /CC {C0 length 0 gt{JC}if /C0 [C1 L1 YA YB Mf NS NB TB AF Bw] D /C1 () D /L0 L1 D /YA 0 D /YB 0 D /Mf 0 D /NS 0 D /NB 0 D}D /JC {C0 aload length 0 gt{pop pop pop NB add /NB E D NS add /NS E D dup Mf gt{/Mf E D}{pop}ie dup YB gt{/YB E D}{pop}ie dup YA gt{/YA E D}{pop}ie pop C1 join /C1 E D /C0 [] D}if}D /OC {C0 length 0 gt{C1 L1 L0 sub YA YB Mf NS NB TB AF Bw GL C0 aload pop /Bw E D /AF E D /TB E D /NB E D /NS E D /Mf E D /YB E D /YA E D /C0 [] D /L1 E D /C1 E D Ph{HC SH}if NL /GL E D /Bw E D /AF E D /TB E D /NB E D /NS E D /Mf E D /YB E D /YA E D /L1 E D /LL W L1 sub XO sub MR sub WH sub D /CW 0 D C1 E join /C1 E D}if}D /BT {/LB t D dup length string copy RS dup dup () ne E ( ) ne and {/CI 0 D /LS LL D /LL W L1 sub XO sub MR sub D BS} {dup ( ) eq{/GL f D}if dup () eq L1 0 eq or{pop}{SH /BP f D /Ph f D}ie}ie /LB f D} D /BL {CP E pop XO E M} D /NL {JC /GL f D /SK W XO sub MR sub L1 sub TB{Bw add}if D /YA LF{Mf HM Fl not and PF or{LH mul}if}{0 /LF t D}ie YA 2 copy lt{E}if pop D C1 () ne{/FB YB Mf SA{Sf mul}if 4 div 2 copy lt{E}if pop D}if Fl{/Ya YA D}if CP E pop YA sub YB sub LE neg lt Fl not and PB not and{NP}if NT TL BL OU PF not and PB or{/RE L1 TB{Bw sub}if W XO sub MR sub div YA YB add LE BO add div 2 copy lt{E}if pop D RE 1 gt{BL 1 RE div dup scale}if}if AT 2 le{SK AT mul 2 div YA neg R}if AT 3 eq{0 YA neg R TB{/NB NB 1 sub D /NS NS 1 sub D}if /NB NB 1 sub NN D /A3 NS 6 mul NB add D NS NB add 0 eq {/A1 0 D /A2 0 D} {NS 0 eq{/A1 SK NB div dup J gt{pop 0}if D /A2 0 D}{J A3 mul SK lt {/A1 J D /A2 SK J NB mul sub NS div dup Ab gt{/A1 0 D pop 0}if D} {/A1 SK A3 div D /A2 A1 6 mul D}ie}ie}ie /A1 A1 NN D /A2 A2 NN D}if AT 4 eq{0 YA neg R PH 2 le{PD 0 lt{/PD L1 D}if PD M1 gt{/M1 PD D}if L1 PD sub M2 gt{/M2 L1 PD sub D}if}{DV ID 1 sub get 0 ge{Lo 0 R}if}ie}if F0 cF ne Cs cS ne or{F0 Cs NF}if /ms Ms D /Ms f D CP FB sub C1 cvx exec XO EO sub L1 add TB{BW sub}if dup LM gt{/LM E D}{pop}ie PH 0 eq PH 4 eq or Ms and{HF not{/PO t D /AH t D}if BB CP YA add E AT 3 eq LB and{A1 sub}if TB{BW sub}if E BB} {pop pop}ie Ms HM PH 3 eq and or{/BP f D /Fl f D}if /Lo 0 D /L1 0 D /F0 cF D /Cs cS D BP not{0 YB NN neg R}if OU f1 and mF not and{k2 /f1 f D}if OU PF not and PB or{RE 1 gt{RE dup scale}if}if /Ms ms Ms or D /C1 AF{(Cp )}{()}ie D /YA 0 D /YB 0 D BL AT 4 eq LB not and PH 3 ge and {ID DV length lt{DV ID get dup 0 ge{DO E sub /Lo E D /L1 Lo D}{pop}ie /ID ID 1 add D}if}if /T t D CD{/LN LN 1 add D PD}if /PD -1 D /NS 0 D /NB 0 D /TB f D /Ph f D /Mf 0 D /HM f D} D /RS {/TM E D /CN 0 D TM{10 eq{TM CN ( ) PI}if /CN CN 1 add D}forall /CN 0 D /BK HM EN and{0}{1}ie D TM {dup 32 ne{TM CN 3 2 roll put /CN CN 1 add D /BK 0 D} {pop BK 0 eq{TM CN 32 put /CN CN 1 add D}if /BK 1 D}ie}forall TM 0 CN GI dup dup () ne E ( ) ne and {dup CN 1 sub get 32 eq{/EN f D}{/EN t D}ie}if} D /join {2 copy length E length add string dup 4 2 roll 2 index 0 3 index PI E length E PI}d /WR {(\n) search{dup () ne BP not or {Li 4 le CP E pop YI Li mul add LE add 0 lt and PL 0 eq and{NP}if SH NL pop /Li Li 1 sub D WR}{pop pop WR}ie}{SH}ie /CI 0 D /BP f D} D /SH {dup dup () ne E ( ) ne and PF or CS Mf gt and{/Mf CS D}if T not Wf and{( ) E join /T t D}if dup BP{/MF CS D}if AT 3 eq{2 copy length dup 0 gt{/NB E NB add D {( ) search{/NS NS 1 add D pop pop}{pop exit}ie}loop}{pop pop}ie}if CD PD 0 lt and{dup DC search{SW pop /PD E L1 add D pop pop}{pop}ie}if 0 Np dup SW pop L1 add /L1 E D dup () ne {C1 (\() join E join (\)) join AU AF and UF or Wf and{( U ) join}if sF{( s ) join}if ( S ) join /C1 E D dup length 1 sub get 32 eq /TB E D /Bw BW D}{pop pop}ie} D /BG {AI LG BC add add 0 eq} D /ON {OU{Ty AR AI NN get dup 1 add Ln Ns Ty 2 mod 0 eq{(. )}{(\) )}ie join dup SW pop neg 0 R CP E 0 lt{0 E M}{pop}ie CP BB show /Ms t D}if} D /Ln {AR AI 3 -1 roll put}D /SP {dup CI lt BP not and{dup CI sub 0 E R /CI E D}{pop}ie} D /BN {PF{WR /HM f D}{BT NL}ie} D /NN {dup 0 lt{pop 0}if} D /h {(h) HI ST cvs join cvx exec dup 1 get E Nf{0 get E join}{pop}ie} D /H {/fn FN D /Hi E 1 add D 1 sub /HL E D /H2 HL 2 add D /GS EZ H2 get D E Tm H2 get GS mul BE dup 0 gt{1 sub}{pop EG H2 get dup 0 lt{pop AT}if}ie NA WW Np /SL SL 1 add D /FN EF H2 get D GS Ey H2 get FS EU H2 get Sc Hs not HL Hl lt and Hs HL hl lt and or Hi 0 eq or {/HI Hi D /Hs t D /hl HL D /Hv HL D}if HL Hl lt{/hi Hi D}if Nf HI 0 gt and{(h) Hi ST cvs join cvx exec 0 get WB}if /HF t D /AH f D /PO f D} D /EH {Bm H2 get GS mul BE OA /SL SL 1 sub NN D /CF 0 D /FN fn D SZ SL get FR SL get FS /HF f D /GS Ts D ()Ec} D /P {E PF{WR}{PO{EP}{BN}ie Ts 4 mul Np AE not{Tm 0 get Ts mul neg SP}if dup 0 ge AH and{Pi Pd}if}ie 1 sub dup 0 lt{pop AV AL get}if /AT E D /PO t D} D /EP {PF{WR}{BN Ts 4 mul Np}ie AE not{Bm 0 get Ts mul neg SP}if /AT AV AL get D /PO f D} D /BE {E PO{EP}{BN}ie Ts 4 mul Np neg SP} D /HR {/Aw W EO sub D /RW E dup 0 gt{Aw mul}{neg}ie dup Aw gt{pop Aw}if D /RZ E D E BN Ts neg SP 1 sub 2 div Aw RW sub mul EO add CP E pop M PF{0 Ps neg R}if 0 Np OU{gsave RZ LW Cf{Hc VC}{0 Sg}ie CP BB RW 0 RL CP BB stroke grestore}if /CI 0 D /BP f D PF not{Ts neg SP}if /Ms t D} D /AD {I NL EG 14 get dup 0 lt{pop AT}if NA /AE t D Tm 14 get Ts mul neg SP Cf{EU 14 get dup -1 eq{pop CA CL get}if Sc}if} D /DA {BN ()ES OA /AE f D ()Ec Bm 14 get Ts mul neg SP} D /PR {/MW E D /Li E D Tm 1 get Ps mul BE 0 NA /FN Fp D /PF t D SI /SL SL 1 add D /CF 0 D Ps CS mul Ts div MW WC mul CS mul Ts div dup LL gt PL 0 eq and {LL div div}{pop}ie Ey 1 get FS CP E pop LE add YI neg div cvi dup Li lt AH and{4 lt YI Li mul 5 mul LE add 0 gt or PL 0 eq and{NP}if}{pop}ie EU 1 get Sc /GS Ps D}D /RP {WR NL () /PF f D SI /FN 0 D ES Bm 1 get Ps mul neg SP OA /GS Ts D} D /SI {/XO Lm 15 get BC NN mul Lm 16 get AI UI sub NN mul add Lm 17 get UI NN mul add Lm 20 get LG NN mul add Ts mul PF{Lm 1 get Ps mul add}if EO add D /MR Rm 15 get BC NN mul Rm 16 get AI UI sub NN mul add Rm 17 get UI NN mul add Rm 20 get LG NN mul add Ts mul PF{Rm 1 get Ps mul add}if D /LL W XO sub MR sub D} D /DT {/cC E D BN /LG LG 1 sub D SI /LG LG 1 add D WW 2 div Np BL} D /DD {WB Cc 0 eq cC 0 eq and L1 0 eq or Lm 20 get Ts mul L1 sub TB{BW add}if Ts 2 div lt or NL /LF E D SI BL /cC 0 D} D /DL {Dc LG Cc put /Cc E D BG{Tm 18 get Ts mul BE}{BN}ie /LG LG 1 add D BL} D /LD {BN LG 0 gt{/LG LG 1 sub D}if /Cc Dc LG get D SI BG{()Bm 18 get Ts mul BE}if BL} D /UL {BG{Tm 17 get Ts mul BE}{BN}ie NR AI NN 0 put /UI UI 1 add D /AI AI 1 add D SI BL} D /LU {BN /UI UI 1 sub D /AI AI 1 sub D SI BG{()Bm 17 get Ts mul BE}if BL} D /OL {E BG{Tm 16 get Ts mul BE}{BN}ie TR AI NN Ty put /Ty E D NR AI NN 1 put /AI AI 1 add D SI BL 1 Ln} D /LO {BN /AI AI 1 sub D /Ty TR AI get D SI BG{()Bm 16 get Ts mul BE}if BL} D /LI {E BN -1 SP /BP f D /CI 0 D 0 Np NR AI 1 sub NN get 1 eq {dup dup 0 gt E 4 le and{/Ty E D}{pop}ie /L1 L1 Ty AR AI NN get Ns SW pop XO sub dup 0 lt{pop 0}if add D ( ON )} {pop ( B )}ie C1 E join /C1 E D CS Mf gt{/Mf CS D}if BL} D /BQ {Tm 15 get Ts mul BE /BC BC 1 add D SI BL} D /QB {Bm 15 get Ts mul BE /BC BC 1 sub D SI BL} D /Al {E EP 1 sub dup 0 lt{pop AV AL get}if NA} D /Ea {EP OA} D /WB {PF{WR}{BT}ie} D /F1 {WB /FN 0 D CS 0 FS} D /F2 {WB /FN WI D CS 0 FS} D /HY {/Hy t D WB /Hy f D} D /YH {WB} D /A {/LT E D LT 1 eq{/RN E D}if /Lh E D WB /C1 C1 ( Cp ) join D Lc AF not and{Cl Sc}if /AF t D} D /EA {Lc AF and{Ec}{WB}ie TL Pa AF and Lh 0 ne and {( \() Lh join (\)) join /AF f D WB}if /AF f D} D /TL {C1 ( Tl ) apa /C1 E D} d /apa {AF OU and Lh 0 ne LT 1 eq or and{LT 1 eq{RN ( /) E ST cvs join} {(\() Lh join (\)) join}ie E join join}{pop}ie} d /Cp {/Xc CP /Yc E D D} D /SS {Cf{dup 0 ge{EU E get dup -1 eq{pop CA CL get}if}{pop CA CL get}ie Sc} {pop}ie SZ SL get /SL SL 1 add D} D /I {WB 8 SS 1 FS} D /EM {WB 8 SS /CF CF 1 xor D 0 FS} D /BD {WB 9 SS 2 FS} D /TT {WB 10 SS /FN Fp D 0 FS} D /KB {WB 11 SS /FN Fp D 2 FS} D /CT {WB 12 SS 1 FS} D /SM {WB 13 SS /FN Fp D 0 FS} D /Q {/QL QL 1 add D QO QL 2 mod get La get join WB} D /EQ {QC QL 2 mod get La get join WB /QL QL 1 sub D} D /RO {WB -1 SS /CF 0 D 0 FS} D /SY {WB -1 SS -1 FS} D /MY {WB -1 SS -2 FS} D /ES {WB /SL SL 1 sub NN D /CF 0 D /FN FO SL get D SZ SL get FR SL get FS ()Ec}D /FZ {3 sub 1.2 E exp GS mul E WB TL /C1 C1 ( Cp ) join D /SL SL 1 add D 0 FS} D /Ef {WB TL ()ES /C1 C1 ( Cp ) join D} D /BZ {dup /Bf E D FZ}D /Sc {dup -1 ne Cf and{/CL CL 1 add D dup 0 eq{pop [0 0 0]}if dup CA E CL E put VS ( VC ) join C1 E join /C1 E D}{pop}ie} D /Ec {WB Cf{/CL CL 1 sub NN D CA CL get VS ( VC ) join C1 E join /C1 E D}if} D /VS {dup type /arraytype eq{([) E {ST cvs join ( ) join}forall (]) join}if} D /VC {{255 div}forall setrgbcolor} D /Sl {dup type /integertype ne{Ds}if /La E D WB}d /UN {WB /UF t D} D /NU {WB /UF f D} D /SE {WB /sF t D} D /XE {WB /sF f D} D /sM {/C1 C1 ( k1 ) join D}d /eM {/C1 C1 ( k2 ) join D}d /k1 {/YC CP E pop Ts add D /mF t D /f1 t D}d /k2 {gsave 3 LW -9 CP E pop Ts 0.2 mul sub M -9 YC L stroke grestore /mF f D}d /Ac {/AC E D WB}d /Ca {eA{( \()join AC join(\) )join}if WB}d /s {OU{gsave 0 CS .25 mul R dup SW pop CJ 0 RL stroke grestore}if}D /CJ {AT 3 eq LB and{E dup dup length 1 sub A1 mul E {( ) search{pop pop E A2 add E}{pop exit}ie}loop 3 -1 roll add W CP pop sub 2 copy gt{E}if pop}if}D /So {/Co E D} D /SO {C1 Yo ST cvs join ( So ) join /C1 E D (j) SW pop 2 div Pd} D /Se {E WB CS E div Pd}D /Pd {dup type /stringtype eq{SW pop}if dup /L1 E L1 add D ST cvs ( 0 R ) join C1 E join /C1 E D} D /Sp {0.35 CO} D /Sb {-0.2 CO} D /CO {OV Io Yo put /Yo E CS mul Yo add D /Io Io 1 add D -1.5 Io mul 3 add FZ SO CS Yo add dup YA gt{/YA E D}{pop}ie Yo neg dup YB gt{/YB E D}{pop}ie} D /Es {ES /Io Io 1 sub NN D /Yo OV Io get D SO} D /SB {/N2 0 D 0 1 NI{/N E D{IX N2 get 0 lt{/N2 N2 1 add D}{exit}ie}loop /K WS N get FC N get mul D /NY AY N2 get D /BV NY array D 0 1 NY 1 sub{/TM K string D currentfile TM readhexstring pop pop BV E TM put} for BM N BV put /N2 N2 1 add D}for} D /IC [{/MA E D /MB 0 D}{2 div /MA E D /MB MA D}{/MB E CS sub D /MA CS D} {pop /MA YS AB mul D /MB 1 AB sub YS mul D}{pop /MA 0 D /MB 0 D}] D /IP {BV N get /N N 1 add D} D /II {/K E D IX K get 0 lt{/EC E D}if /TY E D TY 4 eq{/Y E D /X E D}if TY 3 eq{/AB E D}if /XW AX K get D /YW AY K get D /IS SG IT K get get D /XS XW IS mul D /YS YW IS mul D YS IC TY get exec /MA MA Fl not{3 add}if D} D /IM {II /ty TY D /xs XS D /ys YS D /ya YA D /yb YB D /ma MA D /mb MB D /k K D /ec EC D /BP f D /CI 0 D WB TL L1 xs add dup XO add MR add W gt {pop /ma ma Fl{3 add}if D NL /YA ma D /YB mb D /YS ys D /L1 xs D} {/L1 E D ma YA gt{/YA ma D}if mb YB gt{/YB mb D}if}ie /TB f D OU{CP E pop YS sub LE neg lt Fl not and PB not and{NP /YA ma D /YB mb D}if /BP f D ty ST cvs ( ) join IX k get 0 lt{(\() join ec join (\) ) join}if k ST cvs join ty 3 eq{AB ST cvs ( ) join E join}if ty 4 eq{X ST cvs ( ) join Y ST cvs join ( ) join E join}if C1 E join ( DI ) join FP 2 eq FP 1 eq AF and or{( FM ) join}if ( Il Cp ) apa /C1 E D /EN f D}if /HM t D /T f D} D /DI {II /Xc CP /Yc E D D /YN YW neg D /HM t D /CI 0 D /K2 IX K get D gsave TY 4 eq{OX X IS mul add OY FY add YS sub Y IS mul sub} {/FY YS D CP MB sub 2 copy /OY E D /OX E D}ie translate K2 0 ge{/DP AZ K2 get D /BV BM K2 get D XS YS scale /N 0 D XW YW DP [XW 0 0 YN 0 YW] {IP} FC K2 get 1 eq{image}{f 3 colorimage}ie} {EX}ie grestore XS 0 R /Ms t D} D /FM {gsave 0 Sg CP MB sub translate XS neg 0 M 0 YS RL XS 0 RL 0 YS neg RL XS neg 0 RL stroke grestore} D /NA {/AT E D /AL AL 1 add D AV AL AT put} D /OA {AL 0 gt{/AL AL 1 sub D /AT AV AL get D}if} D /D1 {/BR {CP E pop E BN Mb{CP E pop eq{0 YI R}if}{pop}ie} D /Sn {OU{C1 E ST cvs join ( Ld ) join /C1 E D}{pop}ie} D} D /D1 {/BR {BN} D /Sn {OU {C1 E ST cvs join ( Ld ) join /C1 E D} {pop} ie} D} D /TC {/TF t D /ML 0 D HN{SW pop dup ML gt{/ML E D}{pop}ie}forall NP /RM RM not D RC /OU Tc D Ep /PN 0 D Ms not TP and{Ip}if /W IW ML sub Ts sub D /A0 0 D TH{/BR {( ) join BT} D /Sn {pop} D /Au () D}if} D /TN {0 eq{E EA PF HF or not XR and{HN E get Xr}{pop}ie} {OU{Tn 0 ge{() BN}if /Tn E D}{pop}ie WB}ie} D /NT {OU LB not and Tn 0 ge and{PL 0 eq{Ms not{CS CF FS}if CP dup /y E YA sub D W 9 sub CS -1.8 mul XO L1 add 2 add{y M (.) show}for HN Tn get dup SW pop IW E sub y M show CP BB M}if /Tn -1 D}if} D /Ld {/DN E D HN DN Pn put [/View [/XYZ -4 Fl{PS}{CP YA add US E pop}ie null] /Dest DN ST cvs cvn /DEST pdfmark} D /C {ND 1 eq{1 sub}if TI mul /XO E D NL Nf not{pop()}if 0 3 -1 roll 1 A} D /OP {BP not{NP}if PN 2 mod 0 eq{/Ms t D NP}if}D /Ep {Xp PN 2 mod 0 eq and OU and{/Pn (-) D showpage /PM 1 D LA}if}D /Dg [73 86 88 76 67 68 77] D /Rd [0 [1 1 0][2 1 0][3 1 0][2 1 1][1 1 1][2 2 1][3 3 1][4 4 1][2 1 2]] D /Ns {/m E D /c E 32 mul D /j m 1000 idiv D /p j 12 add string D c 96 le m 0 gt and{c 32 le {/i 0 D /d 77 D /l 100 D /m m j 1000 mul sub D j -1 1 {pop p i d c add put /i i 1 add D}for 4 -2 0 {/j E D /n m l idiv D /m m n l mul sub D /d Dg j get D n 0 gt {/x Rd n get D x 0 get -1 1 {pop p i d c add put /i i 1 add D}for p i x 1 get sub Dg x 2 get j add get c add put}if /l l 10 idiv D }for p 0 i GI} {/i ST length 1 sub D m {1 sub dup 0 ge{dup 26 mod c add 1 add ST i 3 -1 roll put 26 idiv dup 0 eq{pop exit}if}if /i i 1 sub D}loop ST i ST length i sub GI}ie} {m p cvs}ie} D /US {matrix currentmatrix matrix defaultmatrix matrix invertmatrix matrix concatmatrix transform} D /GB {Gb{US}if}D /Tl {/Rn E D Xc CP pop ne{ [/Rect [Xc 1 sub Yc cS 0.25 mul sub GB CP E 1 add E cS 0.85 mul add GB] /Subtype /Link /Border [0 0 Cf Lc and LX and AU or{0}{1}ie] Rn type /nametype eq {/Dest Rn}{/Action [/Subtype /URI /URI Rn] Cd}ie /ANN pdfmark}if} D /Il {/Rn E D [/Rect [Xc Yc GB Xc XS add Yc YS add GB] /Subtype /Link /Border [0 0 0] Rn type /nametype eq{/Dest Rn} {/Action [/Subtype /URI /URI Rn] Cd}ie /ANN pdfmark} D /XP {[{/Z Bz 2 div D Z 0 R Z Z RL Z neg Z RL Z neg Z neg RL Z Z neg RL Fi cH 1 eq and{fill}if} {Bz 0 RL 0 Bz RL Bz neg 0 RL 0 Bz neg RL Fi cH 1 eq and{fill}if} {0 -5 R Bz 0 RL 0 21 RL Bz neg 0 RL 0 -21 RL}]} D /MS {/Sm E D WB}D /O {BN()0 Sm BX} D /BX {/Bt E D Bt 2 lt{/Ch E D CS 0.8 mul}{11 mul}ie W XO sub MR sub 2 copy gt{E}if pop /HZ E D Bt 2 eq{Fi not{pop()}if ( )E join /Ft E D TT /PF t D /MW 1 D /Li 1 D /Fw Ft SW pop D Fw HZ gt{/HZ Fw 8 add D}if HZ ST cvs( )join}{WB Ch ST cvs( )join}ie L1 HZ add XO add MR add W gt{NL}if Bt 2 eq{Ft ES Fw neg HM{CS sub}if Pd}if Bt ST cvs join( Bx )join Bt 2 eq HM and{CS Pd}if C1 E join /C1 E D /L1 L1 HZ add D /T f D ( ) Pd /PF f D Bt 2 lt{YA CS .8 mul lt{/YA CS .8 mul D}if} {YB 5 lt{/YB 5 D}if YA 21 lt{/YA 21 D}if}ie /CI 0 D} D /Bx {dup 2 eq{E /Bz E D}{E /cH E D /Bz CS .8 mul D}ie OU {gsave 0 Sg XP E get exec stroke grestore}{pop}ie Bz 0 R /Ms t D}D /SD {FD 4 mul Dy add DZ NF newpath 0 0 M DX t charpath pathbbox 3 -1 roll sub /DY E D E dup /X1 E D sub WM mul WX DY mul add WM DG mul E div /DF E D /DR WX DF mul DY mul WM div 2 div D} d /Sd {gsave 0 IL Di mul neg translate IL IW atan Di 0 eq{neg}if rotate FD 4 mul Dy add DZ NF DR X1 sub DY 2 div neg M cD VC DX show grestore} d /Pt {/tp t D Tp{NP /Pn (TP) D 0 Tt neg R Th BN NP Ep ET RC ZF}if /tp f D} D /RC {/AI 0 D /LG 0 D /BC 0 D /UI 0 D /PF f D /Cc 0 D /cC 0 D /Dc 10 array D /NR [0 1 9{pop 0}for] D /La Ds D /AR 10 array D /TR 10 array D /AV 30 array D SI /AL -1 D /AT A0 D AT NA /OV 9 array D /Yo 0 D /Co 0 D /Io 0 D /Hy f D /Ph f D /CL -1 D Ct Sc}D /ZF {/FR [0 1 30{pop 0}for] D /SZ [0 1 30{pop 0}for] D /FO [0 1 30{pop 0}for] D /SL 0 D /CF 0 D /FN 0 D 0 Ts SF}D /QO [[(\234)(\233)(\253\240)(\232)(\273)(\253)][(')(`)(\253\240)(\231)(\273)(\253)]] D /QC [[(\234)(\234)(\240\273)(\233)(\253)(\273)][(')(')(\240\273)(`)(\253)(\273)]] D /Hf EF length 2 sub D /Hz EZ Hf get D /HS Ey Hf get D /Fz EZ Hf 1 add get D /Fs Ey Hf 1 add get D /LE IL D /Ps EZ 1 get D /Fp EF 1 get D /XO 0 D /YI 0 D /CI 0 D /FP 0 D /WW Ts 7 mul D /Mf 0 D /YA 0 D /YB 0 D /Cs Ts D /GS Ts D /F0 0 D /NS 0 D /NB 0 D /N 0 D /C0 [] D /C1 () D /Lo 0 D /L1 0 D /LM 0 D /PH 0 D /EC 0 D /Lh 0 D /LT 0 D /CH 1 string D /ST 16 string D /CA 9 array D /HC (\255) D /HM f D /PF f D /EN f D /TB f D /UF f D /sF f D /AE f D /AF f D /BP t D /CD f D /PA t D /GL f D /T t D /HF f D /AH f D /SA f D /PB f D /f1 f D /mF f D /OX 0 D /OY 0 D /FY 0 D /EO 0 D /FB 0 D /PL 0 D /Bw 0 D /PD -1 D /TP f D /tp f D /TH t D /Ty 4 D /Tn -1 D /Fl t D /LB t D /PM 1 D /Ms f D /Ba f D /Bb f D /Hl 3 D /hl 6 D /Hv 6 D /Hs f D /HI 0 D /hi 0 D /PO t D /TE f D /LF t D /BO 0 D /Sm 1 D /Bf 3 D /A1 0 D /A2 0 D /Ds 1 D /QL -1 D /Cb Db D /Ct Dt D /Cl Dl D /AX [24 24] D /AY [24 24] D /IX [0 1] D /IT [0 0] D /AZ [8 8] D /WS [24 24] D /FC [3 3] D /NI 1 D /BM 2 array D SB ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffe7e7e7c6c6c6a5a5a5949494a5a5a5a5a5a5a5a5a5949494a5a5a5 cececef7f7f7ffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffff7f7f7bdbdbd8c8c8ca5a584dede31efef10efef10 efef10efef10efef10bdbd9c9c9c7b8c8c8ccececeffffffffffffffffff ffffffffffffffffffffffffffffffffffffe7e7e7949494a5a563e7e763 ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00d6d652 9c9c5aa5a5a5f7f7f7fffffffffffffffffffffffffffffffffffff7f7f7 949494bdbd84efef10ffff00ffff00ffff00ffff00ffff00ffff00ffff00 ffff00ffff00ffff00ffff00efef10adad7bb5b5b5ffffffffffffffffff fffffffffffff7f7f7949494bdbd84ffff00ffff00ffff00ffff00ffff00 efef008c8c39737352dede00ffff00ffff00ffff00ffff00ffff00ffff00 9c9c63b5b5b5ffffffffffffffffffffffffcececeadad6befef10ffff00 ffff00ffff00ffff00ffff008c8c391000001000005a5a29efef10ffff00 ffff00ffff00ffff00ffff00efef10a5a563dededeffffffffffffe7e7e7 a5a59ce7e763ffff00ffff00ffff00ffff00ffff00ffff00636363100000 100000393939dede31ffff00ffff00ffff00ffff00ffff00ffff00d6d652 adada5ffffffffffffcececeadad8cffff00ffff00ffff00ffff00ffff00 ffff00ffff00848484100000100000525252efef31ffff00ffff00ffff00 ffff00ffff00ffff00ffff009c9c7be7e7e7ffffffa5a5a5dede39ffff00 ffff00ffff00ffff00ffff00ffff00ffff00adad21100000100000636318 ffff10ffff00ffff00ffff00ffff00ffff00ffff00ffff00adad8ccecece e7e7e7a5a5a5efef10ffff00ffff00ffff00ffff00ffff00ffff00ffff00 bdbd081010101000008c8c18ffff00ffff00ffff00ffff00ffff00ffff00 ffff00ffff00e7e708949494e7e7e7a5a5a5efef10ffff00ffff00ffff00 ffff00ffff00ffff00ffff00d6d618292929101010adad39ffff00ffff00 ffff00ffff00ffff00ffff00ffff00ffff00e7e708949494e7e7e7a5a5a5 efef10ffff00ffff00ffff00ffff00ffff00ffff00ffff00dede21393939 101010b5b54affff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00 e7e708949494e7e7e7a5a5a5efef10ffff00ffff00ffff00ffff00ffff00 ffff00ffff00e7e729424242181818d6d663ffff00ffff00ffff00ffff00 ffff00ffff00ffff00ffff00e7e708949494e7e7e7a5a5a5efef10ffff00 ffff00ffff00ffff00ffff00ffff00ffff00efef428c8c8c6b6b6be7e77b ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00e7e708a5a5a5 ffffffb5b5b5dede31ffff00ffff00ffff00ffff00ffff00ffff00ffff00 e7e7318c8c39737352d6d618ffff10ffff00ffff00ffff00ffff00ffff00 ffff00ffff00adad8ccececeffffffd6d6d6a5a584ffff00ffff00ffff00 ffff00ffff00ffff00ffff007b7b7b100000100000525252e7e731ffff00 ffff00ffff00ffff00ffff00ffff00efef42a5a594e7e7e7fffffff7f7f7 a5a59cd6d652ffff00ffff00ffff00ffff00ffff00ffff00737352100000 100000424231dede21ffff00ffff00ffff00ffff00ffff00ffff08bdbd5a b5b5b5ffffffffffffffffffd6d6d6a5a563efef10ffff00ffff00ffff00 ffff00ffff00dede006b6b42636352bdbd08ffff00ffff00ffff00ffff00 ffff00ffff00d6d66ba5a5a5efefefffffffffffffffffffffffffa5a5a5 adad7bffff00ffff00ffff00ffff00ffff00ffff00ffff21efef31ffff00 ffff00ffff00ffff00ffff00ffff00ffff008c8c8ccececeffffffffffff ffffffffffffffffffffffffa5a5a59c9c63efef10ffff00ffff00ffff00 ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff08d6d66b848484 cececeffffffffffffffffffffffffffffffffffffffffffffffffa5a5a5 9c9c5ac6c65aefef42ffff00ffff00ffff00ffff00ffff00ffff00ffff00 efef42b5b552949494c6c6c6ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffd6d6d6a5a5a58c8c7badad8ce7e708e7e708 e7e708e7e708cece739c9c7b8c8c7badadade7e7e7ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff e7e7e7c6c6c6949494949494949494949494a5a5a5cececee7e7e7ffffff ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffbdbdbda5a5a5949494a5a5a5a5a5a5a5a5a5949494a5a5a5 cececeffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffefefefc6c6c68c8c8ca5a5a5d6d6d6e7e7e7efefef efefefefefefe7e7e7c6c6c6949494949494cececeffffffffffffffffff ffffffffffffffffffffffffffffffffffffe7e7e7949494a5a5a5dedede ffffffffffffffffffffffffffffffffffffffffffffffffffffffcecece 949494b5b5b5ffffffffffffffffffffffffffffffffffffffffffefefef a5a5a5b5b5b5ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffefefefa5a5a5bdbdbdffffffffffffffffff ffffffffffffefefef949494bdbdbdffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 949494bdbdbdffffffffffffffffffffffffcececea5a5a5ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffefefefa5a5a5dededeffffffffffffffffff a5a5a5dededeffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffcecece a5a5a5ffffffffffffcececea5a5a5ffffffffffffffffffffffffffffff c6c6c6bdbdbdb5b5b5bdbdbdb5b5b5bdbdbddededee7e7e7e7e7e7e7e7e7 e7e7e7e7e7e7ffffffffffffa5a5a5e7e7e7ffffffa5a5a5dededeefefef d6d6d6d6d6d6a5a5a58c8c8cb5b5b5cececedededed6d6d6cecece8c8c8c 848484a5a5a5a5a5a5a5a5a5a5a5a5949494949494e7e7e7b5b5b5cecece e7e7e7a5a5a5e7e7e7949494949494b5b5b5cececeffffffffffffe7e7e7 cecece949494c6c6c6cecece737373bdbdbddededededededededed6d6d6 949494cececededede949494e7e7e7a5a5a5d6d6d6949494e7e7e7ffffff ffffffffffffefefef9494946363635a5a5a4a4a4a5252527b7b7b949494 bdbdbdb5b5b5b5b5b5bdbdbdc6c6c6efefefe7e7e7949494dededea5a5a5 d6d6d6949494e7e7e7ffffffffffffffffffbdbdbd7b7b7bcececededede dededea5a5a5949494ffffffefefefffffffefefefffffffffffffffffff dedede949494e7e7e7a5a5a5dedede8c8c8ce7e7e7ffffffffffffefefef 949494737373949494b5b5b5bdbdbd8c8c8ca5a5a5ffffffffffffffffff ffffffffffffffffffffffffe7e7e7949494e7e7e7a5a5a5dedede949494 7b7b7ba5a5a5efefefefefef6b6b6b7b7b7bd6d6d6cececec6c6c67b7b7b dededeffffffffffffffffffffffffffffffffffffffffffe7e7e7a5a5a5 ffffffb5b5b5d6d6d6ffffffffffffb5b5b5949494cecece6b6b6bbdbdbd 8c8c8c737373636363bdbdbdffffffffffffffffffffffffffffffffffff ffffffffffffa5a5a5cececeffffffd6d6d6a5a5a5ffffffffffffefefef c6c6c67b7b7b525252737373949494848484c6c6c6ffffffffffffffffff ffffffffffffffffffffffffffffffefefefa5a5a5efefefffffffffffff a5a5a5cececeffffffffffffffffffdededee7e7e7dededee7e7e7dedede ffffffffffffffffffffffffffffffffffffffffffffffffffffffbdbdbd bdbdbdffffffffffffffffffd6d6d6a5a5a5e7e7e7ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffcececea5a5a5efefefffffffffffffffffffffffffb5b5b5 a5a5a5ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff8c8c8ccececeffffffffffff ffffffffffffffffffffffffbdbdbd949494efefefffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffcecece8c8c8c cececeffffffffffffffffffffffffffffffffffffffffffffffffb5b5b5 949494c6c6c6efefefffffffffffffffffffffffffffffffffffffffffff e7e7e7b5b5b5949494c6c6c6ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffd6d6d6a5a5a58c8c8ca5a5a5dededededede e7e7e7dededecececea5a5a58c8c8cb5b5b5e7e7e7ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff dededececece949494949494949494949494a5a5a5cececeefefefffffff ffffffffffffffffffffffffffffffffffff [/Creator (html2ps version 1.0 beta5) /Author () /Keywords () /Subject () /Title (Guide pratique de la gestion de bande passante d'une ligne ADSL) /DOCINFO pdfmark /ND 1 D /HN [1 1 59{pop (??)}for] D /h0 [()(Table of Contents)] D /h1 [(0.1\240\240)(Guide pratique de la gestion de bande passante d'une ligne ADSL)] D /h2 [(0.1.1\240\240)(Version fran\347aise du ADSL Bandwidth Management HOWTO)] D /h3 [(0.1.2\240\240)(Dan Singletary)] D /h4 [(0.1.3\240\240)(Fran\347ois Romieu)] D /h5 [(0.1.4\240\240)(Guillaume Lelarge)] D /h6 [(0.2\240\240)(1.\240Introduction)] D /h7 [(0.2.1\240\240)(1.1.\240Mises \340 jour du document)] D /h8 [(0.2.2\240\240)(1.2.\240Liste de diffusion)] D /h9 [(0.2.3\240\240)(1.3.\240Avertissement)] D /h10 [(0.2.4\240\240)(1.4.\240Copyright)] D /h11 [(0.2.5\240\240)(1.5.\240Droits d'utilisation)] D /h12 [(0.2.6\240\240)(1.6.\240Retours d'exp\351rience et corrections)] D /h13 [(0.3\240\240)(2.\240Cadre d'utilisation)] D /h14 [(0.3.1\240\240)(2.1.\240Pr\351requis)] D /h15 [(0.3.2\240\240)(2.2.\240Organisation)] D /h16 [(0.3.3\240\240)(2.3.\240Files d'attente des paquets)] D /h17 [(0.3.3.1\240\240)(2.3.1.\240Le lien montant)] D /h18 [(0.3.3.2\240\240)(2.3.2.\240Le lien descendant)] D /h19 [(0.4\240\240)(3.\240Fonctionnement)] D /h20 [(0.4.1\240\240)(3.1.\240Limitation du trafic sortant avec HTB Linux)] D /h21 [(0.4.2\240\240)(3.2.\240Gestion des files de priorit\351 avec HTB)] D /h22 [(0.4.3\240\240)(3.3.\240Classification des paquets sortant avec iptables)] D /h23 [(0.4.4\240\240)(3.4.\240Des r\351glages suppl\351mentaires...)] D /h24 [(0.4.5\240\240)(3.5.\240Une tentative de limitation du trafic entrant)] D /h25 [(0.4.5.1\240\240)(3.5.1.\240Probl\350mes soulev\351s par la limitation de trafic entrant)] D /h26 [(0.5\240\240)(4.\240R\351alisation)] D /h27 [(0.5.1\240\240)(4.1.\240Avertissements)] D /h28 [(0.5.2\240\240)(4.2.\240Script: mon_limiteur)] D /h29 [(0.6\240\240)(5.\240Test)] D /h30 [(0.7\240\240)(6.\240\307a fonctionne. Et maintenant\240?)] D /h31 [(0.8\240\240)(7.\240Liens)] D /Hr [-28 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58]D /HV [1 2 3 3 3 3 2 3 3 3 3 3 3 2 3 3 3 4 4 2 3 3 3 3 3 4 2 3 3 2 2 2]D /Cn [8 4 0 0 0 0 6 0 0 0 0 0 0 3 0 0 2 0 0 5 0 0 0 0 1 0 2 0 0 0 0 0]D Hr length 0 gt{[/PageMode /UseOutlines /DOCVIEW pdfmark}if /Hn 1 D 0 1 Hr length 1 sub{ /Bn E D [Cn Bn get dup 0 gt{/Count E HV Bn get Bl ge{neg}if}{pop}ie /Dest Hr Bn get dup abs ST cvs cvn E 0 ge{(h)Hn ST cvs join cvx exec dup 1 get E Nf{0 get E join}{pop}ie /Hn Hn 1 add D}{()}ie /Title E dup length 255 gt{0 255 getinterval}if /OUT pdfmark}for ZF /FN Fp D Ps 0 FS /WC Wf{( )}{}ie SW pop D ET RC ZF /Df f D /R1 (http://www.tldp.org/) D /R2 (http://jared.sonicspike.net/mailman/listinfo/adsl-qos) D /R3 (http://www.gnu.org/copyleft/fdl.html) D /R4 (http://fsffrance.org/) D /R5 (http://luxik.cdi.cz/~devik/qos/htb/) D /R6 (http://luxik.cdi.cz/~patrick/imq/) D /R7 (http://www.lartc.org/) D /R8 (http://www.bandwidthcontroller.com/) D /R9 (http://www.sonicspike.net/software#dsl_qos_queue) D /TS { tables E get /table E D table aload pop /rdesc E D /cdesc E D /tdesc E D tdesc aload pop /capalg E D /caption E D /rules E D /frame E D /nfoot E D /nhead E D /ncol E D /nrow E D /border E D /twid E D /units E D /talign E D /flow E D /clear E D /tclass E D pop pop /w W D /eps 0.1 D /OU f D /PL 1 D /FN EF 21 get D EZ 21 get Ey 21 get FS 0 1 1{ /pass E D 0 1 nrow{ /irow E D /cells rdesc irow get 6 get D 0 1 ncol{ /icol E D /cell cells icol get D cell 0 ne{ cell aload pop /ang E D /CB E D pop pop pop /DV E D /bot E D /top E D /right E D /left E D /nowrap E D /valign E D /dp E D /align E D /rspan E D /cspan E D /cclass E D /ctype E D /cmax E D /cmin E D /proc E D rspan 0 eq{/rspan nrow irow sub 1 add D}if cspan 0 eq{/cspan ncol icol sub 1 add D}if pass 0 eq cspan 1 eq and pass 1 eq cspan 1 gt and or{ /W 1e5 D /LL W D /PH 1 D ctype 1 eq{() BD}if RC align NA AT 4 eq{/CD t D /DC dp D /LN 0 D /M1 0 D /M2 0 D}{/CD f D}ie 0 0 M /LM 0 D proc exec BN AT 4 eq{ LN array astore cell 15 3 -1 roll put cdesc icol get dup dup 5 get M1 lt{5 M1 put}{5 get /M1 E D}ie dup 6 get M2 lt{6 M2 put}{6 get /M2 E D}ie /LM M1 M2 add D }if /CD f D ang 0 ne{/LM CP E pop neg D}if /thiswid LM left add right add eps add D /oldmin 0 D /oldmax 0 D 0 1 cspan 1 sub{ icol add cdesc E get dup 2 get /oldmax E oldmax add D 1 get /oldmin E oldmin add D }for thiswid oldmax ge{ 0 1 cspan 1 sub{ icol add cdesc E get dup 2 E 2 get oldmax 0 eq {pop thiswid cspan div}{thiswid mul oldmax div}ie put }for }if nowrap 1 eq{ thiswid oldmin ge{ 0 1 cspan 1 sub{ icol add cdesc E get dup 1 E 1 get oldmin 0 eq {pop thiswid cspan div}{thiswid mul oldmin div}ie put }for }if }{ /W 0 D /LL W D /PH 2 D ctype 1 eq{() ES () BD}if 0 0 M /LM 0 D RC proc exec BN /thiswid LM left add right add eps add D thiswid oldmin ge{ 0 1 cspan 1 sub{ icol add cdesc E get dup 1 E 1 get oldmin 0 eq {pop thiswid cspan div}{thiswid mul oldmin div}ie put }for }if }ie ctype 1 eq{() ES}if }if }if }for }for }for /tmin 0 D /tmax 0 D 0 1 ncol{ cdesc E get dup 1 get E 2 get 2 copy gt{pop dup}if tmax add /tmax E D tmin add /tmin E D }for twid 0 lt{twid neg IW gt{IW neg}{twid}ie /twid E D}if tdesc 0 twid neg tmin 2 copy lt{E}if pop put tdesc 1 twid neg tmax 2 copy lt{E}if pop put /W w D /LL W D /OU t D /PH 0 D /PL 0 D } D /PT { /PL PL 1 add D tables E get /table E D Tm 21 get Ts mul BE PL 2 ge{save}if /SL SL 1 add D /FN EF 21 get D EZ 21 get Ey 21 get FS table aload pop /rdesc E D /cdesc E D /tdesc E D tdesc aload pop /capalg E D /caption E D /rules E D /frame E D /nfoot E D /nhead E D /ncol E D /nrow E D /border E D /twid E D /units E D /talign E D /flow E D /clear E D /tclass E D /tmax E D /tmin E D /w W D /xo XO D /mr MR D /ll LL D /lg LG D /ai AI D /bc BC D /nr NR D /ar AR D /tr TR D /ui UI D /ph PH D /a0 A0 D /pf PF D /at AT D /av AV D /al AL D /Le LE D /la La D talign 0 lt{/talign AL 0 gt{AV AL get}{A0 2 le{A0}{0}ie}ie D}if ph 1 eq ph 2 eq or{ NL ph 1 eq{tmax}{tmin}ie dup XO add LM gt{/LM E XO add D}{pop}ie LM E }{ /PH 3 D /LE 1e5 D RC %ZF border 0 gt{/border 1 D}if /twidth 0 D /avail W xo sub D twid 0 eq{0 1 ncol{cdesc E get dup 2 get E 3 get dup 0 gt{div neg dup twid lt {/twid E D}{pop}ie}{pop pop}ie}for}if /twid twid dup 0 lt{neg avail 2 copy gt{E}if pop}{avail mul}ie D /OK t D 0 1 ncol{cdesc E get dup 1 get E 3 get twid mul gt{/OK f D}if}for 0 1 ncol{ cdesc E get dup 1 get /colmin E D dup 3 get /cwid E twid mul D dup tmax avail le{2 get}if tmin avail le tmax avail gt and{ dup 2 get E 1 get dup 3 1 roll sub avail tmin sub mul tmax tmin sub div add }if tmin avail gt{1 get}if 0 E colmin cwid lt OK and{pop cwid}if dup /twidth E twidth add D put }for /OU f D CP tmin twid le{ 0 1 ncol{cdesc E get dup 0 get twidth div twid mul 0 E put}for /twidth twid D }if CP printcap CP E pop sub /caphig E D pop 0 1 1{ /pass E D 0 1 nrow{ /irow E D /cells rdesc irow get 6 get D 0 1 ncol{ /icol E D /cell cells icol get D cell 0 ne{ cell aload pop /ang E D /CB E D pop pop pop /DV E D /bot E D /top E D /right E D /left E D /nowrap E D /valign E D /dp E D /align E D /rspan E D /cspan E D /cclass E D /ctype E D /cmax E D /cmin E D /proc E D rspan 0 eq{/rspan nrow irow sub 1 add D}if cspan 0 eq{/cspan ncol icol sub 1 add D}if /W 0 D 0 1 cspan 1 sub{icol add cdesc E get 0 get /W E W add D}for pass 0 eq rspan 1 eq and pass 1 eq rspan 1 gt and or{ ctype 1 eq{() BD}if /W W left sub right sub D /XO 0 D /EO 0 D SI /A0 align D RC align NA AT 4 eq{ /DC dp D /DO 0 D /ID 1 D 0 1 DV length 1 sub{DV E get dup DO gt{/DO E D}{pop}ie}for /Lo DO DV 0 get sub D /L1 Lo D }if 0 0 M /BP t D /Fl t D /MF 0 D /FB 0 D proc exec T not{/CI 0 D}if BN 0 FB neg R MF 0 eq{/MF CS D}if CP /thishig E neg bot add top add CI add D pop ang 0 ne{/thishig LM bot add top add D}if cell 16 MF put cell 17 Ya put cell 18 thishig put valign 4 eq{ /below thishig Ya sub D rdesc irow get dup dup 4 get Ya lt {4 Ya put}{4 get /Ya E D}ie dup 5 get below lt{5 below put}{5 get /below E D}ie /thishig Ya below add D }if ctype 1 eq{()ES}if /oldhig 0 D 0 1 rspan 1 sub{ irow add rdesc E get 0 get /oldhig E oldhig add D }for thishig oldhig ge{ 0 1 rspan 1 sub{ irow add rdesc E get dup 0 E 0 get oldhig 0 eq {pop thishig rspan div}{thishig mul oldhig div}ie put }for }if }if }if }for }for }for M RC %ZF /thight 0 D /racc 0 D /maxh 0 D /brk 0 D /rbeg nhead nfoot add D 0 1 nrow{ rdesc E get dup 0 get dup /thight E thight add D brk 0 eq{/racc E D}{/racc E racc add D}ie racc maxh gt{/maxh racc D}if 2 get /brk E D }for ph 3 ge{thight caphig add E}if ph 0 eq ph 4 eq or{ /PH 4 D /LE Le D /OU Ou D /yoff 0 D /headsz 0 D 0 1 nhead 1 sub{rdesc E get 0 get headsz add /headsz E D}for /footsz 0 D 0 1 nfoot 1 sub{rdesc E nhead add get 0 get footsz add /footsz E D}for /ahig LE BO add MI add D /maxh maxh headsz add footsz add D /thight thight headsz add footsz add D tmin avail gt maxh ahig gt or {/Sf avail tmin div dup ahig maxh div gt{pop ahig maxh div}if D /SA t D} {/Sf 1 D}ie tclass 1 eq thight LE 15 sub gt and {/SA t D LE 15 sub thight div dup Sf lt{/Sf E D}{pop}ie}if SA{Sf Sf scale /ll ll Sf div D /xo xo Sf div D /LE LE Sf div D /mr mr Sf div D /BO BO Sf div D /ahig ahig Sf div D}if nhead nfoot add getwid LE CP E pop add capalg 0 eq{caphig sub}if bT{f}{dup thight lt thight ahig lt and}ie E headsz sub footsz sub rwid lt or{NP}if capalg 0 eq{printcap -8 SP}if CP /ycur E D pop printhead rbeg 1 nrow{/row E D row getwid ycur yoff add rwid sub footsz sub LE add 0 lt {nfoot 0 gt{printfoot}if Tf NP /rbeg irow1 D Ba{MI /MI MI SA{Sf div}if D MI SP /MI E D}if CP /ycur E D pop /yoff 0 D printhead}if irow1 printrow }for printfoot /row row 1 add D Tf 0 ycur yoff add M capalg 1 eq{/EO 0 D SI -3 SP printcap}if Sf 1 lt{1 Sf div dup scale /ll ll Sf mul D /xo xo Sf mul D /LE LE Sf mul D /mr mr Sf mul D /BO BO Sf mul D /SA f D}if /EO 0 D }if }ie /W w D /XO xo D /MR mr D /LL ll D /LG lg D /AI ai D /BC bc D /NR nr D /AR ar D /TR tr D /UI ui D /PH ph D /A0 a0 D /PF pf D /AT at D /AV av D /AL al D /La la D /SL SL 1 sub NN D /CF 0 D /FN 0 D SZ SL get FR SL get FS Wf not{()F2}if PL 2 ge{Ms E restore Ms or /Ms E D PH 1 eq PH 2 eq or {/LM E D}if PH 3 ge{/CI 0 D NL 0 E neg R}if }if /PL PL 1 sub D /CI 0 D /BP f D /PO f D () Bm 21 get Ts mul BE BL %CF CS SF } D /printcap{ capalg 0 ge{ SA{/W w Sf div D} {talign 1 eq{/XO xo ll twidth sub 2 div add D}if talign 2 eq{/XO xo ll twidth sub add D}if /W XO twidth add D }ie /XO xo D /LL W XO sub MR sub D /PA f D /Fl capalg 0 eq D 1 NA BL caption exec BN OA /PA t D }if } D /getwid{ /irow1 E D /irow2 irow1 D /rwid 0 D {rdesc irow2 get dup 0 get rwid add /rwid E D 2 get 0 eq {exit}{/irow2 irow2 1 add D}ie }loop } D /printrow{ /xoff ll twidth PL 2 ge{Sf div}if sub talign mul 2 div D /xleft xoff xo add D /irow E D /cells rdesc irow get 6 get D 0 1 ncol{ /icol E D /cell cells icol get D cell 0 ne{ cell aload pop /ang E D /CB E D /cvsize E D /above E D /fontsz E D /DV E D /bot E D /top E D /right E D /left E D /nowrap E D /valign E D /dp E D /align E D /rspan E D /cspan E D /cclass E D /ctype E D /cmax E D /cmin E D /proc E D rspan 0 eq{/rspan nrow irow sub 1 add D}if cspan 0 eq{/cspan ncol icol sub 1 add D}if /width 0 D 0 1 cspan 1 sub{icol add cdesc E get 0 get /width E width add D}for /rhight rdesc irow get 0 get D /hight rhight D 1 1 rspan 1 sub{irow add rdesc E get 0 get /hight E hight add D}for /W xo xoff add width add right sub D ang 0 ne{/W xo xoff add hight add right sub D}if /EO xo xoff add left add D SI Cf{ gsave CB VC xo xoff add ycur yoff add M 0 hight neg RL width 0 RL 0 hight RL width neg 0 RL fill grestore }if ctype 1 eq{() BD}if /A0 align D RC AT 4 eq{ /DC dp D /ID 1 D /DO cdesc icol get 5 get D /Lo DO DV 0 get sub D /L1 Lo D }if ang 0 ne{ gsave ang 90 eq {xoff ycur add hight cvsize sub 2 div sub ycur hight sub xoff sub} {xoff ycur sub width add hight cvsize sub 2 div add ycur xoff add}ie translate ang rotate }if valign 3 le{0 ycur yoff add top sub hight cvsize sub valign 1 sub mul 2 div sub M} {0 ycur yoff add top sub above add rdesc irow get 4 get sub M}ie /PA f D /BP t D /Fl t D BL proc exec BN ang 0 ne{grestore}if /PA t D ctype 1 eq{() ES}if }if /xoff xoff cdesc icol get 0 get add D }for /yoff yoff rhight sub D } D /printhead {0 1 nhead 1 sub{printrow}for} D /printfoot {nhead 1 nhead nfoot add 1 sub{printrow}for} D /Tf { OU{rules 2 ge{/yoff 0 D gsave 0 Sg [0 1 nhead 1 sub{}for rbeg 1 row 1 sub{}for nhead 1 nhead nfoot add 1 sub{}for]{ /irow E D /xoff ll twidth PL 2 ge{Sf div}if sub talign mul 2 div D /cells rdesc irow get 6 get D 0 1 ncol{ /icol E D /cell cells icol get D cell 0 ne{ /rspan cell 6 get D /cspan cell 5 get D rspan 0 eq{/rspan nrow irow sub 1 add D}if cspan 0 eq{/cspan ncol icol sub 1 add D}if /width 0 D 0 1 cspan 1 sub{icol add cdesc E get 0 get /width E width add D}for /rhight rdesc irow get 0 get D /hight rhight D 1 1 rspan 1 sub{irow add rdesc E get 0 get /hight E hight add D}for xo xoff add width add ycur yoff add M 0 hight neg icol cspan add 1 sub ncol lt {cdesc icol 1 add get 4 get dup rules 3 le{1 eq}{pop t}ie {1 eq{0.8}{0.3}ie LW RL CP stroke M}{pop R}ie}{R}ie irow nhead nfoot add 1 sub ne nfoot 0 eq or {irow rspan add 1 sub nrow lt {rdesc irow rspan add get 3 get}{nfoot 0 eq{0}{1}ie}ie dup rules 2 mod 0 eq{1 eq}{pop t}ie {1 eq irow rspan add nhead eq or irow rspan add row eq nfoot 0 gt and or {0.8}{0.3}ie LW width neg 0 RL CP stroke M}{pop}ie}if }if /xoff xoff cdesc icol get 0 get add D }for /yoff yoff rhight sub D }forall grestore /Ms t D }if frame 1 gt{ gsave 1 LW 0 Sg xleft ycur M CP BB 0 yoff frame 5 eq frame 7 ge or{RL}{R}ie twidth 0 frame 3 eq frame 4 eq or frame 8 ge or{RL}{R}ie CP BB 0 yoff neg frame 6 ge{RL}{R}ie twidth neg 0 frame 2 eq frame 4 eq or frame 8 ge or{RL}{R}ie closepath stroke grestore /Ms t D }if }if } D /tables [[[0 0 0 0 0 -1 0 1 1 14 2 0 0 9 5 {()} -1] [[0 0 0 0 0 0 0][0 0 0 0 0 0 0][0 0 0 0 0 0 0]] [[0 0 0 0 0 0 [[{()2 Sl()WB()BD(Histo)HY(rique)YH( des versions)ES()} 0 0 1 0 3 1 0 (.) 1 0 4 4 2 6 0 0 0 0 Db 0 ] 0 0 ]] [0 0 0 0 0 0 [[{()2 Sl()WB(Version 1.3.fr.1.0)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] [{()2 Sl()WB(2004-07-16)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] [{()2 Sl()WB(GL)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] ]] [0 0 0 0 0 0 [[{()2 Sl()WB(Mise \340 jour de la traduc)HY(tion)YH( fran\347aise.)} 0 0 0 0 3 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] 0 0 ]] [0 0 0 0 0 0 [[{()2 Sl()WB(Version 1.3)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] [{()2 Sl()WB(2003-04-07)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] [{()2 Sl()WB(DS)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] ]] [0 0 0 0 0 0 [[{()2 Sl()WB( Ajout d'une section de liens \201)EM(Added )0 27 1 A(links)27 0 TN TL()Ec /AF f D( section)ES(\202. )} 0 0 0 0 3 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] 0 0 ]] [0 0 0 0 0 0 [[{()2 Sl()WB(Version 1.2.fr.1.0)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] [{()2 Sl()WB(2003-03-01)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] [{()2 Sl()WB(FR, GL, JPG)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] ]] [0 0 0 0 0 0 [[{()2 Sl()WB(Premi\350re traduc)HY(tion)YH( fran\347aise.)} 0 0 0 0 3 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] 0 0 ]] [0 0 0 0 0 0 [[{()2 Sl()WB(Version 1.2)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] [{()2 Sl()WB(2002-09-26)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] [{()2 Sl()WB(DS)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] ]] [0 0 0 0 0 0 [[{()2 Sl()WB( Ajout d'un )0 4 1 A(lien)4 0 TN TL()Ec /AF f D( vers la nouvelle liste de diffu)HY(sion)YH(. Ajout d'une petite infor)HY(ma)HY(tion)YH( dans la section d'aver)HY(tis)HY(se)HY(ment)YH( concer)HY(nant)YH( la nouvelle QoS am\351lio)HY(r\351e)YH( pour Linux, cr\351\351e sp\351ci)HY(fique)HY(ment)YH( pour l'ADSL et bient\364t dispo)HY(nible)YH( \201)EM(Added )0 4 1 A(link)4 0 TN TL()Ec /AF f D( to new Email Discus)HY(sion)YH( List. Added small teaser to caveat section regar)HY(ding)YH( new and impro)HY(ved)YH( QoS for Linux desi)HY(gned)YH( speci)HY(fi)HY(cally)YH( for ADSL to be relea)HY(sed)YH( soon)ES(\202. )} 0 0 0 0 3 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] 0 0 ]] [0 0 0 0 0 0 [[{()2 Sl()WB(Version 1.1)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] [{()2 Sl()WB(26-08-2002)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] [{()2 Sl()WB(DS)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] ]] [0 0 0 0 0 0 [[{()2 Sl()WB( Quelques correc)HY(tions)YH( \201merci au nombreuses personnes m'ayant montr\351 les probl\350mes!\202. Ajout d'une infor)HY(ma)HY(tion)YH( dans la section d'impl\351)HY(men)HY(ta)HY(tion)YH(. \201)EM(A few correc)HY(tions)YH( \201Thanks to the many that pointed them out!\202. Added infor)HY(ma)HY(tio)HY(nal)YH( caveat to imple)HY(men)HY(ta)HY(tion)YH( section.)ES(\202 )} 0 0 0 0 3 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] 0 0 ]] [0 0 0 0 0 0 [[{()2 Sl()WB(Version 1.0)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] [{()2 Sl()WB(21-08-2002)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] [{()2 Sl()WB(DS)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] ]] [0 0 0 0 0 0 [[{()2 Sl()WB( Meilleur contr\364le au niveau de la bande passante, plus de th\351orie, mise \340 jour pour les noyaux 2.4. \201)EM(Better control over band)HY(width)YH(, more theory, updated for 2.4 kernels)ES(\202 )} 0 0 0 0 3 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] 0 0 ]] [0 0 0 0 0 0 [[{()2 Sl()WB(Version 0.1)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] [{()2 Sl()WB(06-08-2002)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] [{()2 Sl()WB(DS)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] ]] [0 0 0 0 0 0 [[{()2 Sl()WB(Premi\350re publi)HY(ca)HY(tion)YH( \201)EM(Initial publi)HY(ca)HY(tion)YH()ES(\202)} 0 0 0 0 3 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] 0 0 ]] ]] [[0 0 0 0 0 -1 0 0 0 1 1 0 0 1 1 {()} -1] [[0 0 0 25 0 0 0][0 0 0 0 0 0 0]] [[0 0 1 0 0 0 [[{()2 Sl()WB()0 0 IM()} 0 0 0 0 1 2 1 (.) 1 0 8 8 2 6 0 0 0 0 Db 0 ] [{()2 Sl()WB(Impor)HY(tant)YH()} 0 0 1 0 1 1 0 (.) 2 0 8 8 2 6 0 0 0 0 Db 0 ] ]] [0 0 0 0 0 0 [0 [{()2 Sl()WB()0 P( Le texte ci-dessous est la licence de ce docu)HY(ment)YH(. Ce texte fait foi. Il est compos\351 de la licence \201en anglais\202 du docu)HY(ment)YH( original, suivi de la licence \201en fran\347ais\202 de sa traduc)HY(tion)YH(. )EP()} 0 0 0 0 1 1 0 (.) 1 0 8 8 2 6 0 0 0 0 Db 0 ] ]] ]] [[0 0 0 0 0 -1 0 0 0 1 1 0 0 1 1 {()} -1] [[0 0 0 25 0 0 0][0 0 0 0 0 0 0]] [[0 0 1 0 0 0 [[{()2 Sl()WB()0 1 IM()} 0 0 0 0 1 2 1 (.) 1 0 8 8 2 6 0 0 0 0 Db 0 ] [{()2 Sl()WB(Note)} 0 0 1 0 1 1 0 (.) 2 0 8 8 2 6 0 0 0 0 Db 0 ] ]] [0 0 0 0 0 0 [0 [{()2 Sl()WB()0 P( Les versions ant\351)HY(rieures)YH( de ce docu)HY(ment)YH( impliquaient une m\351thode de contr\364le de la bande passante qui passait par l'appli)HY(ca)HY(tion)YH( d'un correc)HY(tif)YH( \340 la queue sch_prio exis)HY(tante)YH(. Il s'est av\351r\351 que ce correc)HY(tif)YH( \351tait inutile. De surcro\356t, l'approche retenue dans ce texte donne de meilleurs r\351sul)HY(tats)YH( \201quoiqu'\340 la date de r\351dac)HY(tion)YH( de ce docu)HY(ment)YH(, l'appli)HY(ca)HY(tion)YH( de )EM(2)ES( correc)HY(tifs)YH( au noyau soit n\351ces)HY(saire)YH( :o\202 \202. )EP()} 0 0 0 0 1 1 0 (.) 1 0 8 8 2 6 0 0 0 0 Db 0 ] ]] ]] [[0 0 0 0 0 -1 0 0 0 1 1 0 0 1 1 {()} -1] [[0 0 0 25 0 0 0][0 0 0 0 0 0 0]] [[0 0 1 0 0 0 [[{()2 Sl()WB()0 1 IM()} 0 0 0 0 1 2 1 (.) 1 0 8 8 2 6 0 0 0 0 Db 0 ] [{()2 Sl()WB(Note)} 0 0 1 0 1 1 0 (.) 2 0 8 8 2 6 0 0 0 0 Db 0 ] ]] [0 0 0 0 0 0 [0 [{()2 Sl()WB()0 P( Les files HTB permettent \340 la fois la limi)HY(ta)HY(tion)YH( de trafic et l'envoi prio)HY(ri)HY(taire)YH( tout en assu)HY(rant)YH( qu'aucune classe de prio)HY(rit\351)YH( n'\351touffe les autres. Ce dernier point n'\351tait pas possible avec la m\351thode pr\351co)HY(ni)HY(s\351e)YH( par la version 0.1 de ce docu)HY(ment)YH(. )EP()} 0 0 0 0 1 1 0 (.) 1 0 8 8 2 6 0 0 0 0 Db 0 ] ]] ]] [[0 0 0 0 0 -1 0 0 0 1 1 0 0 1 1 {()} -1] [[0 0 0 25 0 0 0][0 0 0 0 0 0 0]] [[0 0 1 0 0 0 [[{()2 Sl()WB()0 1 IM()} 0 0 0 0 1 2 1 (.) 1 0 8 8 2 6 0 0 0 0 Db 0 ] [{()2 Sl()WB(Note)} 0 0 1 0 1 1 0 (.) 2 0 8 8 2 6 0 0 0 0 Db 0 ] ]] [0 0 0 0 0 0 [0 [{()2 Sl()WB()0 P( Remarque: les affir)HY(ma)HY(tions)YH( ant\351)HY(rieures)YH( de cette section \201concer)HY(nant)YH( la mise en file d'attente \340 N voies\202 se sont av\351r\351es erro)HY(n\351es)YH(. En l'occur)HY(rence)YH(, il \351tait possible de classer les paquets dans les \351l\351ments de la file de prio)HY(rit\351)YH( juste au moyen du champ fwmark. Cette fonc)HY(tion)HY(na)HY(lit\351)YH( n'\351tait toute)HY(fois)YH( gu\350re docu)HY(men)HY(t\351e)YH( lors de la r\351dac)HY(tion)YH( de la version 0.1 du guide pratique. )EP()} 0 0 0 0 1 1 0 (.) 1 0 8 8 2 6 0 0 0 0 Db 0 ] ]] ]] [[0 0 0 0 0 -1 0 0 0 1 1 0 0 1 1 {()} -1] [[0 0 0 25 0 0 0][0 0 0 0 0 0 0]] [[0 0 1 0 0 0 [[{()2 Sl()WB()0 1 IM()} 0 0 0 0 1 2 1 (.) 1 0 8 8 2 6 0 0 0 0 Db 0 ] [{()2 Sl()WB(Note)} 0 0 1 0 1 1 0 (.) 2 0 8 8 2 6 0 0 0 0 Db 0 ] ]] [0 0 0 0 0 0 [0 [{()2 Sl()WB()0 P( Remarque: cette docu)HY(men)HY(ta)HY(tion)YH( repo)HY(sait)YH( \340 l'origine sur ipchains pour trier les paquets. iptables est \340 pr\351sent utilis\351. )EP()} 0 0 0 0 1 1 0 (.) 1 0 8 8 2 6 0 0 0 0 Db 0 ] ]] ]] [[0 0 0 0 0 -1 0 0 0 1 1 0 0 1 1 {()} -1] [[0 0 0 25 0 0 0][0 0 0 0 0 0 0]] [[0 0 1 0 0 0 [[{()2 Sl()WB()0 1 IM()} 0 0 0 0 1 2 1 (.) 1 0 8 8 2 6 0 0 0 0 Db 0 ] [{()2 Sl()WB(Note)} 0 0 1 0 1 1 0 (.) 2 0 8 8 2 6 0 0 0 0 Db 0 ] ]] [0 0 0 0 0 0 [0 [{()2 Sl()WB()0 P( Ce script s'inspire du Wonder)HY(Sha)HY(per)YH( ADSL dispo)HY(nible)YH( sur le site du )R7 2 A(LARTC)EA(. )EP()} 0 0 0 0 1 1 0 (.) 1 0 8 8 2 6 0 0 0 0 Db 0 ] ]] ]] ] D 0 1 6{TS}for RC ZF /Ba f D /BO 0 D Bs /UR (ADSL-Bandwidth-Management-HOWTO.html.iso-8859-1) D /Ti (Guide pratique de la gestion de bande passante d'une ligne ADSL) D /Au () D /Df f D /ME [] D /Cb Db D /Ct [16#00 16#00 16#00] D /Cl [16#00 16#00 16#00] D /CL -1 D Ct Sc Pt /Ba f D /BO 0 D Bs /UR (ADSL-Bandwidth-Management-HOWTO.html.iso-8859-1) D /Ti (Guide pratique de la gestion de bande passante d'une ligne ADSL) D /Au () D /Df f D /ME [] D NP RC ZF ()1 Sl()WB 0 Sn()2 Sl()BR()BR()BR()BR()0 2 0 H(Guide)WB 28 Sn()WB 1 Sn( pratique de la gestion de bande passante d'une ligne ADSL)EH()BR()BR()0 3 1 H()WB 29 Sn()I(Version fran\347aise du )EM(ADSL Band)HY(width)YH( Mana)HY(ge)HY(ment)YH( HOWTO)ES()ES()EH()BR()BR()BR()0 3 2 H(Dan)WB 30 Sn( Single)HY(tary)YH()EH()BR()BR()0 P()SM(<)0 2 A(dvsing CHEZ sonics)HY(pike)YH( POINT net)EA(>)ES()EP()BR()BR()BR()BR()BR()BR()0 3 3 H(Fran\347ois)WB 31 Sn( Romieu)EH(Adap)HY(ta)HY(tion)YH( fran\347aise\240)SM(<)0 2 A(fran)HY(cois)YH( CHEZ ueimor POINT eu POINT org)EA(>)ES()BR()BR()BR()BR()0 3 4 H(Guillaume)WB 32 Sn( Lelarge)EH(Adap)HY(ta)HY(tion)YH( fran\347aise\240)SM(<)0 2 A(gleu CHEZ wanadoo POINT fr)EA(>)ES()BR()BR()BR()0 P(Version\240: 1.3.fr.1.0)EP()BR()BR()0 P(16 juillet 2004)EP()BR()BR()BR()0 PT()BR()BR()BR()BR()0 P()BD(R\351sum\351)ES()EP()0 P( Ce docu)HY(ment)YH( d\351crit la confi)HY(gu)HY(ra)HY(tion)YH( d'un routeur Linux pour g\351rer effi)HY(ca)HY(ce)HY(ment)YH( le trafic sortant \340 desti)HY(na)HY(tion)YH( d'un modem ADSL ou de tout autre \351qui)HY(pe)HY(ment)YH( de bande passante simi)HY(laire)YH( \201modem c\342ble, RNIS, etc\202. Un accent parti)HY(cu)HY(lier)YH( est apport\351 \340 la dimi)HY(nu)HY(tion)YH( de latence pour le trafic de type inter)HY(ac)HY(tif)YH( et ce m\352me durant les p\351riodes de conges)HY(tion)YH(. )EP()BR()BR()BR()2 0.6 1 HR()BR()BR()0 P()BD(Table des mati\350res)ES()EP()0 DL()0 DT()0 2 1 A(1. Intro)HY(duc)HY(tion)YH()2 0 TN TL()Ec /AF f D()DD()0 DL()0 DT()0 3 1 A(1.1. Mises \340 jour du docu)HY(ment)YH()3 0 TN TL()Ec /AF f D()0 DT()0 4 1 A(1.2. Liste de diffu)HY(sion)YH()4 0 TN TL()Ec /AF f D()0 DT()0 5 1 A(1.3. Aver)HY(tis)HY(se)HY(ment)YH()5 0 TN TL()Ec /AF f D()0 DT()0 6 1 A(1.4. Copy)HY(right)YH()6 0 TN TL()Ec /AF f D()0 DT()0 7 1 A(1.5. Droits d'utili)HY(sa)HY(tion)YH()7 0 TN TL()Ec /AF f D()0 DT()0 8 1 A(1.6. Retours d'exp\351)HY(rience)YH( et correc)HY(tions)YH()8 0 TN TL()Ec /AF f D()LD()0 DT()0 9 1 A(2. Cadre d'utili)HY(sa)HY(tion)YH()9 0 TN TL()Ec /AF f D()DD()0 DL()0 DT()0 10 1 A(2.1. Pr\351requis)10 0 TN TL()Ec /AF f D()0 DT()0 11 1 A(2.2. Orga)HY(ni)HY(sa)HY(tion)YH()11 0 TN TL()Ec /AF f D()0 DT()0 12 1 A(2.3. Files d'attente des paquets)12 0 TN TL()Ec /AF f D()LD()0 DT()0 15 1 A(3. Fonc)HY(tion)HY(ne)HY(ment)YH()15 0 TN TL()Ec /AF f D()DD()0 DL()0 DT()0 16 1 A(3.1. Limi)HY(ta)HY(tion)YH( du trafic sortant avec HTB Linux)16 0 TN TL()Ec /AF f D()0 DT()0 17 1 A(3.2. Gestion des files de prio)HY(rit\351)YH( avec HTB)17 0 TN TL()Ec /AF f D()0 DT()0 18 1 A(3.3. Clas)HY(si)HY(fi)HY(ca)HY(tion)YH( des paquets sortant avec iptables)18 0 TN TL()Ec /AF f D()0 DT()0 19 1 A(3.4. Des r\351glages suppl\351)HY(men)HY(taires)YH(...)19 0 TN TL()Ec /AF f D()0 DT()0 20 1 A(3.5. Une tenta)HY(tive)YH( de limi)HY(ta)HY(tion)YH( du trafic entrant)20 0 TN TL()Ec /AF f D()LD()0 DT()0 22 1 A(4. R\351ali)HY(sa)HY(tion)YH()22 0 TN TL()Ec /AF f D()DD()0 DL()0 DT()0 23 1 A(4.1. Aver)HY(tis)HY(se)HY(ments)YH()23 0 TN TL()Ec /AF f D()0 DT()0 24 1 A(4.2. Script: mon_limi)HY(teur)YH()24 0 TN TL()Ec /AF f D()LD()0 DT()0 25 1 A(5. Test)25 0 TN TL()Ec /AF f D()0 DT()0 26 1 A(6. \307a fonc)HY(tionne)YH(. Et main)HY(te)HY(nant)YH(\240?)26 0 TN TL()Ec /AF f D()0 DT()0 27 1 A(7. Liens)27 0 TN TL()Ec /AF f D()LD()BR()2 Sl()BR()BR()BR()BR()0 2 5 H(1.\240Intro)WB 33 Sn()HY(duc)HY(tion)YH()WB 2 Sn()EH()BR()BR()BR()0 P( Ce docu)HY(ment)YH( sugg\350re une m\351thode de gestion de la bande passante pour le trafic sortant avec une connexion ADSL \201ou modem c\342ble\202 \340 Inter)HY(net)YH(. Le probl\350me provient du fait que de nombreuses lignes ADSL sont brid\351es aux envi)HY(rons)YH( de 128\240kbps pour le trafic montant. La situa)HY(tion)YH( s'aggrave lorsque la file d'attente du modem ADSL demande de deux \340 trois secondes pour se lib\351rer quand elle est pleine. Lorsque la bande passante dans le sens montant est satur\351e, une trame peut mettre jusqu'\340 trois secondes pour atteindre Inter)HY(net)YH(. Les appli)HY(ca)HY(tions)YH( inter)HY(ac)HY(tives)YH( comme telnet et les jeux en r\351seau sont d\351gra)HY(d\351es)YH(. )EP()2 Sl()BR()BR()BR()BR()0 3 6 H(1.1.\240Mises)WB 34 Sn()WB 3 Sn( \340 jour du docu)HY(ment)YH()EH()BR()BR()BR()0 P( La derni\350re version de ce docu)HY(ment)YH( se trouve sur l'Inter)HY(net)YH( \340 l'adresse: )R1 2 A(http://www.tldp.org)EA(. )EP()0 P( Les mises \340 jours seront repro)HY(duites)YH( dans divers sites web et ftp Linux tels que le LDP: )R1 2 A(http://www.tldp.org)EA(. )EP()2 Sl()BR()2 Sl()BR()BR()BR()BR()0 3 7 H(1.2.\240Liste)WB 35 Sn()WB 4 Sn( de diffu)HY(sion)YH()EH()BR()BR()BR()0 P( Inscri)HY(vez)YH(-vous \340 la liste de diffu)HY(sion)YH( de gestion de la bande passante pour l'ADSL )R2 2 A( http://jared.sonics)HY(pike)YH(.net/mailman/listinfo/adsl-qos)EA( afin de poser des ques)HY(tions)YH( ou de rece)HY(voir)YH( des infor)HY(ma)HY(tions)YH( de mise \340 jour. )EP()2 Sl()BR()2 Sl()BR()BR()BR()BR()0 3 8 H(1.3.\240Aver)WB 36 Sn()HY(tis)HY(se)HY(ment)YH()WB 5 Sn()EH()BR()BR()BR()0 P( L'auteur, les distri)HY(bu)HY(teurs)YH( et les contri)HY(bu)HY(teurs)YH( de ce guide pratique ne sont en aucun cas respon)HY(sables)YH( des dommages physiques, finan)HY(ciers)YH(, moraux ou de tout autre type occa)HY(sion)HY(n\351s)YH( suite aux sugges)HY(tions)YH( de ce texte. )EP()2 Sl()BR()2 Sl()BR()BR()BR()BR()0 3 9 H(1.4.\240Copy)WB 37 Sn()HY(right)YH()WB 6 Sn()EH()BR()BR()BR()BR()1 PT()BR()0 P( Copy)HY(right)YH( 2002 Dan Single)HY(tary)YH( )EP()0 P( This docu)HY(ment)YH( is copy)HY(right)YH( 2002 by Dan Single)HY(tary)YH(, and is relea)HY(sed)YH( under the terms of the GNU Free Docu)HY(men)HY(ta)HY(tion)YH( License, which is hereby incor)HY(po)HY(ra)HY(ted)YH( by refe)HY(rence)YH(. )EP()2 Sl()BR()2 Sl()BR()BR()BR()BR()0 3 10 H(1.5.\240Droits)WB 38 Sn()WB 7 Sn( d'utili)HY(sa)HY(tion)YH()EH()BR()BR()BR()0 P( Copy)HY(right)YH( 2002 Dan Single)HY(tary)YH( )EP()0 P( Il vous est auto)HY(ris\351)YH( de copier, distri)HY(buer)YH( et/ou modi)HY(fier)YH( ce docu)HY(ment)YH( sous les termes de la licence GNU Free Docu)HY(men)HY(ta)HY(tion)YH( License, Version 1.1 ou toute version ult\351)HY(rieure)YH( publi\351e par la Free Soft)HY(ware)YH( Foun)HY(da)HY(tion)YH( avec les sections inal)HY(t\351)HY(rables)YH( suivantes: texte de premi\350re page de couver)HY(ture)YH(, texte de derni\350re page de couver)HY(ture)YH(. Une copie de la licence est dispo)HY(nible)YH( sur )R3 2 A(http://www.gnu.org/copy)HY(left)YH(/fdl.html)EA(. )EP()BR()BQ()0 P( Copy)HY(right)YH( \251 2003, 2004 Fran\347ois Romieu, Guillaume Lelarge et Jean-Philippe Gu\351rard pour la version fran\347aise )EP()0 P( La version fran\347aise de ce docu)HY(ment)YH( a \351t\351 r\351ali)HY(s\351e)YH( par Fran\347ois Romieu, Guillaume Lelarge et Jean-Philippe Gu\351rard. Elle est publi\351e en accord avec les termes de la licence de docu)HY(men)HY(ta)HY(tion)YH( libre GNU \201GFDL\202, version 1.1 ou ult\351)HY(rieure)YH(, telle que publi\351e par la )R4 2 A(Free Soft)HY(ware)YH( Foun)HY(da)HY(tion)YH()EA(\240; sans section inva)HY(riante)YH(, sans texte de premi\350re de couver)HY(ture)YH( ni texte de quatri\350me de couver)HY(ture)YH(. )EP()QB()BR()2 Sl()BR()2 Sl()BR()BR()BR()BR()0 3 11 H(1.6.\240Retours)WB 39 Sn()WB 8 Sn( d'exp\351)HY(rience)YH( et correc)HY(tions)YH()EH()BR()BR()BR()0 P( Merci de faire parve)HY(nir)YH( \340 l'auteur vos ques)HY(tions)YH( et commen)HY(taires)YH( rela)HY(tifs)YH( \340 ce docu)HY(ment)YH(, en anglais, via l'adresse\240: )0 2 A(dvsing@sonics)HY(pike)YH(.net)EA(. )EP()0 P( N'h\351sitez pas \340 faire parve)HY(nir)YH( tout commen)HY(taire)YH( relatif \340 la version fran\347aise de ce docu)HY(ment)YH( \340 )SM(<)0 2 A(commen)HY(taires)YH( CHEZ traduc POINT org)EA(>)ES( en pr\351ci)HY(sant)YH( son titre, sa date et sa version. )EP()2 Sl()BR()2 Sl()BR()2 Sl()BR()BR()BR()BR()0 2 12 H(2.\240Cadre)WB 40 Sn()WB 9 Sn( d'utili)HY(sa)HY(tion)YH()EH()BR()BR()BR()2 Sl()BR()BR()BR()BR()0 3 13 H(2.1.\240Pr\351requis)WB 41 Sn()WB 10 Sn()EH()BR()BR()BR()0 P( La m\351thode d\351crite dans ce docu)HY(ment)YH( devrait s'appliquer \340 n'importe quelle confi)HY(gu)HY(ra)HY(tion)YH( Linux. Toute)HY(fois)YH(, elle n'a pour l'instant \351t\351 test\351e que dans la confi)HY(gu)HY(ra)HY(tion)YH( suivante\240: )EP()BR()UL()0 P()-1 LI(Red Hat Linux 7.3)EP()0 P()-1 LI( Un noyau 2.4.18-5 avec une prise en charge de la QoS \201\351ven)HY(tuel)HY(le)HY(ment)YH( sous forme de module\202 qui inclut les correc)HY(tifs)YH( suivants\240: )BR()UL()0 P()-1 LI( file d'attente HTB - )R5 2 A(http://luxik.cdi.cz/~devik/qos/htb/)EA( )EP()0 P( Remarque\240: on signale que les noyaux Mandrake au del\340 de la version 2.4.18-3 \201versions 8.1 et 8.2 de la distri)HY(bu)HY(tion)YH( Mandrake\202 incluent le correc)HY(tif)YH( HTB. )EP()0 P()-1 LI( p\351ri)HY(ph\351)HY(rique)YH( IMQ - )R6 2 A(http://luxik.cdi.cz/~patrick/imq/)EA( )EP()LU()BR( Ces correc)HY(tifs)YH( se retrou)HY(ve)HY(ront)YH( proba)HY(ble)HY(ment)YH( int\351)HY(gr\351s)YH( en stan)HY(dard)YH( dans des versions ult\351)HY(rieures)YH( du noyau. )EP()0 P()-1 LI( iptables v1.2.6a ou suivantes. Le module length est absent de la version d'iptables distri)HY(bu\351e)YH( avec la Red Hat 7.3 )EP()LU()BR()BR()2 PT()BR()2 Sl()BR()2 Sl()BR()BR()BR()BR()0 3 14 H(2.2.\240Orga)WB 42 Sn()HY(ni)HY(sa)HY(tion)YH()WB 11 Sn()EH()BR()BR()BR()0 P( Toutes les mentions de p\351ri)HY(ph\351)HY(riques)YH( r\351seau et de confi)HY(gu)HY(ra)HY(tion)YH( dans ce guide pratique se rapportent au sch\351ma suivant\240: )EP() 15 74 PR( <-- 128kbit/s +------------+ <-- 10Mbit/s --> Internet <--------------------> | Modem ADSL | <-------------------+ 1.5Mbit/s --> +------------+ | | eth0 V +---------------+ | | | Routeur Linux | | | +---------------+ | .. | eth1..ethN | | V V R\351seau local)RP()2 Sl()BR()2 Sl()BR()BR()BR()BR()0 3 15 H(2.3.\240Files)WB 43 Sn()WB 12 Sn( d'attente des paquets)EH()BR()BR()BR()0 P( Les files d'attente contiennent les donn\351es desti)HY(n\351es)YH( \340 un p\351ri)HY(ph\351)HY(rique)YH( r\351seau quand celles-ci ne peuvent pas \352tre exp\351)HY(di\351es)YH( imm\351)HY(dia)HY(te)HY(ment)YH(. La plupart des files d'attente sont du type premier entr\351/premier sorti \201FIFO/first in, first out\202 sauf lorsqu'elles sont expli)HY(ci)HY(te)HY(ment)YH( confi)HY(gu)HY(r\351es)YH( pour appliquer une autre stra)HY(t\351)HY(gie)YH(. Cela signi)HY(fie)YH( que lorsqu'une file d'attente est remplie, le paquet qui y a \351t\351 plac\351 en dernier n'est \351mis qu'apr\350s tous ceux qui \351taient d\351j\340 pr\351sents dans la file. )EP()2 Sl()BR()BR()BR()BR()0 4 16 H(2.3.1.\240Le)WB 44 Sn()WB 13 Sn( lien montant)EH()BR()BR()BR()0 P( La bande passante d'un modem ADSL est asym\351)HY(trique)YH( avec des valeurs typiques de 1,5\240Mbit/s en descente et 128\240kbit/s en trafic montant. Par rapport au d\351bit de cette ligne, le routeur Linux et le modem ADSL sont g\351n\351)HY(ra)HY(le)HY(ment)YH( asso)HY(ci\351s)YH( par un lien \340 10\240Mb/s ou plus. Si l'inter)HY(face)YH( du routeur avec le r\351seau local est \351gale)HY(ment)YH( \340 10\240Mb/s il n'y a aucune mise en attente au niveau du routeur lorsque les paquets tran)HY(sitent)YH( \340 desti)HY(na)HY(tion)YH( d'Inter)HY(net)YH(. Les paquets sont trans)HY(mis)YH( via eth0 aussi rapi)HY(de)HY(ment)YH( qu'ils sont re\347us du r\351seau local. Les paquets s\351journent dans la file d'attente du modem ADSL puisqu'ils arrivent \340 10\240Mb/s et sont renvoy\351s \340 128\240kb/s. Une fois la file d'attente du modem satur\351e, les nouveaux paquets sont jet\351s. TCP s'adapte \340 ce ph\351no)HY(m\350ne)YH( et ajuste la taille de sa fen\352tre de trans)HY(mis)HY(sion)YH( pour employer toute la bande passante dispo)HY(nible)YH(. )EP()0 P( Si les files d'attente et TCP s'accordent pour utili)HY(ser)YH( toute la bande passante, des tailles de FIFO impor)HY(tantes)YH( augmentent la latence du trafic \340 voca)HY(tion)YH( inter)HY(ac)HY(tive)YH(. )EP()0 P( Les files d'attente \340 n voies sont simi)HY(laires)YH( aux files d'attente de type FIFO \340 cette diff\351)HY(rence)YH( pr\350s qu'elles comprennent plusieurs files. Les paquets sont plac\351s dans l'une des n files en fonc)HY(tion)YH( de leurs carac)HY(t\351)HY(ris)HY(tiques)YH(. Chaque file se voit attri)HY(buer)YH( une prio)HY(rit\351)YH( et les paquets sont \351mis \340 partir de la file de plus haute prio)HY(rit\351)YH( qui n'est pas vide. Avec cette stra)HY(t\351)HY(gie)YH(, les paquets FTP peuvent \352tre mis dans une file de prio)HY(rit\351)YH( plus basse que les paquets desti)HY(n\351s)YH( \340 telnet de telle sorte qu'un simple paquet telnet est capable de fran)HY(chir)YH( la file d'attente imm\351)HY(dia)HY(te)HY(ment)YH( m\352me lors d'un trans)HY(fert)YH( FTP. )EP()0 P( Ce docu)HY(ment)YH( a \351t\351 repris pour faire usage d'une nouvelle file d'attente dans Linux, dite de type HTB \201Hierar)HY(chi)HY(cal)YH( Token Bucket\202. La file HTB ressemble \340 la file \340 n voies d\351crite pr\351c\351)HY(dem)HY(ment)YH( mais elle rend possible la limi)HY(ta)HY(tion)YH( de trafic dans chaque classe. En outre, elle auto)HY(rise)YH( la cr\351a)HY(tion)YH( d'une hi\351rar)HY(chie)YH( de classes de trafic. Une descrip)HY(tion)YH( compl\350te d'HTB d\351passe le cadre de ce docu)HY(ment)YH(. Davan)HY(tage)YH( d'infor)HY(ma)HY(tions)YH( sont dispo)HY(nibles)YH( sur le site )R7 2 A(http://www.lartc.org)EA( )EP()2 Sl()BR()2 Sl()BR()BR()BR()BR()0 4 17 H(2.3.2.\240Le)WB 45 Sn()WB 14 Sn( lien descen)HY(dant)YH()EH()BR()BR()BR()0 P( Le trafic entrant dans le modem ADSL en prove)HY(nance)YH( d'Inter)HY(net)YH( est mis en file d'attente de la m\352me fa\347on que le trafic sortant \340 ceci pr\350s que la file d'attente se situe chez le FAI. Il n'est donc gu\350re possible de contr\364)HY(ler)YH( les prio)HY(ri)HY(t\351s)YH( rela)HY(tives)YH( des flux ou d'appliquer un trai)HY(te)HY(ment)YH( pr\351f\351)HY(ren)HY(tiel)YH( \340 certains. La seule fa\347on de main)HY(te)HY(nir)YH( une latence d\351cente consiste \340 s'assurer que les inter)HY(lo)HY(cu)HY(teurs)YH( n'envoient pas les donn\351es trop vite. Il n'y a malheu)HY(reu)HY(se)HY(ment)YH( pas de m\351thode directe. Comme une bonne partie du trafic est de type TCP, il est toute)HY(fois)YH( possible de ralen)HY(tir)YH( les \351met)HY(teurs)YH(\240: )EP()BR()UL()0 P()-1 LI( Jeter volon)HY(tai)HY(re)HY(ment)YH( les paquets entrants. TCP est con\347u pour employer la bande passante dispo)HY(nible)YH( tout en \351vitant la conges)HY(tion)YH( du lien. Durant un \351change TCP, les donn\351es sont \351mises jusqu'\340 ce qu'un paquet soit perdu. TCP remarque la perte et diminue sa fen\352tre de trans)HY(mis)HY(sion)YH(. Le cycle reprend, avec un rythme de progres)HY(sion)YH( des envois plus faible au cours du trans)HY(fert)YH( et garan)HY(tit)YH( une trans)HY(mis)HY(sion)YH( aussi rapide que possible. )EP()0 P()-1 LI( Jouer avec les annonces de fen\352tre de r\351cep)HY(tion)YH(. Au cours d'un trans)HY(fert)YH( TCP, le r\351cep)HY(teur)YH( envoie un flux perma)HY(nent)YH( de paquets d'acquit)HY(te)HY(ments)YH( \201ACK\202. Les paquets ACK incluent une annonce de taille de fen\352tre qui pr\351cise la quan)HY(tit\351)YH( maxi)HY(male)YH( de donn\351es non-acquit)HY(t\351es)YH( qui peut \352tre re\347ue. Ceci permet de ralen)HY(tir)YH( le rythme d'\351mis)HY(sion)YH(. Il n'existe \340 ce jour pas de mise en oeuvre libre de ce type de contr\364le de flux pour Linux \201quoique je puisse \352tre en train d'y travailler\202. )EP()LU()BR()2 Sl()BR()2 Sl()BR()2 Sl()BR()2 Sl()BR()BR()BR()BR()0 2 18 H(3.\240Fonc)WB 46 Sn()HY(tion)HY(ne)HY(ment)YH()WB 15 Sn()EH()BR()BR()BR()0 P( L'opti)HY(mi)HY(sa)HY(tion)YH( de la bande passante montante s'effec)HY(tue)YH( en deux \351tapes. Tout d'abord il faut \351viter que le modem ADSL ne mette les paquets en attente car on ne peut pas contr\364)HY(ler)YH( la fa\347on dont il g\350re sa file. Ceci s'effec)HY(tue)YH( en limi)HY(tant)YH( la quan)HY(tit\351)YH( de donn\351es \351mise par le routeur via eth0 un peu en dessous de la bande passante dispo)HY(nible)YH(. Le routeur met en file les paquets qui arrivent du r\351seau local plus vite qu'il ne les \351met. )EP()0 P( La seconde \351tape consiste \340 mettre en oeuvre une stra)HY(t\351)HY(gie)YH( de file d'attente au niveau du routeur. On exami)HY(nera)YH( une file d'attente qui peut \352tre confi)HY(gu)HY(r\351e)YH( pour donner la prio)HY(rit\351)YH( au trafic inter)HY(ac)HY(tif)YH( tel que telnet ou les jeux \340 plusieurs parti)HY(ci)HY(pants)YH( en r\351seau. )EP()BR()3 PT()BR()0 P( La derni\350re \351tape porte sur le marquage des paquets au niveau du pare-feu pour affec)HY(ter)YH( des prio)HY(ri)HY(t\351s)YH( aux paquets avec fwmark. )EP()2 Sl()BR()BR()BR()BR()0 3 19 H(3.1.\240Limi)WB 47 Sn()HY(ta)HY(tion)YH()WB 16 Sn( du trafic sortant avec HTB Linux)EH()BR()BR()BR()0 P( Bien que le lien entre le routeur et le modem soit \340 10\240Mb/s, voire plus, le modem n'\351met au mieux les donn\351es qu'\340 128\240kbit/s. Au del\340 de cette vitesse, les donn\351es sont mise en attente dans la file du modem. Un paquet de ping peut atteindre le modem imm\351)HY(dia)HY(te)HY(ment)YH( mais devoir attendre quelques secondes avant de rejoindre Inter)HY(net)YH( si la file d'attente du modem est remplie. La plupart des modems ADSL ne permettent pas de contr\364)HY(ler)YH( la fa\347on dont les paquets sont retir\351s de la file d'attente ni quelle est la taille de cette derni\350re. Le premier objec)HY(tif)YH( consiste donc \340 d\351pla)HY(cer)YH( le point de conges)HY(tion)YH( des paquets sortants \340 un endroit o\371 on peut exercer suffi)HY(sam)HY(ment)YH( de contr\364le. )EP()0 P( La file HTB limite le rythme d'envoi des paquets au modem ADSL. Bien que le rythme montant puisse atteindre 128\240kb/s, on doit le brider \340 une valeur l\351g\350)HY(re)HY(ment)YH( inf\351)HY(rieure)YH(. Pour limiter la latence, il faut \352tre certain du fait qu'aucun paquet n'est mis en attente au niveau du modem. L'exp\351)HY(rience)YH( m'a indiqu\351 qu'une limi)HY(ta)HY(tion)YH( \340 90\240kb/s du trafic sortant me donne 95\240% de la bande passante atteinte en l'absence de HTB. L'acti)HY(va)HY(tion)YH( de HTB \340 ce rythme pr\351vient la mise en file d'attente par le modem ADSL. )EP()2 Sl()BR()2 Sl()BR()BR()BR()BR()0 3 20 H(3.2.\240Gestion)WB 48 Sn()WB 17 Sn( des files de prio)HY(rit\351)YH( avec HTB)EH()BR()BR()BR()BR()4 PT()BR()0 P( Pour l'instant, les perfor)HY(mances)YH( n'ont pas \351t\351 modi)HY(fi\351es)YH(. La file de type FIFO des paquets a simple)HY(ment)YH( \351t\351 d\351pla)HY(c\351e)YH( du modem ADSL au routeur. Comme Linux a une longueur de file \351gale \340 100 paquets par d\351faut, la situa)HY(tion)YH( s'est proba)HY(ble)HY(ment)YH( aggra)HY(v\351e)YH( \201mais pas pour long)HY(temps)YH(\202. )EP()0 P( Chaque classe adja)HY(cente)YH( dans une file HTB peut se voir attri)HY(buer)YH( une prio)HY(rit\351)YH(. En pla\347ant diff\351)HY(rents)YH( types de trafic dans des classes distinctes et en affec)HY(tant)YH( \340 ces classes des prio)HY(ri)HY(t\351s)YH( sp\351ci)HY(fiques)YH(, l'ordre dans lequel les paquets sont extraits de la file puis \351mis est contr\364)HY(lable)YH(. HTB le permet tout en \351vitant qu'une classe ne soit \351teinte puisqu'une bande passante mini)HY(male)YH( pour chaque classe peut \352tre garan)HY(tie)YH(. En outre, HTB auto)HY(rise)YH( une classe \340 utili)HY(ser)YH( jusqu'\340 un certain niveau la bande passante laiss\351e libre par les autres classes. )EP()0 P( Une fois les classes en place, on installe des filtres qui r\351par)HY(tissent)YH( le trafic dans les classes. Plusieurs approches sont envi)HY(sa)HY(geables)YH( mais le docu)HY(ment)YH( s'appuie sur les utili)HY(taires)YH( courants ipchains/iptables pour marquer les paquets avec un indi)HY(ca)HY(teur)YH( fwmark. Les filtres dirigent le trafic dans les classes de la file HTB selon leur indice fwmark. De cette fa\347on, les r\350gles de recon)HY(nais)HY(sance)YH( d'iptables aiguillent certains trafics suivant leur classe. )EP()2 Sl()BR()2 Sl()BR()BR()BR()BR()0 3 21 H(3.3.\240Clas)WB 49 Sn()HY(si)HY(fi)HY(ca)HY(tion)YH()WB 18 Sn( des paquets sortant avec iptables)EH()BR()BR()BR()BR()5 PT()BR()0 P( La derni\350re \351tape de confi)HY(gu)HY(ra)HY(tion)YH( du routeur pour augmen)HY(ter)YH( la prio)HY(rit\351)YH( du trafic inter)HY(ac)HY(tif)YH( consiste \340 sp\351ci)HY(fier)YH( au filtre comment iden)HY(ti)HY(fier)YH( le trafic. Ceci s'effec)HY(tue)YH( avec le champ fwmark des paquets. )EP()0 P( Sans trop rentrer dans les d\351tails, voici une descrip)HY(tion)YH( simpli)HY(fi\351e)YH( du chemi)HY(ne)HY(ment)YH( des paquets entre quatre classes dont celle d'indice 0x00 a la prio)HY(rit\351)YH( la plus \351lev\351e: )EP()BR()4 OL()0 P()-1 LI( On marque tous les paquets avec l'indice 0x03. Ceci les place tous dans la file de prio)HY(rit\351)YH( la plus basse. )EP()0 P()-1 LI( On marque les paquets ICMP avec l'indice 0x00 afin que ping four)HY(nisse)YH( la latence des paquets de prio)HY(rit\351)YH( la plus \351lev\351e. )EP()0 P()-1 LI( On marque tous les paquets dont le port desti)HY(na)HY(tion)YH( est inf\351)HY(rieur)YH( \340 1024 comme 0x01. Les services syst\350me tels telnet et ssh voient leur prio)HY(rit\351)YH( augmen)HY(ter)YH(. Le port de contr\364le de ftp rentre dans cette cat\351)HY(go)HY(rie)YH(. Toute)HY(fois)YH(, les trans)HY(ferts)YH( de donn\351es ftp ont lieu avec des ports situ\351s plus haut et ils restent donc dans la cat\351)HY(go)HY(rie)YH( 0x03. )EP()0 P()-1 LI( On marque tous les paquets \340 desti)HY(na)HY(tion)YH( du port 25 \201SMTP\202 avec un indice 0x03 afin d'\351viter que l'envoi d'un cour)HY(rier)YH( muni d'un atta)HY(che)HY(ment)YH( volu)HY(mi)HY(neux)YH( n'empi\350te sur le trafic inter)HY(ac)HY(tif)YH(. )EP()0 P()-1 LI( On marque tous les paquets en direc)HY(tion)YH( d'un serveur de jeu avec un indice 0x02. Les joueurs fous auront une bonne latence sans \351craser les appli)HY(ca)HY(tions)YH( syst\350me qui demandent une latence faible. )EP()0 P( On marque tous les paquets de petite taille avec un indice 0x02. Les paquets de type ACK des t\351l\351)HY(char)HY(ge)HY(ments)YH( doivent \352tre retour)HY(n\351s)YH( rapi)HY(de)HY(ment)YH( afin d'assurer des trans)HY(ferts)YH( effi)HY(caces)YH(. Ceci est possible gr\342ce au module ad\351quat \201c'est-\340-dire length\202 d'iptables. )EP()LO()BR()0 P( Tout ce qui pr\351c\350de est bien s\373r person)HY(na)HY(li)HY(sable)YH( en fonc)HY(tion)YH( des besoins. )EP()2 Sl()BR()2 Sl()BR()BR()BR()BR()0 3 22 H(3.4.\240Des)WB 50 Sn()WB 19 Sn( r\351glages suppl\351)HY(men)HY(taires)YH(...)EH()BR()BR()BR()0 P( Deux choses sont encore suscep)HY(tibles)YH( d'am\351lio)HY(rer)YH( la latence. La MTU peut \352tre posi)HY(tion)HY(n\351e)YH( en dessous de la valeur par d\351faut de 1500\240octets. Sa dimi)HY(nu)HY(tion)YH( se r\351per)HY(cute)YH( sur le temps moyen d'attente lors de l'envoi d'un paquet prio)HY(ri)HY(taire)YH( lorsqu'un paquet de faible prio)HY(rit\351)YH( est d\351j\340 en cours de trans)HY(mis)HY(sion)YH(. La bande passante en souffre puisque le poids relatif des infor)HY(ma)HY(tions)YH( d'en-t\352te augmente \20140\240octets pour le couple TCP et IP\202. )EP()0 P( La longueur de queue de 100\240paquets par d\351faut, qui demande jusqu'\340 10 secondes pour se vider avec une ligne ADSL et une MTU de 1500\240octets, peut \351gale)HY(ment)YH( \352tre abais)HY(s\351e)YH(. )EP()2 Sl()BR()2 Sl()BR()BR()BR()BR()0 3 23 H(3.5.\240Une)WB 51 Sn()WB 20 Sn( tenta)HY(tive)YH( de limi)HY(ta)HY(tion)YH( du trafic entrant)EH()BR()BR()BR()0 P( L'emploi d'un p\351ri)HY(ph\351)HY(rique)YH( de file inter)HY(m\351)HY(diaire)YH( \201IMQ ou Inter)HY(me)HY(diate)YH( Queuing Device\202 place tous les paquets entrants dans une file d'une fa\347on analogue au trai)HY(te)HY(ment)YH( des paquets sortants. La gestion de la prio)HY(rit\351)YH( en est simpli)HY(fi\351e)YH(. On met tout le trafic hors TCP dans la classe 0x00, le trafic TCP \351tant quant \340 lui dans la classe 0x01. Les petits paquets vont \351gale)HY(ment)YH( dans la classe 0x00 car il s'agit vrai)HY(sem)HY(bla)HY(ble)HY(ment)YH( d'acquit)HY(te)HY(ments)YH( de donn\351es sortantes d\351j\340 \351mises. Une file d'attente FIFO stan)HY(dard)YH( est appliqu\351e \340 la classe 0x00 et une queue de rejet anti)HY(cip\351)YH( al\351a)HY(toire)YH( \201Random Early Drop/RED\202 traite la classe 0x01. RED est meilleur qu'une FIFO pour le contr\364le de TCP en ce qu'il rejette des paquets avant que la file ne d\351borde afin de ralen)HY(tir)YH( le trafic qui semble sur le point de devenir incon)HY(tr\364)HY(lable)YH(. Les deux classes sont \351gale)HY(ment)YH( born\351es sup\351)HY(rieu)HY(re)HY(ment)YH( \340 une valeur inf\351)HY(rieure)YH( \340 la capa)HY(cit\351)YH( maxi)HY(male)YH( de la ligne ADSL. )EP()2 Sl()BR()BR()BR()BR()0 4 24 H(3.5.1.\240Probl\350mes)WB 52 Sn()WB 21 Sn( soule)HY(v\351s)YH( par la limi)HY(ta)HY(tion)YH( de trafic entrant)EH()BR()BR()BR()0 P( On souhaite limiter le trafic entrant afin de ne pas remplir la file d'\351mis)HY(sion)YH( du c\364t\351 du FAI qui est suscep)HY(tible)YH( de conte)HY(nir)YH( jusqu'\340 5 secondes de donn\351es. La seule fa\347on de limiter le trafic entrant consiste \340 jeter des paquets tout \340 fait valables. Ces paquets ont d\351j\340 consomm\351 leur quote part de bande passante et le routeur Linux les jette afin de limiter le rythme d'arriv\351e des paquets futurs. Ces paquets seront s\373re)HY(ment)YH( retrans)HY(mis)YH( et consom)HY(me)HY(ront)YH( davan)HY(tage)YH( de bande passante. La limi)HY(ta)HY(tion)YH( du trafic porte sur le rythme auquel les paquets vont \352tre accep)HY(t\351s)YH(. Comme le taux )EM(courant)ES( est bien sup\351)HY(rieur)YH( en raison des paquets jet\351s, la bande passante descen)HY(dante)YH( doit \352tre )EM(bien)ES( inf\351)HY(rieure)YH( \340 la capa)HY(cit\351)YH( de la ligne pour main)HY(te)HY(nir)YH( une latence faible. En pratique, j'ai d\373 brider ma connexion ADSL descen)HY(dante)YH( de 1,5Mb/s \340 700kb/s afin de conser)HY(ver)YH( une bonne latence avec 5 t\351l\351)HY(char)HY(ge)HY(ments)YH( simul)HY(ta)HY(n\351s)YH(. Plus les sessions TCP sont nombreuses, plus la bande passante perdue dans les paquets jet\351s est \351lev\351e et plus il faut limiter le taux de trans)HY(fert)YH(. )EP()0 P( Une meilleure m\351thode consis)HY(te)HY(rait)YH( \340 jouer sur la fen\352tre TCP mais je ne connais pas d'outil libre pour le faire sous Linux. )EP()2 Sl()BR()2 Sl()BR()2 Sl()BR()2 Sl()BR()BR()BR()BR()0 2 25 H(4.\240R\351ali)WB 53 Sn()HY(sa)HY(tion)YH()WB 22 Sn()EH()BR()BR()BR()0 P( Apr\350s toutes ces expli)HY(ca)HY(tions)YH(, il est temps de passer \340 la mise en oeuvre sous Linux. )EP()2 Sl()BR()BR()BR()BR()0 3 26 H(4.1.\240Aver)WB 54 Sn()HY(tis)HY(se)HY(ments)YH()WB 23 Sn()EH()BR()BR()BR()0 P( Brider le rythme d'\351mis)HY(sion)YH( des donn\351es vers le modem ADSL n'est pas aussi simple qu'il y parait. La plupart des modems DSL \351tablit juste un pont Ether)HY(net)YH( entre le routeur Linux et la passe)HY(relle)YH( du c\364t\351 du FAI. La couche de liaison de donn\351es s'appuie le plus souvent sur ATM qui envoie les donn\351es au moyen de cellules de 53 octets. Cinq octets sont consom)HY(m\351s)YH( pour l'en-t\352te ATM lais)HY(sant)YH( ainsi 48 octets de donn\351es utiles. La trans)HY(mis)HY(sion)YH( d'un simple octet de donn\351es isol\351 ne peut donc pas deman)HY(der)YH( moins de 53 octets au niveau du lien ATM. Dans le cas d'un acquit)HY(te)HY(ment)YH( TCP typique qui comprend 0 octet de donn\351es, 20 octets d'en-t\352te TCP, autant d'en-t\352te IP et 18 de pr\351am)HY(bule)YH( Ether)HY(net)YH(, les donn\351es utiles \20140 octets\202 sont inf\351)HY(rieures)YH( au minimum de 48 octets requis par une trame Ether)HY(net)YH(. Afin d'envoyer les 64 \20148+16\202 octets via ATM, deux cellules ATM sont n\351ces)HY(saires)YH(, d'o\371 une consom)HY(ma)HY(tion)YH( de 106 octets de bande passante au niveau du lien ADSL. Chaque paquet TCP d'acquit)HY(te)HY(ment)YH( gaspille donc 42 octets de bande passante. Ceci ne serait pas g\352nant si Linux prenait en compte l'encap)HY(su)HY(la)HY(tion)YH( due au modem ADSL. Il ne peut malheu)HY(reu)HY(se)HY(ment)YH( pas le faire et se cantonne aux en-t\352tes TCP et IP ainsi qu'aux 14 octets d'adresse MAC \201les quatre octets de CRC g\351r\351s au niveau mat\351)HY(riel)YH( sont ignor\351s\202. Linux ne prend pas en compte la taille mini)HY(male)YH( de trame Ether)HY(net)YH( ni la taille de cellule ATM. )EP()0 P( Tout ceci pour convaincre qu'il faut limiter le trafic sortant \340 une valeur sensi)HY(ble)HY(ment)YH( inf\351)HY(rieure)YH( \340 la v\351ri)HY(table)YH( capa)HY(cit\351)YH( de la ligne \201jusqu'\340 ce qu'on dispose d'un ordon)HY(nan)HY(ceur)YH( de paquets capable de prendre en compte les diff\351)HY(rentes)YH( encap)HY(su)HY(la)HY(tions)YH( employ\351es\202. Vous pouvez penser avoir trouv\351 un bon r\351glage mais consta)HY(ter)YH( des sauts de latence au del\340 de trois secondes lors d'un t\351l\351)HY(char)HY(ge)HY(ments)YH( impor)HY(tant)YH(. Ceci viendra proba)HY(ble)HY(ment)YH( d'une mauvaise \351valua)HY(tion)YH( de la bande passante consom)HY(m\351e)YH( par les petits paquets d'acquit)HY(te)HY(ment)YH(. )EP()0 P( Je travaille depuis quelques mois sur une solu)HY(tion)YH( \340 ce probl\350me et j'ai presque termin\351 quelque chose qui sera publi\351 afin que chacun puisse le tester. Ma solu)HY(tion)YH( repose sur une file en espace utili)HY(sa)HY(teur)YH( \340 la place de la QoS de Linux pour limiter le rythme de trans)HY(fert)YH( des paquets. Il s'agit d'une variante d'HTB en espace utili)HY(sa)HY(teur)YH(. Pour l'instant cette solu)HY(tion)YH( a \351t\351 capable de r\351guler le trafic sortant lors de t\351l\351)HY(char)HY(ge)HY(ments)YH( massifs \201plusieurs flux\202 et de trans)HY(ferts)YH( point-\340-point en volume \201gnutella, sic\202 avec une telle effi)HY(ca)HY(cit\351)YH( que la latence d\351passe au plus de 400\240ms la latence nomi)HY(nale)YH( de 15\240ms inh\351)HY(rente)YH( \340 mon lien ADSL. Pour davan)HY(tage)YH( d'infor)HY(ma)HY(tions)YH(, abonnez-vous \340 la liste de diffu)HY(sion)YH( ou surveillez les mises \340 jour de ce docu)HY(ment)YH(. )EP()2 Sl()BR()2 Sl()BR()BR()BR()BR()0 3 27 H(4.2.\240Script:)WB 55 Sn()WB 24 Sn( mon_limi)HY(teur)YH()EH()BR()BR()BR()0 P( Ci-suit le source d'un script que j'emploie pour g\351rer la bande passante de mon routeur Linux. Il s'appuie sur les concepts expliqu\351s dans ce guide. Le trafic sortant est ventil\351 entre une des sept files dispo)HY(nibles)YH( en fonc)HY(tion)YH( de son type. Le trafic entrant est plac\351 dans une file parmi deux, le trafic TCP \351tant jet\351 en premier en cas de surcharge de la ligne. Les valeurs conviennent \340 mon instal)HY(la)HY(tion)YH( mais les r\351sul)HY(tats)YH( peuvent \352tre diff\351)HY(rents)YH( ailleurs. )EP()BR()6 PT()BR() 263 167 PR(#!/bin/bash # # mon_limiteur - Limiteur et classificateur de trafic pour modem Cable ou ADSL. # Inspir\351 de WonderShaper \201www.lartc.org\202 # # \311crit par Dan Singletary \2017/8/02\202 # # Remarque - ce script suppose que le noyau a \351t\351 patch\351 avec les files # HTB et IMQ disponibles ici \201les noyaux \340 venir ne demanderont # pas forc\351ment l'application d'un correctif\202: # http://luxik.cdi.cz/~devik/qos/htb/ # http://luxik.cdi.cz/~patrick/imq/ # # Options de configuration pour mon_limiteur: # DEV - correspond au p\351riph\351rique ethX connect\351 au modem # RATEUP - \340 positionner \340 une valeur inf\351rieure \340 la bande # passante montante de la ligne. # Pour ma ligne ADSL en 1500/128, RATEUP=90 convient au rythme # montant de 128kbps. A vous d'ajuster. # RATEDN - \340 positionner en dessous de la bande passante descendante de # la ligne. # # # Principe d'utilisation d'imq pour limiter le trafic entrant: # # Il est impossible de limiter directement le rythme auquel les # donn\351es vous sont envoy\351es depuis l'Internet. Afin de limiter le # trafic entrant, on s'appuie sur les m\351canismes anti-congestion de # TCP. Ceci signifie que SEUL LE TRAFIC TCP PEUT SE LIMITER. Le # trafic hors TCP est plac\351 dans une queue prioritaire car le jeter # ne conduit vraisemblablement qu'\340 une retransmission ult\351rieure)WR( # qui accro\356t la bande passante consomm\351e. # On limite le trafic TCP en jetant les paquets lorsqu'ils d\351bordent # de la file HTB qui les limitera \340 un certain rythme \201RATEDN\202 # l\351g\350rement inf\351rieur \340 la capacit\351 r\351elle de la ligne. Jeter ces # paquets revient \340 en singer la perte par la file d'\351mission du # c\364t\351 du FAI. Ceci a l'avantage d'\351viter la congestion de la file # d'\351mission chez le FAI puisque TCP ralentira avant qu'elle ne # se remplisse. L'usage d'une strat\351gie de mise en attente bas\351e sur # la classification des paquets par priorit\351 permet de ne PAS jeter # certains types de paquets \201ssh, telnet, etc\202. Les paquets ne sont # retir\351s des files d'attente de faible priorit\351 qu'une fois que # chaque classe a atteint un seuil minimum \2011/7 de la bande passante # dans ce script\202. # # R\351sum\351: # * La perte d'un paquet TCP diminue le rythme de r\351ception de la # connexion associ\351e via les m\351canismes de contr\364le de congestion. # * Jeter des paquets TCP n'apporte rien. S'ils sont importants, ils # seront retransmis. # * Limiter le rythme des connexions TCP entrantes en dessous de la # capacit\351 de la ligne DEVRAIT \351viter la mise en attente des paquets # du c\364t\351 du FAI \201DSLAM, concentrateur de cables, etc\202. L'exp\351rience # indique que ces files contiennent 4 secondes de trafic \340 1500kbps, # soit 6Mb de donn\351es. A ce niveau, l'absence de mise en attente # diminue la latence. # # Avertissements: # * Est-ce que la limitation de bande passante diminue l'efficacit\351 de # transferts TCP massifs ? # - Apparemment non. L'augmentation de priorit\351 des paquets)WR( # d'acquittement maximise le d\351bit en \351vitant de perdre de la bande # passante \340 retransmettre des paquets d\351j\340 re\347us. # # NOTE: La configuration ci-dessous fonctionne avec ma connexion ADSL # 1.5M/128K via Pacific Bell Internet \201SBC Global Services\202 DEV=eth0 RATEUP=90 RATEDN=700 # Nettement inf\351rieur \340 la capacit\351 de la ligne de 1500. # On n'a donc pas \340 limiter le trafic entrant jusqu'\340 ce # qu'une meilleure r\351alisation telle que la modification # de fen\352tre TCP soit disponible. # # Fin des options de configuration # if [ "$1" = "status" ] then echo "[qdisc]" tc -s qdisc show dev $DEV tc -s qdisc show dev imq0 echo "[class]" tc -s class show dev $DEV tc -s class show dev imq0 echo "[filter]" tc -s filter show dev $DEV tc -s filter show dev imq0 echo "[iptables]")WR( iptables -t mangle -L MONLIMITEUR-OUT -v -x 2> /dev/null iptables -t mangle -L MONLIMITEUR-IN -v -x 2> /dev/null exit fi # Remise \340 z\351ro tc qdisc del dev $DEV root 2> /dev/null > /dev/null tc qdisc del dev imq0 root 2> /dev/null > /dev/null iptables -t mangle -D POSTROUTING -o $DEV -j MONLIMITEUR-OUT 2> /dev/null > /dev/null iptables -t mangle -F MONLIMITEUR-OUT 2> /dev/null > /dev/null iptables -t mangle -X MONLIMITEUR-OUT 2> /dev/null > /dev/null iptables -t mangle -D PREROUTING -i $DEV -j MONLIMITEUR-IN 2> /dev/null > /dev/null iptables -t mangle -F MONLIMITEUR-IN 2> /dev/null > /dev/null iptables -t mangle -X MONLIMITEUR-IN 2> /dev/null > /dev/null ip link set imq0 down 2> /dev/null > /dev/null rmmod imq 2> /dev/null > /dev/null if [ "$1" = "stop" ] then echo "Limitation de d\351bit d\351sactiv\351e sur $DEV." exit fi ########################################################### # # Limitation de trafic sortant \201limite sup\351rieure \340 RATEUP\202 # positionnement de la taille de la file d'\351mission pour obtenir # une latence d'environ 2 secondes pour les paquets de la file # de faible priorit\351.)WR( ip link set dev $DEV qlen 30 # modification de MTU du p\351riph\351rique sortant. # - Diminuer la MTU abaisse la latence mais d\351grade le d\351bit en raison de # la surcharge IP et TCP. ip link set dev $DEV mtu 1000 # ajout de la strat\351gie HTB tc qdisc add dev $DEV root handle 1: htb default 26 # ajout de la classe de limitation principale tc class add dev $DEV parent 1: classid 1:1 htb rate ${RATEUP}kbit # ajout des classes filles: # - chaque classe dispose AU MOINS de son quota de bande passante. Aucune # classe n'est donc \351touff\351e par les autres. Chaque classe peut \351galement # consommer toute la bande passante si aucune autre classe ne l'emploie. tc class add dev $DEV parent 1:1 classid 1:20 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 0 tc class add dev $DEV parent 1:1 classid 1:21 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 1 tc class add dev $DEV parent 1:1 classid 1:22 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 2 tc class add dev $DEV parent 1:1 classid 1:23 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 3 tc class add dev $DEV parent 1:1 classid 1:24 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 4 tc class add dev $DEV parent 1:1 classid 1:25 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 5 tc class add dev $DEV parent 1:1 classid 1:26 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 6 # ajout de la strat\351gie aux classes filles # - SFQ offre un traitement sensiblement \351quitable de chaque classe. tc qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10 tc qdisc add dev $DEV parent 1:21 handle 21: sfq perturb 10 tc qdisc add dev $DEV parent 1:22 handle 22: sfq perturb 10)WR( tc qdisc add dev $DEV parent 1:23 handle 23: sfq perturb 10 tc qdisc add dev $DEV parent 1:24 handle 24: sfq perturb 10 tc qdisc add dev $DEV parent 1:25 handle 25: sfq perturb 10 tc qdisc add dev $DEV parent 1:26 handle 26: sfq perturb 10 # r\351partition du trafic en classe via fwmark # - le trafic est r\351parti en classes de priorit\351 suivant l'indicateur # fwmark des paquets \201ceux-ci sont positionn\351s avec iptables un peu plus # loin\202. La classe de priorit\351 par d\351faut a \351t\351 mise \340 1:26 de telle sorte # que les paquets qui ne sont pas marqu\351s se retrouvent dans la classe de # priorit\351 la plus faible. tc filter add dev $DEV parent 1:0 prio 0 protocol ip handle 20 fw flowid 1:20 tc filter add dev $DEV parent 1:0 prio 0 protocol ip handle 21 fw flowid 1:21 tc filter add dev $DEV parent 1:0 prio 0 protocol ip handle 22 fw flowid 1:22 tc filter add dev $DEV parent 1:0 prio 0 protocol ip handle 23 fw flowid 1:23 tc filter add dev $DEV parent 1:0 prio 0 protocol ip handle 24 fw flowid 1:24 tc filter add dev $DEV parent 1:0 prio 0 protocol ip handle 25 fw flowid 1:25 tc filter add dev $DEV parent 1:0 prio 0 protocol ip handle 26 fw flowid 1:26 # ajout de MONLIMITEUR-OUT \340 la table de modification des paquets d'iptables # - ceci d\351clare la table employ\351e pour filtrer et classer les paquets iptables -t mangle -N MONLIMITEUR-OUT iptables -t mangle -I POSTROUTING -o $DEV -j MONLIMITEUR-OUT # ajout de fwmark pour classer les diff\351rents types de trafic # - fwmark est positionn\351 de 20 \340 26 suivant la classe. 20 correspond \340 la # priorit\351 la plus forte. iptables -t mangle -A MONLIMITEUR-OUT -p tcp --sport 0:1024 -j MARK --set-mark 23 # Trafic sur les ports bas iptables -t mangle -A MONLIMITEUR-OUT -p tcp --dport 0:1024 -j MARK --set-mark 23 # "" iptables -t mangle -A MONLIMITEUR-OUT -p tcp --dport 20 -j MARK --set-mark 26 # Port ftp-data, faible priorit\351)WR( iptables -t mangle -A MONLIMITEUR-OUT -p tcp --dport 5190 -j MARK --set-mark 23 # Messagerie Imm\351diate AOL iptables -t mangle -A MONLIMITEUR-OUT -p icmp -j MARK --set-mark 20 # ICMP \201ping\202 - forte priorit\351 \201impressionnez vos amis\202 iptables -t mangle -A MONLIMITEUR-OUT -p udp -j MARK --set-mark 21 # DNS \201petits paquets\202 iptables -t mangle -A MONLIMITEUR-OUT -p tcp --dport ssh -j MARK --set-mark 22 # shell s\351curis\351 iptables -t mangle -A MONLIMITEUR-OUT -p tcp --sport ssh -j MARK --set-mark 22 # shell s\351curis\351 iptables -t mangle -A MONLIMITEUR-OUT -p tcp --dport telnet -j MARK --set-mark 22 # telnet \201hum...\202 iptables -t mangle -A MONLIMITEUR-OUT -p tcp --sport telnet -j MARK --set-mark 22 # telnet \201hum...\202 iptables -t mangle -A MONLIMITEUR-OUT -p ipv6-crypt -j MARK --set-mark 24 # IPSec - la surcharge n'est pas connue... iptables -t mangle -A MONLIMITEUR-OUT -p tcp --sport http -j MARK --set-mark 25 # Serveur WWW local iptables -t mangle -A MONLIMITEUR-OUT -p tcp -m length --length :64 -j MARK --set-mark 21 # Petits paquets \201des ACK probablement\202 iptables -t mangle -A MONLIMITEUR-OUT -m mark --mark 0 -j MARK --set-mark 26 # R\351p\351tition - on marque les paquets restants \340 26 \201faible priorit\351\202 # Fin de la limitation sortante # #################################################### echo "Limitation de trafic sortant activ\351 sur $DEV. D\351bit: ${RATEUP}kbit/sec." # D\351commenter la ligne suivante pour n'avoir que la limitation de trafic montant. # exit #################################################### # # Limitation du trafic entrant \201d\351bit maximal de RATEDN\202 # on force le chargement du module imq modprobe imq numdevs=1 ip link set imq0 up)WR( # ajout de la strat\351gie de mise en file d'attente # - par d\351faut une classe 1:21 \340 faible priorit\351 tc qdisc add dev imq0 handle 1: root htb default 21 # ajout de la classe de limitation principale tc class add dev imq0 parent 1: classid 1:1 htb rate ${RATEDN}kbit # ajout des classes filles # - trafic TCP en 21, le reste en 20 # tc class add dev imq0 parent 1:1 classid 1:20 htb rate $[$RATEDN/2]kbit ceil ${RATEDN}kbit prio 0 tc class add dev imq0 parent 1:1 classid 1:21 htb rate $[$RATEDN/2]kbit ceil ${RATEDN}kbit prio 1 # ajout de la strat\351gie de limitation aux classes filles # - voir les remarques ci-dessus sur SFQ. tc qdisc add dev imq0 parent 1:20 handle 20: sfq perturb 10 tc qdisc add dev imq0 parent 1:21 handle 21: red limit 1000000 min 5000 max 100000 avpkt 1000 burst 50 # r\351partition du trafic en classe via fwmark # - le trafic est r\351parti en classes de priorit\351 suivant l'indicateur # fwmark des paquets \201ceux-ci sont positionn\351s avec iptables un peu plus # loin\202. La classe de priorit\351 par d\351faut \340 \351t\351 mise \340 1:26 de telle sorte # que les paquets qui ne sont pas marqu\351s se retrouvent dans la classe de # priorit\351 la plus faible. tc filter add dev imq0 parent 1:0 prio 0 protocol ip handle 20 fw flowid 1:20 tc filter add dev imq0 parent 1:0 prio 0 protocol ip handle 21 fw flowid 1:21 # ajout de MONLIMITEUR-IN \340 la table de modification des paquets d'iptables)WR( iptables -t mangle -N MONLIMITEUR-IN iptables -t mangle -I PREROUTING -i $DEV -j MONLIMITEUR-IN # ajout de fwmark pour classer les diff\351rents types de trafic # - fwmark est positionn\351 de 20 \340 21 suivant la classe. 20 correspond \340 la # priorit\351 la plus forte. iptables -t mangle -A MONLIMITEUR-IN -p ! tcp -j MARK --set-mark 20 # Forte priorit\351 pour les paquets non TCP iptables -t mangle -A MONLIMITEUR-IN -p tcp -m length --length :64 -j MARK --set-mark 20 # Les petits paquets TCP sont probablement des ACK iptables -t mangle -A MONLIMITEUR-IN -p tcp --dport ssh -j MARK --set-mark 20 # shell s\351curis\351 iptables -t mangle -A MONLIMITEUR-IN -p tcp --sport ssh -j MARK --set-mark 20 # shell s\351curis\351 iptables -t mangle -A MONLIMITEUR-IN -p tcp --dport telnet -j MARK --set-mark 20 # telnet \201hum...\202 iptables -t mangle -A MONLIMITEUR-IN -p tcp --sport telnet -j MARK --set-mark 20 # telnet \201hum...\202 iptables -t mangle -A MONLIMITEUR-IN -m mark --mark 0 -j MARK --set-mark 21 # R\351p\351tition - les paquets sans marque sont positionn\351s \340 21 \201faible priorit\351\202 # on envoie les paquets pr\351c\351dents \340 l'interface imq0. iptables -t mangle -A MONLIMITEUR-IN -j IMQ # Fin de la limitation de trafic entrant. # #################################################### echo "Limitation de trafic entrant activ\351e sur $DEV. D\351bit: ${RATEDN}kbit/sec.")RP()2 Sl()BR()2 Sl()BR()2 Sl()BR()BR()BR()BR()0 2 28 H(5.\240Test)WB 56 Sn()WB 25 Sn()EH()BR()BR()BR()0 P( La m\351thode de test la plus facile consiste \340 saturer le lien montant avec du trafic \340 faible prio)HY(rit\351)YH(. Si le trafic telnet et le ping ont une prio)HY(rit\351)YH( \351lev\351e par oppo)HY(si)HY(tion)YH( aux trans)HY(ferts)YH( FTP, l'augmen)HY(ta)HY(tion)YH( de d\351lai des pings lorsqu'un trans)HY(fert)YH( FTP s'\351tablit devrait \352tre n\351gli)HY(geable)YH( par rapport \340 ce qu'elle devient en l'absence de file d'attente. Des pings en dessous de 100\240ms d\351pendent de la confi)HY(gu)HY(ra)HY(tion)YH(. Des pings au dessus d'une ou deux secondes signalent une anoma)HY(lie)YH(. )EP()2 Sl()BR()2 Sl()BR()BR()BR()BR()0 2 29 H(6.\240\307a)WB 57 Sn()WB 26 Sn( fonc)HY(tionne)YH(. Et main)HY(te)HY(nant)YH(\240?)EH()BR()BR()BR()0 P( Main)HY(te)HY(nant)YH( que la bande passante est g\351r\351e, il faut s'en servir. Apr\350s tout, elle a \351t\351 pay\351e\240! )EP()BR()UL()0 P()-1 LI( Utili)HY(sez)YH( un client Gnutella et PARTA)HY(GEZ)YH( VOS FICHIERS sans d\351gra)HY(der)YH( les perfor)HY(mances)YH( de votre r\351seau. )EP()0 P()-1 LI( H\351ber)HY(gez)YH( un site web sans que la consul)HY(ta)HY(tion)YH( ne ralen)HY(tisse)YH( vos sessions Quake. )EP()LU()BR()2 Sl()BR()2 Sl()BR()BR()BR()BR()0 2 30 H(7.\240Liens)WB 58 Sn()WB 27 Sn()EH()BR()BR()BR()BR()UL()0 P()-1 LI( Contr\364)HY(leur)YH( de bande passante pour Windows \201)EM(Band)HY(width)YH( Control)HY(ler)YH( for Windows)ES(\202 - )R8 2 A(http://www.band)HY(wid)HY(th)HY(con)HY(trol)HY(ler)YH(.com)EA( )EP()0 P()-1 LI( )R9 2 A(dsl_qos_queue)EA( - \201b\352ta\202 pour Linux. Pas de correc)HY(tifs)YH( pour le noyau et de meilleurs perfor)HY(mances)YH( )EP()LU()BR()2 Sl()BR()1 Sl()BR()WB NL /BO 0 D TC /Ba f D Bs /AU f D /UR () D RC ZF tH WB ND 1 gt{Ts 3 mul Np 0()0 C()BD(Guide pratique de la gestion de bande passante d'une ligne ADSL)ES()0 1 TN()EA()BN}if 2 NH le{28(0.1\240\240)2 C(Guide)WB 1 Sn( pratique de la gestion de bande passante d'une ligne ADSL)28 1 TN()EA()BN}if 3 NH le{29(0.1.1\240\240)3 C()I(Version fran\347aise du )EM(ADSL Band)HY(width)YH( Mana)HY(ge)HY(ment)YH( HOWTO)ES()ES()29 1 TN()EA()BN}if 3 NH le{30(0.1.2\240\240)3 C(Dan Single)HY(tary)YH()30 1 TN()EA()BN}if 3 NH le{31(0.1.3\240\240)3 C(Fran\347ois Romieu)31 1 TN()EA()BN}if 3 NH le{32(0.1.4\240\240)3 C(Guillaume Lelarge)32 1 TN()EA()BN}if 2 NH le{33(0.2\240\240)2 C(1.\240Intro)HY(duc)HY(tion)YH()WB 2 Sn()33 1 TN()EA()BN}if 3 NH le{34(0.2.1\240\240)3 C(1.1.\240Mises)WB 3 Sn( \340 jour du docu)HY(ment)YH()34 1 TN()EA()BN}if 3 NH le{35(0.2.2\240\240)3 C(1.2.\240Liste)WB 4 Sn( de diffu)HY(sion)YH()35 1 TN()EA()BN}if 3 NH le{36(0.2.3\240\240)3 C(1.3.\240Aver)HY(tis)HY(se)HY(ment)YH()WB 5 Sn()36 1 TN()EA()BN}if 3 NH le{37(0.2.4\240\240)3 C(1.4.\240Copy)HY(right)YH()WB 6 Sn()37 1 TN()EA()BN}if 3 NH le{38(0.2.5\240\240)3 C(1.5.\240Droits)WB 7 Sn( d'utili)HY(sa)HY(tion)YH()38 1 TN()EA()BN}if 3 NH le{39(0.2.6\240\240)3 C(1.6.\240Retours)WB 8 Sn( d'exp\351)HY(rience)YH( et correc)HY(tions)YH()39 1 TN()EA()BN}if 2 NH le{40(0.3\240\240)2 C(2.\240Cadre)WB 9 Sn( d'utili)HY(sa)HY(tion)YH()40 1 TN()EA()BN}if 3 NH le{41(0.3.1\240\240)3 C(2.1.\240Pr\351requis)WB 10 Sn()41 1 TN()EA()BN}if 3 NH le{42(0.3.2\240\240)3 C(2.2.\240Orga)HY(ni)HY(sa)HY(tion)YH()WB 11 Sn()42 1 TN()EA()BN}if 3 NH le{43(0.3.3\240\240)3 C(2.3.\240Files)WB 12 Sn( d'attente des paquets)43 1 TN()EA()BN}if 4 NH le{44(0.3.3.1\240\240)4 C(2.3.1.\240Le)WB 13 Sn( lien montant)44 1 TN()EA()BN}if 4 NH le{45(0.3.3.2\240\240)4 C(2.3.2.\240Le)WB 14 Sn( lien descen)HY(dant)YH()45 1 TN()EA()BN}if 2 NH le{46(0.4\240\240)2 C(3.\240Fonc)HY(tion)HY(ne)HY(ment)YH()WB 15 Sn()46 1 TN()EA()BN}if 3 NH le{47(0.4.1\240\240)3 C(3.1.\240Limi)HY(ta)HY(tion)YH()WB 16 Sn( du trafic sortant avec HTB Linux)47 1 TN()EA()BN}if 3 NH le{48(0.4.2\240\240)3 C(3.2.\240Gestion)WB 17 Sn( des files de prio)HY(rit\351)YH( avec HTB)48 1 TN()EA()BN}if 3 NH le{49(0.4.3\240\240)3 C(3.3.\240Clas)HY(si)HY(fi)HY(ca)HY(tion)YH()WB 18 Sn( des paquets sortant avec iptables)49 1 TN()EA()BN}if 3 NH le{50(0.4.4\240\240)3 C(3.4.\240Des)WB 19 Sn( r\351glages suppl\351)HY(men)HY(taires)YH(...)50 1 TN()EA()BN}if 3 NH le{51(0.4.5\240\240)3 C(3.5.\240Une)WB 20 Sn( tenta)HY(tive)YH( de limi)HY(ta)HY(tion)YH( du trafic entrant)51 1 TN()EA()BN}if 4 NH le{52(0.4.5.1\240\240)4 C(3.5.1.\240Probl\350mes)WB 21 Sn( soule)HY(v\351s)YH( par la limi)HY(ta)HY(tion)YH( de trafic entrant)52 1 TN()EA()BN}if 2 NH le{53(0.5\240\240)2 C(4.\240R\351ali)HY(sa)HY(tion)YH()WB 22 Sn()53 1 TN()EA()BN}if 3 NH le{54(0.5.1\240\240)3 C(4.1.\240Aver)HY(tis)HY(se)HY(ments)YH()WB 23 Sn()54 1 TN()EA()BN}if 3 NH le{55(0.5.2\240\240)3 C(4.2.\240Script:)WB 24 Sn( mon_limi)HY(teur)YH()55 1 TN()EA()BN}if 2 NH le{56(0.6\240\240)2 C(5.\240Test)WB 25 Sn()56 1 TN()EA()BN}if 2 NH le{57(0.7\240\240)2 C(6.\240\307a)WB 26 Sn( fonc)HY(tionne)YH(. Et main)HY(te)HY(nant)YH(\240?)57 1 TN()EA()BN}if 2 NH le{58(0.8\240\240)2 C(7.\240Liens)WB 27 Sn()58 1 TN()EA()BN}if /TE t D NP TU PM 0 eq and{/Pn () D showpage}if end restore .