TCP断开连接的过程是什么

TCP断开连接(也称为TCP连接终止或关闭连接)是指在TCP协议中,通信双方结束会话并释放占用的资源的过程。断开连接使用了一个类似于建立连接的四次挥手过程,以确保双方都安全地关闭连接。

如果是我,我会按这几个角度来回答:

  • 四次挥手过程

  • TCP挥手为什么需要四次呢?

  • TIME-WAIT 状态为什么需要等待 2MSL

1. 四次挥手过程

图片

  • 第一次挥手(FIN=1,seq=u),发送完毕后,客户端进入FIN_WAIT_1 状态

  • 第二次挥手(ACK=1,ack=u+1,seq =v),发送完毕后,服务器端进入CLOSE_WAIT 状态,客户端接收到这个确认包之后,进入 FIN_WAIT_2 状态

  • 第三次挥手(FIN=1,ACK1,seq=w,ack=u+1),发送完毕后,服务器端进入LAST_ACK 状态,等待来自客户端的最后一个ACK。

  • 第四次挥手(ACK=1,seq=u+1,ack=w+1),客户端接收到来自服务器端的关闭请求,发送一个确认包,并进入 TIME_WAIT状态,等待了某个固定时间(两个最大段生命周期,2MSL,2 Maximum Segment Lifetime)之后,没有收到服务器端的 ACK ,认为服务器端已经正常关闭连接,于是自己也关闭连接,进入 CLOSED 状态。服务器端接收到这个确认包之后,关闭连接,进入 CLOSED 状态。

2. TCP挥手为什么需要四次呢?

举个例子吧! 假设小明和小红打电话聊天,差不多要结束了:

图片

小明和小红打电话聊天,通话差不多要结束时,小红说“我没啥要说的了”,小明回答“我知道了”。但是小明可能还会有要说的话,小红不能要求小明跟着自己的节奏结束通话,于是小明可能又叽叽歪歪说了一通,最后小明说“我说完了”,小红回答“知道了”,这样通话才算结束。”

3. TIME-WAIT 状态为什么需要等待 2MSL

MSL,Maximum Segment Lifetime,是指一个 TCP 报文段在网络中存活的最长时间、 2MSL,即两个最大段生命周期。我们先回头看看挥手这张图:

图片

  • 第一个 MSL 确保所有在网络中延迟的报文段(包括 FIN 和 ACK)能够到达。

  • 第二个 MSL 确保如果对方未收到 ACK 而重传 FIN,该报文能够到达并被正确处理。

专业点说,等待2MSL是为了确保 TCP 连接的可靠性和一致性。

3.1. 确保最后的 ACK 能够被对方接收

当主动关闭的一方发送最后一个 ACK 后,如果这个 ACK 报文在传输过程中丢失,另一方会重新发送 FIN 报文。TIME-WAIT 状态的 2MSL 时间足够长,可以确保如果对方没有收到 ACK,重发的 FIN 报文仍然能够被接收到并处理,重新发送 ACK。如果主动关闭的一方在发送 ACK 后立即关闭了连接,那么对方如果重发 FIN,将不会收到响应,可能导致连接未能正常关闭。

3.2 防止旧的重复报文段影响新连接

TCP 连接的每个报文段都有一个序列号。如果一个 TCP 连接在关闭后立即被重新建立,而之前的连接中传输的某些报文由于网络延迟而滞后到达,这些旧的报文段可能会被误认为是新连接的一部分,从而引起混乱。TIME-WAIT 状态等待 2MSL 的时间,足够让网络中所有旧的报文段都过期,从而避免它们对新连接造成干扰。

3.3 一些类似的后端思想

邮件确认链接

在用户注册或重置密码时,系统通常会发送一封确认邮件,要求用户点击链接以验证其操作。这一过程可能设置一个有效期,在有效期内,如果用户没有完成确认,操作将被取消。这类似于 TIME-WAIT 状态中的等待,以确保操作的确认和安全。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

资料库01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值