Trung BìnhNetwork iconNetwork

TCP 4-way handshake (connection teardown) hoạt động như thế nào? TIME_WAIT state là gì?

TCP dùng 4-way handshake (FIN/ACK/FIN/ACK) để đóng kết nối; sau đó initiator vào TIME_WAIT (2×MSL ≈ 60s) để đảm bảo ACK cuối được nhận.

TCP close connection cần 4 bước vì mỗi direction đóng độc lập:

  1. Client gửi FIN — muốn đóng kết nối
  2. Server gửi ACK — xác nhận, nhưng server vẫn có thể tiếp tục gửi data (half-close)
  3. Server gửi FIN — server cũng muốn đóng
  4. Client gửi ACK — xác nhận

TIME_WAIT state: sau khi client gửi ACK cuối, client vào TIME_WAIT trong 2*MSL (Maximum Segment Lifetime, thường 60 giây) trước khi port được tái sử dụng. Mục đích:

  1. đảm bảo server nhận được ACK cuối (nếu ACK mất, server retransmit FIN, client trong TIME_WAIT có thể trả ACK lại)
  2. đảm bảo packets cũ từ connection trước không được nhầm cho connection mới

Vấn đề thực tế: server với nhiều short-lived connections (HTTP/1.1) có thể bị exhausted ephemeral ports do quá nhiều TIME_WAIT sockets. Giải pháp: tcp_tw_reuse=1 (Linux, reuse TIME_WAIT sockets cho outgoing connections), HTTP/2 multiplexing, keep-alive connections.

Xem toàn bộ Network cùng filter theo level & chủ đề con.

Mở danh sách Network