This preview shows page 1. Sign up to view the full content.
Unformatted text preview: tell the server that the
client is finished sending data, but still let the client receive data from the server. Two
connections could be used as an alternative, but a single connection with a half-close is better. 18.6 TCP State Transition Diagram
We've described numerous rules regarding the initiation and termination of a TCP connection.
These rules can be summarized in a state transition diagram, which we show in Figure 18.12.
The first thing to note in this diagram is that a subset of the state transitions is "typical." We've
marked the normal client transitions with a darker solid arrow, and the normal server transitions
with a darker dashed arrow.
Next, the two transitions leading to the ESTABLISHED state correspond to opening a
connection, and the two transitions leading from the ESTABLISHED state are for the
termination of a connection. The ESTABLISHED state is where data transfer can occur
between the two ends in both directions. Later chapters describe what happens in this state.
We've collected the four boxes in the lower left of this diagram within a dashed box and labeled
it "active close." Two other boxes (CLOSE_WAIT and LAST_ACK) are collected in a dashed
box with the label "passive close."
The names of the 11 states (CLOSED, LISTEN, SYN_SENT, etc.) in this figure were
purposely chosen to be identical to the states output by the netstat command. The
netstat names, in turn, are almost identical to the names originally described in RFC 793.
The state CLOSED is not really a state, but is the imaginary starting point and ending point for
The state transition from LISTEN to SYN_SENT is legal but is not supported in Berkeleyderived implementations.
The transition from SYN_RCVD back to LISTEN is valid only if the SYN_RCVD state was
entered from the LISTEN state (the normal scenario), not from the SYN_SENT state (a
simultaneous open). This means if we perform a passive open (enter LISTEN), receive a SYN,
send a SYN with an ACK (enter SYN_...
View Full Document
- Spring '12