{"id":21034,"date":"2026-08-26T18:20:23","date_gmt":"2026-08-26T16:20:23","guid":{"rendered":"https:\/\/webhosting.de\/tcp-small-queues-linux-latency-optimization-netzwerkperformance\/"},"modified":"2026-08-26T18:20:23","modified_gmt":"2026-08-26T16:20:23","slug":"tcp-sma-koer-linux-latenstoptimering-netvaerksydeevne","status":"publish","type":"post","link":"https:\/\/webhosting.de\/da\/tcp-small-queues-linux-latency-optimization-netzwerkperformance\/","title":{"rendered":"TCP Small Queues: M\u00e5lrettet reduktion af latenstid i Linux-netv\u00e6rket"},"content":{"rendered":"<p>TCP Small Queues begr\u00e6nser antallet af udest\u00e5ende bytes i Linux-sendestien pr. TCP-flow og reducerer dermed <strong>Forsinkelse<\/strong> samt bufferbloat m\u00e5lrettet ned. Jeg viser, hvordan denne mekanisme i <strong>Linux-netv\u00e6rk<\/strong> Stack viser, hvordan jeg fasts\u00e6tter fornuftige gr\u00e6nser, og hvilke interaktioner der opst\u00e5r med pacing, QDiscs og congestion control.<\/p>\n\n<h2>Centrale punkter<\/h2>\n\n<ul>\n  <li><strong>Per-flow-gr\u00e6nse<\/strong>: TSQ begr\u00e6nser antallet af udest\u00e5ende bytes pr. TCP-socket.<\/li>\n  <li><strong>Mindre bufferbloat<\/strong>: Kortere k\u00f8er reducerer RTT.<\/li>\n  <li><strong>Modtryk<\/strong>: Applikationer skriver langsommere, n\u00e5r gr\u00e6nsen tr\u00e6der i kraft.<\/li>\n  <li><strong>Retf\u00e6rdighed<\/strong>: Ingen enkelt flow optager hele k\u00f8erne.<\/li>\n  <li><strong>Adaptiv<\/strong> Styring: Gr\u00e6nsen afh\u00e6nger af hastigheden og segmentst\u00f8rrelsen.<\/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\/tcp-small-queues-4739.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>S\u00e5dan fungerer TCP Small Queues<\/h2>\n\n<p>TSQ tager over der, hvor TCP-segmenterne slutter <strong>QDisc<\/strong> og driveren. N\u00e5r jeg skriver data til en socket, kontrollerer kernen f\u00f8r hver enqueue de allerede allokerede bytes til denne str\u00f8m. N\u00e5r str\u00f8mmen n\u00e5r gr\u00e6nsen, markerer logikken socketen som begr\u00e6nset og stopper yderligere enqueue. F\u00f8rst n\u00e5r netv\u00e6rkskortet frigiver bufferen, m\u00e5 soklen sende igen, og jeg kan igen skubbe data ind i stakken. Dette stramme modtryk holder <strong>K\u00f8er<\/strong> kort og g\u00f8r reaktionstiderne mere forudsigelige.<\/p>\n\n<h2>Hvorfor lange k\u00f8er forl\u00e6nger responstiden<\/h2>\n\n<p>Opret store driver- og QDisc-k\u00f8er <strong>Bufferbloat<\/strong>, is\u00e6r med TSO\/GSO og store datam\u00e6ngder. En stor download kan fylde udgangsk\u00f8erne, mens interaktive processer som SSH, API-kald eller VoIP m\u00e5 vente i k\u00f8. Den overfyldte k\u00f8 dominerer s\u00e5 <strong>RTT<\/strong> i stedet for den egentlige link-tid. Congestion Control reagerer langsomt, fordi ACK\u2019er ankommer for sent, og tr\u00e6ffer dermed d\u00e5rligere cwnd-beslutninger. TSQ begr\u00e6nser antallet af forh\u00e5ndsbufferede bytes pr. flow, s\u00e5 sm\u00e5, tidskritiske pakker hurtigt kommer ud p\u00e5 linjen.<\/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\/tcp_small_queues_meeting_2974.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Et kig bag kulisserne: hvad kernen t\u00e6ller<\/h2>\n\n<p>Under overfladen t\u00e6ller kernen ikke \u201epakker\u201c, men bytes \u2013 mere pr\u00e6cist: de hukommelses-bytes, som soklen allerede har sat i k\u00f8en. Det afg\u00f8rende er, hvad stakken indeholder af skbuff-strukturer samt <em>truesize<\/em> har allokeret, og som endnu ikke er blevet behandlet af NIC\u2019en. TSQ kobler en <strong>Gasspj\u00e6ld \u00e5bent\/lukket<\/strong>\u2011Spor: Hvis en socket n\u00e5r kreditgr\u00e6nsen, s\u00e6tter stakken et begr\u00e6nsningsflag og kalder f\u00f8rst igen, n\u00e5r TX-operationer er afsluttet (NAPI\/IRQ) <em>write_space()<\/em> for at applikationen kan sende igen. Denne tilbagemelding er hurtigere end rent tabbaserede signaler fra overbelastningskontrol og virker f\u00f8r QDisc. Med TSO\/GSO forbliver mekanismen effektiv, fordi gr\u00e6nsen ved <em>f\u00f8r<\/em> baseret p\u00e5 det byte-budget, der ligger til grund for segmenteringen: Store super-frames slippes kun ind i QDisc, hvis der er tilstr\u00e6kkelig ledig kapacitet, hvilket begr\u00e6nser bursts.<\/p>\n\n<h2>Dynamiske gr\u00e6nser og tempo<\/h2>\n\n<p>Jeg drager fordel af TSQ, fordi gr\u00e6nsen ikke forbliver statisk, men i stedet <strong>Vurder<\/strong> og segmentst\u00f8rrelse. M\u00e5let er cirka en millisekund data i sendebanen pr. flow, uanset om der er tale om 100 Mbit, 1 Gbit eller 10 Gbit. Ved hurtige forbindelser stiger den tilladte byte-kredit, mens den falder ved langsomme forbindelser. I kombination med TCP-pacing forbliver bursts sm\u00e5, og ACK\u2019er kommer hurtigere tilbage. P\u00e5 den m\u00e5de opn\u00e5r jeg m\u00e6rkbart lavere <strong>Toppen af ventetiden<\/strong>, uden at begr\u00e6nse gennemstr\u00f8mningen un\u00f8digt.<\/p>\n\n<h2>Interaktion mellem Per-Socket og appen<\/h2>\n\n<p>TSQ virker kun, hvis applikationen ogs\u00e5 registrerer modtrykket. Derfor tager jeg h\u00f8jde for indstillinger som <strong>SO_SNDBUF<\/strong>, <strong>TCP_NOTSENT_LOWAT<\/strong> og autocorking. Et for stort sendebuffervindue kan p\u00e5 kort sigt skubbe mange bytes ind i stakken; TSQ bremser ganske vist, men appen bem\u00e6rker det f\u00f8rst, n\u00e5r <em>send()<\/em> blokeret eller returnerer EAGAIN. Med <strong>TCP_NOTSENT_LOWAT<\/strong> tr\u00e6kker jeg den \u201eikke-afsendte\u201c del tilbage i userland og supplerer dermed TSQ p\u00e5 kernelsiden. Autocorking (eller eksplicit <em>TCP_CORK<\/em>\/MSG_MORE) hj\u00e6lper med at samle sm\u00e5 skrivninger uden at for\u00e5rsage spidsbelastninger i latenstiden. Pacing-gr\u00e6nser pr. socket (f.eks. via <em>SO_MAX_PACING_RATE<\/em>) passer godt sammen med TSQ: Frekvensen udj\u00e6vner tidsm\u00e6ssigt, mens bytegr\u00e6nsen begr\u00e6nser rumligt. Vigtigt: <strong>TCP_NODELAY<\/strong> Deaktiverer Nagle og kan \u00f8ge interaktiviteten, men uden TSQ stiger risikoen for burst; med TSQ har jeg begge dele under kontrol.<\/p>\n\n<h2>Praktisk vejledning: relevante TSQ-v\u00e6rdier<\/h2>\n\n<p>Jeg fastl\u00e6gger de overordnede rammer med <strong>net.ipv4.tcp_limit_output_bytes<\/strong> (Sysctl). De s\u00e6dvanlige standardv\u00e6rdier ligger p\u00e5 omkring 128\u2013262 KB pr. flow. Til mange web- og API-arbejdsbelastninger v\u00e6lger jeg lavere v\u00e6rdier, s\u00e5 de interaktive svar forbliver hurtige. Til sikkerhedskopiering eller replikering h\u00e6ver jeg gr\u00e6nsen moderat, s\u00e5 l\u00e6nge RTT forbliver stabil. Hvis du vil dykke dybere ned i k\u00f8-siden, finder du grundl\u00e6ggende oplysninger om <a href=\"https:\/\/webhosting.de\/da\/serverpakkekoer-netvaerksstabilitet-hostingoptimering-latenstid\/\">Pakkek\u00f8er p\u00e5 serveren<\/a>, som hj\u00e6lper med klassificeringen.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th><strong>Scenarie<\/strong><\/th>\n      <th><strong>Linkfrekvens<\/strong><\/th>\n      <th><strong>Vejledende v\u00e6rdi for tcp_limit_output_bytes<\/strong><\/th>\n      <th><strong>M\u00e5l<\/strong><\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>API\/HTTP meget interaktivt<\/td>\n      <td>100 Mbit \u2013 1 Gbit<\/td>\n      <td>64\u2013128 KB<\/td>\n      <td>lav <strong>RTT<\/strong>, korte pigge<\/td>\n    <\/tr>\n    <tr>\n      <td>Blandet belastning: Web + downloads<\/td>\n      <td>1\u201310 Gbit<\/td>\n      <td>128\u2013256 KB<\/td>\n      <td>Balance fra <strong>Gennemstr\u00f8mning<\/strong> og latenstid<\/td>\n    <\/tr>\n    <tr>\n      <td>Replikering\/sikkerhedskopiering<\/td>\n      <td>1\u201310 Gbit<\/td>\n      <td>256\u2013512 KB<\/td>\n      <td>konstant bulk-flow, acceptabel <strong>Forsinkelse<\/strong><\/td>\n    <\/tr>\n    <tr>\n      <td>WAN med h\u00f8j RTT<\/td>\n      <td>10\u2013100 Mbit<\/td>\n      <td>96\u2013192 KB<\/td>\n      <td>mindre bursts, mere retf\u00e6rdige <strong>Stikord<\/strong><\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\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\/tcp-small-queues-linux-latency-2748.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>QDisc og overbelastningskontrol i samspil<\/h2>\n\n<p>TSQ arbejder ved indgangen til <strong>QDisc<\/strong>, mens algoritmer som fq_codel styrer overbelastningen p\u00e5 forbindelsen. Sammen reducerer de k\u00f8erne og sikrer en retf\u00e6rdig fordeling. Med <a href=\"https:\/\/webhosting.de\/da\/tcp-bbr-overbelastningskontrol-webserveroptimering-bandbredde\/\">TCP BBR<\/a> f\u00e5r jeg yderligere fordele, fordi mere realistiske RTT-m\u00e5linger f\u00f8rer til bedre pacing og cwnd-styring. CUBIC reagerer ogs\u00e5 mere j\u00e6vnt, n\u00e5r jeg fjerner for lange k\u00f8tider. P\u00e5 den m\u00e5de stiger gennemstr\u00f8mningen organisk, mens <strong>Svartid<\/strong> forbliver under kontrol.<\/p>\n\n<h2>Virtualisering og cloud-stacks<\/h2>\n\n<p>I virtuelle maskiner (VM\u2019er) l\u00e6gger flere bufferniveauer sig sammen: g\u00e6st-QDisc, virtio\/vhost-k\u00f8er, v\u00e6rt-QDisc og det fysiske netv\u00e6rkskort. Jeg holder TSQ aktivt i g\u00e6sten og v\u00e6lger der en konservativ gr\u00e6nse, s\u00e5 der ikke kommer store bursts ind i v\u00e6rten. P\u00e5 hypervisoren sikrer jeg korte latenstidsk\u00e6der ved hj\u00e6lp af fair QDiscs, moderate TX-ringe og korrekt IRQ-pinning. SR-IOV kan reducere latenstiden, men flytter ansvaret over p\u00e5 g\u00e6sterne: Uden TSQ i g\u00e6sten risikerer man lange VF-k\u00f8er. I containere griber TSQ pr. <em>NetNS<\/em> som s\u00e6dvanlig; ved hj\u00e6lp af cgroup-pacing og CPU-begr\u00e6nsninger forhindrer jeg, at en st\u00f8jende nabo indirekte \u00f8ger latenstiden. Det er ogs\u00e5 vigtigt at holde \u00f8je med coalescing og offloads i virtio-stien: Overdreven samling forl\u00e6nger ACK'er, mens for lidt samling mindsker effektiviteten \u2013 jeg justerer i forhold til latenstidsm\u00e5let, ikke dogmatisk.<\/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\/tcp-small-queues-latenz-8472.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Wi-Fi og indlejrede systemer: H\u00e5ndtering af s\u00e6rlige tilf\u00e6lde<\/h2>\n\n<p>P\u00e5 WLAN-forbindelser er det <strong>Sammenl\u00e6gning<\/strong> i MAC-laget. Hvis jeg tillader for f\u00e5 bytes i sendebanen, kan driveren samle f\u00e6rre rammer, hvilket mindsker effektiviteten. I s\u00e5danne ops\u00e6tninger \u00f8ger jeg gr\u00e6nsen forsigtigt og kontrollerer aggregeringsgraden. OpenWrt- og indlejrede platforme drager desuden fordel af slanke stier i drivere og f\u00e6rre atomare operationer. Jeg tester hver tilpasning under reel tr\u00e5dl\u00f8s belastning, f\u00f8r jeg <strong>Profil<\/strong> ruller bredt ud.<\/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\/tcp_latenz_reduzieren_2837.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Overv\u00e5gning og m\u00e5linger, der virkelig t\u00e6ller<\/h2>\n\n<p>Jeg observerer <strong>RTT<\/strong>\u2011Fordeling pr. socket, og jeg kigger p\u00e5 afvigelser, ikke kun p\u00e5 gennemsnitsv\u00e6rdier. Med ss, tc og eksport\u00f8rer udl\u00e6ser jeg k\u00f8-l\u00e6ngder, genudsendelser samt pacing_rate. eBPF-programmer leverer begivenheder til mig, n\u00e5r sockets bliver begr\u00e6nset og frigives igen. Time-to-First-Byte og 95.\/99. percentil viser, om TSQ virker efter hensigten. Uden m\u00e5lev\u00e6rdier forbliver enhver <strong>Optimering<\/strong> en blindflyvning.<\/p>\n\n<h2>A\/B-tests og belastningstests med statistisk signifikans<\/h2>\n\n<p>Jeg m\u00e5ler TSQ-effekter p\u00e5 en reproducerbar m\u00e5de: F\u00f8rst en baseline uden \u00e6ndringer, derefter isolerede parametersweeps (f.eks. 64, 96, 128, 192 KB). Ved blandede arbejdsbelastninger k\u00f8rer jeg parallelle str\u00f8mme (bulk + mange korte anmodninger) og sammenligner 95.\/99. percentilen for latenstider, ikke kun medianen. Selv hvis jeg afbryder testk\u00f8rslerne tydeligt (opvarmning, m\u00e5levindue, nedk\u00f8ling), forbliver artefakterne synlige. Jeg l\u00e6gger v\u00e6gt p\u00e5 konstante faktorer: samme payload-m\u00f8nstre, identisk rute\/MTU, identiske server- og klient-CPU-frekvenser. P\u00e5 WAN-forbindelser simulerer jeg forsinkelse\/jitter\/tab med <em>tc netem<\/em>, for at kontrollere, om TSQ-gr\u00e6nserne ikke s\u00e6tter et loft for tidligt ved h\u00f8j BDP. F\u00f8rst n\u00e5r percentilerne bliver smallere, og antallet af retransmissioner og tab forbliver stabilt, overf\u00f8rer jeg v\u00e6rdierne til produktionen.<\/p>\n\n<h2>Hardware-optimering og driveroplysninger<\/h2>\n\n<p>Jeg tjekker TSO\/GSO-indstillingerne, NIC\u2019ens ringbuffer og IRQ-styringen, s\u00e5 <strong>TSQ<\/strong> fungerer optimalt. For store TX-ringe forl\u00e6nger k\u00f8en ved enheden; for sm\u00e5 mindsker udnyttelsen. Grov samling af interrupts forsinker ACK\u2019er, mens fin samling \u00f8ger CPU-belastningen. Jeg tilpasser gennemgangen til praksis og henviser som udgangspunkt til <a href=\"https:\/\/webhosting.de\/da\/interrupt-coalescing-netvaerksoptimering-serverflux\/\">Sammenl\u00e6gning af afbrydelser<\/a>. M\u00e5let er fortsat en p\u00e5lidelig <strong>Forsinkelse<\/strong> ved en holdbar gennemstr\u00f8mning.<\/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\/tcp_small_queues_9271.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>NUMA, RSS og CPU-affinitet<\/h2>\n\n<p>Korte k\u00f8er nytter ikke meget, hvis pakker hele tiden bev\u00e6ger sig p\u00e5 tv\u00e6rs af NUMA-gr\u00e6nser. Jeg knytter RX\/TX-k\u00f8er via RSS\/irqbalance til kerner i det samme NUMA-dom\u00e6ne, hvor appen ogs\u00e5 k\u00f8rer. Med XPS\/RPS styrer jeg, hvilke CPU'er der overtager TX-arbejdet, og undg\u00e5r dermed cross-socket-hopper. F\u00e6rre cache-misses og mindre lock-contention hj\u00e6lper indirekte TSQ: Afsluttede opgaver returneres hurtigere, soklen \u201eaflastes\u201c tidligere, og der opst\u00e5r ingen latenstops. Ved meget mange flows pr. v\u00e6rt planl\u00e6gger jeg tilstr\u00e6kkelige k\u00f8er og undg\u00e5r, at flere st\u00f8jende flows kolliderer p\u00e5 samme TX-ring.<\/p>\n\n<h2>Trin for trin: Kontrol af, om TSQ er aktivt<\/h2>\n\n<p>Jeg begynder med et kig p\u00e5 <strong>Sysctl<\/strong>: sysctl net.ipv4.tcp_limit_output_bytes viser den aktuelle gr\u00e6nse. Derefter tjekker jeg ss -tin for de enkelte sockets, holder \u00f8je med send-q og rtt og sammenligner belastningsfaser med og uden justering af gr\u00e6nsen. Med iperf3 genererer jeg baggrundsbelastning og m\u00e5ler parallelt API-svarstider for at synligg\u00f8re prioriteter. tc -s qdisc giver mig antallet af pakker og tabte pakker for udgangsdisciplinen. Hvis 95.\/99. percentilen forbliver t\u00e6t p\u00e5 hinanden, og <strong>CPU<\/strong>\u2011Belastning i rammen, v\u00e6lg den passende gr\u00e6nsev\u00e6rdi.<\/p>\n\n<h2>Almindelige fejl og anti-m\u00f8nstre<\/h2>\n\n<ul>\n  <li>\u201eSt\u00f8rre buffer = h\u00f8jere ydeevne\u201c: Det g\u00e6lder for gennemstr\u00f8mningstests uden et m\u00e5l for latenstid, men holder ikke for interaktive tjenester. TSQ erstatter overdimensionerede k\u00f8er med en behovsbaseret kredit pr. flow.<\/li>\n  <li>\u201eTSQ koster gennemstr\u00f8mning\u201c: N\u00e5r det er indstillet korrekt, begr\u00e6nser TSQ bursts, ikke den gennemsnitlige hastighed. Ved bulk-workloads s\u00e6tter jeg gr\u00e6nsen moderat h\u00f8jt og m\u00e5ler percentilerne i stedet for kun spidsv\u00e6rdien i Mbit\/s.<\/li>\n  <li>\u201ePacing alene er nok\u201c: Tidsudj\u00e6vning er vigtig, men uden byte-begr\u00e6nsning glider store GSO-rammer alligevel ind p\u00e5 QDisc\u2019en. TSQ og pacing supplerer hinanden.<\/li>\n  <li>\u201e\u00c9n v\u00e6rdi for alle\u201c: Workloads, links og NIC'er er forskellige. Jeg arbejder med omr\u00e5dev\u00e6rdier og validerer for hvert milj\u00f8.<\/li>\n  <li>\u201eKun TCP ber\u00f8rt\u201c: Fokus er p\u00e5 TCP, men der findes andre justeringsmuligheder i systemet (f.eks. for UDP-belastning). Jeg forhindrer, at parallelle protokoller ukontrolleret tilstopper de samme k\u00f8er.<\/li>\n<\/ul>\n\n<h2>Konklusion: M\u00e5lrettet kontrol med latenstiden<\/h2>\n\n<p>TSQ flytter kontrollen af driverk\u00f8er over til <strong>Sokkel<\/strong> og reducerer dermed overbelastning direkte ved kilden. Jeg begr\u00e6nser antallet af forh\u00e5ndsbufferede bytes pr. flow og sikrer dermed hurtige ACK\u2019er, lavere RTT og retf\u00e6rdigt fordelte k\u00f8er. I kombination med fq_codel og moderne overbelastningskontrol forbliver reaktionstiden p\u00e5lidelig, selv under belastning. S\u00e6rlige tilf\u00e6lde inden for WLAN og indlejrede systemer h\u00e5ndterer jeg med tilpassede gr\u00e6nser og tests under realistiske forhold. Den, der overv\u00e5ger n\u00f8gletallene og justerer gr\u00e6nserne trinvist, holder <strong>Forsinkelse<\/strong> konstant lavt, uden at miste un\u00f8dvendig kapacitet.<\/p>","protected":false},"excerpt":{"rendered":"<p>TCP Small Queues i Linux-kernen begr\u00e6nser antallet af TCP-pakker, der bufferes pr. flow, og er et effektivt v\u00e6rkt\u00f8j til optimering af latenstiden. Find ud af, hvordan TSQ reducerer bufferbloat og forbedrer serverens svartider.<\/p>","protected":false},"author":1,"featured_media":21027,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[676],"tags":[],"class_list":["post-21034","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-server_vm"],"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":"116","_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":"TCP Small","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":"21027","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/posts\/21034","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/comments?post=21034"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/posts\/21034\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/media\/21027"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/media?parent=21034"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/categories?post=21034"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/tags?post=21034"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}