TCP如何关闭连接(详细版)

news/2024/9/19 4:38:08/ 标签: 网络协议, 网络, tcp
关闭连接的⽅式通常有两种,分别是 RST 报⽂关闭和 FIN 报⽂关闭。
如果进程异常退出了,内核就会发送 RST 报⽂来关闭,它可以不⾛四次挥⼿流程,是⼀个暴⼒关闭连接的⽅式。
安全关闭连接的⽅式必须通过四次挥⼿,它由进程调⽤ close shutdown 函数发起 FIN 报⽂( shutdown 参数须传⼊ SHUT_WR 或者 SHUT_RDWR 才会发送 FIN )。
1 close shutdown 有什么区别
调⽤了 close 函数意味着完全断开连接,完全断开不仅指⽆法接收数据,⽽且也不能发送数据。
此时,调⽤了 close 函数的⼀⽅的连接叫做「孤⼉连接」,如果你⽤ netstat -p 命令,会发现连接对应的进程名为空。
使⽤ close 函数关闭连接是不优雅的。于是,就出现了⼀种优雅关闭连接的 shutdown 函数,它可以控制只关闭 ⼀个⽅向的连接
其中第⼆个参数决定断开连接的⽅式,主要有三种:
1 SHUT_RD(0)
关闭连接的「读」这个⽅向 ,如果接收缓冲区有已接收的数据,则将会被丢弃,并且后续再收到新的数据,会对数据进⾏ ACK ,然后悄悄地丢弃。也就是说,对端还是会接收到 ACK ,在这种情况下根本不知道数据已经被丢弃了。
2 SHUT_WR(1)
关闭连接的「写」这个⽅向 ,这就是常被称为「半关闭」的连接。如果发送缓冲区还有未发送的数据,将被⽴即发送出去,并发送⼀个 FIN 报⽂给对端。
3 SHUT_RDWR(2)
相当于 SHUT_RD SHUT_WR 操作各⼀次,关闭套接字的读和写两个⽅向。
2 FIN_WAIT1 状态的优化
如果 FIN_WAIT1 状态连接很多,我们就需要考虑降低 tcp_orphan_retries 的值。当重传次数超过
tcp_orphan_retries 时,连接就会直接关闭掉(即:新增的孤⼉连接将不再⾛四次挥⼿,⽽是直接发送 RST 复位报⽂强制关闭)。
注: tcp_max_orphans 参数,定义了「孤⼉连接」的最⼤数量。
3 FIN_WAIT2 状态的优化
当主动⽅收到 ACK 报⽂后,会处于 FIN_WAIT2 状态,就表示主动⽅的发送通道已经关闭,接下来将等待对⽅发送FIN 报⽂,关闭对⽅的发送通道。
这时,如果连接是⽤ shutdown 函数关闭的,主动⽅连接可以⼀直处于 FIN_WAIT2 状态,因为它可能还可以发送 或接收数据。
但对于 close 函数关闭的孤⼉连接,由于⽆法再发送和接收数据,所以这个状态不可以持续太久,⽽tcp_fin_timeout 控制了这个状态下连接的持续时⻓,默认值是 60 秒(与 TIME_WAIT 状态持续的时间是相同的)。 它意味着对于孤⼉连接(调⽤ close 关闭的连接),如果在 60 秒后还没有收到 FIN 报⽂,连接就会直接关 闭。
4 TIME_WAIT 状态的优化
TIME_WAIT 的状态尤其重要,主要是两个原因
1 )防⽌收到历史数据,从⽽导致数据错乱的问题
TIME_WAIT 等待时间过短,被延迟的数据包抵达后会发⽣什么呢?
TIME_WAIT 设计为 2MSL ,⾜以让两个⽅向上的数据包都被丢弃,使得原来连接的数据包在⽹络中都⾃然消失,再出现的数据包⼀定都是新建⽴连接所产⽣的。
注:
MSL 全称是 Maximum Segment Lifetime ,它定义了⼀个报⽂在⽹络中的最⻓⽣存时间(报⽂每经过⼀次路由器的转发,IP 头部的 TTL 字段就会减 1 ,减到 0 时报⽂ 就被丢弃,这就限制了报⽂的最⻓存活时间)。
2 )为什么是 2 MSL 的时⻓呢?
这其实是相当于⾄少允许报⽂丢失⼀次。⽐如,若 ACK 在⼀个 MSL 内丢失,这样被 动⽅ ᯿ 发的 FIN 会在第 2 个 MSL 内到达, TIME_WAIT 状态的连接可以应对。
Linux 系统中, MSL 的值固定为 30 秒。
等待⾜够的时间以确保最后的 ACK 能让被动关闭⽅接收,从⽽帮助其正确关闭
3 )假设 TIME_WAIT 没有等待或等待的时间过短,断开连接会造成什么?
如上图红⾊框框客户端四次挥⼿的最后⼀个 ACK 报⽂如果在⽹络中被丢失了,此时如果客户端 TIMEWAIT 过短或 没有,则就直接进⼊了 CLOSE 状态了,那么服务端则会⼀直处在 LAST-ACK 状态。
当客户端发起建⽴连接的 SYN 请求报⽂后,服务端会发送 RST 报⽂给客户端,连接建⽴的过程就会被终⽌。
注:
Linux 提供了 tcp_max_tw_buckets 参数,当 TIME_WAIT 的连接数量超过该参数时,新关闭的连接就不再经历TIME_WAIT ⽽直接关闭。查看系统的 TIME_WAIT 的连接数量:

http://www.ppmy.cn/news/1521043.html

相关文章

uniap app跳转小程序

微信开放平台申请账号并认证配置APP的相关配 其中安卓的包名可以通过反编译工具查看链接 https://download.csdn.net/download/u010843503/88725345d打开后 其中md5就是签名,复制后把中间空格取消就行。 微信开放平台绑定小程序 绑定后查看微信小程序的原始id也…

win11+vscode+Flutter 开发环境配置

https://blog.csdn.net/Oven_maizi/article/details/126804404 1 vscode插件 安装 安装红框中的两个 2 flutter sdk 安装 dart sdk 包含在flutter sdk 里面,路径:flutter_windows_3.24.1-stable\flutter\bin\cache\dart-sdk 方式1: 通过…

CSS中表示长度的单位有哪些?有什么区别?

CSS中有px、em和rem三个长度单位。px是固定像素,不随页面大小变化;em和rem是相对长度单位,em相对于父元素,rem相对于根元素(html)。 在响应式布局中,rem更常用,因为它只有一个参照物…

Ansible与Docker集成:实现容器化运维自动化

Ansible与Docker集成:实现容器化运维自动化 在现代 DevOps 和云原生环境中,Ansible 和 Docker 是两种非常受欢迎的工具。Ansible 专注于配置管理和任务自动化,而 Docker 则通过容器化技术实现应用的轻量级隔离和部署。将 Ansible 和 Docker …

基于udp的socket网络编程

套接字 网络套接字 原始套接字 unix套接字 windows下SOCKET 为整数。 协议家族 套接字种类 协议 udpServer.cc #pragma warning(disable:4996) #include<iostream> #include<string> #include<cstdlib> #include<WinSock2.h>#pragma comment(li…

mac电脑里面的 磁盘分区,容器,宗卷,宗卷组的理解和使用

在mac电脑里面我们一般都是使用宗卷&#xff0c;他和我们常见的pc机器硬盘的分区是有区别的。 对于物理硬盘来说 不管是分区还是宗卷&#xff0c;他们都是逻辑上面的概念。 分区 mac电脑里面的分区 和 pc电脑中的分区差不多&#xff0c; 他们都是针对的物理硬盘&#xff0c;…

Java 方法的特性详解

目录 一、引言 二、方法的重载 &#xff08;一&#xff09;定义与作用 &#xff08;二&#xff09;判断方法相同的标准 三、可变个数形参的方法 &#xff08;一&#xff09;使用场景 &#xff08;二&#xff09;格式与特点 &#xff08;三&#xff09;代码示例 四、方…

【大模型】llama系列模型基础

前言&#xff1a;llama基于transformer架构&#xff0c;与GPT相似&#xff0c;只用了transformer的解码器部分。本文主要是关于llama&#xff0c;llama2和llama3的结构解读。 目录 1. llama1.1 整体结构1.2 RoPE1.3 SwiGLU 激活函数 2. llama22.2 GQA架构2.3 RLHF 3. llama3参考…

ubuntu20.04(wsl2)测试 arcface 人脸识别(计算特征向量)

1. 参考博客和代码、模型仓库&#xff1a; 1.1. 【C随记】collect2: error: ld returned 1 exit status错误分析与解决 1.2. Visual Studio 2022新建 cmake 工程测试 tensorRT 自带样例 sampleOnnxMNIST 1.3.报错&#xff1a;ModuleNotFoundError: No module named ‘ten…

力扣SQL仅数据库(570-579)

570. 至少有5名直接下属的经理 需求&#xff1a; 编写一个解决方案&#xff0c;找出至少有五个直接下属的经理 数据准备&#xff1a; Create table If Not Exists Employee (id int, name varchar(255), department varchar(255), managerId int) Truncate table Employee i…

Mysql梳理1——数据库概述(上)

笔记来源&#xff1a;【MySQL数据库入门到大牛&#xff0c;mysql安装到优化&#xff0c;百科全书级&#xff0c;全网天花板】 https://www.bilibili.com/video/BV1iq4y1u7vj 目录 11.2 引入 11.2. 1 数据库与数据库管理系统 11.2.2 数据库与数据库管理系统的关系 11.2.…

nnunetv2(一)配置文件和nnUNetv2_convert_MSD_dataset命令

文章目录 setup.pypyproject.tomlconfiguration.pynnUNetv2_convert_MSD_dataset 如有错误&#xff0c;欢迎评论 setup.py 可以使用pip install .命令来安装nnunet v2 pyproject.toml 配置文件 [project] name "nnunetv2" # 项目名称 version "2.5" # …

jmeter中响应时间、TPS、服务器资源图表

插件下载可以参考前面文章&#xff1a;相关插件 一、响应时间图表 jmeter中的聚合报告已经足够显示响应时间&#xff0c;但是不会显示很详细&#xff0c;下面使用监听器中的插件查看&#xff0c; 添加后&#xff0c;可以不用更改任何配置&#xff0c;直接使用默认即可统计响应…

vue3 + ts + element ui plus 添加阿里图标库图标(只添加一个, 并引入)

先创建一个vue文件, 引入svg代码, 这个文件放components里也挺好 ** catalogIcon.vue代码如下: ** <template><svg t"1725419972935" class"icon" viewBox"0 0 1024 1024" version"1.1" xmlns"http://www.w3.org/20…

深度学习--机器学习相关(3)

1.K-近邻算法 KNN 听起来像是某种神经网络的名字&#xff0c;如RNN、CNN 等&#xff0c;其实不然&#xff0c;这是一种经典、简单的分类算法K- 近邻算法(K-Nearest Neighbor,KNN)。与无监督学习讲解的聚类算法不同&#xff0c;KNN 是一个有监督算法。 有监督学习是一种学习算…

多目标应用:四种多目标优化算法(NSGA2、NSPSO、NSDBO、NSCOA)求解柔性作业车间调度问题(FJSP),MATLAB代码

一、柔性作业车间调度问题 柔性作业车间调度问题(Flexible Job Scheduling Problem, FJSP) 的描述如下&#xff1a;n个工件 { J , J 2 , . . , J n } \{J,J_2,..,J_n\} {J,J2​,..,Jn​}要在 m m m 台机器 { M 1 , M 2 , . . , M m } \{M_1,M_2,..,M_m\} {M1​,M2​,..,Mm​} …

div3 970

Problem - D - Codeforces 关键在于如果是环的话&#xff0c;环中的每一个的值都是一样的 #include<bits/stdc.h> #define int long long using namespace std; signed main(){int nn;cin>>nn;while(nn--){int n;cin>>n;int a[n1],i0;while(i<n)cin>…

com.baomidou.mybatisplus.annotation.DbType 无法引入

com.baomidou.mybatisplus.annotation.DbType 无法引入爆红 解决 解决 ❤️ 3.4.1 是mybatis-plus版本&#xff0c;根据实际的配置→版本一致 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-annotation</artifactId>&…

达梦数据库的系统视图v$sysstat

达梦数据库的系统视图v$sysstat 在达梦数据库&#xff08;DM Database&#xff09;中&#xff0c;V$SYSSTAT 视图提供了关于数据库系统性能和状态的一系列统计信息。这个视图是数据库管理员&#xff08;DBA&#xff09;用来监控和管理数据库性能的重要工具之一。它包含许多统计…

不管夫妻还是情人,想要长相厮守、生活幸福美满,就这两个字!

你好&#xff0c;我是腾阳。 近年来&#xff0c;娱乐圈频传“闪婚闪离”的消息&#xff0c;每一次都牵动着公众敏感的神经。 从光鲜亮丽的荧幕情侣到分道扬镳的路人&#xff0c;他们的故事如同一面镜子&#xff0c;映照出现代人情感关系的脆弱与浮躁。 相比之下&#xff0c;…