{"id":20356,"date":"2026-08-05T15:05:33","date_gmt":"2026-08-05T13:05:33","guid":{"rendered":"https:\/\/webhosting.de\/xdp-hochperformante-paketverarbeitung-kernel-speed\/"},"modified":"2026-08-05T15:05:33","modified_gmt":"2026-08-05T13:05:33","slug":"xdp-hoogwaardige-pakketverwerking-kernel-snelheid","status":"publish","type":"post","link":"https:\/\/webhosting.de\/nl\/xdp-hochperformante-paketverarbeitung-kernel-speed\/","title":{"rendered":"XDP en eXpress Data Path: hoogwaardige pakketverwerking"},"content":{"rendered":"<p><strong>XDP<\/strong> versnelt de pakketverwerking, omdat het beslissingen direct bij de ingang van de Linux-netwerkstack neemt en zo de latentie, geheugentoegangen en CPU-cycli vermindert. Het eXpress Data Path controleert pakketten al in het stuurprogramma, verwerpt ze, leidt ze om of laat ze door \u2013 ideaal voor DDoS-bescherming, load balancing, verkeersfiltering en telemetrie.<\/p>\n\n<h2>Centrale punten<\/h2>\n\n<ul>\n  <li><strong>Vroeg<\/strong> Beslissingen direct bij de NIC-ingang<\/li>\n  <li><strong>eBPF<\/strong> als een veilig, geverifieerd uitvoeringsmechanisme<\/li>\n  <li><strong>Latency<\/strong> en de overhead drastisch verminderen<\/li>\n  <li><strong>Schalen<\/strong> voor miljoenen pakketten per seconde<\/li>\n  <li><strong>Integratie<\/strong> met Linux-stuurprogramma's, routing en monitoring<\/li>\n<\/ul>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/netzwerkserverraum-datenfluss-4725.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Wat XDP in de kernel doet<\/h2>\n\n<p>Ik plaats logica op de <strong>NIC<\/strong>, voordat pakketten de volledige stack belasten, en bespaar zo kopie\u00ebn, interrupts en contextwisselingen. XDP-programma\u2019s beslissen al in een vroeg stadium over DROP, PASS, REDIRECT of TX en ontlasten zo de hogere lagen. Hierdoor neemt de <strong>Effici\u00ebntie<\/strong> Dit is duidelijk merkbaar, vooral bij kleine pakketten die anders de CPU zouden domineren. Ik minimaliseer cache-misses en verkort wachtrijen, wat directe gevolgen heeft voor de tail-latenties. Precies hier ligt het verschil met klassieke paden, die pakketten pas laat classificeren en daardoor onnodige overhead veroorzaken.<\/p>\n\n<h2>eBPF als drijvende kracht achter het Express Data Path<\/h2>\n\n<p>Ik schrijf eBPF-code op een compacte manier, laat deze in de kernel verifi\u00ebren en voeg hem toe aan de <strong>XDP-hook<\/strong> van het stuurprogramma. Zo reageer ik binnen nanoseconden op elk binnenkomend pakket en pas ik het gedrag aan zonder de kernel opnieuw te hoeven compileren. Voor de analyse gebruik ik <a href=\"https:\/\/webhosting.de\/nl\/ebpf-linux-analysetools-servermonitoring-inzichten\/\">eBPF-analysetools<\/a>, om paden, kaarten en latenties zichtbaar te maken. Ik varieer sleutels in kaarten voor snelheidsbeperking, Conntrack-light of telemetrie en houd de code daarbij slank. Deze nabijheid tot de <strong>Hardware<\/strong> vermindert de latentie merkbaar, zonder af te zien van de Linux-integratie.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/xdp-konferenz-2897.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>XDP-acties: afwijzen, doorsturen, omleiden<\/h2>\n\n<p>Ik zet de XDP-acties doelgericht in om het verkeer in een vroeg stadium te <strong>stuur<\/strong>: DROP voor bot-scans, PASS voor legitieme datastromen, REDIRECT naar de aangrenzende interface en TX voor onmiddellijke terugzending. Zo scheid ik ongewenste belasting aan de rand en bescherm ik hosts tegen overbelasting van lagere lagen. De volgende toewijzingen helpen bij het opstellen van concrete beleidsregels. Ik geef eerst prioriteit aan eenvoudige, deterministische controles en voeg optionele meetpunten alleen toe waar ze echt nut opleveren. Hierdoor blijft de <strong>Datapad<\/strong> kort en voorspelbaar.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Actie<\/th>\n      <th>Typisch gebruik<\/th>\n      <th>Voordeel<\/th>\n      <th>Overhead<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>XDP_DROP<\/td>\n      <td>Spoofing, DDoS, scans<\/td>\n      <td>Vroegtijdige afweer en ontlasting van de CPU<\/td>\n      <td>Zeer laag<\/td>\n    <\/tr>\n    <tr>\n      <td>XDP_PASS<\/td>\n      <td>Legitiem verkeer<\/td>\n      <td>Doorgeven aan de kernelstack<\/td>\n      <td>Laag<\/td>\n    <\/tr>\n    <tr>\n      <td>XDP_REDIRECT<\/td>\n      <td>Load balancer, serviceketens<\/td>\n      <td>Snelle omleiding zonder stack<\/td>\n      <td>Laag<\/td>\n    <\/tr>\n    <tr>\n      <td>XDP_TX<\/td>\n      <td>ICMP\/ARP-antwoorden, Blackhole-ACK<\/td>\n      <td>Direct antwoord via het NIC-pad<\/td>\n      <td>Laag<\/td>\n    <\/tr>\n    <tr>\n      <td>AF_XDP (gebruikersruimte)<\/td>\n      <td>Zero-Copy-engines in de userland<\/td>\n      <td>Hoge doorvoercapaciteit bij speciale logica<\/td>\n      <td>Gemiddeld (afhankelijkheid van pacing)<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<h2>Prestaties en latentie in cijfers<\/h2>\n\n<p>Ik haal hoge pakketcijfers per <strong>Kern<\/strong>, omdat ik het datapad drastisch verkort en het werk vroegtijdig be\u00ebindig. In gepubliceerde artikelen wordt gesproken over maximaal 24 miljoen pakketten per seconde per kern; rapporten van ACM en de Universiteit van Stuttgart beschrijven deze orde van grootte. In de praktijk hangt de waarde af van het stuurprogramma, de XDP-modus en NIC-parameters zoals wachtrijen. Daarom meet ik altijd end-to-end-latenties en niet alleen synthetische snelheden. Het blijft cruciaal: minder kopie\u00ebn, minder sprongen en minder cachebelasting leveren consistente <strong>Latencies<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/packet-processing-xdp-tech-8035.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Praktijk: DDoS-beveiliging aan de NIC-rand<\/h2>\n\n<p>Ik blokkeer aanvallen met <strong>XDP_DROP<\/strong> direct bij de ingang, waardoor kernel, sockets en applicaties worden ontzien. Rate-limits en Bloom-filters in maps houden de code compact en treden al in een zeer vroeg stadium in werking. Voor legitiem verkeer houd ik whitelists dicht bij de driver, terwijl ik broncontroles en TTL-validatie toevoeg. Wat de architectuur betreft, is het de moeite waard om eens te kijken naar de <a href=\"https:\/\/webhosting.de\/nl\/server-pakketverwerking-pijplijn-hosting-netwerk-router\/\">Pakketverwerkingspijplijn<\/a>, om beslissingen langs het traject duidelijk te ordenen. Zo voorkom ik dat dure Layer-7-regels waardevolle <strong>Bronnen<\/strong> verbranden.<\/p>\n\n<h2>Load balancing en voorfiltering<\/h2>\n\n<p>Ik gebruik <strong>XDP_REDIRECT<\/strong> voor zeer snelle fan-out naar backend-wachtrijen of aangrenzende interfaces. ECMP-achtige hashes op 5-tuples of QUIC-CID\u2019s verdelen de flows gelijkmatig. Bij telemetrie schrijf ik beknopte header-samples in maps en haal ik alleen representatieve voorbeelden op. Voor stateful-functies verplaats ik de complexiteit naar lagere niveaus en houd ik XDP deterministisch. Zo blijf ik snel, houd ik de code onderhoudbaar en zorg ik voor consistentie <strong>Reactietijden<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/Techoffice_XDP_Paketverarbeitung_7890.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>XDP-modi: native, generic, offload<\/h2>\n\n<p>Ik kies voor de <strong>Modus<\/strong> Afgestemd op de hardware: \u2018native\u2019 via het stuurprogramma levert de hoogste prestaties, \u2018generic\u2019 werkt overal en \u2018offload\u2019 verplaatst de logica naar de NIC. \u2018Native\u2019 is geschikt voor productiesystemen met goede stuurprogramma\u2019s en geteste paden. Generic is handig in VM\u2019s of bij oude stuurprogramma\u2019s, wanneer ik portabiliteit nodig heb. Offload vereist ondersteuning van de NIC en nauwkeurig geteste programma\u2019s, maar levert indrukwekkende effici\u00ebntie op. Ik test elke optie met echte belastingpatronen en geef prioriteit aan reproduceerbare <strong>Resultaten<\/strong>.<\/p>\n\n<h2>Programmering en implementatie: CO-RE, BTF en bpftool<\/h2>\n\n<p>Bij de implementatie kies ik voor <strong>CO-RE<\/strong> (Compile Once \u2013 Run Everywhere) en BTF, zodat mijn eBPF-object stabiel blijft, ongeacht de kernelversie. Met libbpf houd ik structuren compact, bereken ik offsets tijdens de uitvoering en verklein ik zo de build-matrices. Ik pin programma\u2019s en <strong>Kaarten<\/strong> in bpffs, zodat levenscycli onafhankelijk van processen kunnen worden beheerd en upgrades atomair verlopen. Voor het beheer gebruik ik bpftool om te laden, vast te pinnen, te vervangen en te inspecteren, documenteer ik mapgroottes, typen en sleutellay-outs en zorg ik zo voor reproduceerbare implementaties. Ik stel richtlijnen vast die <strong>Mogelijkheden<\/strong> die nodig zijn voor het laden van programma\u2019s, automatiseer koppelingspunten (via systemd of init-scripts) en plan rollbacks: als een upgrade mislukt, valt de koppeling terug op een stabiele versie of, in geval van twijfel, op <strong>XDP_PASS<\/strong>. Zo blijven wijzigingen onder controle en blijft het risico laag.<\/p>\n\n<h2>Interactie met tc\/eBPF en de gebruikersruimte<\/h2>\n\n<p>Ik combineer XDP met tc\/eBPF wanneer outbound-shaping, DSCP-markering of complexe beslissingen nodig zijn. Voor speciale gevallen gebruik ik <strong>AF_XDP<\/strong> in de zero-copy-modus en verplaats ik logica naar userland-engines. Daarbij kapsel ik het parseren en de fast-path in XDP in en besteed ik kostbare bewerkingen uit aan workers. Zo houd ik de hot-loop zo klein mogelijk en blijf ik tegelijkertijd flexibel. Deze opbouw zorgt voor een duidelijke scheiding van verantwoordelijkheden en beschermt kritieke <strong>Hotpaths<\/strong> tegen uitschieters.<\/p>\n\n<h2>Parserontwerp en metagegevens in het XDP-programma<\/h2>\n\n<p>Ik bouw de parser op een defensieve manier: ik werk uitsluitend via <strong>xdp_md<\/strong> (data\/data_end), controleer de lengtes strikt en vermijd toegangen buiten het toegestane bereik. VLAN-tags behandel ik expliciet; indien nodig pas ik de pakketheader aan met bpf_xdp_adjust_head en houd ik de offsets consistent. Ik maak al in een vroeg stadium onderscheid tussen IPv4 en IPv6, controleer op fragmentatie, voer eenvoudige sanity checks uit (bijv. minimale headerlengte, geldige protocolwaarden) en vertrouw niet op latere correcties. Optioneel noteer ik een korte <strong>Flow-Key<\/strong> in de metadata-pijplijn (per CPU) en geef ik deze door aan de volgende lagen. Zo blijft het parseren <strong>deterministisch<\/strong>, cachevriendelijk en bestand tegen foutieve of opzettelijk gemanipuleerde pakketten.<\/p>\n\n<h2>Tail calls, maps en per-CPU-ontwerp<\/h2>\n\n<p>Ik breng structuur aan in logica via <strong>Tail Calls<\/strong>, om veelvoorkomende paden kort te houden en zeldzame gevallen uit te besteden. Voor tellers gebruik ik per-CPU-array-maps om atomics te vermijden en pas bij het exporteren te aggregeren. Voor caches gebruik ik LRU-hash-maps, dimensionneer ik deze conservatief en meet ik botsingspercentages, zodat evictions niet uit de hand lopen. Configuraties (bijv. prefixlijsten, poortgroepen) bewaar ik in array- of hash-maps, laad ze tijdens de uitvoering opnieuw in en ontkoppel code van gegevens. Telemetrie registreer ik via ringbuffers of sampling-tellers, nooit in de <strong>Hot-Loop<\/strong> met kostbare gebeurtenissen. Ik let op uitlijning en cache-lijnen om false sharing te voorkomen, en groepeer velden zo dat veelgebruikte gegevens compact bij elkaar liggen. Dit verlaagt de latentie meetbaar, zonder dat dit ten koste gaat van de leesbaarheid.<\/p>\n\n<h2>AF_XDP uitgediept: Zero-Copy-Userland<\/h2>\n\n<p>Ik gebruik AF_XDP met correct gedimensioneerde <strong>UMEM<\/strong>, koppel wachtrijen vast aan CPU's en maak effici\u00ebnt gebruik van fill-\/completion-ringen. Zero-copy levert pas maximaal effect op als de stuurprogramma's en de NIC deze modus ondersteunen; anders schakel ik op gecontroleerde wijze over naar de copy-modus. Ik bundel RX-\/TX-bewerkingen in <strong>Batches<\/strong>, bevestig ik TX-completions tijdig en pas ik de pacing aan om bufferoverschrijdingen te voorkomen. Ik gebruik busy-polling alleen wanneer latentie belangrijker is dan CPU-idle, en meet het effect op de jitter. In multiqueue-opstellingen koppel ik sockets gericht aan <strong>Wachtrij-ID's<\/strong> en isoleer kernen (IRQ-affiniteit, pinning), zodat er geen kruisconflicten ontstaan. Zo schaal ik userland-engines op een gecontroleerde manier en houd ik de paden kort.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/xdp_datenverarbeitung_1234.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Virtualisatie en container-orkestratie<\/h2>\n\n<p>Ik maak onderscheid tussen bare-metal, VM's en containers: In de <strong>generiek<\/strong>-modus test ik de functionaliteit in VM\u2019s en migreer ik vervolgens naar de native modus om de prestaties te verbeteren. In Kubernetes plaats ik XDP op de host-interface, regel ik de instroom per node en laat ik pod-specifieke regels later via tc\/eBPF volgen. Bij <strong>SR-IOV<\/strong> Of met vDPA verplaats ik hot-paths nog dichter bij de hardware en controleer ik of offloads de semantiek ongewijzigd laten. veth-paden behandel ik bewust: voorfilters (XDP) op de host, zeer gedetailleerde beleidsregels in namespaces. Zo blijft de interactie tussen CNI, service-mesh en hostbeveiliging consistent en <strong>voorspelbaar<\/strong>.<\/p>\n\n<h2>Foutopsporing, tests en reproduceerbaarheid<\/h2>\n\n<p>Ik integreer diagnostiek al in een vroeg stadium in het ontwerp: drop-tellers per CPU volgens <strong>Redencodes<\/strong>, een beperkt aantal tracepunten voor zeldzame foutgevallen en duidelijke build-ID\u2019s voor programma\u2019s. bpf_printk gebruik ik alleen in het laboratorium, om hot-paths niet te verstoren; in de praktijk vertrouw ik op tellers, steekproeven en opgeslagen metadata. Regressietests voeren synthetische patronen in (SYN-flood, UDP-bursts, gemengd verkeer), vergelijken latentiekwantielen en meten <strong>End-to-end<\/strong>. Ik leg testprofielen vast (pakketgroottes, verdeling, duur), documenteer de versies van de kernel, stuurprogramma\u2019s en firmware en voorkom zo meetafwijkingen. Bij afwijkingen rol ik gericht terug of isoleer ik wijzigingen (alleen de inhoud van de map, alleen de parser, alleen de tail-call-keten), totdat de oorzaak duidelijk is.<\/p>\n\n<h2>Bedrijf: uitrol, versiebeheer en fallback-strategie\u00ebn<\/h2>\n\n<p>Ik werk programma's bij via <strong>atomair<\/strong> Link-updates, zorg dat er Blue\/Green-versies klaarstaan en koppel roll-outs aan guardrails: als de drop-rates onverwacht stijgen, schakel ik automatisch terug naar de vorige versie. Ik scheid configuraties (maps) van code-implementaties, zodat hotfixes mogelijk zijn zonder opnieuw te hoeven bouwen. Ik definieer <strong>Veilige standaardinstellingen<\/strong> (bij twijfel PASS in plaats van DROP), laat experimentele paden time-outen en controleer de opslaglimieten voor maps. Bij kernel-upgrades controleer ik de CO-RE-compatibiliteit en de beschikbaarheid van BTF, en houd ik een fallback in de generieke modus aan. Deze werkwijze voorkomt uitval en zorgt ervoor dat wijzigingen in het netwerkpad planbaar zijn.<\/p>\n\n<h2>Veiligheidsaspecten en naleving<\/h2>\n\n<p>Ik werk in principe <strong>minimaal invasief<\/strong>: Alleen de benodigde capabilities, restrictieve sysctl-instellingen voor BPF zonder privileges en een duidelijke scheiding van verantwoordelijkheden. Mijn programma\u2019s vertrouwen op de verifieerder, vermijden onbeperkte lussen en houden de looptijden strikt beperkt. Ik log beslissingen zodanig dat auditors de oorzaken kunnen traceren zonder dat er permanent gevoelige gegevens worden vastgelegd. In multi-tenant-scenario\u2019s houd ik rekening met namespaces en resourcebudgetten voor maps en voorkom ik dat een tenant de capaciteit uitput. Zo combineer ik prestaties met veilige, <strong>controleerbaar<\/strong> Uitvoering.<\/p>\n\n<h2>Stuurprogramma's, hardware en optimalisatie<\/h2>\n\n<p>Voordat ik de prestaties beoordeel, controleer ik de versies van de stuurprogramma\u2019s, de NIC-firmware en de wachtrijtoewijzingen. Met RSS, RPS en pinning verdeel ik de datastromen over <strong>kernen<\/strong> en beperk cross-core-sprongen tot een minimum. Ik stem het aantal wachtrijen, de MTU en de offloads af op de werkelijke pakketgroottes. Voor interrupt-pacing stel ik, afhankelijk van de belasting, <a href=\"https:\/\/webhosting.de\/nl\/interrupt-coalescing-netwerk-optimalisatie-serverflux\/\">Interrupt samenvoegen<\/a> slim om jitter te dempen zonder dat dit leidt tot pieken in de latentie. Deze stappen leveren meetbare <strong>Winsten<\/strong>, nog voordat ik de code verder optimaliseer.<\/p>\n\n<h2>Monitoring, beveiliging en observability<\/h2>\n\n<p>Ik lees tellers uit Maps uit, exporteer voorbeeldgegevens en koppel deze aan systeemstatistieken zoals CPU-Idle en LLC-Miss-Rate. Beveiligingscontroles vul ik aan met <strong>Sanity<\/strong>-Controles op header-velden, minimale state en bewuste rate-limits. Voor audits zorg ik ervoor dat beslissingspaden traceerbaar zijn en documenteer ik programmaversies. Daarnaast controleer ik of de grenzen van de verifikator worden nageleefd en houd ik loops strikt onder controle. Zo zorg ik voor prestaties en <strong>Beveiliging<\/strong> in evenwicht, zonder afbreuk te doen aan de Fast-Path-kwaliteit.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/xdpath-serverraum-4721.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Classificatie en beperkingen in de praktijk<\/h2>\n\n<p>Ik gebruik XDP vooral op de <strong>Toegang<\/strong>-Pad en vul dit voor terugwegtrajecten aan met tc\/eBPF of andere mechanismen. Ik ga terughoudend om met stateful-functies en pas deze alleen toe voor zover dat zinvol is in het hot-path. Voor protocollen die latere stackfuncties vereisen, zorg ik alleen voor doorsturing en delegeer ik de diepte naar hogere lagen. Bij hardware-offload let ik op functiegelijkheid, tests en begrijpelijke foutmeldingen. Zo maak ik gericht gebruik van sterke punten, zonder op de verkeerde plaatsen <strong>Comfort<\/strong> te verliezen.<\/p>\n\n<h2>Kort samengevat<\/h2>\n\n<p>Ik leg beslissingen over pakketten zo vroeg mogelijk over aan de <strong>NIC<\/strong> en verminder daarmee de latentie, overhead en CPU-belasting drastisch. eBPF maakt XDP programmeerbaar, veilig en updatebaar, zonder de kernel te verlaten. In scenario\u2019s met hoge belasting, zoals DDoS-bescherming, load balancing en telemetrie, biedt deze aanpak constante voordelen. Door een slimme combinatie van maps, actions en tuning bereik ik hoge doorvoersnelheden bij stabiele responstijden. Wie vandaag de dag Linux-netwerken op een kosteneffici\u00ebnte manier wil beheren, heeft met XDP een duidelijk voordeel <strong>Voordelen<\/strong> in het gegevenspad.<\/p>","protected":false},"excerpt":{"rendered":"<p>XDP verbetert de netwerkprestaties door pakketten al in een vroeg stadium in de Linux-kernel te verwerken. Ideaal voor DDoS-bescherming, load balancing en lage latentie.<\/p>","protected":false},"author":1,"featured_media":20349,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[922],"tags":[],"class_list":["post-20356","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technologie"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"113","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":"1","_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"XDP","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"20349","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/nl\/wp-json\/wp\/v2\/posts\/20356","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/nl\/wp-json\/wp\/v2\/comments?post=20356"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/nl\/wp-json\/wp\/v2\/posts\/20356\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/nl\/wp-json\/wp\/v2\/media\/20349"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/nl\/wp-json\/wp\/v2\/media?parent=20356"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/nl\/wp-json\/wp\/v2\/categories?post=20356"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/nl\/wp-json\/wp\/v2\/tags?post=20356"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}