Product SiteDocumentation Site

10.3. Qualité de service

10.3.1. Principe et fonctionnement

Le terme QoS (Quality of Service) désigne l'ensemble des techniques permettant de garantir ou d'améliorer sensiblement la qualité de service apportée à des applications. La plus populaire consiste à traiter différemment chaque type de trafic réseau ; son application principale est le shaping. Cela permet de limiter les débits attribués à certains services et/ou à certaines machines, notamment pour ne pas saturer la bande passante. Cette technique s'adapte bien au flux TCP car ce protocole s'adapte automatiquement au débit disponible.
On peut encore modifier les priorités du trafic, ce qui permet généralement de traiter d'abord les paquets relatifs à des services interactifs (ssh, telnet) ou à des services échangeant de petits blocs de données.
Les noyaux Debian intègrent le QoS et toute la panoplie des modules associés. Ils sont nombreux, et chacun offre un service différent — notamment par le biais de files d'attente pour les paquets IP (scheduler, ou ordonnanceur), dont les mécanismes variés couvrent tout le spectre des besoins possibles.

10.3.2. Configuration et mise en œuvre

Le QoS se paramètre avec le logiciel tc, du paquet Debian iproute. Son interface étant extrêmement complexe, il est préférable d'employer des outils de plus haut niveau.

10.3.2.1. Minimiser le temps de latence : wondershaper

L'objectif de wondershaper (du paquet Debian éponyme) est de minimiser les temps de latence quelle que soit la charge réseau. Il l'atteint en limitant le trafic total juste en deçà de la valeur de saturation de la ligne.
Après la configuration d'une interface réseau, il est possible de mettre en place ce contrôle du trafic par la commande wondershaper interface débit_descendant débit_montant. L'interface sera par exemple eth0 ou ppp0 et les deux débits (descendant et montant) s'expriment en kilobits par seconde. La commande wondershaper remove interface désactive le contrôle du trafic sur l'interface indiquée.
Pour une connexion Ethernet, le plus simple est d'appeler automatiquement ce script après la configuration de l'interface en modifiant le fichier /etc/network/interfaces pour y ajouter des directives up (indiquant une commande à exécuter après configuration de l'interface) et down (indiquant une commande à exécuter après déconfiguration de l'interface) comme suit :

Exemple 10.9. Modification du fichier /etc/network/interfaces

iface eth0 inet dhcp
    up /sbin/wondershaper eth0 500 100
    down /sbin/wondershaper remove eth0
Dans le cas de PPP, la création d'un script appelant wondershaper dans /etc/ppp/ip-up.d/ activera le contrôle de trafic dès le démarrage de la connexion.

10.3.2.2. Configuration standard

En l'absence d'une configuration particulière de QoS, le noyau Linux emploie la file d'attente pfifo_fast, qui propose déjà quelques fonctionnalités intéressantes. Pour établir les priorités des paquets IP, elle utilise leur champ ToS (Type of Service, ou type de service) — qu'il suffira donc de modifier pour bénéficier de cette file. Ce champ peut recevoir cinq valeurs :
  • Normal-Service (0) (service normal) ;
  • Minimize-Cost (2) (minimiser le coût) ;
  • Maximize-Reliability (4) (maximiser la fiabilité) ;
  • Maximize-Throughput (8) (maximiser le débit) ;
  • Minimize-Delay (16) (minimiser le délai).
Le champ ToS peut être positionné par les applications qui génèrent des paquets IP ou modifié à la volée par netfilter. Avec la règle ci-dessous, il est ainsi possible d'améliorer l'interactivité du service SSH d'un serveur :
iptables -t mangle -A PREROUTING -p tcp --sport ssh -j TOS --set-tos Minimize-Delay
iptables -t mangle -A PREROUTING -p tcp --dport ssh -j TOS --set-tos Minimize-Delay