Es gibt viele Artikel im Internet, die sich mit Geschwindigkeitsbegrenzung und Verkehrsfreigabe auf MikroTik-Geräten befassen, aber fast alle berücksichtigen nur den Warteschlangenbaum, der ein tiefes Verständnis erfordert und bei vielen Aufgaben überflüssig ist und durch einfache Warteschlangen ersetzt werden kann.
Vereinfachte Warteschlangen - ein Mechanismus zum Aufteilen der Kanalkapazität und zum Priorisieren des an ein bestimmtes Ziel gebundenen Datenverkehrs. Eingehender und ausgehender Verkehr wird relativ zum Ziel berechnet.
Es gibt drei Optionen für Ziele: IP, Subnetz, Schnittstelle. Sie können mehrere Ziele für eine Regel hinzufügen.
Theoretischer Teil
Shaper, Planer und Warteschlangen
Die Datenrate wird in Bezug auf die übertragenen Informationen in Bit pro Sekunde Zeitbit / s gemessen. Die Biteinheit ist klein, daher werden die Präfixe Kilo (kbit / s), Mega (Mbit / s) und Gig (Gbit / s) verwendet.
Die Paketübertragungsgeschwindigkeit über Kommunikationsnetzwerke entspricht immer der Übertragungsgeschwindigkeit des Mediums (z. B. 100 Mbit / s für Ethernet 100BASE-TX). Wenn diese Geschwindigkeit verringert werden muss, sendet ein Zwischengerät wie ein Router, das Pakete von einer Schnittstelle mit maximaler Geschwindigkeit empfängt, diese mit einer bestimmten Verzögerung von einer anderen. Wenn Pakete die festgelegte Geschwindigkeitsbegrenzung überschreiten, werden sie in einer Warteschlange gespeichert und gemäß First In, First Out ( FIFO), wenn die Warteschlange voll ist (fehlende oder Nullgröße), verwirft der Router die Pakete.
Limit - Administratives Tempolimit für Datenverkehr von der Schnittstelle.
Shaper (Shaper) - ein Softwarealgorithmus, der überschüssige Pakete verzögert und verwirft.
Scheduler (Sheduler) - Ein Algorithmus, der entscheidet, wie Pakete gespeichert und gesendet werden , die über das Limit hinausgehen.
Warteschlangen - Speicher- und Priorisierungsalgorithmen für die Weiterleitung von Datenverkehr.
Grafische Beispiele für die Arbeit eines Shapers und Schedulers.
Verwenden eines Shaper Out of Line

Verwenden eines Shapers mit einem Scheduler

Einfache Warteschlangen für den Paketfluss
Einfache Warteschlangen folgen dem Warteschlangenbaum. Manchmal werden einfache Warteschlangen verwendet, um den Datenverkehr schnell auf einen (oder mehrere) Benutzer zu beschränken, ohne den Warteschlangenbaum zu beeinträchtigen.
Vereinfachter Paketfluss für Interessierte Warteschlangenmechanik: keine, pfifo, pcq
none - no queue; wenn das Limit überschritten wird, werden alle neuen Pakete verworfen.
pfifo ist ein paketorientierter FIFO-Algorithmus. Speichert die Anzahl der in den Einstellungen angegebenen Pakete. Wird standardmäßig in einfachen Warteschlangen verwendet.

pcq (Per Connection Queuing) - Der gesamte Datenverkehr wird abhängig von einer Reihe von Bedingungen in Unterwarteschlangen unterteilt. Von jeder Unterwarteschlange wird abwechselnd ein Teil des Datenverkehrs gesendet. Der frei gewordene Raum wird von neu angekommenem Verkehr belegt. Wenn der Platz in der Unterwarteschlange leer ist, werden die dafür bestimmten Pakete verworfen.

Betrachten Sie einen kleinen Teil der Einstellungen:
Rate : Geschwindigkeitsbegrenzung für jede der Unterwarteschlangen.
Limit : Größe der Unterwarteschlange in Kilobyte.
Gesamtlimit: Die Gesamtgröße aller Unterwarteschlangen in Kilobyte.
Das Verhältnis Limit / Gesamtlimit wird je nach Situation ausgewählt. Standardmäßig 40 Warteschlangen (2000/50), vorbehaltlich ihrer maximalen Verkehrsfüllung.
Burst : über ihn wird niedriger sein.
Klassifikator : basierend darauf, was den Verkehr in Warteschlangen aufteilt.
Der Klassifizierer wechselt abwechselnd verschiedene Verbindungen. Wenn Sie auf [IP] -> [Firewall] -> [Verbindungen] klicken, können Sie feststellen, dass die meisten Verbindungen die Adresse und den Port des Absenders (src. Adresse, src. Port) und des Empfängers (src. Adresse, src. Port) enthalten. dst. Adresse, dst. Port).
Wir diskutieren einfache Warteschlangen. Der Einfachheit halber werden wir berücksichtigen, dass wir nur den von der WAN-Schnittstelle kommenden Datenverkehr filtern. In diesem Fall wird der ausgehende (Upload-) Datenverkehr relativ zum Ziel von src klassifiziert. Adresse und die eingehende (Download) von dst. Adresse.
Durch die Klassifizierung nach Port wird vermieden, dass die Warteschlange durch den Datenverkehr einer Anwendung verstopft wird. Wenn eine Anwendung viele ausgehende Verbindungen herstellt (z. B. Torrent oder Web-Browser mit einer Reihe von Registerkarten), unterscheidet sich deren Quellcode. Port und Verkehr werden ebenfalls in Warteschlangen unterteilt.
Dynamische Formgebung mit PCQ
Wenn die Rate streng festgelegt ist, hat jeder Teilstrom eine bestimmte Geschwindigkeit und kann diese nicht überschreiten, bis die Gesamtgeschwindigkeit aller Teilströme den oberen Grenzwert überschreitet (in einfachen Warteschlangen ist es der Gesamtgrenzwert). In diesem Fall nimmt die Geschwindigkeit aller Teilströme ab proportional.

Wenn Rate auf 0 gesetzt ist, wird die höhere Einschränkung von allen Teilströmen geteilt. In der Tat ist dies eine dynamische Formgebung.

Wenn Rate auf 0 gesetzt ist und kein Gesamtlimit für einfache Warteschlangen angegeben ist, wird die Geschwindigkeit zwischen den Unter-Threads basierend auf einem höheren Limit aufgeteilt. Wenn die Warteschlangen nicht verschachtelt sind, ist dies eine Einschränkung der physischen Schnittstelle. Wenn Ihr Tarifplan niedriger ist, wird ein Teil des Datenverkehrs auf den Geräten des Anbieters unterbrochen, und die Warteschlangen profitieren nicht.

Die übrigen Arten von Warteschlangen (SFQ, RED) haben ihre eigenen Eigenschaften und Anwendungen und können auch für einfache Warteschlangen verwendet werden, aber jetzt sind sie für uns nicht von Interesse.
Verpackungskennzeichnung
Ja, in einfachen Warteschlangen können Sie beschrifteten Datenverkehr verwenden. Dies ist keine Voraussetzung (im Gegensatz zum Warteschlangenbaum), ermöglicht es Ihnen jedoch, sich von den Einschränkungen des Ziels zu entfernen.
Die Verkehrsbezeichnung erfolgt in [IP] -> [Firewall] -> [Mangle]. Insgesamt gibt es drei Arten von Bezeichnungen: Verbindung, Paket, Route. Jedes Paket kann ein Etikett jedes Typs enthalten. Sobald sich die Verpackung in der Mangel befindet, wird sie nach allen Regeln einzeln übergeben. Wenn zwei geschmolzene Set-Etiketten vorhanden sind, überschreibt die untere Regel das Etikett vom oberen. Um ein Überschreiben zu verhindern, können Sie in der ersten Regel den Durchgang eines Pakets entlang der Kette deaktivieren ( passtrought=no
).
Beim Einrichten von Warteschlangen können Sie nur Paketbezeichnungen verwenden ( action=mark-packet
). Um die Leistung zu verbessern (Verbindungsbezeichnungen werden schneller überprüft als die Bedingungen in jedem Paket überprüft), wird empfohlen, zuerst Verbindungen ( action=mark-connection
) und dann Pakete in dieser Verbindung ( action=mark-package
) zu action=mark-package
. Die Regel mit Vormarkierungsverbindungen ist nicht immer wahr. Wenn Sie jedoch beim Erstellen von Warteschlangen zu diesem Verständnis gelangt sind, sollten Sie den Warteschlangenbaum verwenden.
Sie können den Transitverkehr in jeder der Paketflussketten markieren, aber in den meisten Fällen bevorzuge ich die Weiterleitung, weil Zu diesem Zeitpunkt sind die Adressen des Empfängers mit dem Absender und die Namen der eingehenden und ausgehenden Schnittstellen bekannt.
Beispiel für eine Verkehrsbeschriftung
/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
Was ist geplatzt
Normalerweise wird die Geschwindigkeitsbegrenzung als ein bestimmter statischer Wert der Begrenzung pro Sekunde verstanden, wenn erreicht wird, welche Pakete verworfen oder in die Warteschlange gestellt werden. Burst arbeitet mit einem Durchschnittswert pro Zeiteinheit. Dies ermöglicht die Verwendung höherer (Spitzen-) Geschwindigkeiten in kurzen Zeiträumen und begrenzt die Geschwindigkeit bei konstanter Belastung des Kanals.
Max Limit ist die Hauptbeschränkung.
Burst Limit - Spitzengeschwindigkeit, hat Vorrang vor Max Limit, wenn die angegebene Durchschnittsgeschwindigkeit eingehalten wird.
Burst Threshold - Geschwindigkeit des Limits.
Burst Time - Zeit.
Das Ziel erhält die Geschwindigkeit vom Burst-Limit, aber jede Sekunde wird die Durchschnittsgeschwindigkeit für die Burst-Zeit berechnet. Wenn die Durchschnittsgeschwindigkeit für eine bestimmte Zeit den Burst-Schwellenwert überschreitet, ist der Benutzer auf das maximale Limit beschränkt. Wenn die durchschnittliche Geschwindigkeit wieder normal ist, erhält das Ziel erneut das Burst-Limit.
Burst-FallstudieBurst-Regel:

Flussdiagramm mit Änderung der Zielgeschwindigkeit:

Und wie sieht die Änderung der Zielgeschwindigkeit aus:

Wenn Sie sich für das Burst-Thema interessieren, empfehle ich, die Informationen im Wiki zu lesen. Es gibt Grafiken und Tabellen, anhand derer Sie besser verstehen können, wie sich die Werte für Schwellenwert und Zeit auf das Tempolimit auswirken.
Differenzgrenze bei und Maximalgrenze

Limit bei - garantierter Geschwindigkeit für die Regel. Es ist wünschenswert, dass die Summe aller Grenzwerte die Bandbreite des Kanals nicht überschreitet. Immer weniger als das Maximum.
Max Limit - maximale Geschwindigkeit für die Regel. Wenn das "Budget" der Warteschlange dies zulässt, wird die maximale Bandbreite zugewiesen.
Normalerweise wird in vereinfachten Warteschlangen nur die maximale Grenze angegeben, und dies funktioniert einwandfrei. In einer kaskadierten Warteschlangenkonfiguration sollten jedoch beide Grenzen angegeben werden.
Praktischer Teil
Einfache Warteschlangen werden unter [Warteschlangen] -> [Einfache Warteschlangen] konfiguriert.
Regeln werden abwechselnd von oben nach unten verarbeitet, die erste geeignete Regel wird auf das übergebende Paket angewendet. Tatsächlich kann eine Ausnahme von jeder Regel gemacht werden, indem eine spezifischere Regel oben platziert wird.
Geschwindigkeitsbegrenzung für Host / Subnetz / Schnittstelle
Es wird normalerweise verwendet, wenn die Geschwindigkeit eines bestimmten Benutzers abgeschaltet werden muss.
Name: ein beliebiger Name
Ziel: Adresse, Subnetz oder Schnittstelle.
Ziel-Upload: Ausgehende Geschwindigkeitsbegrenzung.
Targer Download: Eingehende Geschwindigkeitsbegrenzung.
Geschwindigkeitsbegrenzung auf 1 Mbit / s:

/queue simple add max-limit=1M/1M name=Limit-For-100.200 queue=default/default target=192.168.100.200/32
In Statistik können Sie die aktuelle Geschwindigkeit für das Ziel, die Anzahl der Pakete in der Warteschlange und die Anzahl der verworfenen Pakete anzeigen.
Geschwindigkeitsbegrenzung für eine Remote-Ressource
Option ohne Etikettierung von Paketen.
Im Feld dst kann ähnlich wie bei target angegeben werden: IP, Subnetz, Schnittstelle. Unter den Bedingungen des modernen Internets reicht dies nicht aus, kann jedoch für kleine Unternehmen und Geschwindigkeitsbegrenzungen zwischen Büros nützlich sein.

/queue simple add dst=192.168.200.10/32 max-limit=10M/10M name=Limit-For-Fileserver target=192.168.100.0/24
Gleiche Kanalaufteilung zwischen Subnetzteilnehmern (pcq)
Eine Regel, die Ihr Heim- oder Büro-Subnetz vor der exklusiven Kanalerfassung (im Beispiel 50 MBit / s, Anpassung an Ihren Kanal) durch einen Benutzer schützt.

Die angegebenen PCQ-Warteschlangen sind in der Grundkonfiguration vorhanden, aber ich füge bei Änderungen Screenshots hinzu.

# /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
Auf der Registerkarte Statistik können Sie sehen, wie viele PCQ-Threads sich derzeit in der Warteschlange befinden.

Tagged Verkehr
Die Option dst ist sehr begrenzt. Wenn Sie Domainnamen oder Adresslisten verwenden möchten, müssen Sie auf die Verkehrsmarkierung zurückgreifen. Zum Beispiel werden wir die Einschränkungen für die Domäne yandex.ru aufheben (ja, eine Reihe von cdn'ok ist dort verbunden und andere Dinge, und für den normalen Betrieb müssen Sie sie hinzufügen).
In einer neueren Version wurde es möglich, Domainnamen zu Adresslisten hinzuzufügen. Mikrotik löst sie automatisch auf und fügt dynamische Einträge hinzu.

Markieren des http / https-Verkehrs (Verbindung und Pakete in der Verbindung) für die angegebenen Adressen:



Regel in einfacher Warteschlange:

# /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
Kaskadierende Warteschlangen
Alles, was oben gesagt wurde, bezieht sich auf die Begrenzung und Aufteilung der Geschwindigkeit zwischen Netzwerkteilnehmern. Es ist Zeit, das Thema der Verkehrspriorisierung anzusprechen. Normalerweise ist es für interaktiven Verkehr (voip, vcs, ssh, rdp, ...) in einem begrenzten und ausgelasteten Kanal erforderlich.
Für kaskadierende Warteschlangen ist der Parameter Parent verantwortlich, der sich auf die Warteschlange "parent" bezieht. Um zu arbeiten, muss der gesamte Datenverkehr aus den "untergeordneten" Warteschlangen vom übergeordneten Element erfasst werden.
Der Priority-Parameter ist dafür verantwortlich, welcher Datenverkehr früher zur Warteschlange hinzugefügt wird. Er funktioniert nur in untergeordneten Warteschlangen (oder in "parent", wenn sie kein "child" haben), kann Werte von 1 (höchste Priorität) bis 8 annehmen und hat nichts gemeinsam mit QoS-Tags (DSCP; TOS).
Verkehrsvormarkierung:

/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
Warteschlangen in 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=""
Wenn Sie nun eine Einschränkung für eine IP vornehmen müssen, stellen Sie die Regel einfach vor die Warteschlangenkaskade.
Nachwort
Simple Queues ist ein ziemlich interessantes und funktionales Tool für Heim- und SOHO-Konfigurationen. Mit einer Regel (ohne auf Verkehrskennzeichnung zurückzugreifen) können Sie das Problem der Kanalerfassung mit einem Gerät lösen. Wenn Sie jedoch FastTrack verwenden, vergessen Sie die Warteschlangen - der Datenverkehr wird an ihnen vorbeigehen.
Für komplexere Konfigurationen gibt es einen Warteschlangenbaum (HTB-Bäume).