Apa tujuan WAKTU TUNGGU dalam koneksi TCP runtuh?

12

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.

TCP FSM

czhao
sumber
TCP
Craig Constantine
1
Posting blog ini memiliki jawaban yang bagus: vincent.bernat.im/en/blog/…
Chimpanzee

Jawaban:

5

Akankah semakin dekat pasif mengirim FIN dan kemudian semakin aktif tahu ACK hilang?

Iya. Mengutip dari TCP / IP Illustrated Volume 1 , di bagian Manajemen Koneksi TCP:

  1. Untuk menyelesaikan penutupan, segmen terakhir berisi ACK untuk FIN terakhir. Perhatikan bahwa jika FIN hilang, ia dikirim ulang sampai ACK untuk itu diterima.

Ada batas waktu. Ketika berada di LAST_ACK, pasif dekat akan mengirim ulang FINketika ada batas waktu, dengan asumsi bahwa itu hilang. Jika memang hilang, maka yang lebih dekat aktif akhirnya akan menerima transmisi ulang FINdan masuk TIME_WAIT. Jika FINtidak hilang tetapi final ACKhilang, maka semakin dekat aktif dalam TIME_WAITdan menerima FINlagi. Ketika ini terjadi - menerima FINin TIME_WAIT- ACKtransmisi ulang.

Nilai timeout di TIME_WAITadalah TIDAK digunakan untuk tujuan pengiriman ulang. Ketika ada batas waktu TIME_WAIT, diasumsikan bahwa final ACKtelah berhasil dikirim karena lebih dekat pasif tidak mengirimkan kembali FINpaket. Jadi, batas waktu TIME_WAIThanya sejumlah waktu setelah itu kita dapat dengan aman berasumsi bahwa jika ujung yang lain tidak mengirim apa-apa, maka itu karena dia menerima final ACKdan menutup koneksi.

Filipe Gonçalves
sumber
1

Tapi bagaimana ia tahu jika ACK final hilang?

Karena itu tidak menerimanya dalam periode waktu habis. Saya tahu itu jawaban "duh", tetapi itulah sebabnya negara bagian dan batas waktu ini ada.

Akankah pasif lebih dekat mengirim ulang FIN

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.

Ricky Beam
sumber
Terima kasih, tetapi saya masih bingung tentang bagian pertama. Maksud saya, bagaimana orang yang lebih dekat mengetahui bahwa ACK tidak diterima oleh orang yang lebih dekat? Ketika pasif lebih dekat menerima ACK, itu hanya meruntuhkan sisi koneksi, dan jika tidak menerima ACK, ia hanya tinggal di ACK TERAKHIR, jadi bagaimana yang lebih dekat aktif tahu jika ACK diterima?
czhao
karena ada timer yang terpasang di setiap negara bagian.
Ricky Beam
Maaf saya tidak mengerti. Bagaimana pengatur waktu ini memberi tahu yang lebih dekat aktif bahwa yang lebih dekat pasif tidak menerima ACK akhir? yaitu bagaimana yang lebih dekat aktif tahu jika harus mengirim ulang ACK akhir?
czhao
0

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 /

Neil Katin
sumber