首页 > 试题广场 >

关于TCP协议描述不正确的是( )

[单选题]

关于TCP协议描述不正确的是( )

  • 建立连接需要三次握手
  • TIME_WAIT状态时不再接受报文
  • TIME_WAIT状态的持续时间是可以调整的
  • FIN报文一般由请求方负责发送
什么是TIME_WAIT状态呢?
  客户端连接在接收到服务器接收到报文段后,并未直接进入CLOSED状态,而是转移到TIME_WAIT状态。在这个状态,客户端 连接要等待一段长为2  MSL(Maxinum Segment  Life  报文段最大生存时间)的时间,才能完全关闭。

先说第一点,如果Client直接CLOSED了,那么由于IP协议的不可靠性或者是其它网络原因,导致Server没有收到Client最后回复的ACK。那么Server就会在超时之后继续发送FIN,此时由于Client已经CLOSED了,就找不到与重发的FIN对应的连接,最后Server就会收到RST而不是ACK,Server就会以为是连接错误把问题报告给高层。这样的情况虽然不会造成数据丢失,但是却导致TCP协议不符合可靠连接的要求。所以,Client不是直接进入CLOSED,而是要保持TIME_WAIT,当再次收到FIN的时候,能够保证对方收到ACK,最后正确的关闭连接。

再说第二点,如果Client直接CLOSED,然后又再向Server发起一个新连接,我们不能保证这个新连接与刚关闭的连接的端口号是不同的。也就是说有可能新连接和老连接的端口号是相同的。一般来说不会发生什么问题,但是还是有特殊情况出现:假设新连接和已经关闭的老连接端口号是一样的,如果前一次连接的某些数据仍然滞留在网络中,这些延迟数据在建立新连接之后才到达Server,由于新连接和老连接的端口号是一样的,又因为TCP协议判断不同连接的依据是socket pair,于是,TCP协议就认为那个延迟的数据是属于新连接的,这样就和真正的新连接的数据包发生混淆了。所以TCP连接还要在TIME_WAIT状态等待2倍MSL,这样可以保证本次连接的所有数据都从网络中消失。

 
发表于 2019-05-22 16:07:29 回复(0)
1)“四次挥手”中,客户端接收到服务器端的第三个FIN报文后,会发送ACK确认报文给服务器端。但是客户端不会立即进入CLOSED,而是进入TIME-WAIT等待2MSL的时间,这期间如果服务器端没有收到客户端的ACK报文,就会重新发送FIN报文给客户端,因此TIME-WAIT状态仍然会接受报文。
2)FIN请求是客户端与服务器端都会发送的。
应该选BD
发表于 2020-06-09 15:12:43 回复(2)
答案有问题吧,接收方也能发送
发表于 2019-08-25 15:34:59 回复(2)
释放连接的时候,是服务端发送FIN报文吧。
发表于 2019-05-18 15:37:31 回复(1)