Endpoint TCP dapat menyelesaikan operasi close dari aplikasi sementara protocol masih mempertahankan state untuk koneksi tersebut. Setelah active close menyelesaikan pertukaran FIN, endpoint biasanya masuk ke TIME-WAIT alih-alih langsung membuang connection record.
State yang dipertahankan ini memiliki dua fungsi. Pertama, endpoint tetap dapat mengakui retransmitted final FIN. Kedua, ia memisahkan koneksi yang sudah ditutup dari incarnation berikutnya yang mungkin memakai local dan remote address serta port yang sama.
Karena itu TIME-WAIT bukan established connection yang sedang idle. Ia adalah protocol boundary di antara connection incarnation.
Menutup TCP masih membutuhkan state setelah ACK terakhir
TCP menutup setiap arah secara independen. Dalam urutan active-close yang umum, satu endpoint mengirim FIN, menerima acknowledgment, kemudian menerima FIN dari peer, lalu mengirim final ACK. Peer dapat membuang connection state setelah menerima ACK tersebut.
Endpoint yang mengirim final ACK tidak dapat mengasumsikan ACK itu benar-benar sampai ke peer. ACK segment sendiri tidak di-acknowledge. Jika packet tersebut hilang, peer dapat mengirim ulang FIN.
TIME-WAIT mempertahankan cukup state pada pengirim final ACK untuk mengenali retransmitted FIN tersebut dan mengirim ACK lagi. Penerimaan FIN lain yang valid ketika berada di TIME-WAIT memulai ulang timer sesuai state processing TCP.
Membuang seluruh state segera setelah mengirim final ACK akan menghilangkan protocol context tersebut. Retransmitted FIN kemudian dapat tiba pada endpoint yang sudah tidak memiliki matching connection record.
Delayed segment dapat hidup lebih lama daripada koneksi aplikasi
Jaringan IP dapat menunda, menduplikasi, mengubah urutan, dan merutekan ulang packet. TCP sequence number membedakan posisi dalam byte stream, tetapi koneksi baru pada akhirnya dapat menggunakan kembali pasangan socket yang sama.
Koneksi TCP diidentifikasi oleh pasangan endpoint: local IP address dan port bersama remote IP address dan port. Menutup koneksi tidak membuat setiap segment dari koneksi itu lenyap dari jaringan pada saat yang sama.
Koneksi berikutnya yang memakai empat nilai yang sama adalah incarnation baru. TIME-WAIT membatasi reuse langsung agar old segment punya waktu untuk kedaluwarsa, bukan muncul selama lifetime incarnation berikutnya.
Pemilihan sequence number menyediakan lapisan pemisahan lain. Kombinasi connection state, sequence space, dan timing mengurangi ambiguitas antara traffic dari incarnation yang berurutan.
Timer terikat pada maximum segment lifetime
Specification TCP menyatakan durasi TIME-WAIT sebagai dua kali Maximum Segment Lifetime, atau 2×MSL. RFC 9293 menggunakan MSL dua menit untuk specification sambil mencatat bahwa nilainya merupakan engineering choice.
Protocol model memakai interval ini sebagai batas old traffic yang masih relevan di jaringan. TIME-WAIT mempertahankan transmission control block sampai timer berakhir, kemudian menghapus state tersebut dan berpindah ke CLOSED.
Operating system dapat mengimplementasikan socket API dan reuse policy di sekitarnya secara berbeda, sehingga timer yang terlihat pada host tidak harus muncul sebagai literal empat menit penundaan aplikasi di setiap environment. TCP juga menetapkan kondisi ketika SYN baru dapat membuka koneksi langsung dari TIME-WAIT jika constraint sequence number terpenuhi.
Invariant-nya lebih sempit: active close mempertahankan protocol state selama interval terbatas alih-alih memperlakukan pengiriman final ACK sebagai penghapusan langsung.
TIME-WAIT biasanya muncul pada active closer
State machine close normal menempatkan endpoint yang melakukan active close ke FIN-WAIT-1 lalu FIN-WAIT-2 sambil menunggu FIN dari peer. Setelah FIN itu datang dan di-acknowledge, active closer masuk ke TIME-WAIT.
Peer mengikuti jalur berbeda. Setelah menerima FIN pertama, ia masuk ke CLOSE-WAIT, kemudian berpindah ke LAST-ACK setelah aplikasinya menutup sisi miliknya. Penerimaan ACK untuk FIN-nya sendiri memungkinkan endpoint tersebut menghapus connection state.
Asimetri ini terlihat secara operasional. Service yang menerima koneksi tetapi biasanya menunggu client menutup terlebih dahulu dapat mengumpulkan lebih sedikit entry TIME-WAIT dibanding komponen yang secara aktif menutup banyak koneksi berumur pendek.
Simultaneous close berbeda. Jika kedua endpoint memulai close dan bertukar FIN secara bersamaan, keduanya dapat mencapai TIME-WAIT.
Entry TIME-WAIT bukan live session yang bocor
Socket inspection tool sering menampilkan TIME-WAIT di samping established dan listening socket. Tampilan ini dapat membuat jumlah besar terlihat seperti sekumpulan koneksi yang gagal ditutup.
State tersebut berarti fase data transfer sudah selesai. Application payload tidak lagi mengalir melalui established stream. Kernel hanya mempertahankan cukup informasi identity dan timing TCP untuk menyelesaikan close semantics dan melindungi connection reuse.
Jumlah yang tinggi tetap dapat berpengaruh. Sistem dengan traffic koneksi tinggi memakai kernel bookkeeping, kombinasi ephemeral port, dan resource networking lain. Dampaknya bergantung pada operating system, address selection, distribusi destination, rentang port, reuse rule, dan connection rate.
Jumlah TIME-WAIT saja tidak membuktikan resource leak. Ia juga mencatat recent close activity dan retention policy TCP milik host.
Connection pooling mengubah laju terbentuknya TIME-WAIT
Koneksi TCP berumur pendek berulang kali menjalankan setup dan teardown. Setiap active close dapat membuat interval TIME-WAIT baru. Client yang membuka koneksi baru untuk setiap request kecil karena itu dapat menghasilkan state jauh lebih cepat daripada client yang memakai persistent connection.
Pooling mengubah frekuensi lifecycle koneksi, bukan semantik TIME-WAIT. Satu koneksi dapat membawa beberapa pertukaran aplikasi sebelum ditutup, sehingga jumlah four-tuple yang berputar melalui teardown berkurang.
Protocol dengan persistent transport session sering mendapat manfaat lebih dari sekadar penghematan handshake. Reuse juga mengurangi churn pada kernel connection table dan ephemeral-port allocation.
Efek ini sangat terlihat ketika satu source address berulang kali terhubung ke destination address dan port yang sama, karena kombinasi local port yang tersedia membentuk ruang yang terbatas.
Port reuse adalah masalah four-tuple
TIME-WAIT kadang dijelaskan sebagai sebuah port yang tidak tersedia, tetapi identity koneksi TCP lebih spesifik daripada local port saja. Koneksi yang relevan mencakup kedua endpoint address dan kedua endpoint port.
Socket API menambahkan binding rule sendiri di atas TCP state. Opsi terkait address reuse, listener binding, dan ephemeral-port selection dapat mengubah local binding mana yang diizinkan kernel. Kontrol tersebut tidak menghapus kebutuhan protocol untuk membedakan old dan new connection incarnation.
Memahami reuse sebagai masalah four-tuple dan sequence space menghindari salah diagnosis yang umum: sebuah process dapat mengalami connection pressure walaupun mesin masih memiliki banyak TCP port numerik yang belum digunakan, sementara workload lain dapat menggunakan ulang local port yang sama ke remote endpoint berbeda sesuai aturan socket.
TIME-WAIT berada pada boundary antara protocol correctness dan host resource policy. Aplikasi sudah selesai dengan stream, tetapi TCP mempertahankan record sementara agar final close tetap dapat dipulihkan dan stale traffic tidak langsung menjadi traffic untuk incarnation baru.