TCP: An Approximation To The Real State Diagram: Nonexist Listen
TCP: An Approximation To The Real State Diagram: Nonexist Listen
TCP: An Approximation To The Real State Diagram: Nonexist Listen
The states are the classic ‘TCP states’, though note that
these are only a tiny part of the protocol endpoint state, in
the specification or in implementations. The transitions are
an over-approximation to the set of all the transitions in the
model which (1) affect the TCP state of a socket, and/or
(2) involve processing segments from the host’s input queue
or adding them to its output queue, except that transitions
involving ICMPs are omitted, as are transitions arising from
close_8
close())
the pathological BSD behaviour in which arbitrary sockets can
recv:
send: be moved to LISTEN states. Transitions are labelled by their
Host LTS rule name (e.g. socket 1 , deliver in 3 , etc.), any
socket call involved (e.g. close()), and constraints on the flags
shutdown_1
of any TCP segment received and sent, with e.g. R indicating
deliver_in_1b deliver_in_7b
LISTEN shutdown()
recv:
recv: r recv: R NONEXIST that RST is set and r indicating RST is clear. Transitions in-
send: Rs send:
send:
bad recv segment volving segments (either inbound or outbound) with RST set
are coloured orange; others that have SYN set are coloured
green; others that have FIN set are coloured blue; others are
coloured black. The FIN indication includes the case of FINs
close_7 close_7 close_8
close()
deliver_in_1
recv: arS
close() close() that are constructed by reassembly rather than appearing in a
recv: recv: recv:
send: ArSf
send:
there is another socket in state LISTEN
send: send:
states on the incomplete connection queue
literal segment.
The graph is based on data extracted manually from the
HOL specification. The data does not capture all the invari-
ants of the model, so some depicted transitions may not be
deliver_in_2
recv: arS
reachable in the model (or in practice). Similarly, the con-
send: ArSf
straints on flags shown may be overly weak.