当前位置: 首页 > news >正文

TCP三握四挥

TCP三握(简述)

  • 一开始,客户端和服务端都处于closed状态,服务端主动监听某个端口,处于listen状态

  • 一握要进行C-S的第一个SYN发送,客户端会随机初始化序列号(client_isn)并将其置于TCP首部的序列号字段中,并且将SYN标志位设置为1,表示这是一条SYN报文,将报文发送给服务端(报文中不包含应用层数据),客户端处于SYN-SENT状态

  • 二握要进行S-C的SYN+ACK发送(SYN和ACK集成在一个报文中)。此时服务端已经收到了客户端的报文,知道了client_isn。他会生成一个随机序列号(server_client),放到响应报文的序列号中然后把(client_isn+1)放到确认应答号字段中将SYN和ACK字段设置为1.(该报文也不包含应用层数据),服务端处于SYN-RCVD状态

  • 三握要进行C-S的第二个SYN发送客户端把收到的(server-isn+1)放到确认应答号字段中,(本次报文中可以包含应用层数据),客户端处于ESTABLISHED状态

  • 服务端收到三握信息,进入ESTABLISHED状态

初始序列号ISN是如何随机产生的

ISN = M + F(localhost,localport,remotehost,remoteport)

M是一个计时器,这个计时器每隔四微秒加以1一

F是一个Hash算法,根据源IP,源端口,目的IP,目的端口生成一个随机数值

三次握手丢失分别发生什么

一握丢失

客户端发送的第一个SYN如果长时间没有收到响应会触发超时重传,并且重新传输的SYN报文的序列号不会发生改变

第一次超时重传一般第一次在1秒后,第二次在2秒后,三次4秒后,4次8秒后,每次超时重传的时间是上一次的两倍

一般来说还会有一个超时重传次数上限,达到这个上限连接就会断开

二握丢失

二次握手内容分为两部分,对客户端的ACK和服务端自己的SYN

对第一次握手的ACK丢失,客户端一直收不到第一次握手的响应,可能触发客户端的超时重传机制

对于服务端自己的SYN丢失,服务端在完成握手后会等待第三次握手客户端发来的ACK报文,如果一直等不到,可能触发服务端的超时重传机制

不论是谁触发超时重传,只要到达他的最大超时重传次数,就会断开连接

三握丢失

三握是客户端给服务端发送SYN,服务端收不到SYN,就会触发超时重传机制,达到服务端的超时重传次数上限就服务端就会断开连接。

ACK报文不会有重传的,当ACK丢失了,就要由对方重传对应的报文

SYN攻击

什么是SYN攻击

在TCP三次握手时Linux内核会维护两个队列

  • 半连接队列,也称SYN队列

  • 全连接队列,也称accept队列

黑客会在短时间内伪造多个IP发送SYN请求给服务端,服务端会一一恢复ACK-SYN报文,进入SYN_RCVD状态,但是一直收不到客户端的ACK应答,久而久之,服务端的半连接队列就会被占满,使得服务端不能正常服务用户

format,png-20230309230622886

如何避免SYN攻击

  1. 增大TCP半连接队列

  2. 使用syncookie功能,当半连接队列满了后,后续的SYN包不会丢弃,而是计算出一个cookie的值,夹在ACK的序列号中返回给客户端,收到客户端的ACK后验证cookie,放进Accept队列,再从Accept队列中取出连接使用

  3. 减少SYN-ACK重传次数,加速处于SYN_REVC状态的TCP连接断开,减少TCP半连接队列的压力

TCP四次挥手

开始处于正常连接状态,客户端和服务端都处于ESTABLISHED状态

  • 此时,客户端想要断开连接,向服务端发送一个TCP首部FIN标志位被标记为1的报文,即FIN报文客户端进入FIN_WAIT_1状态

  • 服务端收到报文后,向客户端发送ACK报文服务端进入CLOSED_WAIT状态

  • 客户端收到服务端的ACK报文后,进入FIN_WAIT_2状态

  • 服务端接着处理未处理完的数据,处理完后也向客户端发送FIN报文服务端进入LAST_ACK阶段

  • 客户端收到FIN报文后,回应一个ACK报文,进入TIME_WAIT状态

  • 服务端收到回应,进入CLOSED状态

  • 客户端等待2MSL后,自动进入CLOSED状态

为什么要挥手四次

可以看到,在回复了客户端的FIN之后服务端可能仍然有要处理的数据和没来得及给客户端发送的响应,所以,要等服务端处理完手头的事务之后再给客户端发送FIN报文来同意断开连接,所以需要四次挥手

四次挥手丢失分别发生什么

第一次挥手

第一次挥手主要是客户端向服务端发送FIN报文,客户端已经进入FIN_WAIT_1状态了,如果一直收不到ACK,就触发超时重传机制,如果超过最大重传次数,就断开连接

第二次挥手

第二次挥手主要是服务端给客户端发送ACK,此时服务端进入CLOSE_WAIT状态,如果ACK丢失,ACK不会重传,客户端出发超时重传,重新发送FIN报文,超过次数上限连接断开

第三次挥手

处于CLOSE_WAIT状态的服务端会给客户端发送FIN报文,进入LAST_ACK状态,如果FIN丢失,一直收不到响应,服务端就进入超时重传,客户端再FIN_WAIT_2状态会有一个60秒的时间上限,等待超过60秒客户端就会主动断开连接

第四次挥手

客户端收到FIN报文,回复ACK报文,进入TIME_WAIT状态,这个状态会持续2MSL,如果服务端没有收到ACK,就会重传FIN,如果客户端在2MSL时间内收到了新的FIN,就会刷新等待时间,当然,超过服务端的超时重传次数限制之后服务端就会主动断开连接

TIME_WAIT状态

为什么TIME_WAIT等待时间是2MSL

MSL是报文最大生存时间,他是任何报文在网络上存在的最长时间,超过这个时间就会被丢弃。

网络中某些数据包可能来自发送方,这些发送方的数据包被接收方处理后又会向对方发送响应,一来一回需要等待两倍的时间

所以2MSL就是允许一次请求丢失

为什么需要TIME_WAIT状态

主动发起关闭连接的一方才会有TIME_WAIT状态

主要有两个原因

  • 防止历史连接中的数据被后面相同四元组的链接错误的接收

  • 保证被动关闭连接的一方能正确地关闭

TIME_WAIT过多有什么危害

  • 占用系统资源

  • 占用端口资源

如何优化TIME_WAIT

  • 将长时间处于TIME_WAIT状态的socket为新的连接所用

  • 限制系统中处于TIME_WAIT状态的连接数量

服务器出现大量TIME_WAIT状态的原因

  • HTTP没有使用长连接,这种情况一般都是由服务端主动断开连接的,所以服务端会存在处于TIME_WAIT状态的连接

  • HTTP长连接超时,此时服务端主动断开连接,就会产生处于TIME_WAIT状态的连接

  • HTTP长连接的请求数量达到上限,一般服务端都会设置长连接数量上限,长连接超过上限服务端就会主动关闭连接,产生TIME_WAIT状态的连接

连接建立后客户出问题怎么办

在连接建立后,服务端处于ESTABLISHED状态,如果客户端出问题,一直不关闭这个连接,就会占用资源,TCP有保活机制,会在连接建立后每隔一个时间段发送一个探测报文(报文中数据很少),如果连续几个报文都没有得到回应则认为该TCP连接已经死亡,会关闭该链接。

连接建立后服务端出问题怎么办

TCP的链接信息是内核维护的,当服务端出问题后,内核会介入,给客户端发送FIN报文,开始四次挥手,断开连接

TCP重传、滑动窗口、流量控制、拥塞控制

相关文章:

TCP三握四挥

TCP三握(简述) 一开始,客户端和服务端都处于closed状态,服务端主动监听某个端口,处于listen状态 一握要进行C-S的第一个SYN发送,客户端会随机初始化序列号(client_isn)并将其置于TCP首部的序列号字段中,并且将SYN标志…...

java项目之大型商场应急预案管理系统(源码+文档)

项目简介 大型商场应急预案管理系统实现了以下功能: 大型商场应急预案管理系统的主要使用者管理员功能有个人中心,员工管理,预案信息管理,预案类型管理,事件类型管理,预案类型统计管理,事件类…...

【C++】--内存管理

👾个人主页: 起名字真南 👻个人专栏:【数据结构初阶】 【C语言】 【C】 目录 1 C/C内存分布2 C语言中动态内存管理方式 :3 C内存管理方式3.1 new/delete操作内置类型3.2 new和delete操作自定义类型 4 operator new与operator delete4.1 opera…...

【设计模式系列】模板方法模式

一、什么是模板方法模式 模板方法模式(Template Method Pattern)是一种行为型设计模式,它在父类中定义一个算法的框架,允许子类在不改变算法结构的情况下重写算法的某些特定步骤。这种模式非常适合于那些存在共同行为的类&#x…...

java8 Stream流详细API及用法

目录 整理的更全面的API及用法 创建Stream流 中间操作 filter 过滤 map 映射 flatMap 扁平映射 sorted 排序 limit 截断 skip 跳过 distinct 去重 peek 遍历 终端操作 forEach 遍历 forEachOrdered 顺序遍历 min 统计最小值 max 统计最大值 count 统计元素数量 f…...

Redis——持久化

文章目录 Redis持久化Redis的两种持久化的策略定期备份:RDB触发机制rdb的触发时机:手动执行save&bgsave保存测试不手动执行bgsave测试bgsave操作流程测试通过配置,自动生成rdb快照RDB的优缺点 实时备份:AOFAOF是否会影响到red…...

川字结构布局/国字结构布局

1.串字结构布局 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style&g…...

2013年国赛高教杯数学建模C题古塔的变形解题全过程文档及程序

2013年国赛高教杯数学建模 C题 古塔的变形 由于长时间承受自重、气温、风力等各种作用&#xff0c;偶然还要受地震、飓风的影响&#xff0c;古塔会产生各种变形&#xff0c;诸如倾斜、弯曲、扭曲等。为保护古塔&#xff0c;文物部门需适时对古塔进行观测&#xff0c;了解各种变…...

web 0基础第一节 文本标签

这是一个html文件的基本结构 在vs code 中使用英文的 ! 可快捷设置这样的结构 <!-- --> 是在html写注释的结构 <!DOCTYPE html> <!--标识当前文档类型为html--> <html> …...

Zookeeper快速入门:部署服务、基本概念与操作

文章目录 一、部署服务1.下载与安装2.查看并修改配置文件3.启动 二、基本概念与操作1.节点类型特性总结使用场景示例查看节点查看节点数据 2.文件系统层次结构3.watcher 一、部署服务 1.下载与安装 下载&#xff1a; 一定要下载编译后的文件&#xff0c;后缀为bin.tar.gz w…...

【Sqlite】sqlite内部函数sqlite3_value_text特性

目录 ⚛️1 结论 ☪️2 说明 ☪️3 传入数值转成科学计数法 ♋3.1 只有整数部分 ♏3.2 只有小数部分 ♐3.3 整数小数 ⚛️1 结论 整数(sqlite视为int64)位数 > 20位&#xff0c;sqlite3_value_text 采用科学计数法。否则正常表示。 浮点数(sqlite视为double)的整数部…...

树莓派应用--AI项目实战篇来啦-4.OpenCV读取、写入和显示视频

1. 介绍 视频是由一张一张图片组成的&#xff0c;所以读取视频就相当于读取很多张图片&#xff0c;然后将其连起来cv2.VideoCapture可以捕获摄像头&#xff0c;但是针对树莓派的CSI摄像头调用方式采用了之前介绍的Picamera2 库&#xff0c;所以在调用的时候是有区别的&#xff…...

智能电子后视镜,汽车驾驶更安全,会是一种趋势

相比于传统的后视镜&#xff0c;智能电子后视镜的确有很多的优点。在下雨天和夜晚场景&#xff0c;电子后视镜可以说是表现优秀。 我之前一直以为我们国内是有规定不能使用电子后视镜。没想到&#xff0c;偶然刷到享界S9的视频&#xff0c;这电子后视镜&#xff0c;妥妥的给安排…...

IEC104规约的秘密之九----链路层和应用层

104规约从TCP往上&#xff0c;分成链路层和应用层。 如图&#xff0c;APCI就是链路层&#xff0c;ASDU的就是应用层 我们看到报文都是68打头的&#xff0c;因为应用层报文也要交给链路层发送&#xff0c;链路层增加了开头的6个字节再进行发送。 完全用于链路层的报文每帧都只有…...

最新Prompt预设词指令教程大全ChatGPT、AI智能体(300+预设词应用)

使用指南 直接复制在AI工具助手中使用&#xff08;提问前&#xff09; 可以前往已经添加好Prompt预设的AI系统测试使用&#xff08;可自定义添加使用&#xff09; SparkAi系统现已支持自定义添加官方GPTs&#xff08;对专业领域更加专业&#xff0c;支持多模态文档&#xff0…...

DockerCompose 启动 open-match

背景介绍 open-match是Google和unity联合开源的支持实时多人匹配的框架&#xff0c;已有多家游戏厂商在生产环境使用&#xff0c;官网 https://open-match.dev/site/ 。原本我们使用的是UOS上提供的匹配能力&#xff0c;但是UOS目前不支持自建的Dedicated servers 集群&#x…...

Chainlit集成Dashscope实现语音交互网页对话AI应用

前言 本篇文章讲解和实战&#xff0c;如何使用Chainlit集成Dashscope实现语音交互网页对话AI应用。实现方案是对接阿里云提供的语音识别SenseVoice大模型接口和语音合成CosyVoice大模型接口使用。针对SenseVoice大模型和CosyVoice大模型&#xff0c;阿里巴巴在github提供的有开…...

Canal 扩展篇(阿里开源用于数据同步备份,监控表和表字段(日志))

1.Canal介绍 Canal把自己伪装成从数据库&#xff0c;获取mysql主数据库的日志&#xff08;binlog&#xff09;信息&#xff0c;所以要想使用canal就得先开启数据库日志 https://github.com/alibaba/canal Canal 主要用途是基于 MySQL 数据库增量日志解析&#xff0c;提供增量…...

顺序表的定义

一.顺序表的定义 顺序表--用顺序存储的方式实现线性表 顺序存储。把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中&#xff0c;元素之间的关 系由存储单元的邻接关系来体现。 二.顺序表的实现--静态分配 #include<stdio.h> #define MaxSize 10 //定义最大长度 …...

青少年编程能力等级测评CPA C++一级试卷(1)

青少年编程能力等级测评CPA C一级试卷&#xff08;1&#xff09; 一、单项选择题&#xff08;共20题&#xff0c;每题3.5分&#xff0c;共70分&#xff09; CP1_1_1&#xff0e;在C中&#xff0c;下列变量名正确的是&#xff08; &#xff09;。 A&#xff0e;$123 B&#…...

告别B站评论区识人难题!这个免费工具让你一键掌握用户背景

告别B站评论区识人难题&#xff01;这个免费工具让你一键掌握用户背景 【免费下载链接】bilibili-comment-checker B站评论区自动标注成分&#xff0c;支持动态和关注识别以及手动输入 UID 识别 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-comment-checker …...

Qwen3.5-4B-Claude-Opus快速上手:Web页面直接调用推理蒸馏模型

Qwen3.5-4B-Claude-Opus快速上手&#xff1a;Web页面直接调用推理蒸馏模型 1. 模型概述 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF 是一个基于 Qwen3.5-4B 的推理蒸馏模型&#xff0c;重点强化了结构化分析、分步骤回答、代码与逻辑类问题的处理能力。该版本以 G…...

Qwen3.5-4B-Claude-Opus真实作品:网络协议TCP三次握手状态机推理生成

Qwen3.5-4B-Claude-Opus真实作品&#xff1a;网络协议TCP三次握手状态机推理生成 1. 模型介绍 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF 是一个基于 Qwen3.5-4B 的推理蒸馏模型&#xff0c;专门针对结构化分析、分步骤回答、代码与逻辑类问题进行了优化。该模型…...

手把手教你windows下如何部署copaw

前言&#xff1a; 本文内容主要讲解通过手工部署python并使用pip安装部署copaw&#xff0c;在官网有一键部署脚本等等教程&#xff0c;都很方便&#xff0c;但为什么作者要通过手工部署python环境&#xff0c;原因很简单&#xff0c;解决环境冲突的问题&#xff0c;通过conda能…...

OpenClaw安全加固:Qwen3.5-9B操作权限的4层防护

OpenClaw安全加固&#xff1a;Qwen3.5-9B操作权限的4层防护 1. 为什么需要安全加固&#xff1f; 上周我在用OpenClaw自动处理一份包含客户联系方式的Excel表格时&#xff0c;突然意识到一个问题&#xff1a;如果AI助手误操作删除了关键文件怎么办&#xff1f;更可怕的是&…...

如何通过自动化工具高效获取阴阳师游戏资源?完整实践指南

如何通过自动化工具高效获取阴阳师游戏资源&#xff1f;完整实践指南 【免费下载链接】OnmyojiAutoScript Onmyoji Auto Script | 阴阳师脚本 项目地址: https://gitcode.com/gh_mirrors/on/OnmyojiAutoScript 阴阳师自动化工具是一款功能强大的智能辅助应用&#xff0c…...

DoL-Lyra构建系统:5分钟学会自动化游戏MOD打包

DoL-Lyra构建系统&#xff1a;5分钟学会自动化游戏MOD打包 【免费下载链接】DOL-CHS-MODS Degrees of Lewdity 整合 项目地址: https://gitcode.com/gh_mirrors/do/DOL-CHS-MODS DOL-CHS-MODS&#xff08;Degrees of Lewdity汉化美化整合包&#xff09;是一款专为Degree…...

颈腰椎病引发 “耳后疼痛”:耳根刺痛,可能是颈椎在 “捣乱”

很多人出现耳后持续性刺痛或按压痛&#xff0c;会误以为是中耳炎、腮腺炎&#xff0c;实则部分耳后疼痛与颈椎病变相关。颈椎病变压迫枕大神经&#xff08;从颈椎延伸至耳后&#xff09;&#xff0c;会导致神经分布区域疼痛&#xff1b;同时颈椎肌肉痉挛、僵硬&#xff0c;牵拉…...

10分钟上手!Java开发者也能轻松调用AI,Spring AI Alibaba手把手教你构建智能体!

介绍&#xff1a;还在羡慕Python开发者能轻松调用AI&#xff1f;Spring AI Alibaba让Java也能10分钟构建一个能“思考”和“行动”的智能体&#xff0c;这次手把手教&#xff01; 系统&#xff1a;Windows jdk版本&#xff1a;17 maven&#xff1a;3.8 模型API Key&#xff1a…...

2026年多模态AI前瞻:Qwen3-VL-2B开源生态发展潜力分析

2026年多模态AI前瞻&#xff1a;Qwen3-VL-2B开源生态发展潜力分析 1. 项目概述与核心价值 Qwen3-VL-2B-Instruct作为新一代开源视觉语言模型&#xff0c;代表了多模态AI技术的重要发展方向。这个模型不仅能够理解文本&#xff0c;更重要的是具备了"看"的能力——它…...