Ich versuche zu verstehen, wie QoS-Systeme funktionieren, und ich bin mir nicht sicher, wie genau WFQ und WRED interagieren würden.
Zuerst dachte ich, dass WFQ ein Warteschlangenmechanismus ist und dass WRED ein Mechanismus zur Vermeidung von Überlastungen ist. WFQ sollte Pakete in Warteschlangen planen und WRED ist da, um sie zu verwerfen, wenn die Warteschlangen voll sind. Wenn ich QoS zum Beispiel auf einem L3-Switch einrichte, würde ich einen Warteschlangenmechanismus und einen Mechanismus zur Vermeidung von Überlastungen einrichten, damit WFQ und WRD theoretisch zusammenarbeiten können. Zum Beispiel scheint dieses Dokument zu implizieren, dass ich sie so eingerichtet würde. Einige andere Cisco-Dokumente erwähnen, dass ich sie unabhängig verwenden könnte.
Dann wollte ich mehr über ihre Funktionsweise erfahren und begann im Internet zu suchen. Daher habe ich jetzt keine Ahnung, was sie sind und wie sie funktionieren.
Einige Websites (zumindest nach meinem Verständnis des Inhalts) behaupten, dass Paketplanungsalgorithmen und Algorithmen zur Vermeidung von Überlastungen im Grunde gleich sind. In diesem Wikipedia-Artikel werden sie beispielsweise alle in dieselbe Gruppe eingeordnet. In einigen zufälligen Artikeln wurde erwähnt, dass ich WFQ XOR WRED verwenden könnte.
Ich wollte also fragen, wie verwandt WFQ und WRED sind. Wann würde ich das eine oder andere verwenden und wann beides, wenn das überhaupt möglich ist?
quelle
Antworten:
Weighted Fair Queuing (WFQ) ist, wie der Name schon sagt, ein Warteschlangenalgorithmus. Warteschlangen werden verwendet, wenn eine Schnittstelle überlastet ist. Dies wird normalerweise dadurch erkannt, dass der Sendering (TX-Ring) voll ist. Dies bedeutet, dass die Schnittstelle mit dem Senden von Paketen beschäftigt ist. Warteschlangen finden nur statt, wenn die Schnittstelle überlastet ist. In einigen Fällen kann die Größe des TX-Rings manipuliert werden. Ein kleiner TX-Ring gibt der Software-Warteschlange mehr Leistung, welche Pakete zuerst gesendet werden, aber es ist nicht sehr effektiv. Ein zu großer TX-Ring würde die Software-Warteschlange fast unbrauchbar machen und zu einer höheren Latenz und einem höheren Jitter für wichtige Pakete führen.
Der Standard-Warteschlangenalgorithmus ist normalerweise FIFO (First In First Out). Dies bedeutet, dass Pakete in genau der Reihenfolge geliefert werden, in der sie am Eingang der Schnittstelle ankommen. Dies ist normalerweise nicht wünschenswert, da einige Pakete priorisiert werden sollten.
Es ist durchaus üblich, dass ein Kunde einen Dienst von einem Internetdienstanbieter (ISP) zum Subrate kauft. Das heißt, der Kunde kauft einen 50-Mbit / s-Dienst, aber die physische Schnittstelle läuft mit 100 Mbit / s. In diesem Fall gibt es keine Überlastung, aber der ISP begrenzt das Verkehrsaufkommen des Kunden. Um in diesen Fällen eine künstliche Überlastung einzuführen, kann ein Former verwendet werden.
Jetzt, da es eine Überlastung gibt, kann ein Warteschlangenalgorithmus angewendet werden. Beachten Sie, dass Warteschlangenalgorithmen keine zusätzliche Bandbreite bieten. Sie lassen uns lediglich entscheiden, welche Pakete für uns wichtiger sind. WFQ ist ein Algorithmus, der mehrere Parameter verwendet und darauf basierend eine Entscheidung trifft. Der Algorithmus ist recht komplex und verwendet Gewicht (IP-Priorität), Paketgröße und Planungszeit als Parameter. Es gibt hier eine sehr detaillierte Erklärung von INE . WFQ ist eine gute Wahl, wenn Sie nicht zu viel mit Warteschlangen herumspielen möchten, da es kleinen Datenströmen wie SSH, Telnet und Voice eine ausreichende Bandbreite bietet. Dies bedeutet, dass eine Dateiübertragung nicht die gesamte Bandbreite stiehlt.
Die gewichtete zufällige Früherkennung (WRED) ist ein Mechanismus zur Vermeidung von Überlastungen. WRED misst die Größe der Warteschlangen in Abhängigkeit vom Vorrangwert und beginnt mit dem Verwerfen von Paketen, wenn die Warteschlange zwischen dem minimalen und dem maximalen Schwellenwert liegt. Die Konfiguration entscheidet, dass 1 von N N Paketen verworfen wird. WRED hilft, TCP-Synchronisation und TCP-Hunger zu verhindern. Wenn TCP Pakete verliert, wird es langsam gestartet, und wenn alle TCP-Sitzungen gleichzeitig Pakete verlieren, können sie synchronisiert werden, was ein Diagramm wie das folgende ergibt:
Wie zu sehen ist, wenn WRED nicht konfiguriert ist, geht der Graph auf Hochtouren, dann stumm, dann auf Hochtouren und so weiter. WRED bietet eine durchschnittlichere Übertragungsrate. Es ist wichtig zu beachten, dass UDP nicht vom Verwerfen von Paketen betroffen ist, da es keinen Bestätigungsmechanismus und kein Schiebefenster wie TCP implementiert hat. Daher sollte WRED nicht auf UDP-basierten Klassen implementiert werden, wie z. B. Klassen, die SNMP, DNS oder andere UDP-basierte Protokolle verarbeiten.
Sowohl WFQ als auch WRED können und sollten zusammen bereitgestellt werden.
quelle
Glauben Sie zunächst nicht alles, was Sie im Internet lesen ;-)
Manchmal passen Algorithmen (oder die Art und Weise, wie sie physisch implementiert werden) nicht genau in eine theoretische Kategorie. Was Sie es nennen, ist weniger wichtig als zu verstehen, was es tut.
Der springende Punkt bei WFQ (oder einem anderen Planungsalgorithmus) ist die Aufteilung der begrenzten Verbindungsbandbreite auf die verschiedenen Flüsse. WFQ versucht, die Bandbreite proportional zu jedem Fluss zuzuweisen. CBWFQ macht dasselbe mit jeder "Klasse". In einer perfekten Welt mit unbegrenzten Warteschlangen und unbegrenztem Speicher ist das alles, was Sie brauchen - Sie teilen sich die Bandbreite und alle sind glücklich.
Da Geräte jedoch nicht über unbegrenzte Warteschlangen und Speicher verfügen, müssen einige "Verknüpfungen" vorgenommen werden. Da eine Warteschlange eine begrenzte Größe hat, besteht die Gefahr, dass sich die Warteschlange füllt und Tail Drops und Verkehrssynchronisation verursacht. Wenn meine Warteschlange überfüllt ist, kontrolliere ich im Wesentlichen nicht mehr die Bandbreite.
Um ein Überlaufen meiner Warteschlangen zu vermeiden, verwende ich die zufällige Früherkennung. Dieser Algorithmus löscht Pakete zufällig aus der Warteschlange, je nachdem, wie voll die Warteschlange ist (Tiefe). Je voller die Warteschlange ist, desto mehr Pakete werden verworfen. Ziel ist es, ein Überlaufen der Warteschlange zu verhindern, damit der Planungsalgorithmus funktionieren kann.
Dann bemerkte ein kluger Cisco-Ingenieur, dass man weniger Warteschlangen (einfachere Hardware) verwenden und zufällig verschiedene Arten von Verkehr in verschiedenen Warteschlangentiefen ablegen könnte. WRED löscht den Datenverkehr je nach Art des Datenverkehrs in unterschiedlichen Tiefen aus der Warteschlange. Obwohl Sie WRED als Mechanismus zur Vermeidung von Überlastungen bezeichnen könnten, hat die Auswirkung, dass die Tiefe, in der der Datenverkehr unterbrochen wird, mit der Art des Datenverkehrs variiert, zur Folge, dass verschiedene Typen weniger Platz in der Warteschlange und damit weniger Bandbreite erhalten. Es fungiert also auch als Planungsalgorithmus. Sie sagen po-tay-to und ich sage po-tah-toe.
Ein weiterer Unterschied: FQ und WFQ funktionieren für alle Arten von Verkehr, da sie im Wesentlichen Bytes zählen. RED und WRED funktionieren nur mit TCP, da sie vom Flusskontrollmechanismus von TCP abhängen, um den Datenverkehr zu verlangsamen und ein Überlaufen der Warteschlange zu verhindern.
(Hinweis: Zur Erklärung ignoriere ich Prioritätswarteschlangen und LLQ. Das ist eine andere Antwort.)
Ich stimme allem zu, was Mike auch gesagt hat.
quelle
Hier ist ein Beispiel für CBWFQ und WRED:
Policy-Map OUT
Klasse
Sprachpriorität Prozent 20
Klasse
Videobandbreite Prozent 30
Klasse P1
Bandbreitenprozent 10
dscp-basierte
zufällige Erkennung dscp af31 26 40 10
Klasse P2
Bandbreitenprozentsatz 15
zufällige Erkennung dscp-basierte
zufällige Erkennung dscp af21 24 40 10
class class-default
fair-queue
zufällige Erkennung dscp-basiert
quelle