Untuk simulasi bencana jaringan dari lingkungan server kami, kami sedang mencari cara untuk sengaja mematikan soket TCP. Apakah ada cara sederhana untuk soket yang ada? Juga, program kasus uji C kecil akan menjadi nilai tambah.
Kami telah mencoba meletakkan antarmuka jaringan selama membaca buffer TCP, dan membaca dari sumber yang terpasang terputus (samba).
Server uji keluar adalah Ubuntu 12.04.4.
/proc/sys/net/ipv4/tcp_keepalive_time
menjadi angka yang sangat kecilncat -v
untuk melihat apa yang sebenarnyancat
dilakukan. Butuh 2m7.291 detik di vanilla Ubuntu 12.04 instal ke timeoutJawaban pertama benar, tetapi saya telah menemukan cara kerja timeout ini, sehingga Anda dapat mengamati dan mengujinya (jangan lupa untuk memblokir port!).
Ada 4 parameter kernel paling menarik yang berhubungan dengan timeout TCP:
Sekarang ada 2 skenario:
Soket dibuka dan mencoba mengirimkan - lalu (jika tidak ada respons dari sisi lain), sistem mencoba ulang
tcp_retries2
kali. Dengan nilai default pensiunan, dibutuhkan sekitar 2 menit dan waktu soket habis.Soket dibuka dan diam - kemudian batas keepalive menarik. Dengan sistem soket siaga akan menunggu beberapa
tcp_keepalive_time
detik, dan setelah itu cobatcp_keepalive_probes
waktu untuk mengirim TCP KEEPALIVE dalam intervaltcp_keepalive_intvl
detik. Dan hanya setelah itu semua gagal soket mati.sumber
netstat -o