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

Detaillierte Erklärung des Typschutzes in TypeScript

Inhaltsverzeichnis Überblick Typzusicherungen in ...

Mysql 5.6.37 Winx64-Installation Dual-Version MySQL-Hinweise

Wenn MySQL Version 5.0 bereits auf dem Computer v...

JavaScript zur Implementierung des Anmeldeformulars

In diesem Artikelbeispiel wird der spezifische Ja...

JavaScript implementiert den Farbänderungseffekt durch Klicken mit neun Rastern

In diesem Artikel wird der spezifische JavaScript...

So installieren Sie das Modul „lua-nginx-module“ in Nginx

ngx_lua_module ist ein Nginx-HTTP-Modul, das den ...

Verwenden Sie js in html, um die lokale Systemzeit abzurufen

Code kopieren Der Code lautet wie folgt: <div ...

Node.js implementiert die Wiederaufnahme von Haltepunkten

Inhaltsverzeichnis Lösungsanalyse Scheibe Lebensl...

Detaillierte Schritte zur Installation von Nginx unter Linux

1. Nginx-Installationsschritte 1.1 Offizielle Web...

Fallbeispiel zur TypeScript-Schnittstellendefinition

Die Rolle der Schnittstelle: Schnittstelle, auf E...

Öffentliche kostenlose STUN-Server

Öffentliche kostenlose STUN-Server Wenn das SIP-T...