关于TCP连接的Close

TCP连接CLOSE_WAIT和TIME_WAIT状态学习总结 0、引言 生产环境中,运行一段时间后,发现经常出现残留着大量的TCP链接,如下图所示,这些残留的TCP链接占用着系统的资源,一旦数量过大的话,会导致系统资源耗尽,甚至崩溃,急需排查解决。 2、TCP/IP的连接和断开过程 2.1 三次握手建立连接 第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。 第二次握手:服务器B收到S... 阅读详情

TCP建立连接需要三次握手,断开连接需要四次握手,本来也挺简单的,但是在实际的项目中,由于没注意,出现了问题,现在将出现的问题描述一下。挺简单的,就是服务器在Windows Server 2003中运行,通过局域网Client去连接Server,自定义消息发送数据给Server。因为客户端连接Server有很多,而且很多方式,有长连接和短连接,采用了MFC的CSocket来处理,在服务器端维护了一个CPtrList的链表,用来处理客户端的消息,全天候运行,结果发现过了一段时间客户端连接不上服务器了。利用netstat -a发现好多端口都是CLOSE_WAIT状态,仔细找了各种原因,包括网络,有说改变注册表KeepAliveTime等参数的,以及调用setsocketopt,都不行,最后查了TCP/IP协议才知道,原来是客户端虽然调用了Close方法关闭了连接,但是服务器端没有Close掉(处于Passive close,被动关闭),导致了Server CLOSE_WAIT状态,为了解决这个问题,在消息里定义了命令服务器关闭Socket的消息,跟踪了一下,服务器处于TIME_WAIT状态,TIME_WAIT会根据注册表中的TCPTimedWaitDelay(默认为30秒)后自动释放。原理如下图:



TCP连接TIME_WAIT、CLOSE_WAIT 1、首先先了解tcp建立连接的三次握手 2、四次挥手 3、建立连接后tcp连接的状态 4、客户端主动发起断开连接时的状态(当然也可以由服务端主动发起断开连接) 5、服务器有大量TIME_WAIT状态的原因如下 对于基于TCP的HTTP协议,关闭TCP连接的是Server端,这样,Server端会进入TIME_WAIT状态,可想而知,对于访问量大的Web Server,会存在大量的TIME_WAIT状态,假如Server一秒钟接收1000个请求,那么就.. 阅读详情

相关推荐

TCP 进阶:端口号、TCP 初始序列号、CLOSE_WAIT过多的解决方法;短连接,并行连接,持久连接与长连接; 心跳

前言 ➜ myapp git:(master) ✗ flutter devices see also https://www.jianshu.com/p/9aaabc60d8af https://flutter.io/docs/get-started/codelab https://flutterchina.club/get-started/test-drive/#terminal htt...

专注于计算机研发知识和资讯分享 1万+

QT TCPServer::Close()后导致进程异常完美解决

后,仍会收到客户端的数据,并且根本没有disconnected()信号发出。如果客户端不发送数据,那么过15s|左右,会收到disconnected()信号,程序也可正常退出。调试后发现,server.close()后,并没断开client的连接!//读取客户端数据 connect(clientConnect,&QTcpSocket::readyRead,this,[=]{这时,disconnected()信号也立刻收到了,完美解决问题!//客户端断开后,从链表中移除。

happy_tom的博客 739

Code::Blocks 17.12 中文版

Code::Blocks 17.12 中文版 汉化方法: 1.关闭Code::Blocks 2.将share文件夹覆盖到Code::Blocks根目录下 3.打开Code::Blocks 4.依次点击Settings --> Environment... -->View 5 .将第二个选项Internationalization(will take place after restart)打勾 6.选中Chinese(Simplifield) 7.点击OK,然后重启Code::Blocks

优雅/粗暴地关闭TCP连接--close-shutdown的选择

一个 TCP 连接需要经过三次握手进入数据传输阶段,最后来到连接关闭阶段。在最后的连接关闭阶段,我们需要重点关注的是“半连接”状态。 因为 TCP 是双向的,这里说的方向,指的是数据流的写入 - 读出的方向。 比如客户端到服务器端的方向,指的是客户端通过套接字接口,向服务器端发送 TCP 报文;而服务器端到客户端方向则是另一个传输方向。在绝大数情况下,TCP 连接都是先关闭一个方向,此时另外一个方向还是可以正常进行数据传输。 举个例子,客户端主动发起连接的中断,将自己到服务器端的数...

u011721450的博客 7458

SharedCode

一个用于VB6.0编程自开发的常用控件,非常漂亮。并有完整的代码

Java使用easyExcel生成excel文件直接写入邮件附件并发送

1.引入pom依赖 <!-- email --> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </dependency> <!-- easyexcel需要依赖poi jar包 --> <depe

weixin_50493320的博客 3910

TCP连接的状态与关闭方式,及其对Server与Client的影响

首先介绍一下TCP连接建立与关闭过程中的状态。TCP连接过程是状态的转换,促使状态发生转换的因素包括用户调用、特定数据包以及超时等,具体状态如下所示:CLOSED:初始状态,表示没有任何连接。LISTEN:Server端的某个Socket正在监听来自远方的TCP端口的连接请求。SYN_SENT:发送连接请求后等待确认信息。当客户端Socket进行Connect连接时,会首先发送SYN包,随即进入S

zhaofuguang的专栏 1万+

UsualToolCMS-验证码绕过漏洞复现

本文以UsualToolCMS为靶场,复现了验证码绕过漏洞

小小小屿屿屿的博客 919

TCP/IP详解学习笔记(10)-TCP连接的建立与中止

TCP是一个面向连接的协议,所以在连接双方发送数据之前,都需要首先建立一条连接。这和前面讲到的协议完全不同。前面讲的所有协议都只是发送数据而已,大多数都不关心发送的数据是不是送到,UDP尤其明显,从编程的角度来说,UDP编程也要简单的多----UDP都不用考虑数据分片。书中用telnet登陆退出来解释TCP协议连接的建立和中止的过程,可以看到,TCP连接的建立可以简单的称为三次握手,而连接的中

一块积木 2万+

C51:PWM+舵机角度控制

PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于高电平的时间占据整个信号周期的百分比,例如方波的占空比就是50%.脉冲宽度调制通过占空比编码模拟信号一个周期内,高电平占据时长的百分比如下图所示,最便宜的舵机sg90,常用三根或者四根接线,黄色为PWM信号控制。

qq_73379310的博客 3388

初识数据结构之入门必懂——线性表(顺序表)

本文将介绍数据结构中的线性表与线性表中最简单的结构——顺序表

m0_64705485的博客 905

tcp连接状态详解

对于linux 套接字通信,从连接建立到连接断开,其状态总共有11种,在三次握手和四次挥手,状态变化比较快,在连接建立时,状态比较稳定,下面简单介绍一下各个状态的情况。 状态汇总(11种): LISTEN:侦听来自远方的TCP端口的连接请求 SYN-SENT:再发送连接请求后等待匹配的连接请求(客户端) SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认(服务...

weixin_43608153的博客 1860

手把手教你用支付宝密钥工具生成RSA2密钥对(含Windows/Mac操作截图)

本文详细介绍了如何使用支付宝密钥工具生成RSA2密钥对,包括Windows和Mac平台的操作步骤与截图。从工具下载、安装到密钥生成、配置支付宝平台,再到开发环境集成实战,手把手教你完成支付宝支付接口对接。特别强调密钥安全管理和最佳实践,帮助开发者避免常见安全隐患。

mongodb5scout的博客 257

TCP连接关闭—close和shutdown

目录 1、多线程多进程关闭连接的区别 2、close的主要流程 1)关闭监听句柄 2)关闭普通ESTABLISH状态的连接(未设置so_linger) 3)使用了so_linger的连接 TCP连接的关闭有两个方法close和shutdown,这篇文章将尽量精简的说明它们分别做了些什么。 为方便阅读,我们可以带着以下5个问题来阅读本文: 1、当socket被多进程或者多线程共享时,关闭连接时有何区别? 2、关连接时,若连接上有来自对端的还未处理的消息,会怎么处理? 3、关连接时,若连接

weixin_43606861的博客 3473

VMware ubuntu虚拟机(或Centos7)与主机共享文件夹

系统环境 Windows 10 Vmware Workstation 15 Pro Ubuntu 20.04.1 LTS centos7 1.Ubuntu配置共享文件 1.1安装VMware-tools 更新最新VMware-tools组件 编辑->首选项->更新->立即下载所有组件 安装VMware-tools 虚拟机->安装VMware-tools 安装后ubuntu会加载一个虚拟光驱,解压文件,在解压的文件目录下执行以下命令进行安装 sudo vmware-instal

weixin_38924500的博客 2160

YOLOv11模型剪枝实战:让检测速度翻倍,精度仅降1%的终极优化教程

模型剪枝是YOLOv11落地边缘场景的“关键一步”——它让模型在“瘦身”的同时,几乎不损失精度。从稀疏化训练到通道剪枝,再到工程部署,本教程已为你打通全流程。现在就动手尝试,让你的YOLOv11模型在嵌入式设备、移动端上也能“飞起来”——相信我,当你看到剪枝后的模型在资源受限设备上仍能精准检测时,你会明白这份技术的价值。

m0_64661770的博客 711

TCP客户端断开连接后,服务器连接处于CLOSE_WAIT状态之解决办法

问题背景:         最近做C/S结构的程序,项目中需要开发TCP服务器端,需要能够接收多个客户端的连接请求。开发完成后,测试过程中出现了如题问题。  问题描述:         启动服务器,开启多个客户端,建立连接通讯,一切正常。关闭客户端(一个或多个),此时用netstat命令查看网络状态,发现所关闭的客户端的连接没有完全释放,而是处于CLOSE_WAIT状态。 解决方法:

chengx919的专栏 1万+

模型训练篇 | 手把手教你使用ResNet训练自己数据集和推理,ResNet50通用物体分类识别,含完整代码和数据集,全网最详细教程

手把手教你使用ResNet训练自己数据集和推理,ResNet50通用物体分类识别,含完整代码和数据集,全网最详细教程。本篇文章将带你学习 ResNet50 模型构建、ResNet50训练自己数据集、数据集处理、推理和验证、模型剪枝与模型改进等。 本篇教程适配各种分类识别任务,可以说是一个通用的教程,只需修改自己的数据集即可完成自己领域的任务和系统实现。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 732

【Tcp】TCP连接中存在大量TIME_WAIT、CLOSE_WAIT的原因【转】

TCP通信图 TIME_WAIT 表示客户端主动关闭socket。 原因: 大量的短连接存在 特别是 HTTP 请求中,如果 connection 头部取值被设置为 close 时,基本都由服务端发起主动关闭连接 TCP 四次挥手关闭连接机制中,为了保证 ACK 重发和丢弃延迟数据,设置 time_wait 为 2 倍的 MSL(报文最大存活时间) 后果: TCP 连接中,「主动发起关闭连接」的一端,会进入 time_wait 状态 time_wait 状态,默认会持续 2 MSL(报文的最大生存时

Leoh的博客 2249

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

TCP连接大量CLOSE_WAIT状态问题排查

CLOSE_WAIT产生原因   close_wait是被动关闭连接是形成的,根据TCP状态机,服务器端收到客户端发送的FIN,TCP协议栈会自动发送ACK,链接进入close_wait状态。但如果服务器端不执行socket的close()操作,状态就不能由close_wait迁移到last_ack,则系统中会存在很多close_wait状态的连接,如下图所示: 可能的原因如下: ...

u010325193的博客 1万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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

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

bjmsb79的博客 5821

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

解决tcp连接有大量close_wait问题

解决tcp连接有大量close_wait问题 问题现象 新部署的生产环境总有连接超时的情况,在服务器上通过以下脚本 netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 查询,发现CLOSE_WAIT较多 CLOSE_WAIT 101 ESTABLISHED 227 TIME_WAIT 4 排查过程 tcpdump抓包 分析抓包日志,发现负载均衡服务器F5的IP与后面应用的服务器IP不在同一个网段 解决方案 当跨网段nat

xiashenbao的博客 2663

Windows Server上TCP连接CLOSE_WAIT状态过多异常的排查心得

背景: Windows Server 2008 R2上运行着一个服务A,它会从某地接收数据和图片,接受到的图片通过HTTP请求的形式提交给Tomcat上的应用B,应用B负责将图片存储到HBase中。由于服务A接收到的图片数量较多,并发较高。每次接受到一张图片,就创建一个线程向应用B提交数据,提交完成后,线程结束。 表现出来的问题: 表现出来的问题当中,如下是最直接的三个问题: 在后台观察数据,可...

xkjcf 丛飞 家·国·天下 9299

TCP连接不释放,应用产生大量CLOSE_WAIT状态TCP

至此我有个大胆的猜测,请求进入项目之后,项目加工请求并转发给其他项目,但转发给系统项目的这段网络出现了什么问题(因为其他系统并未收到请求),又因为种种原因导致超时时间并未生效,慢慢的项目中所有Tomcat线程都阻塞在了。同事又说道:“老朱,这个项目比较特殊,项目中所有的接口基本只做了透传的事情,项目只是做简单的数据加工,然后请求其他系统,最后针对结果集再进行过滤、转换返回给前端”并且观察到所有的CLOSE_WAIT状态的TCP都是与Nginx建立的,问了运维同学,这台Nginx是这台后端应用的代理。

quanzhan_King的博客 4992

tcp连接大量CLOSE_WAIT

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'      LAST_ACK 1   SYN_RECV 15   CLOSE_WAIT 7729    ESTABLISHED 471   FIN_WAIT1 3   FIN_WAIT2 52   SYN_SENT 1   TIME_WAIT 7

realmeh的专栏 1595
上一篇: 双网卡接入两个网络(Windows)
下一篇: Linux常用到的命令
shareCode
博客等级 码龄15年 125粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值