/etc/init.d/networking restart
Biarkan saya uraikan. Transmission Control Protocol (TCP) dirancang untuk menjadi protokol transmisi data dua arah, terurut, dan andal antara dua titik akhir (program). Dalam konteks ini, istilah reliable artinya akan mentransmisikan kembali paket jika hilang di tengah. TCP menjamin keandalan dengan mengirimkan kembali paket Acknowledgement (ACK) untuk satu atau serangkaian paket yang diterima dari rekan.
Ini berlaku untuk sinyal kontrol seperti permintaan / respons penghentian. RFC 793 mendefinisikan status TIME-WAIT sebagai:
TIME-WAIT - mewakili waktu tunggu yang cukup untuk memastikan TCP jarak jauh menerima pemberitahuan permintaan penghentian koneksi.
Lihat diagram keadaan TCP berikut:
TCP adalah protokol komunikasi dua arah, jadi ketika koneksi dibuat, tidak ada perbedaan antara klien dan server. Juga, salah satu dapat memanggil berhenti, dan kedua rekan perlu menyetujui untuk menutup untuk sepenuhnya menutup koneksi TCP yang ada.
Mari kita panggil yang pertama untuk memanggil berhenti sebagai yang lebih dekat aktif, dan rekan yang lain lebih dekat pasif. Ketika semakin dekat aktif mengirim FIN, negara pergi ke FIN-WAIT-1. Kemudian ia menerima ACK untuk FIN yang dikirim dan negara bagian pergi ke FIN-WAIT-2. Setelah menerima FIN juga dari pasif dekat, semakin dekat aktif mengirimkan ACK ke FIN dan negara pergi ke WAKTU-TUNGGU. Jika pasif dekat tidak menerima ACK ke FIN kedua, itu akan mentransmisikan kembali paket FIN.
RFC 793 menetapkan TIME-OUT menjadi dua kali Seumur Hidup Maksimum, atau 2MSL. Karena MSL, waktu maksimum sebuah paket dapat berkeliaran di Internet, diatur ke 2 menit, 2MSL adalah 4 menit. Karena tidak ada ACK ke ACK, semakin dekat aktif tidak dapat melakukan apa pun kecuali menunggu 4 menit jika mematuhi protokol TCP / IP dengan benar, kalau-kalau pengirim pasif belum menerima ACK ke FIN (secara teoritis) .
Pada kenyataannya, paket yang hilang mungkin langka, dan sangat langka jika semuanya terjadi di dalam LAN atau dalam satu mesin.
Untuk menjawab pertanyaan dengan kata demi kata, Bagaimana cara menutup paksa soket di TIME_WAIT ?, saya masih akan tetap menggunakan jawaban asli saya:
/etc/init.d/networking restart
Secara praktis, saya akan memprogramnya sehingga mengabaikan status TIME-WAIT menggunakan opsi SO_REUSEADDR seperti yang disebutkan WMR. Apa sebenarnya yang dilakukan SO_REUSEADDR?
Opsi soket ini memberi tahu kernel bahwa meskipun port ini sibuk (dalam
status TIME_WAIT), silakan melanjutkan dan menggunakannya kembali. Jika sibuk, tetapi dengan keadaan lain, Anda masih akan mendapatkan alamat yang sudah dalam kesalahan penggunaan. Ini berguna jika server Anda telah dimatikan, dan kemudian restart segera saat soket masih aktif di port-nya. Anda harus menyadari bahwa jika ada data tak terduga yang masuk, itu mungkin membingungkan server Anda, tetapi sementara ini mungkin, itu tidak mungkin.
TIME_WAIT
di server" , lewati saja tiga jawaban pertama yang menghindari pertanyaan alih-alih menjawabnya.