Apa yang dimaksud dengan LAST_ACK, sebagai nilai status di netstat?

15

Jika server Windows memiliki beberapa ribu port terbuka dalam LAST_ACKkeadaan (seperti yang ditunjukkan oleh netstat), apa artinya ini? Apakah karena satu titik akhir sedang menunggu yang lain untuk merespons?

Nick Bolton
sumber

Jawaban:

10

Status last_ack (jika saya ingat stack TCP saya dengan benar) adalah status ketika Anda telah menerima pesan FIN Anda untuk menutup koneksi dari tetangga Anda, tetapi Anda masih perlu menyiram dan mematikan koneksi Anda. Anda mengirim FIN final sendiri dan menunggu ACK.

Biasanya tergantung pada last_ack berarti aplikasi Anda tetap membuka soket bahkan ketika ujung lainnya selesai mengirim data. Ini bisa terjadi karena berbagai alasan. Mungkin ada firewall atau penyeimbang beban lainnya yang kehilangan ACK terakhir dari klien, dan membuat Anda terjebak dalam status last_ack. Jika koneksi tidak berakhir setelah beberapa menit (10 atau lebih), Anda mungkin memiliki bug.

Lihat diagram keadaan di http://tangentsoft.net/wskfaq/articles/debugging-tcp.html

pehrs
sumber
4
Tidak benar. Anda menggambarkan CLOSE_WAIT.
user207421
4

LAST_ACK adalah status terakhir tepat sebelum menutup koneksi TCP.

Imo
sumber
1
Terima kasih, apa yang dapat menyebabkan port hang pada kondisi ini?
Nick Bolton
Apakah ini server web IIS (atau layanan lain) yang Anda lihat ini, atau, aplikasi Anda sendiri?
Imo
Aplikasi mengimplementasikan klien XML-RPC "Cook Computing" (dari Asp.Net, jalankan melalui IIS), dan sedang berbicara dengan server Java XML-RPC.
Nick Bolton
1
Ini adalah tahap terakhir dari percakapan TCP dengan klien. Perangkat lunak Anda terlihat menutup () sesi TCP dan mengirim LAST_ACK ke klien. Klien kemudian harus mengirim kembali pemberitahuan bahwa LAST_ACK diterima. Saya setuju dengan pehrs di klien itu (mungkin firewall) mungkin tidak mengakuinya atau paket mungkin telah hilang ... ini adalah dua kasus yang paling mungkin.
Imo
1
Itu tidak 'mengirim LAST_ACK ke klien'. Ia mengirimkan FIN dan saat ini sedang menunggu ACK, setelah menerima FIN dan mengirim ACK. Ini adalah kondisi terakhir setelah menutup koneksi.
user207421
2

LAST_ACK berarti tujuan Anda telah menerima FIN dari rekan, mengirim ACK, mengirim FIN, dan sedang menunggu ACK akhir dari rekan. Pada titik ini tidak ada lagi yang dapat dilakukan aplikasi: soket ditutup. Aplikasi bahkan mungkin sudah keluar. Dari sini, terserah TCP untuk mengirim ulang FIN sampai mendapatkan ACK akhir, atau waktu habis melakukannya. Tidak banyak yang dapat Anda lakukan sebagai admin kecuali menyelidiki jaringannya.

pengguna207421
sumber
0

Saya percaya bahwa @ lmo benar dalam mengatakan bahwa ini "keadaan terakhir tepat sebelum menutup koneksi TCP," tetapi selain itu, berdasarkan pembacaan saya pada halaman wikipedia, perlu dicatat bahwa ini bukan bagian dari " Mekanisme Tutup Aktif "yang (dalam pemahaman saya) adalah akhir dari sebagian besar koneksi yang berperilaku baik, tetapi lebih merupakan bagian dari urutan" Tutup Pasif ", yang mungkin terkait dengan Terjadi Hal Buruk.

(FWIW, saya bahasa, bukan jaringan. Saya akan senang untuk klarifikasi dari orang jaringan.)

John Clements
sumber
Dia tidak benar dalam mengatakan itu, dan tidak ada yang buruk tentang penutupan pasif. Itu berarti rekan kerja ditutup sebelum Anda melakukannya.
user207421