《TCP/IP详解卷3:TCP事务协议、HTTP、NNTP和UNIX域协议》 —3.3 常规的T/TCP事务
3.3 常规的T/TCP事务
下面我们还是在上面那对客户和服务器之间发起另一次事务。这一次客户在自己的单机高速缓存中取到该服务器的tao_ccsent值非0,于是就发出一个CC选项,其中下一个tcp_ccgen的值为2 (2表示这是客户端重新启动后TCP协议建立的第2个连接)。报文段交换的过程如图3-3所示。
图3-3 常规的T/TCP客户-服务器事务
这是一个常规的、仅包含3个报文段的最小规模T/TCP报文交换过程。图3-4显示了该次报文交换的时序图以及状态变迁过程。
客户发出包含SYN标志、数据和FIN标志的报文段后进入SYN_SENT*状态。服务器收到该报文段,且TAO测试成功时,进入半同步的ESTABLISHED*状态。其中的数据经处理后交给服务器进程。接着处理完报文段的FIN标志后服务器进入CLOSE_WAIT*状态。由于还未发出SYN报文段,因而服务器一直都处于加星状态。当服务器发出应答并在其中设置MSG_EOF标志后,服务器端随即转入LAST_ACK*状态。如图2-7所示,这个状态的服务器发出的报文段中包含了SYN、FIN和ACK标志。
图3-4 图3-3中报文段交换的时序图
客户收到第2个报文段后,其中对SYN的确认使客户端的连接状态转入FIN_WAIT_1状态。接着客户处理报文段中对所发FIN的确认,并进入FIN_WAIT_2状态。服务器的应答则送到客户进程。然后,客户处理该报文段中服务器所发的FIN后进入TIME_WAIT状态。在这个最终的状态,客户发出对服务器所发FIN的确认。
服务器收到第3个报文段后,其中对服务器所发SYN的确认使服务器进入LAST_ACK状态,对服务器所发FIN的确认则使服务器进入CLOSED状态。
这个例子清晰地显示了在T/TCP事务过程中收到一个报文段是怎样引起多次状态变迁的。它同时也显示了尚不处于ESTABLISHED状态的进程是如何接收数据的:客户进程半关闭(发出第1个报文段)与服务器的连接,处于FIN_WAIT_1状态下,但仍然能接收数据(第2个报文段)。
- 点赞
- 收藏
- 关注作者
评论(0)