ALTQ - prosentvis fordeling

Så til et eksempel som jeg i alt vesentlig har rappet fra unix.se. Her ser vi at vi begynner med å deklarere at køen skal etableres på eksternt grensesnitt. Dette er antakelig det vanligste fordi det er der det er størst begrensninger på båndbredden, men i prinsippet er det ikke noe i veien for å etablere køer og kjøre trafikkforming på hvilket som helst nettverksgrensesnitt. Her er det snakk om en cbq-kø med total båndbredde på 640KB og seks underkøer.

altq on $ytre cbq bandwidth 640Kb queue { def, ftp, udp, http, \
         ssh, icmp }
queue def bandwidth 18% cbq(default borrow red)
queue ftp bandwidth 10% cbq(borrow red)
queue udp bandwidth 30% cbq(borrow red)
queue http bandwidth 20% cbq(borrow red)
queue ssh bandwidth 20% cbq(borrow red) { ssh_interactive, ssh_bulk }
queue ssh_interactive priority 7
queue ssh_bulk priority 0
queue icmp bandwidth 2% cbq

Her ser vi at delkøen def med 18 prosent båndbredde er angitt som standardkø, dvs all trafikk som ikke er eksplisitt tilordnet en annen kø, havner her. Nøkkelordene borrow og red betyr at køen kan 'låne' båndbredde fra overordnet kø, og vil prøve å unngå at køen blir full etter algoritmen RED (Random Early Detection). De andre køene følger stort sett same mønster, helt til vi kommer til delkøen ssh, som igjen har to delkøer med forskjellig prioritet.

I ssh-køen ser vi igjen en variant av ACK-prioritering via underordnede køer: SSH-overføringer merket 'bulk', typisk filoverføring via SCP, blir overført med ToS som angir normal forsinkelse, mens interaktiv SSH-trafikk har 'low delay'-biten satt og blir overført raskere enn 'bulk'-overføringene.

Dette oppsettet har antakeligvis også positiv innvirkning på hastigheten for SCP-filoverføringer, siden ACK-pakkene for SCP vil bli tilordnet køen med høy prioritet.

Så kommer vi til pass-reglene som sørger for at trafikk blir fordelt til køene, og etter hvilke kriterier:

pass log quick on $ytre proto tcp from any to any port 22 flags S/SA \ 
    keep state queue (ssh_bulk, ssh_interactive)
pass in quick on $ytre proto tcp from any to any port 20 flags S/SA  \
    keep state queue ftp
pass in quick on $ytre proto tcp from any to any port 80 flags S/SA \
    keep state queue http
pass out on $ytre proto udp all keep state queue udp
pass out on $ytre proto icmp all keep state queue icmp

Det er rimelig å anta at denne fordelingen svarer til behovet på stedet.