Saya menemukan bahwa alasan yang lebih dekat aktif memasuki WAKTU TUNGGU adalah untuk memastikan bahwa ACK akhir tidak hilang. Tapi bagaimana ia tahu jika ACK final hilang? Akankah semakin dekat pasif mengirim FIN dan kemudian semakin aktif tahu ACK hilang? Berikut adalah gambar dari TCP FSM.
12
Jawaban:
Iya. Mengutip dari TCP / IP Illustrated Volume 1 , di bagian Manajemen Koneksi TCP:
Ada batas waktu. Ketika berada di
LAST_ACK
, pasif dekat akan mengirim ulangFIN
ketika ada batas waktu, dengan asumsi bahwa itu hilang. Jika memang hilang, maka yang lebih dekat aktif akhirnya akan menerima transmisi ulangFIN
dan masukTIME_WAIT
. JikaFIN
tidak hilang tetapi finalACK
hilang, maka semakin dekat aktif dalamTIME_WAIT
dan menerimaFIN
lagi. Ketika ini terjadi - menerimaFIN
inTIME_WAIT
-ACK
transmisi ulang.Nilai timeout di
TIME_WAIT
adalah TIDAK digunakan untuk tujuan pengiriman ulang. Ketika ada batas waktuTIME_WAIT
, diasumsikan bahwa finalACK
telah berhasil dikirim karena lebih dekat pasif tidak mengirimkan kembaliFIN
paket. Jadi, batas waktuTIME_WAIT
hanya sejumlah waktu setelah itu kita dapat dengan aman berasumsi bahwa jika ujung yang lain tidak mengirim apa-apa, maka itu karena dia menerima finalACK
dan menutup koneksi.sumber
Karena itu tidak menerimanya dalam periode waktu habis. Saya tahu itu jawaban "duh", tetapi itulah sebabnya negara bagian dan batas waktu ini ada.
Tidak. Tidak kecuali jika paket lebih lanjut tiba untuk aliran itu, dan itu akan menghasilkan "RST" (reset) yang dikirim.
Seluruh proses adalah mesin negara yang rumit untuk mengeksekusi shutdown yang teratur meskipun ada kemungkinan kegagalan jaringan. Jaringan terputus, tautan mengalami kesalahan, tautan menjadi jenuh dan harus menjatuhkan paket, perangkat gagal, dll. Sebagai latihan, jalankan state tree untuk koneksi aktif ketika salah satu titik akhir hilang begitu saja (mis. Kegagalan daya.)
TL; DR Pohon status itu dirancang untuk menangani setiap mode kegagalan yang memungkinkan.
sumber
Tujuan TIME_WAIT adalah untuk memungkinkan jaringan untuk membedakan paket yang datang sebagai milik koneksi 'lama, yang sudah ada' dari yang baru. Sarannya adalah mengatur timer TIME_WAIT menjadi dua kali Maximum Segment Lifetime (MSL), pada sistem saya MSL adalah 1 menit, jadi koneksi bertahan dalam keadaan TIME_WAIT selama 2 menit.
Setelah jumlah waktu ini, setiap paket yang datang tidak lagi dikaitkan dengan koneksi lama.
TIME_WAIT tidak langsung menunggu untuk mengirim paket ACK; yang didorong oleh status CLOSE_WAIT dan FIN_WAIT. Ketika Anda sampai ke TIME_WAIT menyatakan soket sudah ditutup.
Referensi: http://www.tcpipguide.com/free/t_TCPConnectionTermination-3.htm https://en.wikipedia.org/wiki/Maximum_segment_lifetime http://www.lognormal.com/blog/2012/09/27/ linux-tcpip-tuning /
sumber