Onafhankelijke vergelijking · geen betaalde rankings
Home / Blog / Technisch / TCP keepalive: behoud nuttige verbindingen zonder ze te laten sterven

TCP keepalive: behoud nuttige verbindingen zonder ze te laten sterven

Lange verbindingen vallen stil wanneer een NAT of load balancer inactieve stromen afsnijdt. De TCP keepalive maakt het mogelijk om ze te detecteren, op voorwaarde dat je ze niet verwart met de hartslag van de applicatie.

Redactie Hébergeurs.eu 4 min

Uw PostgreSQL-verbindingspool retourneert plotseling "server heeft de verbinding onverwacht gesloten". Uw WebSocket-client maakt elke tien minuten opnieuw verbinding. Uw gRPC API werkt lokaal, maar in productie achter een load balancer worden lange streams afgesloten zonder applicatielogboeken.

De boosdoener is niet altijd een codefout. Vaak maakte een tussenliggend apparaat een inactieve TCP-sessie kapot, en niemand merkte het – tot de volgende schrijfbeurt.

Time-out bij inactiviteit: wie onderbreekt het, en wanneer

LaagTypische time-out voor inactiviteitGevolg
NAT-box / 4G30 sec – 5 min“Zombie”-verbinding aan de appzijde
Load balancer-cloudJaren 60 – 3500Stille uitschakeling halverwege verzoek
Stateful firewallVarieertDrop zonder eigen RST
DB-serveruurMinder vaak voorkomend bij wanbetaling

Zonder verkeer verdwijnt de sessie uit de statustabel van de tussenpersoon. Je proces denkt nog steeds dat het verband houdt.

Keepalive is er om vroegtijdig te detecteren dat het pad dood is – niet om een ​​architectuur te vervangen die nuttig verkeer onderhoudt.

TCP keepalive op kernelniveau

Linux verzendt lege TCP-tests na een periode van inactiviteit (tcp_keepalive_time, standaard ~7200 s - vaak te lang voor internet).

Handige instellingen:


sysctl -w net.ipv4.tcp_keepalive_time=600

sysctl -w net.ipv4.tcp_keepalive_intvl=30

sysctl -w net.ipv4.tcp_keepalive_probes=5

Schakel SO_KEEPALIVE in op kritieke server-sockets (PostgreSQL tcp_keepalives_*, Redis, proxy's).

Beperking: keepalive passeert niet altijd HTTP-proxy's die TCP beëindigen. Stel achter nginx ook proxy_read_timeout en proxy_send_timeout in.

Applicatiehartslag: wanneer TCP niet genoeg is

Voor WebSocket-, SSE- of DB-verbindingen via pooler:

  • WebSocket: RFC 6455 ping/pong of periodiek JSON-bericht (< NAT-interval).
  • ORM Pools: pool_pre_ping (SQLAlchemy), queryvalidatie bij het afrekenen.
  • Berichtenwachtrijen: AMQP-hartslag, reguliere consumentenbevestiging.

Kalibreer het interval onder de kortste time-out in de keten (NAT < LB < app).

Load balancer en cloudhost

Beheerde aanbiedingen hebben vaste time-outs:

  • AWS ALB inactief: tot 4000 s configureerbaar.
  • nginx standaard: 60 s op proxy.
  • Cloudflare: 100 s op klassieke HTTP-verbindingen.

Lees het document voor uw laag en stel vervolgens keepalive + hartslag dienovereenkomstig in. Open een hostondersteuningsticket als de standaardtime-out niet compatibel is met uw lange stromen.

De bovenkant: een “open” verbinding is mogelijk al dood

De uiteindelijke robuustheid blijft in uw code voor opnieuw proberen en opnieuw verbinden.

Beslis en ga vooruit zonder blinde vlek

  1. Maak de time-outs van NAT, LB, proxy en DB in een diagram.
  2. SO_KEEPALIVE inschakelen + aangepaste sysctl-instellingen op servers.
  3. Voeg applicatiehartslag toe voor WebSocket en long-live-pools.
  4. Belastingstest met opzettelijke inactieve verbindingen.

Vergelijk hosts en hun netwerklimieten in onze overzicht.

Veelgestelde vragen

Wat is het verschil tussen TCP keepalive en applicatiehartslag?

Keepalive = kernelsondes om een ​​dode peer te detecteren. Heartbeat = zakelijke boodschap die ook de latentie kan meten of een sessie kan vernieuwen.

Waarom vallen mijn DB-verbindingen na 5 of 15 minuten weg?

NAT, firewall of load balancer sluit inactieve sessies; de client denkt dat de verbinding open is.

Welke Linux-instellingen moet ik aanpassen?

tcp_keepalive_time, tcp_keepalive_intvl, tcp_keepalive_probes — lagere tijd bij korte tussentijdse time-outs.

Verbruikt keepalive veel bandbreedte?

Nee – een paar bytes per probe; vermijd een te agressief interval op duizenden verbindingen.


Een nuttige verbinding is niet een verbinding die open blijft in een tabel; het is een verbinding die stille NAT's overleeft tussen twee daadwerkelijke verzoeken.

Vergelijk Europese providers

Filter op compliance, locatie en gebruikssituatie — open daarna de fiches om het echte bereik te controleren.

Blader door het overzicht
Blog

Gerelateerde lectuur

Alle artikelen →