Eeegw – part III – Quality Of Service aka QOS
Scheduler / Ordonnanceur
Mise en place des outils
En tout premier lieu vous aurez besoin de iptables et de iproute2
iproute2 est une suite d’utilitaires en ligne de commande qui vous permettent de manipuler les structures kernel liées aux couches réseau de votre machine.
Gentoo :
Debian :
Verifiez que vous avez bien l’utilitaire tc :
Usage: tc [ OPTIONS ] OBJECT { COMMAND | help }
tc [-force] -batch file
where OBJECT := { qdisc | class | filter | action | monitor }
OPTIONS := { -s[tatistics] | -d[etails] | -r[aw] | -p[retty] | -b[atch] [file] }
Traduction du manuel de tc
Les “classful qdiscs” sont :
“Class Based Queueing” implémente une hierarchie de classes. il contient des éléments de shaping comme des fonctions de prioritisations. Le shape est calculé à partir de latence et de taille de packets
“Hierarchy Token Bucket”
HTB permet de garantir de la bande passante a une classe, définir des limites entre les classes et de fixer des priorités entre elles.
PRIO permet de classifier les classes qui prennent en priorité de la bande passante, en ne laissant aux autres que ce qui reste de bande passante disponible.
Qu’est-ce qu’une classe
Une classe forme, en fait, un arbre avec des branches.
Le but est de former une classe root qui va permettre de faire rentrer tout le trafic et, en fonction des protocoles, on va faire passer le traffic dans différentes branches.
ici nous définissons nos classes root :
## On met en place la classe root pour la BP disponible. /sbin/tc qdisc add dev $EXTERNAL_IFACE root handle 1: cbq avpkt 1000 bandwidth $BNDWIDTH ## Match ici l'upload de la connexion /sbin/tc class add dev $EXTERNAL_IFACE parent 1: classid 1:1 cbq rate ${UPLINK}kbit allot 1500 prio 5 bounded isolated
Datagrame IPv4 et Type Of Service : TOS
Tableau des TOS possible dans un Datagram IPv4
Binaire | Décimal | Signification |
---|---|---|
1000 | 8 | Minimise le Délai (Minimize delay) (md) |
0100 | 4 | Maximalise le Débit (Maximize throughput) (mt) |
0010 | 2 | Maximalise la Fiabilité (Maximize reliability) (mr) |
0001 | 1 | Minimalise le Coût Monétaire (Minimize monetary cost) (mmc) |
0000 | 0 | Service Normal |
TOS | Binaire | Décimal | Signification | Priorité Linux | Bande |
---|---|---|---|---|---|
0x0 | 0000 | 0 | Service Normal | 0 Best Effort | 1 |
0x2 | 0001 | 1 | Minimise le Coût Monétaire (mmc) | 1 Filler | 2 |
0x4 | 0010 | 2 | http://fr.wikipedia.org/wiki/Mod%C3%A8le_OSI | 0 Best Effort | 1 |
0x6 | 0011 | 3 | mmc+mr | 0 Best Effort | 1 |
0x8 | 0100 | 4 | Maximalise le Débit (mt) | 2 Masse | 2 |
0xa | 0101 | 5 | mmc+mt | 2 Masse | 2 |
0xc | 0110 | 6 | mr+mt | 2 Masse | 2 |
0xe | 0111 | 7 | mmc+mr+mt | 2 Masse | 2 |
0x10 | 1000 | 8 | Minimise le Délai (md) | 6 Interactive | 0 |
0x12 | 1001 | 9 | mmc+md | 6 Interactive | 0 |
0x14 | 1010 | 10 | mr+md | 6 Interactive | 0 |
0x16 | 1011 | 11 | mmc+mr+md | 6 Interactive | 0 |
0x18 | 1100 | 12 | mt+md | 4 Int. Masse | 1 |
0x1a | 1101 | 13 | mmc+mt+md 4 Int. Masse 1 | 4 Int. Masse | 1 |
0x1c | 1110 | 14 | mr+mt+md | 4 Int. Masse | 1 |
0x1e | 1111 | 15 | mmc+mr+mt+md | 4 Int. Masse | 1 |
Exemple de ce qu’on peut faire avec TOS
L’intérêt de la QoS sous Linux est très souvent associé à la priorisation de flux interactifs via iptables.
Par exemple, vous ne souhaitez pas que votre session ssh lag à cause d’un utilisateur qui est en train de monopoliser la bande passante de votre réseau en téléchargeant une bande annonce sur internet ?
Nous allons ici, à titre d’exemple, optimiser les trafics courants avec iptables, à savoir ssh :
# Priorisation des connexions ftp et ssh iptables -A PREROUTING -t mangle -p tcp -sport ssh -j TOS -set-tos Minimize-Delay # On donne un maximum de débit aux transferts scp iptables -A PREROUTING -t mangle -p tcp -sport ssh -j TOS -set-tos Maximize-Throughput
Le saviez vous ?
“QoS” veut aussi dire “être désolé” en klingon.