W przypadku symulacji katastrof sieciowych w naszym środowisku serwerowym szukamy sposobu na celowe przekroczenie limitu czasu gniazda TCP. Czy są jakieś proste sposoby na istniejące gniazda? Dodatkowym atutem byłby mały program testowy C.
Próbowaliśmy już odłożyć interfejsy sieciowe podczas odczytu bufora TCP i odczytu z odłączonych zamontowanych zasobów (samba).
Serwer testowy to Ubuntu 12.04.4.
/proc/sys/net/ipv4/tcp_keepalive_time
na bardzo małą liczbęncat -v
aby zobaczyć, co dokładniencat
robi. Zajęło mi to 2m7,291 na waniliowej instalacji Ubuntu 12.04 do limitu czasuPierwsza odpowiedź jest poprawna, ale odkryłem, jak działają te limity czasu, więc możesz je zaobserwować i przetestować (nie zapomnij zablokować portu!).
Istnieją 4 najciekawsze parametry jądra, które zajmują się limitami czasu TCP:
Teraz są 2 scenariusze:
Gniazdo jest otwierane i próbuje przesłać - wtedy (jeśli nie ma odpowiedzi z drugiej strony),
tcp_retries2
czasy prób systemu . Przy domyślnej wartości wycofania zajmuje to ponad 2 minuty i limit czasu gniazda.Gniazdo jest otwarte i bezczynne - wtedy limity podtrzymania są interesujące. Z bezczynnym gniazdem system będzie czekał
tcp_keepalive_time
kilka sekund, a następnie spróbujtcp_keepalive_probes
razy wysłać TCP KEEPALIVE w odstępachtcp_keepalive_intvl
kilku sekund. I dopiero potem wszystko zawiedzie limit czasu gniazda.źródło
netstat -o