前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TCP连接的TIME-WAIT状态

TCP连接的TIME-WAIT状态

作者头像
actionzhang
发布2022-11-30 17:02:05
4490
发布2022-11-30 17:02:05
举报
文章被收录于专栏:action的经验之路

TIME-WAIT状态是TCP的11个状态其中之一,是发生在正常关闭TCP连接的时候发生的。如下图所示:

在这幅图中我们可以明显看出,流程是这样的,显示主动发送一个FIN报文,然后接收到一个ACK报文,这样这一方的连接已经关闭,也就是不能再发送数据了,进入FIN_WAIT2状态,这个状态就是为了等待,被动关闭连接的一方,发送fin报文,在这期间可以接收来自对方的数据,等到被动关闭这一端,发送完毕后,就会发出一个FIN报文,那么在接收到FIN报文后,进入TIME_WAIT状态,首先向被动连接那一方,发送一个ACK,然后进入等待状态,等待时长为2MSL(MSL为一个TCP报文在网络中能够存活的最大时长),很多人问,为什么会进入一个等待,状态呢。因为如上图所示,被动关闭连接的哪一方,在发送出FIN报文后,要确定主动方,接收到它发送的FIN报文,怎么知道是否接收到呢,那么就是对方返回一个ACK报文。设想如果主动方发送的最后一个报文不能到达被动关闭连接方呢?这时候如果主动方不等待,直接选择关闭连接,然后被动方又不知道,超时会重传FIN报文,但是主动方已经关闭了,所以不会反回任何应答,这样就会让被动方关闭连接上出问题,所以得等待一段时间,看被动方是否接收到了最后一个ACK,如果没接收到的话,FIN报文会超时重传,那么在等待阶段接收到FIN报文后,可以重发,最后一个ACK。这样在关闭连接上就没有什么问题了。另外其实,如果不等待一段时间还会发生另外一个问题,设想在TCP交互过程中,一个报文因为各种原因,没有到达目的地,如果不等待一段时间,那么意味着在关闭连接后立刻在这个端口上就可以建立新的连接,那么在新连接交互的过程中,如果上一个连接的那个没有到达的报文,现在到达了,那么是不是就会出现新的问题,所以说要等待2MSL时间,可以让老的报文彻底消失,才能开始一个新的连接。

经过以上的讨论其实要在TIME_WAIT阶段等待一段时间的主要原因有两个:

1.能够确保被动关闭连接方能够,接收到最后一个ACK,也就是能够确定,主动方已经接收到被动方的FIN报文。

2.能够确保本次连接的所有未到达的报文段,能够彻底在网络中消失,不会影响下一次在相同端口上建立的新连接。

所以一般在某一个端口上关闭TCP连接后不能立即启用本端口建立新的连接,因为在TIME_WAIT阶段是不允许建立新的连接的。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档