tcp 协议TIME_WAIT状态详解


上一篇文章提到执行主动关闭的一端进入 tcp TIME_WAIT状态,关于原因,unix网络编程卷一中给出两点:


1. 实现终止TCP全双工链接的可靠性,即保证tcp连接可靠断开。

2. 让老的重复分节在网络中消失
第一个原因的解释,执行主动关闭的一端最终会发ACK给对端,如果这个ACK最终丢失,那么发FIN的对端将由于在等待ACK超时后重发FIN分节,而如果主动关闭的一端在发完最终的ACK后清除此连接上状态信息,当再次收到对端的FIN分节时由于找不到对应的连接而报错,所以,如果TCP想彻底终止某个连接上两个方向的数据流(即全双工关闭),那么它必须处理连接终止序列四个分节中任何一个分节丢失的情况,这就是为何执行主动关闭的一端进入TIME_WAIT状态的第一个原因,因为它可能不得不重发最终的ACK分节给对端。

第二个原因,假设在一对ip及port上有一个连接,关闭这个连接后立即又建立起新的连接(同ip port),后一个连接为前一个的化身,因为ip port相同,tcp 必须防止来自某个连接的老分组在连接终止后再现,从而影响新连接的数据交互,所以tcp不能给处于TIME_WAIT状态的连接启动新的化身,从而被误解成属于同一连接。
TIME_WAIT状态的持续时间是最长分节生命期MSL(max segment lifetime)的2倍,即2MSL,既然tcp规定一个分节在网络中最大生存时间是 MSL,这足够让某个方向上的分节最多存活MSL秒即被丢弃,另一个方向的应答最多存活MSL秒也被丢弃,通过这个规则,就能保证当成功建立一个tcp连接时,来自该链接的之前所有连接的老的重复分组在网络中已消失。


每个TCP/IP 协议栈必须选择一个 MSL值,rfc 1122建议值为2分钟,而源自berkely的实现是30秒,需要注意的是如果此值过大,则在高并发服务器中tcp/ip协议栈必然要维护大量的TIME_WAIT状态的连接而消耗资源,所以一般作网络服务器优化时通常经过改小此值来减少维护此状态的资源。

详细设置及解决如下:

timeout_timewait 参数
描述:确定 TCP/IP 在释放已关闭的连接并再次使用其资源前必须经过的时间。关闭与释放之间的这段时间称为 TIME_WAIT 状态或者两倍最大段生存期(2MSL)状态。此时间期间,重新打开到客户机和服务器的连接的成本少于建立新连接。通过减少此条目的值,TCP/IP 可以更快地释放关闭的连接,并为新连接提供更多资源。如果正在运行的应用程序需要快速释放连接、创建新的连接,并且因为许多连接处于 TIME_WAIT 状态而导致低吞吐量,那么调整此参数。
如何查看或设置:
在我的ubuntu系统上此值为:
#cat /proc/sys/net/ipv4/tcp_fin_timeout
60
发出以下命令,将 timeout_timewait 参数设置为 30 秒:

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

相关推荐

西门子S7-1200控制伺服/步进电机方法与接线(全)

西门子S7-1200控制伺服/步进电机方法与接线(全) 伺服/步进电机在非标自动化控制中十分常用,但作者发现在各类开源网站上很少有人做西门子1200PLC控制伺服/步进电机的教程,于是今天想着跟大家分享一下。 本文共分为一下几个四个内容。 文章目录西门子S7-1200控制伺服/步进电机方法与接线(全)前言一、准备二、接线1.PLC接线:2.伺服接线:3. 步进电机的接线:三、代码组态代码四、可能出现的问题 前言 工程控制常用到三项异步电机、直流电机等,但他们都无法准确的控制电机角度;于是有了步进电机、

weixin_46060068的博客 7万+

服务端出现大量的time_waite为什么会占用服务端的端口呢?

一旦连接建立,服务器端也会为这个特定的连接分配一个本地端口号,这个端口号在服务器端是唯一的,用于区分来自不同客户端的连接。然而,当服务端与客户端建立TCP连接时,每个连接都会使用一对端口:服务端的监听端口和客户端的端口。在TCP连接的生命周期中,服务端和客户端的端口都会被使用。状态下,服务端的端口资源(即监听端口)不会被占用,因为监听端口是用于接受新的连接请求的。总结来说,服务器为每个已建立的TCP连接分配一个唯一的本地端口号,这是TCP协议设计的一部分,用于确保网络连接的可靠性和唯一性。

qq_42912847的博客 1247

汽车TSN时间敏感网络测试技术与探索系列讲座4 -TSN802.1AS同步要求及验证方法

TSN网络各设备类型同步性能要求是什么?各类设备的测试组网及测试内容。也将通过演示来展示相关测试结果,及如何解决上述的测试关注点。

weixin_43903833的博客 762

服务器出现大量的TIME_WAIT原因是什么?

最近工作碰到关于服务器 TIME_WAIT 的问题,在知乎上看到一篇文章,感觉写的不错,与大家分享。

流浪字节的博客 2790

Halcon —— 图像像素类型与转换

图像类型 就目前工业领域主流的图像处理工具halcon来讲,有以下几张图像类型:‘byte’, ‘complex’, ‘cyclic’, ‘direction’, ‘int1’, ‘int2’, ‘int4’, ‘int8’, ‘real’, ‘uint2’,具体含义如下图所示。相互间的转换可通过convert_image_type算子完成,但盲目转换会导致图像像素值异常。 ‘byte’ 每像素1字节,无符号 值范围: (0到255) ‘int1’ 每像素1字节,有符号 值范围: (-128到127) ‘

baidu_35536188的博客 1万+

YOLO11实战 第001期-基于yolo11的CrowdHuman密集行人目标检测实战文档(yolo格式数据免费获取)

1.数据阶段在拥挤/遮挡场景下,使用crowdhuman数据集重训练后的yolo11,效果表现较好。crowdhuman数据集标签如下,有Head BBox、Visible BBox、Full BBox。如下图显示:数据集介绍CrowdHuman数据集是旷世发布的用于行人检测的数据集,图片数据大多来自于google搜索。CrowdHuman数据集数据量比较大,15000张,5000张,验证集4370张。训练集和验证集中共有470K个实例,约每张图片包含23个人,同时存在各种各样的遮挡。

深度学习算法工程师,专注于前沿算法研究与实战应用。在这里,我将分享深度学习领域的实战经验、优质数据集资源以及最新论文解读与精度分析,旨在与广大技术爱好者共同探索人工智能的奥秘,助力技术成长与创新。 2168

TCP的TIME_WAIT状态

TCP链接的Client和Server拆除链接时,主动close链接的一方会出现该状态,原因有二(以Client主动close为例):1,如果没有TIME_WAIT状态,Client主动关闭时,Client发送ACK后即关闭本端链接。如果ACK传输过程中丢失的话,Server会重发FIN,Client收到该FIN由于本端链接已经关闭,会发送RST给Server,导致Server端关闭异常。    ...

kklvsports的专栏 331

【阿里AgentScope框架】多框架组合:AgentScope加LangChain,让你的开发效率直线上升

本文以一个例子来看下AgentScope框架和LangChain如何实现融合使用,真的超级简单,一看就懂。这是一种思路,为多种框架的融合使用提供借鉴。

同学小张的博客 3475

解决TimeWait过多的问题

原文链接:https://www.tiejiang.org/27040.html 1、 time_wait的作用: TIME_WAIT状态存在的理由: 1)可靠地实现TCP全双工连接的终止 在进行关闭连接四次挥手协议时,最后的ACK是由主动关闭端发出的,如果这个最终的ACK丢失,服务器将重发最终的FIN, 因此客户端必须维护状态信息允许它重发最终的ACK。如果不维持这个状态信息,那么客户端将响应RST分节,服务器将此分节解释成一个错误(在java中会抛出connection reset的SocketExc

后而来者 6610

绘制Winform动态折线图,LiveCharts如何打造数据可视化神器?

在C# Winform应用程序中,使用LiveCharts库来创建动态、美观的折线图不仅能够提升用户体验,还能直观展示数据趋势。下面,我们将通过一个详尽的示例,展示如何在Winform项目中集成LiveCharts并绘制折线图。:在Visual Studio中,选择“文件” > “新建” > “项目”,然后选择“Windows Forms 应用(.NET)”模板。LiveCharts的强大之处在于其高度的可定制性,你可以根据需求调整颜色、动画效果、交互方式等,让图表更加符合你的应用需求。

java专栏 1683

179、瑞芯微RK3588在边缘盒子中的多摄同步架构——基于PLL的帧同步与曝光同步的实测调优

第一,RK3588的多摄同步,硬件上确实支持,但软件配置的坑比想象的多。第三,传感器的tPD差异是最大的不确定因素,选型时尽量选同一批次,而且要在量产前做全温测试——我遇到过低温下tPD变化超过3微秒的情况,直接导致同步失效。我遇到过一批IMX415,tPD差异达到±8微秒,直接超出SYNC控制器的补偿范围,最后只能挑芯片,把差异小的装到同一台设备里。别用100MHz,虽然分辨率更高,但高频信号在PCB走线上更容易引入EMI,边缘盒子的结构件往往没有很好的屏蔽,实测100MHz下同步信号边沿抖动明显增大。

zzfmlxs的博客 40

TCP面试常见题:time_wait状态产生的原因,危害,如何避免

http://blog.youkuaiyun.com/u013616945/article/details/77510925 MSL(Maximum Segment Lifetime)最大报文生存时间         每个TCP实现必须选择一个MSL。它是任何报文段被丢弃前在网络内的最长时间。这个时间是有限的,因为TCP报文段以IP数据报在网络内传输,而IP数据报则有限制其生存时间的TTL时间。RFC 79...

$firecat利白的代码足迹$ 1万+

【机器人技术基础】MATLAB Robotics Toolbox PUMA560 运动学正逆解

机器人技术基础实验2报告 1. 实验目的和要求 2. 实验手段 2.1 实验原理 2.2 函数详解 3. 实验主要内容 4. 实验结果和分析 4.1 正运动学求解 例1 例2 4.2 逆运动学求解 例1 例2 1. 实验目的和要求 掌握常见形式的机器人的D-H坐标系建立方法、运动学建模; 正逆运动学分析与求解; 使用Robotics Toolbox对直角坐标机器人、圆柱坐标机器人、球坐标机器人、PUMA560其中之一建立运动学模型,正逆求解和仿真。 2. 实验手段 2.1

【人工智障 | 计算鸡视觉 | 机器孩】 1万+

TCP协议的TIME_WAIT状态详解

在开始说TIME_WAIT状态之前,要知道TCP协议是如何关闭连接的。 很多人对TCP协议的三次握手都很熟悉,因为学校的垃圾考试都爱考三次握手,但是很多知道三次握手的人都对TCP协议是如何关闭连接不了解。不说废话了,TCP关闭连接过程如下图,寡人用photoshop画的,凑合看一下: 为了方便描述,我给这个TCP连接的一端起名为Client,给另外一端起名为Server。上图描述的

yangzhenzhen的专栏 1001

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

linux 学习进展 网络编程 ——TCP 协议 TIME_WAIT 状态详解

TIME_WAIT 是 TCP 连接关闭过程中,主动关闭连接的一方会进入的状态,出现在四次挥手的第四次握手之后。客户端发送 FIN 报文(第一次挥手),进入FIN_WAIT_1状态服务器回复 ACK 报文(第二次挥手),进入CLOSE_WAIT状态;客户端收到 ACK 后,进入FIN_WAIT_2状态服务器发送完剩余数据后,发送 FIN 报文(第三次挥手),进入LAST_ACK状态客户端回复 ACK 报文(第四次挥手),进入 TIME_WAIT 状态;服务器收到 ACK 后,进入CLOSED。

堇荼如饴风禾尽起~ 437

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

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

TCP协议详解(TCP报文、三次握手、四次挥手、TIME_WAIT状态、滑动窗口、拥塞控制、粘包问题、状态转换图)

文章目录一、TCP报文二、三次握手三、四次挥手四、TIME_WAIT状态五、connect()、listen()和accept()三者之间的关系六、三次握手、四次挥手总结七、滑动窗口(流量控制)八、拥塞控制九、粘包问题十、TCP状态转换图 一、TCP报文 【重要的字段】: 序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记; 确认序号:Ack序号...

青萍之末的博客 2万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Linux系统编程——TCP协议详解(TCP报文、三次握手、四次挥手、TIME_WAIT状态、滑动窗口、拥塞控制、粘包问题、状态转换图)

我们知道服务端收到ACK,关闭连接。但是客户端无法知道ACK是否已经到达服务端,于是开始等待?等待什么呢?假如ACK没有到达服务端,服务端会为FIN这个消息超时重传 timeout retransmit ,那如果客户端等待时间足够,又收到FIN消息,说明ACK没有到达服务端,于是再发送ACK,直到在足够的时间内没有收到FIN,说明ACK成功到达。这个等待时间至少是:服务端的timeout + FIN的传输时间,为了保证可靠,采用更加保守的等待时间2MSL。

qq_74811378的博客 1387

TCP 协议状态分解---服务器TIME_WAIT和CLOSE_WAIT详解和解决办法

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34275734的博客 108

重读TCP 协议

拖延症晚期患者,终于在周末的尾巴开始写这篇本来上周就应该总结出来的文章了……。 1. 基本概念 大部分介绍 tcp 协议的开头都是, tcp 协议是一种面向连接的、可靠的、基于字节流的传输层协议。讲真的就是这么单纯的记住这个概念,在实践中并没有什么具体用处,毕竟工作和考试不一样……。为了更深刻的理解这个协议,让我们先拆解下概念要点: 传输层协议,什么是传输层呢,为什么需要抽象传输层的概念呢? ...

phantom_111的博客 421

TCP 协议中的三次握手与四次挥手及相关概念详解

  今天来聊聊面试频率特别高的一个题目:TCP 协议中的三次握手与四次挥手。涉及到的知识点有:   1、TCP、UDP 协议的区别   2、TCP 头部结构   3、三次握手与四次挥手过程详解   4、什么是 TIME_WATI 状态   本文略长,需要有点耐心   一、TCP、UDP 协议的区别   在介绍这两者的区别之前,我们要需要了解一个概念:TCP/IP 协议族。定义如下: ...

qianfeng_dashuju的博客 238
上一篇: 老爷机搭建linux 软路由 服务器
下一篇: linux tcp ip 协议栈 优化
piperzero
博客等级 码龄21年 1377粉丝 504原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值