Grundlegendes zur Durchflussprobenahme
In diesem Thema wird beschrieben, wie Flow-Datensätze abgetastet und in den Contrail-Collector exportiert werden, wie Flow-Handling und Flow-Aging verarbeitet werden.
Durchfluss-Probenahme
Der Contrail vRouter-Agent exportiert Flow-Datensätze in den Contrail Collector, wenn ein Flow erstellt oder gelöscht wird. Außerdem werden die Flow-Statistiken in regelmäßigen Abständen aktualisiert.
Wenn alle Flow-Datensätze aus dem Agenten exportiert werden, können je nach Umfang der Flows einige der exportierten Flows aufgrund eines Warteschlangenüberlaufs verworfen werden.
Basierend auf der Stichprobenentnahme werden die Datenstromaufzeichnungen abgetastet und an den Contrail Controller von Contrail Networking exportiert. Dadurch kann Contrail Networking den Warteschlangenüberlauf reduzieren.
Die exportierten Schemata werden basierend auf den folgenden Parametern ausgewählt, die im Algorithmus verwendet werden:
Die konfigurierte Flow-Exportrate. Dies wird als Teil des
global-vrouter-config
Objekts konfiguriert.Die tatsächliche Datenstrom-Exportrate.
Der Schwellenwert für die Stichprobenentnahme. Dies ist ein dynamischer Wert, der intern berechnet wird. Wenn die Flow-Statistiken in einer Flow-Stichprobe über diesem Schwellenwert liegen, wird der Flow-Datensatz exportiert.
Jeder Fluss wird in regelmäßigen Abständen dem folgenden Algorithmus unterzogen. Der Algorithmus bestimmt, ob die Probe exportiert werden soll oder nicht.
Datenströme mit Datenverkehr, der größer oder gleich dem Sampling-Schwellenwert ist, werden immer exportiert. Die Byte- und Paketanzahl wird unverändert gemeldet.
Datenströme mit Datenverkehr, der kleiner als der Sampling-Schwellenwert ist, werden entsprechend der Wahrscheinlichkeit exportiert. Die Byte- und Paketanzahl wird entsprechend der Wahrscheinlichkeit nach oben angepasst.
Die Wahrscheinlichkeit wird wie folgt berechnet: (Byte während des Intervalls) / (Sampling-Schwellenwert).
Das System generiert eine Zufallszahl, die kleiner als der Stichprobenschwellenwert ist. Wenn die Byteanzahl während des Intervalls kleiner als die Zufallszahl ist, wird die Flow-Stichprobe nicht exportiert.
Wenn keine dieser Bedingungen erfüllt ist, wird das Datenflussbeispiel exportiert, nachdem die Byte- und Paketanzahl während des Intervalls normalisiert wurde. Die Normalisierung erfolgt, indem die Anzahl der Bytes und Pakete während des Intervalls durch die Wahrscheinlichkeit dividiert wird. Diese Normalisierung wird als Heuristik verwendet, um die Statistik der verworfenen Flussstichproben zu berücksichtigen.
Die tatsächliche Flow-Exportrate liegt nahe an der konfigurierten Exportrate. Bei einer großen Abweichung wird der Sampling-Schwellenwert angepasst, um die tatsächliche Durchflussexportrate in die Nähe der konfigurierten Durchflussexportrate zu bringen.
Flow-Handling
Wenn eine virtuelle Maschine IP-Datenverkehr sendet oder empfängt, werden Vorwärts- und Rückwärtsflusseinträge eingerichtet. Wenn das erste Paket eintrifft, wird ein Flow-Schlüssel verwendet, um einen Hash in eine Flow-Tabelle zu erstellen (einen Hash-Bucket zu identifizieren). Der Datenflussschlüssel basiert auf fünf Tupeln, die aus Quell- und Ziel-IP-Adressen, Ports und dem IP-Protokoll bestehen.
Ein Flow-Eintrag wird erstellt und das Paket wird an den Contrail vRouter-Agenten gesendet. Konfigurierte Richtlinien werden angewendet, und die Flow-Aktion wird aktualisiert. Der Agent erstellt bei Bedarf auch einen Flusseintrag für die umgekehrte Richtung. Nachfolgende Pakete stimmen mit den festgelegten Datenstromeinträgen überein und werden basierend auf der Datenflussaktion weitergeleitet, verworfen, NAT-übersetzt usw.
Wenn der Hash-Bucket voll ist, werden Einträge in einer Überlauftabelle erstellt. Contrail Networking verwaltet die Überlaufeinträge als Liste für den Hash-Bucket.
Standardmäßig beträgt die maximale Anzahl von Einträgen für Flusstabellen und Überlauftabellen 512.000 bzw. 8000. Diese können geändert werden, indem sie als vRouter-Modulparameter konfiguriert werden, zum Beispiel: vr_flow_entries
und vr_oflow_entries
.
Weitere Informationen zu den Parametern des vRouter-Moduls finden Sie unter https://github.com/Juniper/contrail-controller/wiki/Vrouter-Module-Parameters.
Fließalterung
Flows werden basierend auf Inaktivität für einen bestimmten Zeitraum veraltet. Standardmäßig beträgt der Timeout-Wert 180 Sekunden. Dies kann geändert werden, indem der Parameter unter dem DEFAULT
Abschnitt in der /etc/contrail/contrail-vrouter-agent.conf
Datei konfiguriert flow_cache_timeout
wird.
Zustandsbasierte TCP-Datenstromverarbeitung und -alterung
Statusbasierte TCP-Datenstromverarbeitung
Der Contrail vRouter in Contrail Networking überwacht TCP-Datenströme, um Einträge zu identifizieren, die wiederverwendet werden können, ohne den standardmäßigen Alterungszyklus zu durchlaufen.
Alle Flow-Einträge, die mit TCP-Flows übereinstimmen, bei denen ein Verbindungs-Teardown aufgetreten ist, entweder durch den Standard-TCP-Schließzyklus (FIN/ACK-FIN/ACK) oder den RST-Indikator, werden vom vRouter entfernt und stehen sofort für die Verwendung durch neue qualifizierte Flows zur Verfügung.
Der vRouter verfolgt auch die Zyklen des Verbindungsaufbaus und exportiert die erforderlichen Informationen an den vRouter-Agenten, wie z. B. SYN/ACK und ein verdautes eingerichtetes Flag. Auf diese Weise kann der vRouter-Agent Flows beenden, die keinen vollständigen Verbindungszyklus durchlaufen.
Flows, die der vRouter als Wiederverwendungskandidaten oder Entfernungskandidaten identifiziert, werden im Flow-Eintrag als solche gekennzeichnet. Flows befinden sich im entfernten Zustand, wenn sie für andere neue Flows zur Wiederverwendung verfügbar werden.
Dieser zweistufige Übergang wird verwendet, damit der Datenstromeintrag gültig bleibt, bis das Paket das Ziel erreicht, wodurch verhindert wird, dass der Datenfluss in der Zwischenzeit einem anderen Datenflusseintrag zugeordnet wird.
Protokollbasierte Flow-Aging
Obwohl TCP-Datenflüsse basierend auf dem TCP-Status gelöscht werden, müssen Sie manchmal bestimmte Protokolldatenflüsse aggressiver altern lassen. Ein Beispiel ist, wenn ein DNS-Server in einer VM ausgeführt wird. In diesem Fall werden mehrere Datenströme für DNS eingerichtet. Für jede Abfrage wird ein Paar von Flows eingerichtet. Da die Flows nach dem Verarbeiten der Abfrage nicht mehr benötigt werden, kann das Timeout für diese Flows niedriger sein. Um diese Fälle zu behandeln, wird protokollbasiertes Flow-Aging verwendet.
Bei protokollbasiertem Flow Aging kann das Alterungs-Timeout pro Protokoll konfiguriert werden. Alle anderen Protokolle verwenden weiterhin das standardmäßige Alterungstimeout.
Protokollbasiertes Flow-Aging wird in Contrail Networking ebenfalls unterstützt.
Die Konfiguration für protokollbasiertes global-vrouter-config
Flow-Aging kann im Objekt vorgenommen werden. Um beispielsweise alle DNS-Flows innerhalb von fünf Sekunden veraltet zu haben, verwenden Sie den folgenden Eintrag: protocol = udp, port = 53 will be set an aging timeout of 5 seconds.