首页 > 试题广场 >

一条tcp连接,主动关闭的一方不可能出现的连接状态是()

[单选题]
一条tcp连接,主动关闭的一方不可能出现的连接状态是()
  • CLOSE_WAIT
  • FIN_WAIT2
  • TIME_WAIT
  • FIN_WAIT1
发表于 2016-02-29 11:49:17 回复(1)
1)当客户端没有主动close的时候就断开连接,即客户端发送的fin丢失或者失败:  1:这时候若客户端断开的时候发送了FIN包,则服务端将会处于CLOSE_WAIT状态;2:  这时候若客户端断开的时候未发送FIN包,则服务端处还是显示ESTABLISHED状态
2) 当client想要关闭它与server之间的连接。client(某个应用进程)首先调用 close 主动关闭连接,这时TCP发送一个FIN M;client端处于 FIN_WAIT1 状态。
3)  当server端接收到FIN M之后,执行被动关闭。对这个FIN进行确认,返回给client ACK。当server端返回给client ACK后,client处于 FIN_WAIT2 状态,server处于 CLOSE_WAIT 状态。它的接收也作为文件结束符传递给应用进程,因为FIN的接收     意味着应用进程在相应的连接上再也接收不到额外数据;
4) 一段时间之后,当server端检测到client端的关闭操作(read返回为0)。接收到文件结束符的server端调用 close 关闭它的socket。这导致server端的TCP也发送一个FIN N;此时server的状态为last——ack .
5)当client收到来自server的FIN后 。 client端的套接字处于 TIME_WAIT 状态,它会向server端再发送一个ack确认,此时server端收到ack确认后,此套接字处于CLOSED状态。
发表于 2015-10-26 16:34:01 回复(4)
Close_wait是被动关闭的状态
发表于 2016-08-26 10:54:50 回复(0)
介绍一下TCP连接建立与关闭过程中的状态。TCP连接过程是状态的转换,促使状态发生转换的因素包括用户调用、特定数据包以及超时等,具体状态如下所示: 
  1. CLOSED :初始状态,表示没有任何连接。 
  2. LISTEN Server 端的某个 Socket 正在监听来自远方的 TCP 端口的连接请求。 
  3. SYN_SENT :发送连接请求后等待确认信息。当客户端 Socket 进行 Connect 连接时,会首先发送 SYN 包,随即进入 SYN_SENT 状态,然后等待 Server 端发送三次握手中的第 2 个包。 
  4. SYN_RECEIVED :收到一个连接请求后回送确认信息和对等的连接请求,然后等待确认信息。通常是建立 TCP 连接的三次握手过程中的一个中间状态,表示 Server 端的 Socket 接收到来自 Client SYN 包,并作出回应。 ESTABLISHED :表示连接已经建立,可以进行数据传输。 
  5. FIN_WAIT_1 :主动关闭连接的一方等待对方返回 ACK 包。若 Socket ESTABLISHED 状态下主动关闭连接并向对方发送 FIN 包(表示己方不再有数据需要发送),则进入 FIN_WAIT_1 状态,等待对方返回 ACK 包,此后还能读取数据,但不能发送数据。在正常情况下,无论对方处于何种状态,都应该马上返回 ACK 包,所以 FIN_WAIT_1 状态一般很难见到。 
  6. FIN_WAIT_2 :主动关闭连接的一方收到对方返回的 ACK 包后,等待对方发送 FIN 包。处于 FIN_WAIT_1 状态下的 Socket 收到了对方返回的 ACK 包后,便进入 FIN_WAIT_2 状态。由于 FIN_WAIT_2 状态下的 Socket 需要等待对方发送的 FIN 包,所有常常可以看到。若在 FIN_WAIT_1 状态下收到对方发送的同时带有 FIN ACK 的包时,则直接进入 TIME_WAIT 状态,无须经过 FIN_WAIT_2 状态。 
  7. TIME_WAIT :主动关闭连接的一方收到对方发送的 FIN 包后返回 ACK 包(表示对方也不再有数据需要发送,此后不能再读取或发送数据),然后等待足够长的时间( 2MSL )以确保对方接收到 ACK 包(考虑到丢失 ACK 包的可能和迷路重复数据包的影响),最后回到 CLOSED 状态,释放网络资源。 
  8. CLOSE_WAIT :表示被动关闭连接的一方在等待关闭连接。当收到对方发送的 FIN 包后(表示对方不再有数据需要发送),相应的返回 ACK 包,然后进入 CLOSE_WAIT 状态。在该状态下,若己方还有数据未发送,则可以继续向对方进行发送,但不能再读取数据,直到数据发送完毕。 
  9. LAST_ACK :被动关闭连接的一方在 CLOSE_WAIT 状态下完成数据的发送后便可向对方发送 FIN 包(表示己方不再有数据需要发送),然后等待对方返回 ACK 包。收到 ACK 包后便回到 CLOSED 状态,释放网络资源。 
  10. CLOSING :比较罕见的例外状态。正常情况下,发送 FIN 包后应该先收到(或同时收到)对方的 ACK 包,再收到对方的 FIN 包,而 CLOSING 状态表示发送 FIN 包后并没有收到对方的 ACK 包,却已收到了对方的 FIN 包。有两种情况可能导致这种状态:其一,如果双方几乎在同时关闭连接,那么就可能出现双方同时发送 FIN 包的情况;其二,如果 ACK 包丢失而对方的 FIN 包很快发出,也会出现 FIN 先于 ACK 到达。
编辑于 2016-03-16 17:04:08 回复(2)

大杀器,每次看TCP状态转换都要重新看看此图,主动close的状态可能不经过FIN_WAIT_2
发表于 2018-07-02 20:44:55 回复(1)
可以看印象笔记,我记录了
发表于 2017-02-19 20:11:17 回复(0)
TCP建立连接过程中出现的状态: LISTEN、SYN-SENT、SYN_RCVD、ESTABSHED

TCP断开连接过程中出现的状态: ESTABLISHED、FIN-WAIT-1、CLOSE-WAIT、FIN-WAIT-2,、LAST-ACK、TIME-WAIT
发表于 2016-08-09 15:39:42 回复(0)