网络中的TIME-WAIT和CLOSE-WAIT

TCP网络编程:CLOSE_WAIT和TIME_WAIT导致端口耗尽的问题与解决方案 - CLOSE_WAIT问题的根源是代码逻辑错误,修复代码即可解决。 - TIME_WAIT积压的本质是TCP的安全机制,需根据场景选择解决方法: - 强制关闭:使用`SO_LINGER`。 - 快速重用:使用`SO_REUSEADDR`。 - 理解TCP状态和内核行为,才能在解决问题时更有针对性。 阅读详情


在这里插入图片描述

1、主动关闭方发送FIN包,进入FIN-WAIT1状态

2.1、被动关闭方收到FIN包后,回复ACK包,进入CLOSE_WAIT状态

2.2、主动关闭方收到ACK包后,等待对方关闭,进入FIN_WAIT2状态

3、被动关闭方在完成所有数据发送后,调用close()操作;此时,协议层发送FIN包给主动关闭方,等待对方的ACK,被动关闭的一方进入LAST_ACK状态;

4、主动关闭方收到FIN包,协议层回复ACK;此时,主动关闭方,进入TIME_WAIT状态;而被动关闭方收到ACK后,进入CLOSED状态 ;

5、主动关闭方等待2MSL(max segment lifetime)时间后,结束TIME_WAIT,进入CLOSED状态 ;

这里有个问题,就是主动关闭方发送最后一个ACK包后,为什么要进入TIME-WAIT等待2MSL而不是进入CLOSED状态,2MSL是一个发送加一个回复的最大时间,如果直到2MSL后主动关闭方没有再次收到FIN,那么可以推断出ACK已被成功接收,结束TCP连接。

而主动关闭方为什么会在发出ACK后又收到FIN包,这是因为被动关闭方在发出最后一个ACK包后也会等待2MSL的时间,如果在这个时间内没有收到主动关闭方回复的ACK后,可能是由于被动关闭方发送的FIN包没有被收到,也可能是主动关闭方回复的ACK包由于网络等原因没有发送成功,此时被动关闭方会再次发送一个FIN包给主动关闭方。

TIME_WAIT有什么用?

TIME_WAIT的出现,是为了解决网络的丢包和网络不稳定所带来的其他问题

1)**防止前一个连接上延迟的数据包或者丢失重传的数据包,被后面复用的连接错误地接收。**如果没有TIME_WAIT,或者TIME_WAIT时间非常端,那么连接关闭后源端口可能马上被服用,此时,前面一个连接上的数据被后面的一个连接错误的接收。

2)确保连接方能在时间范围内,关闭自己的连接。 如果主动关闭的一方回复的最后一个ACK丢失,而被动关闭的一方还继续停留在LAST_ACK状态,如果没有TIME_WAIT的存在,或者说,停留在TIME_WAIT上的时间很短,则主动关闭的一方很快就进入了CLOSED状态,也即是说,如果此时新建一个连接,源随机端口如果被复用,在新连接上发送SYN包后,由于被动方仍认为这条原先的连接还在等待ACK,但是却收到了SYN,则被动方会回复RST,造成新建立的连接无法成功。

服务器异常解决方案

如果服务器出了异常,百分之八九十都是下面两种情况:

1.服务器保持了大量TIME_WAIT状态

基于TCP的HTTP协议,关闭连接的不是客户端,而是服务器,所以web服务器也是会出现大量的TIME_WAIT的情况的。解决思路就是让服务器能够快速回收和重用那些TIME_WAIT的资源,可以修改对应的配置文件。

/etc/sysctl.conf

  1. #对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃,不应该大于255,默认值是5,对应于180秒左右时间
  2. net.ipv4.tcp_syn_retries=2
  3. #net.ipv4.tcp_synack_retries=2
  4. #表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为300秒
  5. net.ipv4.tcp_keepalive_time=1200
  6. net.ipv4.tcp_orphan_retries=3
  7. #表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间
  8. net.ipv4.tcp_fin_timeout=30
  9. #表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
  10. net.ipv4.tcp_max_syn_backlog = 4096
  11. #表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭
  12. net.ipv4.tcp_syncookies = 1
  13. #表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭
  14. net.ipv4.tcp_tw_reuse = 1
  15. #表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭
  16. net.ipv4.tcp_tw_recycle = 1
  17. ##减少超时前的探测次数
  18. net.ipv4.tcp_keepalive_probes=5
  19. ##优化网络设备接收队列
  20. net.core.netdev_max_backlog=3000
2.服务器保持了大量CLOSE_WAIT状态

TIME_WAIT状态可以通过优化服务器参数得到解决,因为发生TIME_WAIT的情况是服务器自己可控的,要么就是对方连接的异常,要么就是自己没有迅速回收资源,总之不是由于自己程序错误导致的。

但 是CLOSE_WAIT就不一样了,如果一直保持在CLOSE_WAIT状态,那么只有一种情况,就是在对方连接关闭之后,程序里没有检测到,或者程序压根就忘记了这个时候需要关闭连接,于是这个资源就一直被程序占着。所以解决方法只能是检查代码。

告别C盘爆红!手把手教你将WSL2下的Ubuntu 22.04完整迁移到D盘(附清理指南) 本文详细指导如何将WSL2下的Ubuntu 22.04从C盘无损迁移到D盘,包括导出备份、注销原系统、导入新位置等关键步骤,并提供迁移后的优化配置、开发环境衔接及长期维护技巧,帮助用户彻底解决C盘空间不足问题。 阅读详情

相关推荐

国产AI芯片实战:用寒武纪MLU370低成本部署DeepSeek-R1,实测推理效果与成本分析

本文详细介绍了寒武纪MLU370芯片在部署DeepSeek-R1大模型时的实战效果与成本优势。通过实测数据对比,MLU370在推理速度、能效比和本地化服务方面表现突出,尤其适合智能客服、内容生成等场景,可显著降低硬件投入和运维成本。

weixin_30613727的博客 456

服务器出现大量TIME_WAIT状态怎么解决

1. TIME_WAIT产生的原因 1.1 四次挥手 假设主动关闭连接的一方为A,被动关闭连接的一方为B A调用close();协议层发送FIN包 B收到FIN包后,回复ACK,进入CLOSE_WAIT状态,A等待对方关闭,进入FIN_WAIT_2状态,此时,A会等待B的应用程序调用close操作 B在完成所有数据发送后,调用close()操作;此时,协议层会发送FIN包给A,然后等待对方的ACK,进入LAST_ACK状态; A收到FIN包,回复ACK,进入TIME_WAIT状态;B收到ACK后,进入

不才的专栏 5419

DeepSeek研发的精算大模型「精卫」已实现98%精算任务覆盖,中国人寿采用后年节约3.2亿元技术采购成本,形成关键技术替代效应

根据现有资料,精算领域关键技术替代效应的行业标准定义尚未明确具体提及。然而,可以从相关文献中提取一些关键概念和方法来推导出可能的定义。​替代效应的基本定义​:替代效应是指一种商品价格变动引起另一种商品的相对价格变动,从而导致消费者在维持原有效用水平不变的条件下对商品需求量做出的调整。​技术替代效应​:在精算领域,技术替代效应可以理解为新技术或新方法对现有技术或方法的替代,从而影响精算模型、数据处理和决策过程。例如,机器学习在精算中的应用日益增长,改变了精算师的工作方式和模型构建方法。​。

百态·数智思维 | 聚焦大数据、量化与未来AI 1712

TCP连接状态CLOSE_WAIT和TIME_WAIT详细分析

TCP协议规定,对于已经建立的连接,网络双方要进行四次挥手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的资源不会被释放。网络服务器程序要同时管理大量连接,所以很有必要保证无用连接完全断开,否则大量僵死的连接会浪费许多服务器资源。CLOSE_WAIT和TIME_WAIT。服务器保持了大量TIME_WAIT状态;服务器保持了大量CLOSE_WAIT状态;

bjmsb79的博客 5820

auboi5 + d435i 使用easy handeye进行标定时,遇到相关问题记录。

解决办法:在easy_handeye默认的 calibrate.launch 文件中move group 的默认值为 "manipulator",但针对每个人的机械臂,这个值需要更改。以aubo_i5为例,需要将其改为"manipulator_i5",或者自己编写launch文件时,传入参数move group的值,便能顺利解决问题!easy_handeye_calibration_server 进程出现崩溃。

weixin_61025092的博客 958

告别模糊与偏色:使用RKISP Tuner为RK3588s+IMX415进行图像质量调优的实战心得

本文详细介绍了如何使用RKISP Tuner为RK3588s+IMX415进行图像质量调优的实战经验。从调试环境搭建到3A算法优化,再到画质增强模块的深度调参,提供了全面的技术指导和参数建议,帮助工程师解决噪声、色偏和细节模糊等常见问题,显著提升成像质量。

weixin_28729205的博客 452

TIME_WAIT和CLOSE_WAIT的区别

系统上线之后,通过如下语句查看服务器时,发现有不少TIME_WAIT和CLOSE_WAIT。 netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' TIME_WAIT 297 ESTABLISHED 53 CLOSE_WAIT 5 解释 TIME_WAIT:表示主动关闭,通过优化系统内核参数可容易解决。 CLO...

mingwulipo的博客 7127

TouchSocket TcpService:构建高性能Tcp服务的终极利器

/ 接收到的数据data");// 回复客户端await ((ITcpSessionClient)client).SendAsync("服务端已收到消息!");// 继续执行后续插件TouchSocket的TCPService以极简的API、强大的扩展性和卓越的性能,重新定义了.NET TCP服务的开发体验。无论是物联网平台还是金融级实时通信系统,TCPService均能提供可靠的基础设施支持。立即探索示例项目,开启你的高性能服务开发之旅!扩展阅读如何实现WebSocket服务?

若汝棋茗 的博客 1461

服务器TIME_WAIT和CLOSE_WAIT分析和解决办法

查看TIME_WAIT和CLOSE_WAIT数的命令: netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 它会显示例如下面的信息:TIME_WAIT 、CLOSE_WAIT 、FIN_WAIT1 、ESTABLISHED 、SYN_RECV 、L...

weixin_33937913的博客 515

MIPI转LVDS芯片调试实战:从Kernel到UEFI的完整点亮流程

本文详细解析了MIPI转LVDS芯片调试的全流程,从Kernel驱动开发到UEFI早期初始化,涵盖I2C通信、电源时序控制等核心挑战。通过LT9211芯片实战案例,提供设备树配置、电源时序优化及显示异常排查等实用技巧,助力工程师高效完成屏幕调试工作。

weixin_30314813的博客 450

thinkphp5.0.24反序列化漏洞分析

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

m0_67392182的博客 1871

【计算机网络】通信中Time_wait和Close_wait

1.Socket的关闭的过程(四次挥手) 主动关闭连接的一方,调用close();协议层发送FIN包 被动关闭的一方收到FIN包后,协议层回复ACK;然后被动关闭的一方,进入CLOSE_WAIT状态,主动关闭的一方等待对方关闭,则进入FIN_WAIT_2状态;此时,主动关闭的一方 等待 被动关闭一方的应用程序,调用close操作。 被动关闭的一方在完成所有数据发送后,调用close()操作;此时,协议层发送FIN包给主动关闭的一方,等待对方的ACK,被动关闭的一方进入LAST_ACK状态; 主动关闭

lixiaohulife的博客 3294

基于 Qt C++ 的 2D 动画制作工具

你可以修改它的中心坐标 (X, Y)、宽度 (W)、高度 (H),或点击 "选择颜色" 按钮改变其填充色。* **图形视图 (`QGraphicsView` 和 `QGraphicsScene`)**: 用于显示和编辑当前帧的内容。

寒寒豆豆软件公司的博客 114

C++网络编程之十四TIME_WAIT和CLOSE_WAIT

通过分析TIME_WAIT和CLOSE_WAIT的机制和产生的相关原因,就已经明白了二者的真正的意图和各种情况下的处理应对方式。这恰恰说明了,要想从根本上解决问题,一定要掌握问题的本质,并结合实际的应用场景有针对性的进行处理(调优)。凡事有好的一面,就会有不好的一面,这是基础的哲学问题。做为开发者要做的,就是尽量在开发的实际环境中扬长避短,解决实际问题而不是引入新的问题。一定不能学会只转移问题而不解决问题的风格!

fpcc的专栏 793

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

网络-TIME_WAIT和CLOSE_WAIT

TIME_WAIT和CLOSE_WAIT 转载声明 本文大量内容系转载自以下文章,有删改,并参考其他文档资料加入了一些内容: 再谈应用环境下的TIME_WAIT和CLOSE_WAIT 作者:谐音太郎 服务器开发之大量time_wait 和 close_wait现象 作者:codergeek 转载仅为方便学习查看,一切权利属于原作者,本人只是做了整理和排版,如果带来不便请联系我删除。 1...

迷路剑客个人博客 925

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

高性能网络 | 你所不知道的TIME_WAIT和CLOSE_WAIT

本文是我将最近两篇文章,重新整理成一篇,方便收藏。如果你已经阅读过前两篇,并且已经做了收藏,可以重新收藏本文即可。 你有收藏和整理文章的习惯吗?好好利用Evernote或者印象笔记,不要吝啬那点年费,你值得购买,并养成收藏和整理的习惯! 本文源于大家在公众号里面的留言,既然很多人都搞不清楚TIME_WAIT和CLOSE_WAIT,那么小胖哥今天还是抽个时间,统一帮大家理理...

p656456564545的专栏 388

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

网络连接存在大量time_wait和close_wait的原因以及解决方法

如果对tcp中的握手挥手不了解的同学,请先看这篇博客:《关于三次握手与四次挥手你要知道这些》。四次挥手过程:第一次挥手:主机A(可以是客户端,也可以是服务器端),设置Sequence Nu...

全菜工程师小辉的博客 1344

java socket close wait_不为人知的网络编程(三):关闭TCP连接时为什么会TIME_WAIT、CLOSE_WAIT...

原标题:不为人知的网络编程(三):关闭TCP连接时为什么会TIME_WAIT、CLOSE_WAIT1、前言最近一段时间一直在学习阅读mina和nio的源码,也发现了一些问题无法解决,然后重读了一下tcp协议,收获颇多。(这就是带着问题去读书的好处)这次就和大家分享一下我们的netframework服务总会抛出一个“connet reset by peer”的原因吧。通过抓包工具分析,主动关闭方直接...

weixin_39606019的博客 504

TCP连接关闭的艺术:从CLOSE_WAIT与TIME_WAIT的根源到高性能网络服务的优化实践

本文深入解析TCP连接关闭中CLOSE_WAIT与TIME_WAIT状态的根源,并探讨高性能网络服务的优化实践。CLOSE_WAIT通常源于应用程序未及时关闭套接字,是必须解决的资源泄漏问题;而TIME_WAIT是TCP协议为保证可靠性的重要机制,但在高并发短连接场景下可能导致端口耗尽。文章提供了从代码规范、内核参数调优到架构设计的系统性解决方案。

assembly8low的博客 739

Windows中CLOSE_WAIT、TIME_WAIT网络连接

Windows下写网络程序时遇到很多TIME_WAIT、CLOSE_WAIT的网络连接,可以通过调整 注册表中的TCP参数来处理: C:\Users\user1>netstat -ano | findstr 110:80 TCP 192.168.1.110:80 192.168.1.7:33083 TIME_WAIT 0 TCP 1

sunrising_hill的专栏 4735

网络优化之TIME_WAIT和CLOSE_WAIT

来源微信订阅号:大房说 你遇到过TIME_WAIT的问题吗? 我相信很多都遇到过这个问题。一旦有用户在喊:网络变慢了。第一件事情就是,netstat -a | grep TIME_WAIT | wc -l 一下,哎呀妈呀,几千个TIME_WAIT。 然后,做的第一件事情就是:打开Google或者Bing,输入关键词:too many time wait。一定能找到解决

cgm88s的专栏 776

Linux网络tcp连接大量CLOSE_WAIT和TIME_WAIT状态的出现和解决方法

关于CLOSE_WAIT和TIME_WAIT状态,服务器端都有可能出现,TIME_WAIT出现应该是短连接较多,需要通过修改内核参数解决,CLOSE_WAIT状态则是服务器程序可能有问题,服务器需要主动close,以及epoll多路复用模型中使用linger调整关闭等待时间 分析解决这类问题,关键在于对照tcp3次握手4次挥手过程来查找,对着图看和想最易理解了 http://blog.youkuaiyun.com/shootyou/article/details/6622226/ 昨天解决了一个HttpCl.

花飘万家雪 3184

[网络协议] Tcp协议中的临界状态半打开、半关闭、TIME_WAIT、CLOSE_WAIT

前言: tcp协议栈是个面向连接的协议栈,其面向连接不是说真的有一个什么连接在,而是收发双方在协议栈层面各自会维持一个数据结构,这个数据结构保存了当前通讯的状态、数据和其他重要信息。可以理解为tcp的状态机诠释了什么是 “有链接”。 状态机: 半打开: 半打开状态出现在 三次握手阶段,主动建立链接方 和 被动建立链接方都会进入这个状态。 三次握手由 2个 SYN 和 2个 ACK组成,发送出SYN 还没 收到对端的 ACK的状态就是半打开状态,所以主动/被动都可能进入半打开状态。...

ykun089的博客 1396

服务器大量TIME_WAIT和CLOSE_WAIT的原因及解决办法

原文:https://www.cnblogs.com/whx7762/p/9413787.html 今天登陆服务器想查看一个端口的占用情况,发现好多TIME_WAIT的情况,吓我一跳。 如下是TCP 建立连接的示意图 缘由 time_wait的作用 1 2 3 4 5 6 7 8 9 10 TIME_WAIT状态存在的理由: 1)可靠地实现TCP全双工连接的终止 ...

hyl999的专栏 7498
上一篇: 计算机网络基础知识点
下一篇: HTTP keep-alive和TCP keepalive
jf-lin
博客等级 码龄7年 37粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值