Kami memiliki aplikasi server yang menghadapi masalah kelelahan TCP di sekitar 4000 koneksi. Ini akan terjadi setiap 3 atau 4 minggu (kurang-lebih). Vendor, yang telah membuat aplikasi server ini memberi tahu kami setelah memeriksa output netstat -b bahwa beberapa koneksi tetap terbuka bahkan jika klien telah jatuh.
Saya telah diberi tugas untuk menyelidiki mengapa aplikasi klien tertentu tidak menutup koneksi TCP dengan benar. Saya berkeyakinan bahwa jika komputer klien dimatikan, bahwa ia tidak dapat MUNGKIN melaporkan dari server bahwa koneksi TCP masih dibuat dengan klien itu. Sayangnya, saya tidak dapat menemukan informasi apa pun untuk memvalidasi pandangan saya. Saya tidak ingin membuang waktu untuk menyelidiki masalah potensial yang saya pikir tidak akan menjadi masalah.
tldr;
Bisakah server melaporkan koneksi yang dibuat ke komputer yang dimatikan?
sumber
Ya itu mungkin. Seperti yang dinyatakan David dan Paul dalam jawaban mereka, tidak ada mekanisme dalam TCP (selain TCP keep-alives, yang bersifat opsional) untuk mendeteksi koneksi yang setengah terbuka. Terserah vendor aplikasi untuk menentukan keadaan koneksi dan untuk mengambil tindakan yang sesuai.
Sejauh menyangkut TCP, tidak ada deteksi atau perbedaan antara koneksi setengah terbuka dan koneksi lama.
Anda harus mulai memecahkan masalah ini dari lapisan 1 (fisik) dari model OSI hingga lapisan 7 (aplikasi) untuk mencari tahu di mana masalahnya terjadi. Saran saya adalah menginstal dan menjalankan program penangkapan paket pada salah satu klien yang terpengaruh sampai masalah terjadi, dan kemudian menganalisis penangkapan untuk mencoba dan menentukan apa yang menyebabkan klien tidak menutup koneksi.
sumber
Ketika workstation ingin menutup koneksi dengan server, ia mengirimkan TCP FIN. Jika klien tidak berperilaku baik dan tidak menutup koneksinya, mereka sebenarnya bisa tetap terhubung di server. Anda dapat mengatur batas waktu untuk koneksi terbuka di server untuk membersihkan ini - meskipun akan lebih baik untuk menemukan penyebabnya. Port apa yang merupakan koneksi terbuka yang masuk? Setelah Anda tahu layanan apa yang sedang diakses, Anda mungkin dapat mengidentifikasi aplikasi klien yang mengenai server.
sumber