TCP关闭全状态记录

当接收端的内核缓冲区中的数据没有全部交给应用程序时, 如果接收端关闭socket(比如调用close或者进程挂掉),就会回以RST报文 在通常情况下,  调用close的时候, 会发FIN包, 但是, 如果接收端没有用recv把内核缓冲区的数据取完, 却执行了关闭socket的操作(比如调用close或者进程挂掉), 那么这就是异常的情况, 此时接收端会回RST报文。         我们来看看, 服务端程序为: #include #include #include #include #include #includ 阅读详情

 关闭时状态转变:

client:   Fin_wait_1 -> Fin_wait_2 -> Time_wait -> closed

server: Close_wait -> Last_ack -> closed

 

Fin_wait_1 发生在client 发出Fin包后, 并等待server 回 ack 时.

Fin_wait_2 发生在client收到ack包后, 并等待server发出Fin包时.

Time_wait 发生在client收到Fin包并发出ack包后, 在等待2msl的时间时.

Close_wait 发生在server收到client的fin包并且发出ack包后以及自己主动关闭发出fin包前.

Last_ack发生在server发出fin包后, 并等待client回ack时.

 

经常出现的状态组合:

  • client: fin_wait_2;  server: close_wait

原因: 当client close了,但是server忘记close的时候, 即server在收到client的fin后并没有发送fin包给client, 导致自己处于close_wait状态, 而client在等待server的fin包,处于fin_wait_2状态.

 

  •  client:time_wait; server: closed

原因: 当client, server都close了, client必须处于time_wait状态等待2msl时间. 于是如果server是处于高并发短连接的状态, 就会有大量的time_wait的连接霸占着. 使得其他的连接连接不了.

 

解决方法: 用linger强制关闭可以解决此问题(用rst代替fin),但是linger会导致数据丢失,linger值为0时是强制关闭,无论并发多少多能正常连接上,如果非0会发生部分连接不上的情况!(可调用setsockopt设置套接字的linger延时标志,同时将延时时间设置为0。)
TCP/IP的RFC文档。TIME_WAIT是TCP连接断开时必定会出现的状态。
是无法避免掉的,这是TCP协议实现的一部分。
在WINDOWS下,可以修改注册表让这个时间变短一些
time_wait的时间为2msl,默认为4min.
你可以通过改变这个变量:
TcpTimedWaitDelay
把它缩短到30s

 

PS: Linux 查看 tcp 状态的命令 netstat -an | grep portnumber

 

 

Linux close()和shutdown()的区别.

 

    Linux的版本是kernel-2.6.21:
    1,只要TCP栈的读缓冲里更有未读取(read)数据,则调用close时会直接向对端发送RST。
    2,shutdown和socket描述符没有关系,即使调用shutdown(fd, SHUT_RDWR)也不会关闭fd,最终还需close(fd)。
    3,能认为shutdown(fd, SHUT_RD)是空操作,因为shutdown后还能继续从该socket读取数据,这点也许还需要进一步证实。
    4,在已发送FIN包后write该socket描述符会引发EPIPE/SIGPIPE。
    5,当有多个socket描述符指向同一socket对象时,调用close时首先会递减该对象的引用计数,计数为0时才会发送FIN包结束TCP连接。shutdown不同,只要以SHUT_WR/SHUT_RDWR方式调用即发送FIN包。
    6,SO_LINGER和close,当SO_LINGER选项开启但超时值为0时,调用close直接发送RST(这样能避免进入TIME_WAIT状态,但破坏了TCP协议的正常工作方式),SO_LINGER对shutdown无影响。
    7,TCP连接上出现RST和随后可能的TIME_WAIT状态没有直接关系,主动发FIN包方必然会进入TIME_WAIT状态,除非不发送FIN而直接以发送RST结束连接。

 

TCP连接及状态分析 附:当服务器存在大量TIME_WAIT和CLOSE_WAIT时,说明有大量连接关闭,可通过。协助分析,若累积达到句柄上线时会出现。 阅读详情

相关推荐

vpp tcp的正常关闭和异常关闭

正常关闭: 1、被动关闭(接收到fin报文) 1.1、TCP_STATE_ESTABLISHED 发送fin报文的ack,设置TCP_STATE_CLOSE_WAIT; 将连接添加到wrk->pending_disconnects向量,连接打上TCP_CONN_DCNT_PENDING标记; 1.2、TCP_STATE_SYN_RCVD(服务端第一次握手申请的客户端连接,此连接未在app端进行对应的连接申请) 发送fin报文,设置连接为T...

qq_29044159的博客 608

tcp断开

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

dinkysummydinky的专栏 1158

TCP状态迁移,CLOSE_WAIT & FIN_WAIT2 的问题解决

对于服务器挂起中的CLOSE_WAIT & FIN_WAIT2 解决方案。

TCP的连接和释放

TCP的连接 TCP连接的建立采用客户服务器方式。TCP连接可分为通信双方一方发起连接和双方同时发起连接。 一方发起连接         假设A方为客服端,B为服务器端,由A向B发起建立连接请求。         B的服务器进程创建传输控制块TCB,准备接受客户进程的连接请求。然后服务器进程处于LISTEN状态,等待客服端的连接请求。         A打的TCP客服端进程创建控制块TC

无语的阿辉 1万+

Cox构建预测模型(5):如何用R语言绘制校准曲线(附全套代码)

这篇文献通过绘制两个模型的DCA曲线来评估模型的临床决策实际需求,一个是列线图模型,包括纳入列线图的全部变量,一个是TNM模型,只纳入TNM分期3个变量。A图是训练集1年、3年、5年患者的总生存期的DCA曲线;B图是训练集1年、3年、5年患者的总生存期的DCA曲线,红色线条代表列线图模型(包括构建模型的10个变量),黄色线条代表TNM模型(仅纳入TNM分期3个变量),两个模型对比,在绘制校准图之前,必须要完成数据的导入、拆分数据集的工作、预测因子的筛选,校准图的绘制是分别在训练集与验证集独立进行的。

qq_37610365的博客 1360

MacOS M芯片部署ComfyUI:从环境排雷到插件生态一站式指南

本文为MacOS M系列芯片用户提供了一份详尽的ComfyUI部署指南。文章深入剖析了因架构差异导致的常见安装报错根源,并给出了基于MPS后端的正确PyTorch安装命令。从创建纯净Python虚拟环境、分步安装依赖,到验证GPU加速,手把手指导完成部署。同时,还推荐了包括管理器、汉化在内的必备插件,以完善使用生态,帮助用户一站式解决从环境搭建到效率提升的所有问题。

weixin_29261711的博客 993

QTcpSocket 读取内容

方法一、在这里最好用bytesAvailable,因为在用canReadLine()的时候,有时会出现还有内容可读,却返回false的情况 while(socket.bytesAvailable()) { tmp=socket.readLine(); response<<tmp; }方法二、这种方...

zhubingke的博客 2889

立创EDA实战:基于NE555的夜间氛围呼吸灯电路设计与模式切换

本文详细介绍了使用立创EDA设计基于NE555芯片的夜间氛围呼吸灯电路。项目核心是利用NE555产生PWM信号,并通过RC充放电电路实现LED亮度的缓慢周期性变化,形成呼吸效果。文章手把手教学,涵盖从电路原理分析、元件参数计算,到在立创EDA中进行原理图绘制、PCB布局布线,直至焊接调试的完整硬件设计流程,是电子爱好者入门实战的经典项目。

weixin_42153793的博客 125

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

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

zhaofuguang的专栏 1万+

GSview5.0安装步骤及问题

GSview5.0安装步骤及问题安装步骤遇到的问题 尝试过很多对图片去白边的方法,感觉最好用最有效的还是用GSview比较好操作。本文针对gsview安装及安装过程中踩过的坑记录下来。 安装步骤 在官网下载gsv50w64.exe(或32位的),直接双击安装即可。 安装Ghostscript;注意:GSview5.0不支持最新版的Ghostscript9.54,这里用到是9.27的版本可以在Github中找到,下载gs927w64.exe,一定要安装在GSview的安装目录Ghostgum下 Gho

LilianLYN的博客 1万+

【大数据Java基础-Java基础01】环境搭建(一)Sublime Text3搭建Java编译环境(Windows系统)

1. 首先配置好Java环境变量 我的jdk版本是1.8.0_191,存放目录是C:\Program Files\Java,因此添加以下环境变量 (1)系统变量→新建 JAVA_HOME 变量,变量值为: C:\Program Files\Java\jdk1.8.0_191 (2)系统变量→找到 Path 变量→编辑,末尾加入: ;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin 如果Path变量末尾本身有“;”,则上述路径前面则不需要加“;” (3)系统变量→新建 CL

微信搜:import_bigdata,大数据领域硬核原创作者 554

TCP连接的状态详解以及故障排查

我们通过了解TCP各个状态,可以排除和定位网络或系统故障时大有帮助。(总结网络上的内容) 1、TCP状态 了解TCP之前,先了解几个命令: linux查看tcp的状态命令: 1)、netstat -nat 查看TCP各个状态的数量 2)、lsof -i:port 可以检测到打开套接字的状况 3)、 sar -n SOCK 查看tcp创建的连接数 4)、tcpdump -iany...

黄规速博客:学如逆水行舟,不进则退 23万+

麒麟操作系统安装教程(保姆级)

本文介绍了如何在VM中安装麒麟操作系统,文章详细的介绍了麒麟操作系统按钻过步骤。

啊渊的专栏 1万+

TCP状态机

TCP状态机在本质上就是三次握手和四次挥手,所以先来看一下三握四挥的过程。如果有机会,以后会使用实际的操作来进行说明。 关于TCP的基本知识,在这就不说了,以后有空再写一篇文章来进行记录。 三次握手 三次握手就是TCP建立连接的过程,因为我们知道TCP是可靠的,有连接的,所以在通信双方进行数据交换前要先建立连接。 首先先明确一下在传输过程中的一些符号。 32位序号 seq:Sequence number,TCP通信过程中某一个传输方向上的字节流的每个字节的序号,通过这个来确认发送的数据有序。 32位确

weixin_43677673的博客 4390

STM32入门教程:智能储物柜控制

在这个例子中,我们将使用一个4x4的储物柜,共有16个储物格。我们了解了硬件准备、储物柜电路设计、STM32的基本配置、储物柜控制代码的编写以及测试和调试等方面的知识。根据我们的电路设计,我们需要将一些引脚配置为输出,并将其他引脚配置为输入。在本教程中,我们将使用STM32微控制器来实现一个基本的智能储物柜控制系统。在主函数中,我们将不断循环读取传感器数据,并根据数据的变化来控制储物柜的开关和显示相关信息。这个函数将读取人体感应传感器、温湿度传感器和光照传感器的数据,并将数据存储到相应的变量中。

m0_75244442的博客 660

【YOLOv11】014、YOLOv11模型导出:PyTorch到ONNX格式转换与优化

摘要:本文详细介绍了如何将PyTorch训练的YOLOv11模型高效转换为ONNX格式。重点包括:分离模型特征提取与后处理、设置动态维度、优化ONNX算子、验证转换正确性等关键步骤。作者分享了实际项目中的经验教训,如版本对齐、算子兼容性处理、后处理分离等实用技巧,并推荐使用onnx-simplifier工具优化模型。文章强调模型转换是一个需要反复调试的过程,建议保留转换记录形成知识库,以提高部署效率并避免常见错误。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 305

TCP/IP卷一:68---TCP连接管理之(TCP状态转换图、TIME_WAIT状态、静默时间、FIN_WAIT_2状态、同时打开/同时关闭的状态)

一、TCP状态转换图 图中的状态用椭圆表示,而状态之间的转换则用箭头表示 TCP连接的每一端都可以在这些状态中进行转换: 有些转换是由于接收到某个控制位字段置位的报文段而引发的(例如,SYN,ACK,FIN) 而有些转换又会要求发送一些控制位字段置位的报文段 另外还有一些转换是由应用程序的动作或计时器超时引发的。上述各种情况都以文本注释的方式标记在转换图的相关箭头旁边 当初...

董哥的黑板报 3967

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

TCP有限状态机

TCP 有限状态机 很多人都知道TCP协议有名的三次握手和四次挥手,实际上它们是基于TCP协议的简约版的抽象,而这两个动作的背后本质上是TCP的协议转换; TCP协议的操作流程可以使用一个包含11种状态的有限状态机( Finite State Machine )来表示,即下图描述了TCP有限状态机的运作流程,箭头指向表示状态之间的转换,粗实线表示客户端主动与和服务端建立连接的流程,粗虚线表示对应的...

fly9006的博客 2318

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

TCP建立和关闭的过程

一、TCP协议简介 TCP,工作在OSI的传输层,提供面向连接的可靠传输服务。 TCP的工作主要是建立连接,然后从应用层程序中接收数据并进行传输。TCP采用虚电路连接方式进行工作,在发送数据前它需要在发送方和接收方建立一个连接,数据在发送出去后,发送方会等待接收方给出一个确认性的应答,否则发送方将认为此数据丢失,并重新发送此数据。 TCP报头总长最小为20个字节,其报头结构如下图

zephyr_be_brave的专栏 1130

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

TCP 状态机

TCP 状态机 TCP 协议的操作可以使用一个具有 11 种状态的有限状态机( Finite State Machine )来表示,图 3-12 描述了 TCP 的有限状态机,图中的圆角矩形表示状态,箭头表示状态之间的转换,各状态的描述如表 3-2 所示。图中用粗线表示客户端主动和被动的服务器端建立连接的正常过程:客户端的状态变迁用粗实线,服务器端的状态变迁用粗虚线。细线用于不常见的序列,如 ...

p656456564545的专栏 387

TCP的11种状态

TCP三次握手建立连接 Tcp头部 六个标志位中,我们要用到三个: SYN:SYN= 1表示这是一个连接请求或连接接受报文。在建立连接时用来进行同步序号(个人理解是,在建立连接的时候,提醒对方记录本方的起始序号)。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若是同意建立连接,则应响应的报文段中使SYN=1、ACK=1。因此SYN=1表示该报文是一个连接请求报文或者...

m493096871的博客 1060

tcp 连接详细关闭过程

TCP协议的连接是全双工连接,一个TCP连接存在双向的读写通道。  简单说来是 “先关读,后关写”,一共需要四个阶段。以客户机发起关闭连接为例: 1.服务器读通道关闭 2.客户机写通道关闭 3.客户机读通道关闭 4.服务器写通道关闭 关闭行为是在发起方数据发送完毕之后,给对方发出一个FIN(finish)数据段。直到接收到对方发送的FIN,且对方收到了接收确认ACK之后,双方的数据通信

baotoushashou的专栏 1776

linux查看tcp连接状态_TCP连接管理之(TCP状态转换图、TIME_WAIT状态、静默时间、FIN_WAIT_2状态)...

一、TCP状态转换图TCP/IP协议栈深度解析丨实现单机百万连接丨优化三次握手、四次挥手丨优化TCP的传输速率丨epoll原理剖析和面试必问的问题_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.comc/c++Linux实战训练精讲丨徒手实现网络协议栈丨TCP/IP协议栈丨面试必备系列_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.c...

weixin_39572972的博客 705

(UNP点滴记录) TCP连接建立和终止及TCP状态转换

2012-11-17 wcdj 关键字: UDP,TCP,三次握手,四次握手,TCP状态转换,11种状态,TIME_WAIT 用户数据报协议(UDP) UDP是一个简单的传输层协议(RFC 768)。 进程往一个UDP套接字写入一个消息,该消息随后被封装(encapsulating)到一个UDP数据报,该UDP数据报进而又被封装到一个IP数据报,然后发送到目的地。 (1) UDP的几

delphiwcdj的专栏 2765

连接状态_TCP连接管理之(TCP状态转换图、TIME_WAIT状态、静默时间、FIN_WAIT_2状态)...

一、TCP状态转换图TCP/IP协议栈深度解析丨实现单机百万连接丨优化三次握手、四次挥手丨优化TCP的传输速率丨epoll原理剖析和面试必问的问题_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.comc/c++Linux实战训练精讲丨徒手实现网络协议栈丨TCP/IP协议栈丨面试必备系列_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.c...

weixin_39703773的博客 709

TCP连接状态异常记录

参考:http://blueskykong.com/2018/07/26/tcp-close-wait/ 问题描述 分布式事务Lottor在测试环境中运行一段时间之后,出现Lottor客户端连接不上Lottor Server的情况。经过排查,发现根源问题是Lottor客户端获取不到Lottor Server的集群信息。 Lottor Server启动了两个端口:9666为Tomcat容器的...

SAN_YUN的专栏 812
上一篇: Sharing files between windows and linux
下一篇: (转)同步/异步与阻塞/非阻塞的区别
daeees
博客等级 码龄19年 6粉丝 51原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值