RFC793 has several diagrams, in particular, from book
TCP/IP Illustrated, Vol. 1: The Protocols, and concise information for this protocol.
IBM has a good
replication:
Table 1. TCP state transition description table
TCP connection state |
Abbreviation in MVS™ console |
Abbreviation in TSO or UNIX shell |
Description |
LISTEN |
Listen |
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 |
SynSent |
SynSent |
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 |
SynRcvd |
SynRcvd |
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 |
Estblsh |
Establsh |
Represents a fully established connection; this
is the normal state for the data transfer phase of the connection. |
FIN-WAIT-1 |
FinWt1 |
FinWait1 |
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 |
FinWt2 |
FinWait2 |
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 |
ClosWt |
ClosWait |
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 |
Closing |
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 |
LastAck |
LastAck |
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 |
TimeWt |
TimeWait |
Waiting for enough time to pass to be sure the
remote TCP received the acknowledgment of its connection termination
request. |
CLOSED |
Closed |
Closed |
Represents no connection state at all. |
Also, a sequence diagram, where
Wikipedia is a good contribution (as usual):
- open: 3 way
- close: 4 way
http://www.icir.org/christian/sock.html
https://www.inetdaemon.com/tutorials/internet/tcp/3-way_handshake.shtml
http://www.tcpipguide.com/free/t_TCPConnectionTermination-2.htm