A TCP connection progresses through a series of states during its lifetime. The following diagram illustrates the possible states for a TCP connection and how the states transition based on various events from either the network or from the local TCP sockets application.
Figure 1. TCP state transition diagram
TCP State Table
TCP connection state | Description |
---|---|
LISTEN | Waiting for a connection request from a remote TCP application. This is the state in which you can find the listening socket of a local TCP server. |
SYN-SENT | Waiting for an acknowledgment from the remote endpoint after having sent a connection request. Results after step 1 of the three-way TCP handshake. |
SYN-RECEIVED | This endpoint has received a connection request and sent an acknowledgment. This endpoint is waiting for final acknowledgment that the other endpoint did receive this endpoint's acknowledgment of the original connection request. Results after step 2 of the three-way TCP handshake. |
ESTABLISHED | Represents a fully established connection; this is the normal state for the data transfer phase of the connection. |
FIN-WAIT-1 | Waiting for an acknowledgment of the connection termination request or for a simultaneous connection termination request from the remote TCP. This state is normally of short duration. |
FIN-WAIT-2 | Waiting for a connection termination request from the remote TCP after this endpoint has sent its connection termination request. This state is normally of short duration, but if the remote socket endpoint does not close its socket shortly after it has received information that this socket endpoint closed the connection, then it might last for some time. Excessive FIN-WAIT-2 states can indicate an error in the coding of the remote application. |
CLOSE-WAIT | This endpoint has received a close request from the remote endpoint and this TCP is now waiting for a connection termination request from the local application. |
CLOSING | Waiting for a connection termination request acknowledgment from the remote TCP. This state is entered when this endpoint receives a close request from the local application, sends a termination request to the remote endpoint, and receives a termination request before it receives the acknowledgment from the remote endpoint. |
LAST-ACK | Waiting for an acknowledgment of the connection termination request previously sent to the remote TCP. This state is entered when this endpoint received a termination request before it sent its termination request. |
TIME-WAIT | Waiting for enough time to pass to be sure the remote TCP received the acknowledgment of its connection termination request. |
CLOSED | Represents no connection state at all. |