Pour comprendre correctement des configurations plus compliquées, il est d'abord nécessaire d'expliquer quelques concepts. A cause de la complexité et de la relative jeunesse du sujet, beaucoup de mots différents sont utilisés par les personnes mais ils signifient en fait la même chose.
Ce qui suit est lâchement inspiré du texte draft-ietf-diffserv-model-06.txt
, An Informal Management Model for Diffserv Routers.
Il peut être trouvé à l'adresse
http://www.ietf.org/internet-drafts/draft-ietf-diffserv-model-04.txt
.
Lisez-le pour les définitions strictes des termes utilisés.
- Gestionnaire de mise en file d'attente (qdisc) (Queueing Discipline)
-
Un algorithme qui gère la file d'attente d'un périphérique, soit pour les données entrantes (ingress), soit pour les données sortantes (egress).
- Gestionnaire de mise en file d'attente sans classes (Classless qdisc)
-
Un gestionnaire de mise en file d'attente qui n'a pas de subdivisions internes configurables.
- Gestionnaire de mise en file d'attente basé sur des classes (Classful qdisc)
-
Un gestionnaire de mise en file d'attente basé sur des classes contient de multiples classes. Certaines de ces classes contiennent un gestionnaire de mise en file d'attente supplémentaire, qui peut encore être basé sur des classes, mais ce n'est pas obligatoire. Si l'on s'en tient à la définition stricte,
pfifo_fast
EST basé sur des classes, dans la mesure où il contient trois bandes, qui sont en fait des classes. Cependant, d'un point de vue des perspectives de configuration pour l'utilisateur, il est sans classes dans la mesure où ces classes ne peuvent être modifiées avec l'outil tc. - Classes
-
Un gestionnaire de mise en file d'attente basé sur les classes peut avoir beaucoup de classes, chacune d'elles étant internes au gestionnaire. Une classe peut à son tour se voir ajouter plusieurs classes. Une classe peut donc avoir comme parent soit un gestionnaire de mise en file d'attente, soit une autre classe. Une classe terminale est une classe qui ne possède de classes enfants. Seul 1 gestionnaire de mise en file d'attente est attaché à cette classe. Ce gestionnaire est responsable de l'envoi des données de cette classe. Quand vous créez une classe, un gestionnaire de mise en file d'attente fifo est créé. Quand vous ajoutez une classe enfant, ce gestionnaire est supprimé. Le gestionnaire fifo d'une classe terminale peut être remplacé par un autre gestionnaire plus adapté. Vous pouvez même remplacer ce gestionnaire fifo par un gestionnaire de mise en file d'attente basé sur des classes de sorte que vous pourrez rajouter des classes supplémentaires.
- Classificateur (Classifier)
-
Chaque gestionnaire de mise en file d'attente basé sur des classes a besoin de déterminer vers quelles classes il doit envoyer un paquet. Ceci est réalisé en utilisant le classificateur.
- Filtre (Filter)
-
La classification peut être réalisée en utilisant des filtres. Un filtre est composé d'un certain nombre de conditions qui, si elles sont toutes vérifiées, satisfait le filtre.
- Ordonnancement (Scheduling)
-
Un gestionnaire de mise en file d'attente peut, avec l'aide d'un classificateur, décider que des paquets doivent sortir plus tôt que d'autres. Ce processus est appelé ordonnancement (scheduling), et est réalisé par exemple par le gestionnaire
pfifo_fast
mentionné plus tôt. L'ordonnancement est aussi appelé « reclassement » (reordering), ce qui peut prêter à confusion. - Mise en forme (Shaping)
-
Le processus qui consiste à retarder l'émission des paquets sortants pour avoir un trafic conforme à un débit maximum configuré. La mise en forme est réalisée sur egress. Familièrement, rejeter des paquets pour ralentir le trafic est également souvent appelé Mise en forme.
- Réglementation (Policing)
-
Retarder ou jeter des paquets dans le but d'avoir un trafic restant en dessous d'une bande passante configurée. Dans Linux, la réglementation ne peut que jeter un paquet, et non le retarder dans la mesure où il n'y a pas de « file d'attente d'entrée » (ingress queue).
- Work-Conserving
-
Un gestionnaire de mise en file d'attente work-conserving délivre toujours un paquet s'il y en a un de disponible. En d'autres termes, il ne retarde jamais un paquet si l'adaptateur réseau est prêt à l'envoyer (dans le cas du gestionnaire egress).
- non-Work-Conserving
-
Quelques gestionnaire de mise en files d'attente, comme par exemple le Token Bucket Filter, peuvent avoir besoin de maintenir un paquet pendant un certain temps pour limiter la bande passante. Ceci signifie qu'ils refusent parfois de libérer un paquet, bien qu'ils en aient un de disponible.
Maintenant que nous avons défini notre terminologie, voyons où tous ces éléments sont situés.
Programmes Utilisateurs ^ | +---------------+-------------------------------------------+ | Y | | -------> Pile IP | | | | | | | Y | | | Y | | ^ | | | | / ----------> Transmission -> | | ^ / | | | |/ Y | | | | | | ^ Y /-qdisc1-\ | | | Classificateur /--qdisc2--\ | --->->Gestionnaire de mise de sortie ---qdisc3---- | -> | en file d'attente (Egress) \__qdisc4__/ | | d'entrée (Ingress) \-qdiscN_/ | | | +-----------------------------------------------------------+
Merci à Jamal Hadi Salim pour cette représentation ASCII.
Le grand rectangle représente le noyau. La flèche la plus à gauche représente le trafic du réseau entrant dans votre machine. Celui-ci alimente alors le gestionnaire de mise en file d'attente Ingress qui peut appliquer des filtres à un paquet, et décider de le supprimer. Ceci est appelé « réglementation » (Policing).
Ce processus a lieu très tôt, avant d'avoir beaucoup parcouru le noyau. C'est par conséquent un très bon endroit pour rejeter au plus tôt du trafic, sans pour autant consommer beaucoup de ressources CPU.
Si le paquet est autorisé à continuer, il peut être destiné à une application locale et, dans ce cas, il entre dans la couche IP pour être traité et délivré à un programme utilisateur. Le paquet peut également être transmis sans entrer dans une application et dans ce cas, être destiné à egress. Les programmes utilisateurs peuvent également délivrer des données, qui sont alors transmises et examinées par le classificateur Egress.
Là, il est examiné et mis en file d'attente vers un certain
nombre de gestionnaire de mise en file d'attente. Par défaut, il
n'y a qu'un seul gestionnaire egress
installé, pfifo_fast
, qui reçoit tous
les paquets. Ceci correspond à « la mise en file
d'attente » (enqueueing).
Le paquet réside maintenant dans le gestionnaire de mise en file d'attente, attendant que le noyau le réclame pour le transmettre à travers l'interface réseau. Ceci correspond au « retrait de la file d'attente » (dequeueing).
Le schéma ne montre que le cas d'un seul adaptateur réseau. Les flèches entrantes et sortantes du noyau ne doivent pas être trop prises au pied de la lettre. Chaque adaptateur réseau a un gestionnaire d'entrée et de sortie.