Unformatted text preview: 8) bsdi.1087 > svr4.20000: S
win 4096 <mss 1024> [tos 0x10]
svr4.20000 > bsdi.1087: R 0:0(0)
ack 297416194 win 0 Figure 18.14 Reset generated by attempt to open connection to nonexistent port.
The values we need to examine in this figure are the sequence number field and
acknowledgment number field in the reset. Because the ACK bit was not on in the arriving
segment, the sequence number of the reset is set to 0 and the acknowledgment number is set to
the incoming ISN plus the number of data bytes in the segment. Although there is no real data
in the arriving segment, the SYN bit logically occupies 1 byte of sequence number space;
therefore, in this example the acknowledgment number in the reset is set to the ISN, plus the
data length (0), plus one for the SYN bit.
Aborting a Connection
We saw in Section 18.2 that the normal way to terminate a connection is for one side to send a
FIN. This is sometimes called an orderly release since the FIN is sent after all previously
queued data has been sent, and there is normally no loss of data. But it's also possible to abort a file:///D|/Documents%20and%20Settings/bigini/Docu...homenet2run/tcpip/tcp-ip-illustrated/tcp_conn.htm (19 of 37) [12/09/2001 14.47.16] Chapter 18. TCP Connection Establishment and Termination connection by sending a reset instead of a FIN. This is sometimes called an abortive release.
Aborting a connection provides two features to the application: (1) any queued data is thrown
away and the reset is sent immediately, and (2) the receiver of the RST can tell that the other
end did an abort instead of a normal close. The API being used by the application must provide
a way to generate the abort instead of a normal close.
We can watch this abort sequence happen using our sock program. The sockets API provides
this capability by using the "linger on close" socket option (SO_LINGER). We specify the -L
option with a linger time of 0. This causes the abort to be sent when...
View Full Document
- Spring '12