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

分析TCP三次握手与四次挥手

TCP(传输控制协议)通过三次握手建立连接,四次挥手终止连接,确保数据传输的可靠性。

TCP的三个控制标志位:

SYN——用于建立连接,同步序列号。

ACK——用于确认收到的数据。

FIN——用于终止连接。

ISN(Initial Sequence Number)——用于标识数据字节流的起始位置,确保数据传输的可靠性和顺序。(ISN是随便生成的)

应用程序FTPTFTPTELNETSMTPDNSHTTPSSHMYSQL
熟知端口21,206923255380223306
传输层协议TCPUDPTCPTCPUDPTCPTCPTCP
三次握手(建立连接)

第一次握手:
客户端向服务器发送SYN(同步)报文,其中包含客户端随机生成的初始序列号ISN=X,表示客户端请求与服务器建立连接。

第二次握手:
服务器收到SYN后,回复SYN-ACK报文,这个包中,服务器将自己的初始序列号设置为ISN=Y,同时将对客户端的确认号设置为ACK=X+1,表示服务器已经收到了客户端的 SYN 包,并且准备好与客户端建立连接。

第三次握手:
客户端收到SYN-ACK后,发送ACK报文,确认服务器的ISN。连接建立完成。该包的序列号为ISN=Y+1,确认号为ACK=Y+1,此时客户端和服务器连接建立成功,双方可以开始进行数据传输。

为什么是三次不是两次或者四次呢?

第一次握手:客户端发SYN包给服务器

此时服务器可得出结论:客户端发送能力正常,自己的接受能力正常。

第二次握手:服务器发SYN-ACK包给客户端

此时服务器可得出结论:自己的发送、接受能力正常,客户端的发送能力正常。

第三次握手:客户端发ACK包给服务器

此时服务器可得出结论:客户端发送、接受能力均正常,自己的发送、接受能力均正常。

因此,需要三次握手来确保客户端和服务器的发送与接受能力是否正常。

三次握手过程中可以携带数据吗?

通常第一次、第二次握手不可以携带数据,但是第三次握手时,可以携带数据。

这是由于在握手完成之前携带数据可能增加服务器负担,易受攻击。

什么是SYN攻击?

SYN 攻击是通过伪造大量 SYN 报文耗尽服务器资源,从而导致服务瘫痪。

在Linux上使用系统自带的 netstat 命令来检测SYN攻击:

netstat -n -p TCP | grep SYN_RECV

常见防御措施有如下几种:

  • SYN Cookie:服务器不立即分配资源,而是生成 SYN Cookie 作为初始序列号,收到 ACK 后再分配资源。
  • 增加队列大小:通过调整 net.ipv4.tcp_max_syn_backlog 参数扩大半连接队列。
  • 减少超时时间:通过调整 net.ipv4.tcp_synack_retries 参数减少 SYN-ACK 重试次数。
  • 防火墙过滤:配置防火墙规则,过滤异常流量或限制单个 IP 的连接数。
  • 负载均衡:使用负载均衡设备分散流量,减轻单台服务器压力。

【拓展】

半连接队列——存放未完成三次握手的连接。服务器收到客户端的 SYN 报文后处于SYN-RCVD状态,将该连接请求放入半连接队列,等待客户端的 ACK 确认。

全连接队列——存放已完成三次握手、等待应用层处理的连接。

四次挥手(终止连接)

第一次挥手:

客户端向服务器发送FIN(结束)报文,其中包含序列号ISN=U,表示客户端希望关闭连接,此时客户端进入FIN_WAIT1状态。

第二次挥手 :
服务器收到FIN后,发送ACK报文,确认号为ACK=U+1,序列号为ISN=V,表示服务器已经收到了客户端的关闭请求,但服务器可能还有数据未发送完,此时服务器进入CLOSE_WAIT状态,客户端收到 ACK 包后进入FIN_WAIT2状态

第三次挥手:
当服务器完成数据发送后,会向客户端发送一个 FIN 包,序列号为ISN=W,确认号为ACK=U+1,表示服务器也准备关闭连接,此时服务器进入LAST_WAIT状态。

第四次挥手:
客户端收到服务器的 FIN 包后,会发送一个 ACK 包进行确认,确认号为ACK=W+1,序列号为ISN=U+1,客户端进入TIME_WAIT状态。服务器收到 ACK 包后,连接正式关闭,进入CLOSED状态。客户端在TIME_WAIT状态等待一段时间(通常为 2MSL,MSL 是最长报文段寿命)后,也会进入CLOSED状态。

为什么是四次挥手?

因为 TCP 是全双工协议,双方需要独立关闭各自的连接。

第一次挥手:客户端发送FIN包

此时的客户端表示:我不再发数据给你了哟

第二次挥手:服务器发送ACK包

此时的服务器表示:好的我知道了!

第三次挥手:服务器发送FIN包

此时的服务器表示:数据已经全部发给你了,我也不再给你发数据了哟

第四次挥手:客户端发送ACK包

此时的客户端表示:收到!停止连接!

因此,需要四次挥手来确保数据传输完整性和可靠性。

为什么TIME_WAIT状态需要经过2MSL才能返回到CLOSE状态?

因为需要确保服务器收到 ACK,确保网络中旧数据段消失,防止旧数据干扰新连接。

总结

三次握手:SYN → SYN-ACK → ACK,确保双方准备好通信。
四次挥手:FIN → ACK → FIN → ACK,确保双方数据发送完毕并安全关闭连接。

相关文章:

分析TCP三次握手与四次挥手

TCP(传输控制协议)通过三次握手建立连接,四次挥手终止连接,确保数据传输的可靠性。 TCP的三个控制标志位: SYN——用于建立连接,同步序列号。 ACK——用于确认收到的数据。 FIN——用于终止连接。 ISN…...

C++之序列容器(vector,list,dueqe)

1.大体对比 在软件开发的漫长历程中,数据结构与算法始终占据着核心地位,犹如大厦的基石,稳固支撑着整个程序的运行。在众多编程语言中,数据的存储与管理方式各有千秋,而 C 凭借其丰富且强大的工具集脱颖而出&#xff…...

网络安全技术和协议(高软43)

系列文章目录 网络安全技术和协议 文章目录 系列文章目录前言一、网络安全技术1.防火墙2.入侵检测系统IDS3.入侵防御系统IPS 二、网络攻击和威胁三、网络安全协议四、真题在这里插入图片描述 总结 前言 本节讲明网络安全技术和协议方面的相关知识。 一、网络安全技术 1.防火…...

LeetCode697

好的,根据你提供的代码和LeetCode题号(697),我将帮助你生成一个结构化的Markdown文档。首先,我们需要补充一些必要的信息,如题目描述、示例、思路分析等。如果你能提供这些信息会更好,否则我会基…...

js基本功(四)

ASCII ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是一种字符编码标准,用于表示英文字符、数字、标点符号以及一些控制字符。 可以通过 charCodeAt() 方法获取字符的 ASCII 码,也可以通过 String.fromCharCode() 方法将 ASCII 码转…...

linux | Vim 命令快捷操作

注:本文为过去的 “vim 使用笔记”。 跳转命令 跳转命令 #:向前查找光标当前所在单词,并跳转到该单词的上一个出现位置。*:向后查找光标当前所在单词,并跳转到该单词的下一个出现位置。 行内跳转 0:跳转…...

开源订货系统哪个好 三大订货系统源码推荐

在数字化转型加速的今天,企业对订货系统的需求日益增长。一款优质的订货系统源码不仅能提升供应链效率,还能通过二次开发满足个性化业务需求。这里结合 “标准化、易扩展” 两大核心要求,为您精选三款主流订货系统源码,助您快速搭…...

跟着 Lua 5.1 官方参考文档学习 Lua (11)

文章目录 5.4.1 – PatternsCharacter Class:Pattern Item:Pattern:Captures: string.find (s, pattern [, init [, plain]])例子:string.find 的简单使用 string.match (s, pattern [, init])string.gmatch (s, pattern)string.gsub (s, pattern, repl [, n])例子&…...

使用 MyBatis XML 和 QueryWrapper 实现动态查询

本文档介绍了如何在 MyBatis 中结合 XML 配置和 MyBatis-Plus 的 QueryWrapper 来实现动态查询。 1. XML 中定义基本查询 首先&#xff0c;在 MyBatis XML 文件中定义一个基本的 select 查询&#xff1a; <select id"selectCode" resultType"java.util.Ma…...

视频理解开山之作 “双流网络”

1 论文核心信息 1.1核心问题 任务&#xff1a;如何利用深度学习方法进行视频中的动作识别&#xff08;Action Recognition&#xff09;。挑战&#xff1a; 视频包含时空信息&#xff0c;既需要捕捉静态外观特征&#xff08;Spatial Information&#xff09;&#xff0c;也需要…...

每日一题——搜索二维矩阵

搜索二维矩阵 一、题目背景二、题目描述示例 1&#xff1a;示例 2&#xff1a;约束条件&#xff1a; 三、解题思路分析1. **错误思路回顾**2. **Z字形查找算法**算法步骤&#xff1a; 3. **算法优势** 四、代码实现代码说明&#xff1a; 五、测试用例测试用例 1&#xff1a;测试…...

PPT 小黑第21套

对应大猫22 动作按钮 “转到首页” 编号从1开始显示&#xff0c;点设计 -幻灯片大小 -修改幻灯片编号起始值为0&#xff08;那么第二张幻灯片页码为1&#xff09;...

大模型day01自然语言+大模型+环境

[TOC]大模型day01 自然语言处理 汉字的词是连着的&#xff0c;所以需要一个汉语处理模块&#xff0c;把词语、成语自动加空格隔开。 知识图谱构建——>从大语言文本挖掘出来 自然语言处理&#xff1a;翻译、智能语音 自然语言处理&#xff1a;理解一句话意思&#xff0c…...

VSTO(C#)Excel开发3:Range对象 处理列宽和行高

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…...

【2025】Electron + React 架构筑基——从零到一的跨平台开发

引言 源代码仓库&#xff1a; Github仓库【electron_git】 你是否厌倦了在命令行中反复输入git status&#xff0c;却依然无法直观看到文件变化&#xff1f; 是否羡慕VS Code的丝滑Git集成&#xff0c;却苦恼于无法定制自己的专属工具&#xff1f; 本专栏将为你打开一扇新的…...

AWS 如何导入内部SSL 证书

SSL 证书的很重要的功能就是 HTTP- > HTTPS, 下面就说明一下怎么导入ssl 证书,然后绑定证书到ALB. 以下示例说明如何使用 AWS Management Console 导入证书。 从以下位置打开 ACM 控制台:https://console.aws.amazon.com/acm/home。如果您是首次使用 ACM,请查找 AWS Cer…...

清华北大推出的 DeepSeek 教程(附 PDF 下载链接)

清华和北大分别都有关于DeepSeek的分享文档&#xff0c;内容非常全面&#xff0c;从原理和具体的应用&#xff0c;大家可以认真看看。 北大 DeepSeek 系列 1&#xff1a;提示词工程和落地场景.pdf  北大 DeepSeek 系列 2&#xff1a;DeepSeek 与 AIGC 应用.pdf  清华 Deep…...

【空地协同技术教程:概念与技术手段解析】

空地协同技术教程&#xff1a;概念与技术手段解析 一、空地协同的概念与核心价值 定义 空地协同&#xff08;Air-Ground Collaboration&#xff09;是指通过无人机&#xff08;UAV&#xff09;与无人车&#xff08;UGV&#xff09;等异构平台的跨域协作&#xff0c;利用各自的…...

【2025小黑课堂】计算机二级WPS精选系列20G内容(可下载:真题+预测卷+软件+选择题)

2025年3月全国计算机等级考试即将于3月29日至31日举行。为了帮助广大考生高效备考&#xff0c;小编特意收集并整理了最新版&#xff08;备考2025年3月&#xff09;的小黑课堂计算机二级WPS 电脑题库软件&#xff0c;助力考生在考试中游刃有余&#xff0c;轻松通关&#xff01; …...

蓝桥杯备赛:炮弹

题目解析 这道题目是一道模拟加调和级数&#xff0c;难的就是调和级数&#xff0c;模拟过程比较简单。 做法 这道题目的难点在于我们在玩这个跳的过程&#xff0c;可能出现来回跳的情况&#xff0c;那么为了解决这种情况&#xff0c;我们采取的方法是设定其的上限步数。那么…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...