So simulieren Sie Netzwerkpaketverlust und -verzögerung in Linux

So simulieren Sie Netzwerkpaketverlust und -verzögerung in Linux

netem und tc:

netem ist ein Netzwerksimulationsmodul, das von den Linux-Kernelversionen 2.6 und höher bereitgestellt wird. Mit diesem Funktionsmodul können komplexe Internetübertragungsleistungen wie geringe Bandbreite, Übertragungsverzögerung, Paketverlust usw. in einem lokalen Netzwerk mit guter Leistung simuliert werden. Viele Linux-Distributionen, die die Kernelversion Linux 2.6 (oder höher) verwenden, haben diese Kernelfunktion aktiviert, etwa Fedora, Ubuntu, Redhat, OpenSuse, CentOS, Debian usw.

tc ist ein Tool im Linux-System und sein vollständiger Name lautet Traffic Control. tc kann verwendet werden, um den Arbeitsmodus von netem zu steuern. Das heißt, wenn Sie netem verwenden möchten, sind mindestens zwei Bedingungen erforderlich. Erstens muss die netem-Funktion im Kernel enthalten sein, und zweitens muss tc erforderlich sein.

Es ist zu beachten, dass die in diesem Artikel vorgestellte Flusssteuerung nur die Paketsendeaktion steuern kann, nicht jedoch die Paketempfangsaktion. Gleichzeitig wirkt sie sich direkt auf die physische Schnittstelle aus. Wenn die physische eth0 gesteuert wird, ist auch die logische Netzwerkkarte (z. B. eth0:1) betroffen. Wenn Sie umgekehrt die logische Netzwerkkarte steuern, kann die Steuerung ungültig sein. (Hinweis: Mehrere Netzwerkkarten in einer virtuellen Maschine können als mehrere physische Netzwerkkarten in der virtuellen Maschine angesehen werden.)

Linux verfügt über ein TC-Tool (Traffic Control), mit dem sich Paketverluste und -verzögerungen im Netzwerk simulieren lassen. Wenn wir bei der Entwicklung eines Backend-Servers wissen möchten, ob der Server unter bestimmten Netzwerkpaketverlustbedingungen eine gute Leistung erbringt, können wir mit tc die Paketverlustrate simulieren.

Paketverlust simulieren

Der folgende Befehl kann einen Paketverlust simulieren und 10 % der Pakete, die den Netzwerkport eth0 verlassen, gehen zufällig verloren:

sudo tc qdisc add dev eth0 root netem Verlust 10 %

Analoge Verzögerung

Der folgende Befehl verzögert die vom Netzwerkport eth0 gesendeten Pakete um 40 ms:

sudo tc qdisc add dev eth0 root netem Verzögerung 40 ms

Paketverlust und Latenz in bestimmten Szenarien

Beachten Sie, dass die oben vorgestellten Befehle für den gesamten Netzwerkport eth0 gelten, das heißt, bei allen von eth0 ausgehenden Paketen kommt es zu zufälligen Paketverlusten oder Verzögerungen. Manchmal möchten wir jedoch, dass Paketverlust und Verzögerung nur eine bestimmte Zieladresse betreffen. Was sollen wir tun?

sudo tc qdisc add dev eth0 root-Handle 1: prio
sudo tc qdisc add dev eth0 parent 1:3 handle 30: Netem-Verlust 13 %, Verzögerung 40 ms
sudo tc filter add dev eth0 protocol ip parent 1:0 u32 match ip dst 199.91.72.192 match ip dport 36000 0xffff flowid 1:3

Im obigen Befehl weisen wir tc an, 13 % Paketverlust und 40 ms Verzögerung für an 199.91.72.192:36000 gesendete Netzwerkpakete zu generieren, während an andere Zieladressen gesendete Netzwerkpakete nicht betroffen sind.

Löschen einer Regel

OK, denken Sie daran, nach der Simulation von Paketverlust und Latenz die Regel zu löschen:

sudo tc qdisc del dev eth0 root

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • So richten Sie duale Netzwerkkarten in Linux ein
  • Linux-Netzwerkprogrammierung: Beispiel für zuverlässige Dateiübertragung basierend auf UDP
  • Verwenden Sie netstat, um den Netzwerkstatus und den Portstatus in Linux anzuzeigen
  • Linux-Befehle lernen: 10 Netzwerkbefehle und Überwachungsbefehle
  • Zwei Skripte zum Überprüfen des Linux-Netzwerkstatus
  • Skript zur Überwachung des Netzwerkverkehrs unter Linux
  • Einführung in die grundlegende Netzwerkkonfigurationsmethode von Linux
  • Linux erkennt, ob der Server mit dem Netzwerk verbunden ist
  • Allgemeine Netzwerkbefehle in Linux
  • Eine der Netzwerküberwachungstechnologien unter Linux

<<:  Anwendungsbeispiele für React Hooks (6 gängige Hooks)

>>:  MySQL weist eine Riddle-Sicherheitslücke auf, die zum Verlust von Benutzernamen und Passwörtern führen kann

Artikel empfehlen

Detailliertes Tutorial zur Installation von MySQL 5.7.26 auf CentOS7.4

In CentOS ist standardmäßig MariaDB installiert, ...

Detaillierte Erläuterung der Docker Volume-Berechtigungsverwaltung

Das Datenvolumen ist ein wichtiges Konzept von Do...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 5.7.24

In diesem Artikel finden Sie das Installations- u...

JS realisiert Video-Sperreffekt

Verwenden Sie um dies zu erreichen, die modulare ...

Einführung in mögliche Probleme nach der Installation von Tomcat

1. Der Tomcat-Dienst ist nicht geöffnet Geben Sie...

Vue implementiert einen einfachen Laufschrifteffekt

In diesem Artikel wird der spezifische Code von V...

Eine kurze Erläuterung zum eleganten Löschen großer Tabellen in MySQL

Inhaltsverzeichnis 1. Truncate-Operation 1.1 Welc...

Docker-Grundlagen-Tutorial: Detaillierte Erklärung der Dockerfile-Syntax

Vorwort Dockerfile ist ein vom Docker-Programm in...

Detailliertes Tutorial zur Nginx-Installation

1. Kurze Einführung in Nginx Nginx ist ein kosten...

Lösung zum Importieren weiterer Daten aus MySQL in Hive

Ursprünglicher abgeleiteter Befehl: bin/sqoop imp...

Praktische Optimierung des MySQL-Paging-Limits

Vorwort Wenn wir Abfrageanweisungen verwenden, mü...

Die Grundprinzipien und die detaillierte Verwendung des Ansichtsfensters

1. Übersicht über das Ansichtsfenster Mobile Brow...