Il existe de nombreux articles sur Internet consacrés à la limitation de vitesse et au partage du trafic sur les équipements MikroTik, mais presque tous ne considèrent que l'arborescence des files d'attente, qui nécessite une compréhension approfondie et est redondante dans de nombreuses tâches et peut être remplacée par des files d'attente simples.
Files d'attente simplifiées - un mécanisme pour diviser la capacité du canal et prioriser le trafic lié à une cible spécifique. Le trafic entrant et sortant est calculé par rapport à la cible.
Il y a trois options pour les objectifs: ip, sous-réseau, interface. Vous pouvez ajouter plusieurs cibles pour une seule règle.
Partie théorique
Shapers, planificateurs et files d'attente
Le débit de données est mesuré par rapport aux informations transmises en bits par seconde de temps - bit / sec. L'unité de bit est petite, ils utilisent donc les préfixes kilo (kbit / sec), méga (Mbit / sec), gig (Gbit / sec).
La vitesse de transmission des paquets sur les réseaux de communication est toujours égale à la vitesse de transmission du support (par exemple, 100 Mbits / s pour Ethernet 100BASE-TX). S'il est nécessaire de réduire cette vitesse, un périphérique intermédiaire, tel qu'un routeur, recevant des paquets d'une interface à la vitesse maximale les envoie d'une autre avec un certain retard, si les paquets dépassent la limite de vitesse définie, ils sont stockés dans une file d'attente et envoyés selon le premier entré, premier sorti ( FIFO), si la file d'attente est pleine (taille manquante ou nulle), le routeur rejette les paquets.
Limit - limite de vitesse administrative pour le trafic provenant de l'interface.
Shaper (Shaper) - un algorithme logiciel qui retarde et rejette les paquets en excès.
Scheduler (Sheduler) - un algorithme qui décide comment stocker et envoyer des paquets qui dépassent la limite.
Files d'attente - algorithmes de stockage et de priorisation pour le passage du trafic.
Exemples graphiques du travail d'un shaper et d'un ordonnanceur.
Utilisation d'un conformateur hors ligne

Utiliser un Shaper avec un Scheduler

Files d'attente simples sur le flux de paquets
Les files d'attente simples viennent après l'arborescence des files d'attente, parfois des files d'attente simples sont utilisées pour limiter rapidement le trafic à un (ou plusieurs) utilisateurs, sans interférer avec l'arborescence des files d'attente.
Flux de paquets simplifié pour les personnes intéressées Mécanique des files d'attente: aucune, pfifo, pcq
aucun - pas de file d'attente; si la limite est dépassée, tous les nouveaux paquets sont rejetés.
pfifo est un algorithme fifo orienté paquets. Stocke le nombre de paquets spécifiés dans les paramètres. Utilisé par défaut dans les files d'attente simples.

pcq (Per Connection Queuing) - tout le trafic est divisé en sous-files d'attente en fonction d'un ensemble de conditions. À partir de chaque sous-file d'attente, une partie du trafic est envoyée en alternance. L'espace libéré est occupé par le trafic nouvellement arrivé. Si l'emplacement dans la sous-file d'attente est épuisé, les paquets qui lui sont destinés sont supprimés.

Considérez une petite partie des paramètres:
Taux : limite de vitesse pour chacune des sous-files d'attente.
Limite : taille de la sous-file d'attente en kilo-octets.
Limite totale : taille totale de toutes les sous-files d'attente en kilo-octets.
Le rapport Limite / Limite totale est sélectionné en fonction de la situation. Par défaut, 40 files d'attente (2000/50), sous réserve de leur remplissage de trafic maximum.
Burst : à propos de lui sera plus faible.
Classificateur : basé sur quoi diviser le trafic en files d'attente.
Le classificateur divise séquentiellement diverses connexions (connexions), si vous allez [IP] -> [Pare-feu] -> [Connexions], alors on peut noter que la plupart des connexions contiennent l'adresse et le port de l'expéditeur (src. Address, src. Port) et du récepteur ( dst. adresse, dst. port).
Nous discutons des files d'attente simples, donc pour simplifier, nous considérerons que nous filtrons uniquement le trafic provenant de l'interface wan, dans ce cas, par rapport à la cible, le trafic sortant (téléchargement) sera classé par src. adresse, et le entrant (téléchargement) par dst. adresse.
La classification par port aidera à éviter la situation de colmatage de la file d'attente avec le trafic d'une application, si une application produit de nombreuses connexions sortantes (par exemple, torrent ou web. Navigateur avec un tas d'onglets), alors leur src sera différent. le port et le trafic seront également divisés en files d'attente.
Mise en forme dynamique à l'aide de PCQ
Si le débit est codé en dur, alors chaque sous-flux aura une vitesse donnée et ne pourra pas la dépasser jusqu'à ce que la vitesse totale de tous les sous-flux dépasse la limite supérieure (dans les files d'attente simples, c'est la limite totale), dans ce cas, la vitesse de tous les sous-flux diminuera proportionnellement.

Si Rate est défini sur 0, la restriction la plus élevée sera partagée entre tous les sous-flux. En fait, c'est une mise en forme dynamique.

Si le débit est défini sur 0 et que la limite totale pour les files d'attente simples n'est pas spécifiée, la vitesse entre les sous-threads sera divisée en fonction d'une limite plus élevée.Si les files d'attente ne sont pas imbriquées, il s'agit d'une limitation de l'interface physique. Si votre plan tarifaire est plus bas, alors une partie du trafic sera tuée sur l'équipement du fournisseur et il n'y aura aucun avantage des files d'attente.

Les types de files d'attente restants (SFQ, RED) ont leurs propres particularités et applications et peuvent également être utilisés pour les files d'attente simples, mais maintenant ils ne nous intéressent plus.
Étiquetage des emballages
Oui, dans les files d'attente simples, vous pouvez utiliser le trafic étiqueté. Ce n'est pas un prérequis (contrairement à Queue Tree), mais vous permet de vous éloigner des limites de la cible.
L'étiquetage du trafic se produit dans [IP] -> [Pare-feu] -> [Mangle], au total, il existe trois types d'étiquettes: Connexion, Paquet, Route. Chaque emballage peut contenir une étiquette de chaque type. Une fois dans le mangle, le paquet passe un par un selon toutes les règles, s'il y a deux étiquettes de jeu fondues, la règle inférieure remplacera l'étiquette de la supérieure. Pour éviter l'écrasement, vous pouvez désactiver le passage d'un paquet dans la chaîne dans la première règle ( passtrought=no
).
Lors de la configuration des files d'attente, vous ne pouvez utiliser que des étiquettes de paquets ( action=mark-packet
). Mais pour améliorer les performances (les étiquettes de connexion sont vérifiées plus rapidement que l'examen des conditions dans chaque package), il est recommandé de marquer d'abord les connexions ( action=mark-connection
), puis les paquets dans cette connexion ( action=mark-package
). La règle avec les connexions de pré-marquage n'est pas toujours vraie, mais si vous êtes parvenu à cette compréhension lors de la création de files d'attente, vous devez utiliser l'arborescence des files d'attente.
Vous pouvez marquer le trafic de transit dans l'une des chaînes de flux de paquets, mais dans la plupart des cas, je préfère utiliser le transfert, car A ce stade, les adresses du destinataire avec l'expéditeur et les noms des interfaces entrantes et sortantes sont connus.
Exemple d'étiquetage du trafic
/ip firewall mangle add action=mark-connection chain=forward connection-state=new dst-port=5060,10000-20000 new-connection-mark=output-sip-and-rtp passthrough=yes protocol=udp src-address=192.168.100.0/24 add action=mark-packet chain=forward connection-mark=output-sip-and-rtp new-packet-mark=output-packet-sip-and-rtp passthrough=no
Qu'est-ce qui est éclaté
Habituellement, la limite de vitesse est comprise comme une certaine valeur statique de la limite par seconde lorsqu'elle atteint quels paquets sont rejetés ou mis en file d'attente. Burst fonctionne avec une valeur moyenne par unité de temps, ce qui permet d'utiliser des vitesses plus élevées (de pointe) sur de courtes périodes et limite la vitesse avec une charge constante sur le canal.
La limite maximale est la principale limitation.
Burst Limit - vitesse de pointe, a priorité sur Max Limit lors de l'observation de la vitesse moyenne spécifiée.
Burst Threshold - vitesse de la limite.
Burst Time - temps.
La cible obtient la vitesse de la limite de rafale, mais chaque seconde la vitesse moyenne de la durée de rafale sera calculée. Si la vitesse moyenne pendant un temps donné dépasse le seuil de rafale, alors l'utilisateur sera limité à la limite maximale, si la vitesse moyenne revient à la normale, alors la cible recevra à nouveau la limite de rafale.
Étude de cas BurstRègle d'éclatement:

Organigramme montrant le changement de vitesse cible:

Et à quoi ressemble le changement de vitesse cible:

Si vous êtes intéressé par le thème Burst, je vous recommande de lire les informations sur le wiki , il existe des graphiques et des tableaux sur la base desquels il sera mieux de comprendre comment les valeurs de seuil et de temps affectent la limite de vitesse.
Limite de différence à et limite maximale

Limite à - vitesse garantie pour la règle. Il est souhaitable que la somme de toutes les limites à ne dépasse pas la largeur de bande du canal. Toujours moins que le maximum.
Max Limit - vitesse maximale pour la règle. Si le «budget» de la file d'attente le permet, la bande passante maximale sera allouée.
Habituellement, seule la limite maximale est indiquée dans les files d'attente simplifiées et cela fonctionne bien, mais dans une configuration de file d'attente en cascade, les deux limites doivent être spécifiées.
Partie pratique
Les files d'attente simples sont configurées dans [Files d'attente] -> [Files d'attente simples].
Les règles sont traitées alternativement de haut en bas, la première règle appropriée est appliquée au paquet qui passe. En fait, une exception peut être faite à partir de n'importe quelle règle en plaçant une règle plus spécifique ci-dessus.
Limite de vitesse hôte / sous-réseau / interface
Il est généralement utilisé lorsqu'il est nécessaire de tuer la vitesse d'un utilisateur spécifique.
Nom: n'importe quel nom
Cible: adresse, sous-réseau ou interface.
Téléchargement cible: limite de vitesse sortante.
Téléchargement Targer: limite de vitesse entrante.
Limite de vitesse à 1Mbit / sec:

/queue simple add max-limit=1M/1M name=Limit-For-100.200 queue=default/default target=192.168.100.200/32
Dans Statistiques, vous pouvez consulter la vitesse actuelle de la cible, le nombre de paquets dans la file d'attente et le nombre de paquets abandonnés.
Limite de vitesse pour une ressource distante
Option sans étiquetage des emballages.
Dans le champ dst, de la même manière que target peut être spécifié: ip, subnet, interface. Dans les conditions de l'Internet moderne, cela ne suffit pas, mais cela peut être utile pour les petites entreprises et les limitations de vitesse entre les bureaux.

/queue simple add dst=192.168.200.10/32 max-limit=10M/10M name=Limit-For-Fileserver target=192.168.100.0/24
Répartition égale des canaux entre les participants du sous-réseau (pcq)
Une règle qui sauvera votre sous-réseau domestique ou professionnel d'une capture exclusive de canal (dans l'exemple 50Mb / sec, ajustez-le à votre canal) par un seul utilisateur.

Les files d'attente pcq spécifiées sont présentes dans la configuration de base, mais je joins des captures d'écran en cas de changements.

# /queue type add kind=pcq name=pcq-upload-default pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=src-address pcq-dst-address-mask=32 pcq-dst-address6-mask=128 pcq-limit=50KiB pcq-rate=0 pcq-src-address-mask=32 pcq-src-address6-mask=128 pcq-total-limit=2000KiB add kind=pcq name=pcq-download-default pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=dst-address pcq-dst-address-mask=32 pcq-dst-address6-mask=128 pcq-limit=50KiB pcq-rate=0 pcq-src-address-mask=32 pcq-src-address6-mask=128 pcq-total-limit=2000KiB # Simple queues /queue simple add max-limit=50M/50M name=Limit-Equivalent queue=pcq-upload-default/pcq-download-default target=192.168.100.0/24
Sous l'onglet Statistiques, vous pouvez voir combien de threads pcq sont actuellement dans la file d'attente.

Trafic balisé
L'option dst est assez limitée et si vous souhaitez utiliser des noms de domaine ou des listes d'adresses, vous devrez recourir au marquage du trafic. Par exemple, nous supprimerons les restrictions pour le domaine yandex.ru (oui, un tas de cdn'ok y est connecté et d'autres choses, et pour un fonctionnement normal, vous devrez les ajouter).
Dans une version récente, il est devenu possible d'ajouter des noms de domaine aux listes d'adresses, mikrotik les résoudra automatiquement et ajoutera des entrées dynamiques.

Marquage du trafic http / https (connexion et paquets dans la connexion) pour les adresses spécifiées:



Règle dans la file d'attente simple:

# /ip firewall address-list add address=yandex.ru list=ForQueues add address=yastatic.net list=ForQueues # /ip firewall mangle add action=mark-connection chain=forward connection-state=new dst-address-list=ForQueues dst-port=80,443 new-connection-mark=Mark-ForQueues passthrough=yes protocol=tcp src-address=192.168.100.0/24 add action=mark-packet chain=forward connection-mark=Mark-ForQueues new-packet-mark=Mark-Packet-ForQueues passthrough=no # Simple Queue /queue simple add max-limit=1M/1M name=Limit-For-Yandex packet-marks=Mark-Packet-ForQueues target=192.168.100.0/24
Files d'attente en cascade
Tout ce qui est dit ci-dessus fait référence à la limitation et à la répartition de la vitesse entre les participants du réseau, il est temps d'aborder le sujet de la priorisation du trafic. Il est généralement requis pour le trafic interactif (voip, vcs, ssh, rdp, ...) dans un canal limité et occupé.
Pour les files d'attente en cascade, le paramètre Parent est responsable, ce qui fait référence à la file d'attente «parent». Pour fonctionner, tout le trafic provenant des files d'attente "enfants" doit être capturé par le parent.
Le paramètre Priority est responsable du trafic qui sera ajouté à la file d'attente plus tôt, il ne fonctionne que dans les files d'attente enfants (ou dans "parent" s'ils n'ont pas "enfant"), peut prendre des valeurs de 1 (priorité la plus élevée) à 8 et n'a rien commun avec les balises QoS (DSCP; TOS).
Pré-marquage du trafic:

/ip firewall mangle add action=mark-connection chain=forward connection-state=related,new dst-port=5060,10000-20000 in-interface=br-lan new-connection-mark=mark-conn-voip passthrough=yes protocol=udp add action=mark-packet chain=forward connection-mark=mark-conn-voip new-packet-mark=mark-pkg-voip passthrough=no add action=mark-connection chain=forward connection-state=new dst-port=80,443 in-interface=br-lan new-connection-mark=mark-conn-web passthrough=yes protocol=tcp
Files d'attente dans SimpleQueue:





/queue simple add limit-at=24M/24M max-limit=25M/25M name=main target=10.10.10.0/24 add limit-at=5M/5M max-limit=8M/8M name=voip packet-marks=mark-pkg-voip parent=main priority=1/1 queue=pcq-upload-default/pcq-download-default target="" add limit-at=10M/10M max-limit=20M/20M name=web packet-marks=mark-pkg-web parent=main priority=2/2 queue=pcq-upload-default/pcq-download-default target="" add limit-at=10M/10M max-limit=20M/20M name=other packet-marks=mark-pkg-other parent=main priority=3/3 queue=pcq-upload-default/pcq-download-default target=""
Maintenant, si vous devez faire une restriction pour une adresse IP, placez simplement la règle devant la cascade de files d'attente.
Postface
Simple Queues est un outil plutôt intéressant et fonctionnel pour les configurations domestiques et SOHO, avec une règle (sans recourir à l'étiquetage du trafic), vous pouvez résoudre le problème de la capture des canaux par un seul appareil. Mais, si vous utilisez FastTrack, oubliez les files d'attente - le trafic les dépassera.
Pour les configurations plus complexes, il existe l'arborescence des files d'attente (arborescences HTB).