TCP 四次挥手的过程

TCP 四次挥手的过程1、四次挥手的过程1、刚开始双方处于ESTABLISHED状态。2、客户端要断开了,向服务器发送FIN报文,在TCP报文中的位置如下图:发送后客户端变成了FIN-WAIT-1状态。注意,这时候客户端同时也变成了half-close(半关闭)状态,即无法向服务端发送报文,只能接收。3、服务端接收后向客户端确认,变成了CLOSED-WAIT状态。4、客户端接收到了服务端的确认,变成了FIN-WAIT2状态。5、随后,服务端向客户端发送FIN,自己进入LAST-AC…

大家好,又见面了,我是你们的朋友全栈君。

 

1、四次挥手的过程

TCP 四次挥手的过程

1、刚开始双方处于ESTABLISHED状态。

2、客户端要断开了,向服务器发送 FIN 报文,在 TCP 报文中的位置如下图:

TCP 四次挥手的过程

发送后客户端变成了FIN-WAIT-1状态。注意, 这时候客户端同时也变成了half-close(半关闭)状态,即无法向服务端发送报文,只能接收。

3、服务端接收后向客户端确认,变成了CLOSED-WAIT状态。

4、客户端接收到了服务端的确认,变成了FIN-WAIT2状态。

5、随后,服务端向客户端发送FIN,自己进入LAST-ACK状态,

6、客户端收到服务端发来的FIN后,自己变成了TIME-WAIT状态,然后发送 ACK 给服务端。

注意了,这个时候,客户端需要等待足够长的时间,具体来说,是 2 个 MSL(Maximum Segment Lifetime,报文最大生存时间), 在这段时间内如果客户端没有收到服务端的重发请求,那么表示 ACK 成功到达,挥手结束,否则客户端重发 ACK。

2、等待2MSL的意义

如果不等待会怎样?

如果不等待,客户端直接跑路,当服务端还有很多数据包要给客户端发,且还在路上的时候,若客户端的端口此时刚好被新的应用占用,那么就接收到了无用数据包,造成数据包混乱。所以,最保险的做法是等服务器发来的数据包都死翘翘再启动新的应用。

那,照这样说一个 MSL 不就不够了吗,为什么要等待 2 MSL?

  • 1 个 MSL 确保四次挥手中主动关闭方最后的 ACK 报文最终能达到对端
  • 1 个 MSL 确保对端没有收到 ACK 重传的 FIN 报文可以到达

这就是等待 2MSL 的意义。

3、为什么是四次挥手而不是三次?

因为服务端在接收到FIN, 往往不会立即返回FIN, 必须等到服务端所有的报文都发送完毕了,才能发FIN。因此先发一个ACK表示已经收到客户端的FIN,延迟一段时间才发FIN。这就造成了四次挥手。

如果是三次挥手会有什么问题?

等于说服务端将ACKFIN的发送合并为一次挥手,这个时候长时间的延迟可能会导致客户端误以为FIN没有到达客户端,从而让客户端不断的重发FIN

4、同时关闭会怎样?

如果客户端和服务端同时发送 FIN ,状态会如何变化?如图所示:

TCP 四次挥手的过程

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/140519.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月8日 下午2:20
下一篇 2022年5月8日 下午2:20


相关推荐

  • 计算机系统新手入门,电脑初学者入门教程

    计算机系统新手入门,电脑初学者入门教程本篇主要从关机、任务管理器、电脑屏幕锁定这三个方面,帮助初次学习电脑的人尽快掌握一些基本操作,快一起来学习吧。工具/材料电脑(本篇以Windows7系统为例)电脑关机01方法一。首先,点击屏幕左下方的win(当点击时,会提示“开始”的字样)。02点击后,可以看见有关机选项,点击关机,后面出现几个选项,根据需要进行选择就可以。03方法二:使用快捷键。按下快捷键Alt+F4。(这里需要注意,是同时按…

    2022年6月15日
    54
  • wpf 如何在后台设置附加属性的值

    wpf 如何在后台设置附加属性的值System Windows Controls Grid SetRow btnOk 0 System Windows Controls Grid SetColumn btnOk 0 就是这个格式就可以了

    2026年3月18日
    2
  • 20天通过中级软件设计师攻略(附资料)

    20天通过中级软件设计师攻略(附资料)起因 7 月份偶然在朋友圈看到关于软考报名消息 网上搜索了一下 查阅软考信息如下 软考分为初 中 高三个等级 每个等级有不同的项目 我本次报考的是中级的软件设计师 本次只介绍软件设计师考试相关信息 从报名到缴费 110 元 后大概是 8 月份了 本想着时间还早加上 9 月因公司加急加班所以一直搁置没有复习 直到国庆后 10 8 才开始有闲余的时间复习 到考试只剩下 20 天左右的时间 一边工作 一边利用晚上和周末的零碎时间进行复习 总共的复习时间其实不到 20 天 目前分数已出来 分享自己的考试攻略 软考官网 中

    2026年3月19日
    2
  • 最全的常用正则表达式大全——包括校验数字、字符、一些特殊的需求等等[通俗易懂]

    最全的常用正则表达式大全——包括校验数字、字符、一些特殊的需求等等

    2022年2月10日
    44
  • 螺旋矩阵(c语言实现)

    螺旋矩阵(c语言实现)腾讯 2016 年实习生笔试题蛇形矩阵 也叫螺旋矩阵 指一个呈螺旋状的矩阵 它的数字由第一行开始到右边不断变大 向下变大 向左变大 向上变大 如此循环 思想就是 螺旋 有四个方向 从左到右 从上到下 从右到左 从下到上 对于第一步 要先加上 c c 从 0 开始 每次执行完一圈 就加 1 第一个方向 从左到右 从 c c 开始 从左到右 行 i 不变 列 j 从 c 一直加到 n c 1

    2026年3月19日
    2
  • 高通linux-串口笔记「建议收藏」

    高通linux-串口笔记「建议收藏」概述驱动:drivers/tty/serial/msm_serial_hs_lite.c:低速版本,设备树内容配置为compatible="qcom,msm-lsuart-v14";msm_serial_hs.c:高速版本, 设备树内容配置为compatible="qcom,msm-hsuart-v14"; 2.分析设备树内容 uart_cons…

    2025年11月10日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号