美文网首页TCP/IP协议算法tcp、udp、http
TCP协议的TIME_WAIT状态详解

TCP协议的TIME_WAIT状态详解

作者: ylbkoo | 来源:发表于2017-07-20 20:36 被阅读46次

    TCP关闭连接的过程如下图,以Client主动关闭为例

    四次挥手

    具体过程(四次挥手)如下:

    Client调用close函数,给Server发送FIN,请求关闭连接;

    Server收到FIN后,给Client回复ACK,同时关闭读通道,此时Server的TCP状态转换为CLOSE_WAIT状态。

    Client收到对自己FIN确认后,关闭写通道,不再往连接中写入任何数据。

    Server调用close函数关闭连接,给Client发送FIN,Client收到后给Server回复ACK确认,同时Client关闭读通道,进入TIME_WAIT状态。

    Server收到Client对自己FIN的ACK后,关闭写通道,TCP连接状态变为CLOSE,也就是连接关闭

    Client在TIME_WAIT状态下要等待最大数据段生存期的两倍,然后才进入CLOSE状态,TCP连接才彻底关闭。

    主动发起关闭连接的操作一方将达到TIME_WAIT状态,必须保持MAX Segment Lifetime的两倍时间。

    原因如下:

    1.保证TCP协议的全双工连接,能够可靠关闭

    2.保证本次连接的重复数据段从网络中消失

    详细说明如下:

    1.假如Client直接CLOSED,那么由于IP协议不可靠性或者其他网络原因,导致Server没有收到Client最后回复的ACK,那么Server可以超时重传,此时如果Client已经CLOSED,就找不到对应的连接,那么Server收到的是对端的RST,而不是ACK,Server会以为是连接错误而上报到上层。虽然不会导致数据丢失,但是却不符合TCP可靠性的要求。

    2.如果Client直接CLOSED后,又立即向Server发起一个新连接,假如是在相同的端口,那么之前连接中滞留的网络数据,有可能在新连接建立后,才到达Server,由于新连接和旧连接的端口相同,TCP协议认为这些滞留数据是属于新连接的,与真正的数据发生混淆。

    相关文章

      网友评论

        本文标题:TCP协议的TIME_WAIT状态详解

        本文链接:https://www.haomeiwen.com/subject/bxvjkxtx.html