Was ist XDP (Express Data Path) in Linux

XDP (oder Express Data Path) ist ein Netzwerkdienstprogramm, das im Linux-Kernel verfügbar ist. XDP wird in vielen beliebten Unternehmen eingesetzt, um einige ernsthafte Netzwerkprobleme zu lösen, mit denen sie beim Umgang mit Millionen von Anfragen pro Sekunde konfrontiert sind. Dies ist ein open-source Programm mit MIT-Lizenz, das im Linux-Kernel ab Version 4.8 integriert wurde.
XDP ist ein leistungsstarker und programmierbarer Datenpaketprozessor für Netzwerke. Es wird eingeführt, um einige gravierende serverseitige Probleme wie DDoS (Distributed Denial-of-Service)-Angriffe oder als Lastenausgleicher zu mildern.
Inhaltsverzeichnis
- Bedarf an XDP
- Warum XDP sehr schnell ist
- Netzwerk-Stack mit XDP verbinden
- Arten von Operationen, die XDP durchführt
- XDP und eBPF
- Häufige Anwendungsfälle von XDP und eBPF
- Häufig gestellte Fragen
Auch lesen: 5 nützliche Tipps beim Kompilieren Ihres eigenen Linux-Kernels
Bedarf an XDP
Der Bedarf an einem leistungsfähigen Netzwerkdatenpfad ist immer eine notwendige Funktion für Linux-Server. Aber die Programmierbarkeit dieser Datenpfade sollte ebenfalls gegeben sein, damit Entwickler daraus etwas Nützliches machen können. Obwohl XDP einen recht steilen Lernweg hat, hat sich das Schreiben von XDP-Code dank der jüngsten Entwicklung zahlreicher Werkzeuge und Frameworks heutzutage als recht zugänglich erwiesen.
Der große Vorteil von XDP ist seine Geschwindigkeit. Die Hauptfunktionalität von XDP besteht darin, dass Entwickler neue Funktionen erstellen können, um Pakete herauszufiltern, ohne den Kernel selbst zu ändern.
Es gibt Szenarien, in denen ein Paket nicht durch den gesamten Netzwerk-Stack reisen muss, um zu entscheiden, ob es weitergeleitet oder verworfen wird. Dies sollte auf der ersten Schicht des Netzwerk-Stacks durch das Platzieren von Filtern geschehen. Diese Filter sollten so programmiert werden, dass sie ein bösartiges Paket leicht erkennen und es gleich zu Beginn des Stacks verwerfen können. Dies kann viel Rechenleistung und Zeit sparen.
Mit XDP ist diese Filtration direkt am Anfang des Netzwerk-Stacks möglich.
Jetzt kann der Entwickler mit XDP alle Pakete herausfiltern, die von einem Hacker gesendet werden könnten, um einen DDoS-Angriff durchzuführen. Dies kann viel von der Überlastung im normalen Kernel-Netzwerk-Stack reduzieren. Diese Funktion wurde kürzlich von Cloudflare in ihrer DDoS-Schutz-Demonstration gezeigt.

Ein bemerkenswertes Merkmal von XDP ist wie folgt:
- Es benötigt keine spezielle Hardware: XDP kann auf jeder Hardware laufen, die Sie ihm geben. Ja, die Geschwindigkeit kann beeinträchtigt werden, wenn Sie nicht über das optimierte Gerät oder dessen Treiber verfügen, aber zu Testzwecken benötigen Sie keine spezielle Hardware.
- Es benötigt keinen Kernel-Umgehung: XDP läuft, bevor das Paket den Kernel-Netzwerk-Stack erreicht. Eine Rückruffunktion wird ausgelöst, wenn ein Paket empfangen wird und XDP verarbeitet es so schnell wie möglich.
- Es ersetzt den TCP/IP-Stack nicht: XDP ist auf der niedrigsten Ebene des Netzwerk-Stacks vorhanden. Wenn es das Paket weitergibt, gelangt das Paket in den normalen Kernel-Netzwerk-Stack, der den TCP/IP-Stack umfasst.
- Es arbeitet in Verbindung mit TCP/IP mit allen BPF (Berkeley Packet Filter)-Funktionen: XDP ersetzt nichts. Es verwendet sogar eBPF, um Pakete zu verarbeiten und dem Entwickler die Arbeit an dem Code zu erleichtern.
Auch lesen: Wie man einen benutzerdefinierten Kernel unter Ubuntu erstellt und installiert
Warum XDP Sehr Schnell Ist
XDP ist ein eBPF-basiertes, programmierbares, hochleistungsfähiges Netzwerkdatenpfad im Linux-Kernel. Der Leistungsgewinn von XDP ist aufgrund der Bare-Metal-Paketverarbeitung auf der niedrigsten Ebene des Software-Stacks. Das bedeutet, dass das Datenpaket, das aus dem Netzwerk kommt, zuerst auf XDP trifft, bevor es von einem anderen Prozess im Kernel bearbeitet wird.
Daher können Ingenieure XDP programmieren, um es für verschiedene Anwendungsfälle zu optimieren. Von DDoS-Schutz bis hin zum Lastenausgleicher.
XDP wird direkt im Netzwerk-Stack geladen. Wenn ein Paket vom Netzwerk-Stack empfangen wird, erhält es einen Rückruf und verarbeitet die Pakete so schnell wie möglich. XDP kann 26 Millionen Pakete pro Sekunde und pro Kern auf handelsüblicher Hardware verwerfen.
Der Hauptgrund, warum XDP sehr schnell ist, liegt darin, dass der Benutzer direkt auf die Daten von Netzwerkpaketen zugreifen oder Änderungen daran vornehmen und Entscheidungen treffen kann, wie das Paket in einem frühen Stadium behandelt werden soll. Dies erfordert sehr wenig Prozessüberhead und führt zu einer besseren Geschwindigkeit.
Netzwerk-Stack mit XDP Verbinden
Sie können sich auf verschiedene Weise mit dem Netzwerk über XDP verbinden, aber ich erwähne hier einige beliebte Methoden.
- Generisches XDP: In diesem Verfahren wird XDP im Kernel geladen, erzielt jedoch nur einen geringen Leistungsgewinn. Dies ist der einfache Weg, ein XDP-Programm ohne Unterstützung von der Hardware auszuführen.
- Natives XDP: Natives XDP wird vom Netzwerktreiber selbst geladen. Es erfordert die Unterstützung des Treibers der Netzwerkkarte.
Auch lesen: Wie man den Kernel-Daten-Fehler in Windows behebt
Arten von Operationen, die XDP Durchführt
Einige der Operationen, die XDP durchführen kann, sobald ein Paket von der Netzwerkschnittstelle empfangen wird:
- XDP_DROP: Es verwirft die Pakete und verarbeitet sie nicht. Verwendet ein eBPF-Programm, um das Verkehrsverhalten zu analysieren und kann Pakete in Echtzeit verwerfen.
- XDP_PASS: Es leitet die Pakete an den Netzwerk-Stack zur weiteren Verarbeitung weiter. Es kann den Inhalt des Pakets ändern, bevor es geschieht.
- XDP_ABORTED: Es verwirft das Netzwerkdatenpaket und hinterlässt einen Tracepoint-Fehler.
- XDP_TX: Es leitet die Pakete an dieselbe Netzwerkschnittstelle weiter, die sie empfängt. Die Pakete können unverändert oder modifiziert werden.
- XDP_REDIRECT: Leitet das Paket an eine andere NIC (Netzwerkschnittstellensteuerung) weiter.

XDP und eBPF
eBPF ist die erweiterte Version des Berkeley Packet Filter. Es ist wie eine abstrahierte virtuelle Maschine, die im Linux-Kernel läuft. eBPF wird verwendet, um ein benutzerdefiniertes Programm in einer Sandbox-Umgebung im Linux-Kernel auszuführen. Im Allgemeinen wird es verwendet, um Netzwerk- und Überwachungsanwendungen in Linux-Servern auszuführen, um eine optimale Leistung sicherzustellen.
XDP ist ein Framework, das für das Schreiben von sehr schnelle paketverarbeitung in BPF-Anwendungen verwendet wird. Um es noch schneller zu machen, führt XDP BPF sofort nach dem Empfang eines Pakets vom Netzwerk-Stack aus.
XDP hat eine sehr steile Lernkurve. Daher entwickeln Entwickler Werkzeuge und Frameworks, um das Programmieren mit eBPF einfacher zu gestalten. Es erleichtert das Schreiben von Code für die Verarbeitung von sehr hochfrequenten Netzwerkprozessen mit XDP und eBPF. Der Hauptvorteil von XDP besteht darin, dass es nicht erforderlich ist, den Kernel zu ändern, was für die Ingenieure ein riesiges Kopfzerbrechen darstellte.
Aber wie man sagt, große Macht kommt mit großer Verantwortung. Da XDP eBPF so früh wie möglich ausführt, bevor Pakete vom Kernel selbst geparst werden, müssen eBPF-Programme das gesamte Parsen selbst erledigen und können sich nicht auf den Kernel verlassen, dass er irgendetwas für sie tut.
Als Programmierer verbringen Sie die meiste Zeit mit der Arbeit im Terminal. Dies ist ein Leitfaden, um Ihre Terminalaufforderung zu dekorieren. Schauen Sie sich das an.
Auch lesen: Wie man den Kernel in Linux downgradiert
Häufige Anwendungsfälle von XDP und eBPF
- DDoS-Angriff: Der Hauptanwendungsfall von XDP ist der DDoS (Distributed Denial of Service)-Schutz. Während des DDoS-Angriffs versucht der Angreifer, so viele Ressourcen des Servers wie möglich zu nutzen, indem er keinen Prozess für den Endbenutzer übrig lässt. Durch die Verwendung von XDP als sehr schnelle Schicht des Netzwerk-Stacks fallen keine Verarbeitungs- kosten an, um ein Netzwerkdatenpaket zu verwerfen. Nach der XDP-Filterung durchläuft das Paket alle anderen Filtermethoden, die der Linux-Kernel bietet.
- Lastenausgleicher: XDP wird auch als Lastenausgleicher verwendet, um eine enorme Menge an Traffic zu bearbeiten, die den Server erreicht. Viele große Tech-Unternehmen, einschließlich Facebook, nutzen diese Technologie. Früher verwendeten Ingenieure einen dedizierten Server als Lastenausgleicher. Was sehr schwer zu verwalten ist und sehr gut funktionieren muss, um Millionen von Kunden zu bedienen. Aber stellen Sie sich vor, die XDP-Schicht als Lastenausgleicher ohne zentralen Server zu verwenden, was zu keinem einzelnen Ausfallpunkt führt.
- Firewall: XDP mit eBPF kann verwendet werden, um verschiedene Firewall-Regeln zu schreiben, um das System mit sehr minimalem Overhead zu schützen.
Auch lesen: Wie man den Befehl ‘rm’ in Linux verwendet
Häufig Gestellte Fragen
Was ist BCC in eBPF?
BCC basiert auf eBPF. Es handelt sich um ein Toolkit oder Framework für Kernel-Tracking und Manipulationsprogramme, das mit einer sehr nützlichen Befehlszeilenschnittstelle geliefert wird. BCC hilft, Kernel-Anweisungen in C zu schreiben. Es enthält auch eine Hülle um LLVM.
Was ist libBPF?
LibBPF ist eine alternative Werkzeugset, um eine BPF-Anwendung zu erstellen. Es ist in der Programmiersprache C geschrieben.