linux内核网络TIME_WAIT

article/2025/11/5 10:32:38

目录

四次挥手过程

出现的现象

如何查看信息

TIME_WAIT状态等待的时间 

TIME_WAIT 的作用

TIME_WAIT副作用

解决方法

1、将系统值(net.ipv4.tcp_max_tw_buckets)调小

2、调低TCP_TIMEWAIT_LEN

3、SO_LINGER

4、net.ipv4.tcp_tw_reuse

5、SO_REUSEADDR

6,使用长连接


四次挥手过程

        TCP 连接终止时,主机 1 先发送 FIN 报文,主机 2 进入 CLOSE_WAIT 状态,并发送一个 ACK 应答,同时,主机 2 通过 read 调用获得 EOF,并将此结果通知应用程序进行主动关闭操作,发送 FIN 报文。主机 1 在接收到 FIN 报文后发送 ACK 应答,此时主机 1 进入 TIME_WAIT 状态。

过了2MSL时间之后,主机 1 就进入 CLOSED 状态。

出现的现象

1)大量短连接存在TIME_WAIT

2)   Too Many Open Files异常,服务崩溃等

如何查看信息

//查询 TCP 连接状态
netstat -nat |grep TIME_WAIT//查看统计信息
$ netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
ESTABLISHED 1254
TIME_WAIT 1640

TIME_WAIT状态等待的时间 

#define TCP_TIMEWAIT_LEN (60*HZ) /* how long to wait to destroy TIME-        WAIT state, about 60 seconds  */

MSL,Maximum Segment Lifetime,“报文最大生存时间”

TIME_WAIT 停留持续时间是固定的,一般称之为 2MSL。

进入时机:发送了第四次握手的ACK包后,就进入了TIME_WAIT状态。

必须在此状态上停留两倍的MSL时间,等待2MSL时间主要目的是怕最后一个 ACK包对方没收到,那么对方在超时后将重发第三次握手的FIN包,主动关闭端接到重发的FIN包后,可以再发一个ACK应答包。

在 TIME_WAIT 状态时,两端的端口不能使用,要等到2MSL时间结束,才可继续使用。(IP 层)

当连接处于2MSL等待阶段时,任何迟到的报文段都将被丢弃。

只有发起连接终止的一方会进入 TIME_WAIT 状态。


TIME_WAIT 的作用

  1. 确保对方能够正确收到最后的ACK,帮助其关闭
  2. 防迷走报文对程序带来的影响

TIME_WAIT副作用

  1. 第一是内存资源占用,比较小
  2. 端口资源占用,如果 TIME_WAIT 状态过多,会导致无法创建新连接。

解决方法

        让服务器能够快速回收和重用那些TIME_WAIT的资源

1、将系统值(net.ipv4.tcp_max_tw_buckets)调小

TIME_WAIT的连接一旦超过此值,系统将会对所有的TIME_WAIT连接状态重置。

tcp_max_tw_buckets - INTEGERMaximal number of timewait sockets held by system simultaneously.If this number is exceeded time-wait socket is immediately destroyedand warning is printed. This limit exists only to preventsimple DoS attacks, you _must_ not lower the limit artificially,but rather increase it (probably, after increasing installed memory),if network conditions require more than default value.

2、调低TCP_TIMEWAIT_LEN

        重新编译内核

3、SO_LINGER

        设置套接字选项

int setsockopt(int sockfd, int level, int optname, const void *optval,socklen_t optlen);

4、net.ipv4.tcp_tw_reuse

  1. 可以复用处于 TIME_WAIT 的套接字为新的连接所用;
  2. 适用于连接的发起方;
  3. 对应的TIME_WAIT状态的创建时间超过1s才可以被复用。

文档说明:

tcp_tw_reuse - INTEGEREnable reuse of TIME-WAIT sockets for new connections when it issafe from protocol viewpoint.0 - disable1 - global enable2 - enable for loopback traffic onlyIt should not be changed without advice/request of technicalexperts.Default: 2

5、SO_REUSEADDR

setsockopt设置SO_REUSEADDR这个方法;是解决端口复用的问题,并不是解决TIME_WAIT,这个是告诉内核,即使TIME_WAIT状态的套接字,可以继续使用它做为新的套集字使用。

6,使用长连接

time_wait总结:

1、这个状态发生在主动发起关闭的一方

2、当它发送最后一个ACK的时候,需要等待2MSL(MAXimum Segment Lifetime)

3、可以可靠的关闭TCP连接,防止上一次连接的包影响到本次连接

4、占用端口号,造成资源浪费。内存中每条占用大概0.4KB



http://chatgpt.dhexx.cn/article/cXY3loru.shtml

相关文章

TCP四次挥手 2MSL TIME_WAIT详解

TCP四次挥手 & 2MSL & TIME_WAIT详解 TCP四次挥手流程各状态解析 2MSL(2倍最大报文段生成时间)2MSL (Maximum Segment Lifetime) TIME_WAIT状态的存在有两个理由该状态为什么设计在主动关闭这一方?如何正确对待2MSL TIME_WAIT? TCP四次挥手流程 【注意】只要是申请关…

网络编程知识预备(2) —— 三次握手与四次挥手、半连接状态、2MSL

参考:网络编程知识预备(2) ——三次握手与四次挥手、流量控制(滑动窗口)、拥塞控制、半连接状态、2MSL_行稳方能走远的博客-CSDN博客 目录 一、三次握手 什么是三次握手? 三次握手图解 三次握手过程解析 (1)第一次握手 &am…

2.5Modelsim

视频链接:https://v.youku.com/v_show/id_XNTkxNDg2MTEwNA.html?x&sharefromandroid&sharekey59e4c264c93de043603d938d05eb7fd10 题目:例2.5.1中2选1数据选择器的仿真步骤 原理与目的: 原理:数据选择是指经过选择&am…

TCP的四次挥手及为什么要等待2MSL

一、四次挥手的详述 1、假设Client端发起中断连接请求,也就是发送FIN报文。 2、Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以…

为什么等待2MSL

下面是TCP四次挥手的图 介绍一下上图中的主要关键字 FIN_WAIT1是主动断开连接方发出关闭请求后的状态,表示主动方(主动断开TCP连接的一方)已经没有信息要发送给被动方 CLOSED_WAIT是被动方接收到主动方的关闭请求后返回ACK响应后的状态,此时被动方应该…

释放连接:四次挥手过程?为什么要等待2MSL

储备知识:TCP报文段的首部格式(讲下面提到的): 1.FIN:用来释放一个连接。当FIN1时,表示此报文段的发送方的数据已经发送完毕,并要求释放运输连接。 2. 确认ACK(acknowledgment&#…

SAML2.0使用

最近在工作中和海外一家公司对接单点登录,用到了SAML2.0协议,目前公司的单点登录 还是比较老的CASE3.5版本,不支持SAML2,要支持也要定制优,由于后面肯定是要升级,所 以不在源码上做调整支持,单独…

TCP第四次挥手后为什么要等待2MSL后才断开链接?等待时间为什么是2MSL?

为何要等待2MSL? 1.假如第四次挥手失败了,因为丢失而未到达服务器会怎样呢?这样,服务器会一直收不到客户端的回应,也就无法得知客户端是否收到了即将要断开连接的请求。客户端此刻还蒙在鼓里,还在等待服务器…

为什么TIME_WAIT状态是2MSL?(2个原因)

为什么TIME_WAIT的时间是2MSL? 先来看看上文中TIME_WAIT状态存在的两个理由。 首先看理由1,为了可靠地实现全双工连接的终止,假设图2-5中客户端发送的最后一个ACK丢失,服务端将重传FIN,为了能够收到这个超时重传的FIN…

Time-wait状态(2MSL)

本文转自:https://blog.csdn.net/overstack/article/details/8833894,尊重原创 三次握手四次挥手图: time_wait之后会等2msl。 什么是2MSL: MSL是Maximum Segment Lifetime,译为“报文最大生存时间”,他是任何报文在…

【Linux网络编程】TCP状态转换、半关闭、2MSL时长

------------->【Linux系统编程/网络编程】(学习目录汇总) <-------------- 目录 1. 三次握手、四次挥手过程中的状态变化2. TCP状态转换图3. 半关闭4. 2MSL时长4.1 为什么要2MSL时长&#xff1f;4.2 端口复用 1. 三次握手、四次挥手过程中的状态变化 先结合下图回顾一下…

TIME_WAIT状态(2MSL)的作用

主动关闭的Socket端会进入TIME_WAIT状态&#xff0c;并且持续2MSL时间长度&#xff0c;MSL就是maximum segment lifetime(最大分节生命期&#xff09;&#xff0c;这是一个IP数据包能在互联网上生存的最长时间&#xff0c;超过这个时间将在网络中消失。MSL在RFC 1122上建议是2分…

【CSS】关于CSS的几种移动端布局方式

关于CSS的几种移动端布局方式 一、移动端布局01.meta视口标签设置02.移动布局的分类有哪些&#xff1f;03.为什么需要二倍图&#xff1f;&#xff08;1&#xff09;物理像素和物理像素比&#xff08;2&#xff09;二倍图&#xff08;根据需要确定多倍图&#xff09;&#xff08…

css:居中的几种布局方式

居中布局的方式 初始状态 <!DOCTYPE html> <html lang"en"> <head><style>.outer {width: 100px;height: 100px;border: 1px solid #f00;}.inner {width: 30px;height: 30px;background-color: #000;}</style> </head> <bo…

常见的CSS页面布局方式

详情&#xff1a;CSS页面结构是我们日常生活中最常使用到的&#xff0c;当然目前可能大家用的最多的是elementUI实现布局&#xff0c;简单方柏霓&#xff0c;下面介绍几种常见的原生页面布局的方式 公共的样式部分 <style>* {margin: 0;padding: 0;}.layout {margin-bot…

css的几种布局方式都在这

说道布局方式&#xff0c;是我们经常遇到的问题&#xff0c;下面我们就来讲解css的常见的一些布局方式。 1.双飞翼布局&#xff08;两边定宽&#xff0c;中间自适应&#xff09; 主要是通过浮动与margin实现&#xff0c;代码如下&#xff1a; <!DOCTYPE html PUBLIC &quo…

css横向布局的几种方式

首先我们先看看 html部分 bodyTip 内的三个标签我们需要让他们横向显示并且根据浏览器宽度平均显示 <body> <!--头部--> <div class"head">我是头部 </div> <div class"bodyTip"><!--左边--><div class"lef…

CSS 多种布局方式

​css布局是工作中最常碰到的&#xff0c;同时也是笔试 or 面试中会被问到的问题&#xff0c;故在本文整理了css多种布局方式&#xff0c;以供参考。 此篇较长四千五百字左右&#xff0c;读者可分三部分阅读&#xff0c;水平居中布局&#xff0c;垂直居中布局&#xff0c;水平…

HTML+CSS第十课:常见的3种网页布局方式:表格布局、DIV+CSS布局、框架布局

知识点:网页布局的方式 1、网页布局 常见的页面布局方式:表格布局、DIV+CSS布局、框架布局。 表格布局:用来显示较多的数据,如OA系统、ERP系统或CRM系统。(一般用在局部)DIV+CSS布局:相对来说最灵活的布局方式,完全实现内容和样式的分离。框架布局:通常用在网站后台…

css常见布局方式

css常见布局方式 0、前言1、两栏布局1.1 浮动 margin1.2 浮动 BFC&#xff08;overflow: hidden&#xff09;1.3 定位 margin-left1.4 给父容器设置flex布局&#xff0c;左盒子固定宽度&#xff0c;然后给右子元素设置 flex: 1。1.5 table布局 2、三栏布局2.1 float布局2.2 …