选择题 29.  当一个TCP连接处于______状态时等待应用程序关闭端口。
【正确答案】 C
【答案解析】[考点] 考核传输层协议的基本概念。

   ·TCP会话通过三次握手来建立连接。三次握手的目标是使数据段的发送和接收同步。同时也向其他主机表明其一次可接收的数据量(窗口大小),并建立逻辑连接。这三次握手的过程可以简述如下:
   双方通信之前均处于CLOSED状态。
   第一次握手
   源主机发送一个同步标志位SYN=1的TCP数据段。此段中同时标明初始序号(Initial Sequence Number,ISN)。ISN是一个随时间变化的随机值,即SYN=1,SEQ=x。源主机进入SYN.SENT状态。
   第二次握手
   目标主机接收到SYN包后,发回确认数据报文。该数据报文ACK=1,同时确认序号字段,表明目标主机期待收到源主机下一个数据段的序号,即ACK=x+1(表明前一个数据段已收到并且没有错误)。
   此外,此段中设置SYN=1,并包含目标主机的段初始序号y,即ACK=1,确认序号ACK=x+1,SYN=1,自身序号SEQ=y。此时目标主机进入SYN-RCVD状态,源主机进入ESTABLISHED状态。
   第三次握手
   源主机再回送一个确认数据段,同样带有递增的发送序号和确认序号(ACK=1,确认序号ACK=y+1,自身序号SEQ,TCP会话的三次握手完成。接下来,源主机和目标主机可以互相收发数据。三次握手的过程见下图。
   下图表示当TCP处于SYN SEND状态时,协议实体已主动发出连接建立请求。
   

   TCP三次握手过程

   ·TCP释放连接
   TCP释放连接分为四步,具体过程如下:
   双方通信之前均处于ESTABLISHED状态。
   第一步
   源主机发送一个释放报文(FIN=1,自身序号SEQ=x),源主机进入FIN-WAIT状态。
   第二步
   目标主机接收报文后,发出确认报文(ACK=1,确认序号为ACK=x+1,序号SEQ=y),
   目标主机进入CLOSE-WAIT状态。这个时候,源主机停止发送数据,但是目标主机仍然可以
   发送数据,此时TCP连接为半关闭状态(HALF-CLOSE)。
   源主机接收到ACK报文后,等待目标主机发出FIN报文,这可能会持续一段时间。
   第三步
   目标主机确定没有数据,向源主机发送后,发出释放报文(FIN=1,ACK=1,确认序号ACK=x+1,序号SEQ=z),目标主机进入LAST-ACK状态。
   注意:这里由于处于半关闭状态(HALF-CLOSE),目标主机还会发送一些数据,其序号不一定为y+1,因此设为z。而且,目标主机必须重复发送一次确认序号ACK=x+1。
   第四步
   源主机接收到释放报文后,对此发送确认报文(ACK=1,确认序号ACK=z+1,自身序号SEQ=x+1),在等待一段时间确定确认报文到达后,源主机进入CLOSED状态。
   目标主机在接收到确认报文后,也进入CLOSED状态。