Für die Simulation von Netzwerkkatastrophen in unserer Serverumgebung suchen wir nach einer Möglichkeit, absichtlich eine Zeitüberschreitung für einen TCP-Socket herbeizuführen. Gibt es einfache Möglichkeiten für vorhandene Steckdosen? Auch ein kleines C-Testfallprogramm wäre von Vorteil.
Wir haben bereits versucht, Netzwerkschnittstellen beim Lesen des TCP-Puffers und beim Lesen von nicht verbundenen gemounteten Ressourcen (Samba) zu deaktivieren.
Unser Testserver ist Ubuntu 12.04.4.
/proc/sys/net/ipv4/tcp_keepalive_time
auf eine sehr kleine Nummerncat -v
zu sehen, was genau passiertncat
. Es dauerte 2m7.291s auf einem Vanille Ubuntu 12.04 zu Timeout installierenDie erste Antwort ist richtig, aber ich habe herausgefunden, wie diese Timeouts funktionieren, sodass Sie sie beobachten und testen können (nicht vergessen, den Port zu blockieren!).
Es gibt vier interessante Kernel-Parameter, die sich mit TCP-Timeouts befassen:
Jetzt gibt es 2 Szenarien:
Der Socket ist geöffnet und versucht zu senden - dann (wenn es keine Antwort von der anderen Seite gibt), versucht das System es noch
tcp_retries2
einmal. Mit dem Standardwert von retires dauert es etwas mehr als 2 Minuten und der Socket läuft ab.Die Steckdose ist geöffnet und im Leerlauf - dann sind Keepalive-Limits interessant. Bei einem Idle-Socket-System wird
tcp_keepalive_time
sekundenlang gewartet , und danach wirdtcp_keepalive_probes
mal versucht, intcp_keepalive_intvl
Sekundenintervallen ein TCP-KEEPALIVE zu senden . Und erst danach fällt die Steckdose aus.quelle
netstat -o