Co to jest XDP (ekspresowa ścieżka danych) w systemie Linux?

Starship Prompt (1)

XDP (lub Express Data Path) to narzędzie sieciowe dostępne w jądrze Linux. XDP jest używany w wielu popularnych firmach do rozwiązywania poważnych problemów sieciowych, z którymi się borykają, jednocześnie obsługując miliony żądań na sekundę. Jest to licencjonowany przez MIT program open source połączony z jądrem Linuksa od wersji 4.8.

XDP to wydajny i programowalny procesor pakietów danych sieciowych. Powstaje w celu złagodzenia niektórych poważnych problemów po stronie serwera, takich jak ataki DDoS (rozproszona odmowa usługi) lub jako load balancer.

Potrzebujesz XDP

Potrzeba wydajnej ścieżki danych w sieci jest zawsze wymaganą funkcją serwerów z systemem Linux. Ale programowalność tych ścieżek danych również powinna być dostępna, aby programiści zrobili z nich coś użytecznego. Chociaż XDP ma dość stromą ścieżkę uczenia się, ze względu na niedawny rozwój wielu narzędzi i frameworków, pisanie kodu XDP jest obecnie dość przystępne.

Ogromną zaletą XDP jest jego szybkość. Podstawową funkcjonalnością XDP jest to, że programiści mogą tworzyć nowe funkcje filtrowania pakietów bez modyfikowania samego jądra.

Istnieją pewne scenariusze, w których niektóre pakiety nie muszą przechodzić przez cały stos sieciowy, aby po prostu zdecydować o przekazaniu lub odrzuceniu pakietu. Należy to zrobić na pierwszej warstwie stosu sieciowego, umieszczając kilka filtrów. Filtry te należy zaprogramować w taki sposób, aby mogły łatwo rozpoznać złośliwy pakiet i upuścić go na samym początku stosu. Pozwala to zaoszczędzić dużo mocy obliczeniowej i czasu.

Dzięki XDP ta filtracja jest możliwa bezpośrednio z przodu stosu sieciowego.

Teraz, korzystając z XDP, programista może odfiltrować wszystkie pakiety, które mogą zostać wysłane przez dowolnego hakera w celu przeprowadzenia ataku DDoS. Może to znacznie zmniejszyć obciążenie normalnego stosu sieciowego jądra. Ta funkcja została niedawno zademonstrowana przez Cloudflare w demonstracji ochrony przed atakami DDoS.

XDP 1

Niektóre godne uwagi cechy XDP są następujące:

  1. Nie wymaga żadnego specjalistycznego sprzętu: XDP może obsługiwać dowolny sprzęt, który na niego wrzucisz. Tak, prędkość może być zagrożona, jeśli nie masz zoptymalizowanego urządzenia lub jego sterowników, ale do celów testowych nie potrzebujesz specjalistycznego sprzętu.
  2. Nie wymaga obejścia jądra: XDP uruchamia się, zanim pakiet trafi na stos sieciowy jądra. Funkcja wywołania zwrotnego jest uruchamiana po odebraniu pakietu, a XDP przetwarza go tak szybko, jak to możliwe.
  3. Nie zastępuje stosu TCP/IP: XDP jest obecny na najniższym poziomie stosu sieciowego. Po przejściu pakietu, pakiet wchodzi do normalnego stosu sieciowego jądra, który zawiera stos TCP/IP.
  4. Działa w połączeniu z TCP/IP ze wszystkimi funkcjami BPF (Berkeley Packet Filter): XDP niczego nie zastępuje. Używa nawet eBPF do przetwarzania pakietów i daje programiście łatwiejszy czas na pisanie kodu.
Czytać  Porady i wskazówki dotyczące Bash, aby sprytniej pracować w terminalu

Dlaczego XDP jest bardzo szybki

XDP to oparta na eBPF programowalna, wysokowydajna ścieżka danych sieciowych w jądrze systemu Linux. Wzrost wydajności XDP jest spowodowany przetwarzaniem pakietów z gołym metalem na najniższym poziomie stosu oprogramowania. Oznacza to, że pakiet danych przychodzący z sieci trafia do XDP jako pierwszy przed jakimkolwiek innym procesem jądra.

Dlatego inżynierowie mogą zaprogramować XDP, aby zoptymalizować go pod kątem różnych zastosowań. Od ochrony przed atakami DDoS po system równoważenia obciążenia.

XDP jest ładowany bezpośrednio na stos sieciowy. Gdy pakiet zostanie odebrany przez stos sieciowy, otrzymuje wywołanie zwrotne i przetwarza pakiety tak szybko, jak to możliwe. XDP może zrzucić 26 milionów pakietów na sekundę na rdzeń w standardowym sprzęcie.

Głównym powodem, dla którego XDP jest bardzo szybki, jest to, że użytkownik może bezpośrednio odczytywać lub wprowadzać zmiany w danych pakietów sieciowych i podejmować decyzje dotyczące obsługi pakietu na wcześniejszym etapie. Wymaga to bardzo mniejszego nakładu pracy, a co za tym idzie większej szybkości.

Połącz stos sieciowy z XDP

Możesz połączyć się z siecią za pomocą XDP na różne sposoby, ale wspomnę tutaj o kilku popularnych metodach.

  1. Ogólny XDP: W tym procesie XDP jest ładowany do jądra, ale uzyskuje bardzo niewielkie korzyści w zakresie wydajności. Jest to prosty sposób na uruchomienie programu XDP bez wsparcia sprzętowego.
  2. Natywny XDP: Native XDP jest ładowany przez sam sterownik sieciowy. Wymaga wsparcia ze strony sterownika karty sieciowej.

Rodzaje operacji, które wykonuje XDP

Niektóre operacje, które XDP może wykonać po odebraniu pakietu przez interfejs sieciowy, to:

  1. XDP_DROP: Odrzuca pakiety i nie przetwarza ich. Korzystanie z programu eBPF do analizy wzorca ruchu i może odrzucać pakiety w czasie rzeczywistym.
  2. XDP_PASS: Przekazuje pakiety do stosu sieciowego w celu dalszego przetwarzania. Może modyfikować zawartość pakietu, zanim to się stanie.
  3. XDP_ABORTED: Odrzuca pakiet danych sieciowych, pozostawiając wyjątek punktu śledzenia.
  4. XDP_TX: przekaż pakiety do tego samego interfejsu sieciowego, który je odbiera. Pakiety można modyfikować na niezmodyfikowanych.
  5. XDP_REDIRECT: Przekieruj pakiet do innej karty sieciowej (kontrolera interfejsu sieciowego).
Xdp 2 1

XDP i eBPF

eBPF to rozszerzona wersja Berkeley Packet Filter. Jest jak abstrakcyjna maszyna wirtualna działająca wewnątrz jądra Linuksa. eBPF służy do uruchamiania programu zdefiniowanego przez użytkownika w środowisku piaskownicy w jądrze Linux. Zasadniczo służy do uruchamiania narzędzi sieciowych i monitorowania na serwerach Linux w celu zapewnienia optymalnej wydajności.

XDP to framework używany do pisania bardzo szybkiego przetwarzania pakietów w aplikacjach BPF. Aby było jeszcze szybciej, XDP uruchamia BPF natychmiast po odebraniu pakietu przez stos sieciowy.

Czytać  Zrozumienie struktury katalogów wirtualnych systemu Linux

XDP ma bardzo stromą krzywą uczenia się. Dlatego programiści tworzą narzędzia i frameworki ułatwiające programowanie przy użyciu eBPF. Ułatwia pisanie kodu do przetwarzania sieci o bardzo wysokiej częstotliwości przy użyciu XDP i eBPF. Główną zaletą XDP jest to, że nie wymaga modyfikacji jądra, co było ogromnym problemem dla inżynierów.

Ale jak mówili ludzie, wielka władza wiąże się z wielką odpowiedzialnością. Ponieważ XDP uruchamia eBPF tak wcześnie, jak to możliwe, zanim pakiety zostaną przeanalizowane przez samo jądro, programy eBPF muszą wykonać całą analizę samodzielnie i nie mogą polegać na jądrze, aby coś za nie zrobił.

Jako programista przez większość czasu pracujesz z terminalem. To jest przewodnik, jak udekorować monit terminala. Sprawdź to.

Typowe przypadki użycia XDP i eBPF

  1. Atak DDoS: Podstawowym przypadkiem użycia XDP jest ochrona przed atakami DDoS (Distributed Denial of Service). Podczas ataku DDoS atakujący stara się wykorzystać jak najwięcej zasobów serwera, nie pozostawiając żadnego procesu użytkownikowi końcowemu. Korzystając z XDP jako bardzo szybkiej warstwy stosu sieciowego, nie ma kosztów przetwarzania związanych z odrzuceniem pakietu danych sieciowych. Po filtrowaniu XDP pakiet przechodzi przez wszystkie inne metody filtrowania udostępniane przez jądro Linuksa.
  2. System równoważenia obciążenia: XDP jest również używany jako load balancer do obsługi ogromnego ruchu na serwerze. Wiele gigantycznych firm technologicznych, w tym Facebook, korzysta z tej technologii. Wcześniej inżynierowie wykorzystywali serwer dedykowany jako load balancer. Co jest bardzo trudne w zarządzaniu i musi działać bardzo dobrze, aby obsłużyć miliony klientów. Ale wyobraź sobie użycie warstwy XDP jako modułu równoważenia obciążenia bez centralnego serwera, w rezultacie bez pojedynczego punktu awarii.
  3. Zapora: XDP z eBPF może być używany do pisania różnych reguł zapory sieciowej w celu ochrony systemu przy minimalnym nakładzie pracy.

Często Zadawane Pytania

Co to jest BCC to eBPF?

BCC jest zbudowany na eBPF. Jest to zestaw narzędzi lub framework do programów do śledzenia i manipulacji jądrem, który jest dostarczany z bardzo przydatnym interfejsem wiersza poleceń. BCC pomaga napisać instrukcję Kernal w C. Zawiera również wrapper wokół LLVM.

Co to jest libBPF?

LibBPF to alternatywny zestaw narzędzi do tworzenia aplikacji BPF. Jest napisany w języku programowania C.

Czy ten artykuł jest przydatny?

Zapisz się do naszego newslettera!

Nasze najnowsze samouczki dostarczane prosto do Twojej skrzynki odbiorczej