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

TCP连接的三次握手与四次挥手【重点】

TCP的运输连接管理概述

TCP是面向连接的协议,它基于运输连接来传送TCP报文段

TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程

TCP运输连接有以下三个阶段

TCP的运输连接管理就是使运输连接的建立和释放都能正常的进行

TCP建立连接的三次握手(重要)

TCP三次握手使用指令(TCP标记):

TCP使用三报文握手建立连接

第一次:客户向服务器发送连接请求段,建立连接请求控制段(SYN=1),表示传输的报文段的第一个数据字节的序列号是x,此序列号代表整个报文段的序号(seq=x);客户端进入 SYN_SEND (同步发送状态);

第二次:服务器发回确认报文段,同意建立新连接的确认段(SYN=1),确认序号字段有效(ACK=1),服务器告诉客户端报文段序号是y(seq=y),表示服务器已经收到客户端序号为x的报文段,准备接受客户端序列号为x+1的报文段(ack_seq=x+1);服务器由LISTEN进入SYN_RCVD (同步收到状态);

第三次:客户对服务器的同一连接进行确认.确认序号字段有效(ACK=1),客户此次的报文段的序列号是x+1(seq=x+1),客户期望接受服务器序列号为y+1的报文段(ack_seq=y+1);当客户发送ack时,客户端进入ESTABLISHED 状态;当服务收到客户发送的ack后,也进入ESTABLISHED状态;第三次握手可携带数据;

为什么要进行三次握手?

主要原因:防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误

第一次握手: 客户端向服务器端发送报文,证明客户端的发送能力正常

第二次握手:服务器端接收到报文并向客户端发送报文证明服务器端的接收能力、发送能力正常

第三次握手:客户端向服务器发送报文,证明客户端的接收能力正常

如果两次握手会出现以下情况:

客户端向服务器端发送的请求报文由于网络等原因滞留,未能发送到服务器端,此时连接请求报文失效,客户端会再次向服务器端发送请求报文,之后与服务器端建立连接,当连接释放后,由于网络通畅了,第一次客户端发送的请求报文又突然到达了服务器端,这条请求报文本该失效了,但此时服务器端误认为客户端又发送了一次连接请求,两次握手建立好连接,此时客户端忽略服务器端发来的确认,也不发送数据,造成不必要的错误和网络资源的浪费。

如果采用三次握手的话,就算那条失效的报文发送到服务器端,服务器端确认并向客户端发送报文,但此时客户端不会发出确认,由于客户端没有确认,由于服务器端没有接收到确认,就会知道客户端没有请求连接。

TCP释放连接的四次挥手(重要)

TCP使用四报文挥手释放连接

第一次:客户向服务器发送释放连接报文段,发送端数据发送完毕,请求释放连接(FIN=1),其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态

第二次: 服务器端接收到连接释放报文后,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT 关闭等待状态

第三次:客户端接收到服务器端的确认请求后,客户端就会进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文,服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

第四次:客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态,但此时TCP连接还未终止,必须要经过2MSL后(最长报文寿命),当客户端撤销相应的TCB后,客户端才会进入CLOSED关闭状态,服务器端接收到确认报文后,会立即进入CLOSED关闭状态,到这里TCP连接就断开了,四次挥手完成

为什么客户端要等待2MSL?

1.为了保证客户端发送的最后一个 ACK 报文段能够到达服务端。这个ACK 报文段有可能丢失,因而使处在LAST-ACK状态的服务端就收不到对已发送的FIN + ACK报文段的确认。服务端会超时重传这个 FIN+ACK 报文段,而客户端就能在 2MSL 时间内(超时+1MSL传输)收到这人重传的FIN+ACK 报文段。接着客户端重传一次确认,重新启动 2MSL计时器。最后,客户端和服务器都正常进入到CLOSED状态。(简述· 防ack报文美失,Server再次发送Fin报文,一来一最长时间就是2MSL
2.防止已失效的连接请求报文段出现在本连接中。客户端在发送完最后一个 ACK 报文段后,再经过时间 2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样就可以使下一个连接中不会出现这种旧的连接请求报文段。

相关文章:

TCP连接的三次握手与四次挥手【重点】

TCP的运输连接管理概述 TCP是面向连接的协议,它基于运输连接来传送TCP报文段 TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程 TCP运输连接有以下三个阶段 TCP的运输连接管理就是使运输连接的建立和释放都能正常的进行 TCP建立连接的三次握手&a…...

​重生奇迹MU新手玩家如何快速熟悉游戏​

新手玩家必须掌握什么呢,建议新手玩家去官方网站上面看看游戏的详细介绍,必须要好的熟悉游戏的各种玩法,让玩家可以有一个初步的认识。 所以这方面是非常重要的,建议每位重生奇迹MU玩家都应该注重这些东西。下面我们就来简单介绍…...

MySQL 用户权限和远程访问设置

目录 一、用户操作查看当前拥有用户创建用户修改用户密码删除用户给root用户开放外网访问 二、用户权限操作授予权限的原则查看授予用户的权限给用户添加权限回收权限 一、用户操作 先要使用root用户登录MySQL后在执行后面操作 查看当前拥有用户 SELECT host,user,Grant_pri…...

Golang基础之关键字

Type 参考 ## https://blog.csdn.net/SHELLCODE_8BIT/article/details/122837699 type有如下几种用法: 定义结构体定义接口类型定义类型别名类型查询 类型定义 type Celsius float64 // 摄氏温度 type Fahrenheit float64 // 华氏温度const (AbsoluteZeroC Cels…...

DataFrame插入多列PerformanceWarning: DataFrame is highly fragmented.

DataFrame插入多列PerformanceWarning: DataFrame is highly fragmented. dataframe列比较多,增加列的代码如下: dfpd.DataFrame() for i in range(1000):vlist[]for j in range(1000):vlist.append(j) df[COL_ str(i)] vlistdf警告错误&#x…...

Springboot登录验证的统一拦截处理

在进行Springboot项目开发的时候如何把每次请求都要验证的用户进行提取拦截统一处理 背景 如果不进行统一的拦截处理,其实这是一个非常痛苦的一件事情,因为每次用户请求你都要去进行用户的信息(用户信息存储在session中)的验证&…...

自定义类型详解(上)

结构体 1 结构体的声明 1.1 结构的基础知识 结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.2 结构的声明 struct tag//struct是结构体的标志,tag是标签;名字。 {member-list;//成员变量 }variable-list;//变量列…...

【数据库——MySQL】(9)函数、查询练习及讲解

目录 1. 题目1.1 函数练习1.2 数据库查询 2. 解答2.1 函数练习2.2 数据库查询 1. 题目 1.1 函数练习 求圆周率的值,保留 6 位小数。生成两个 100 到 200 间的随机数。将”武汉大学”,”数学学院”,”计算数学”连接成一个字符串。求字符串中第三个字符为 A 的所有…...

【数据结构与算法——C语言】“串操作与算法”之“找出最长串及其长度”

目录 1. 实验内容及上机实验所用平台1.1 实验内容1.2 实验平台软件 2. 流程图3. 源代码4. 用例测试5. 实验总结 1. 实验内容及上机实验所用平台 1.1 实验内容 【问题描述】 给定两个字符串 s1 和 s2,求最长的 s1 前缀 ss 使得 ss 为 s2 的最长后缀,输出…...

泡泡玛特:一家中国潮玩品牌的出海之旅

泡泡玛特的出海之旅,可以为中国出海企业提供怎样的启示和借鉴? 中国潮玩品牌的出海之旅 如果在年轻人群体中聊起泡泡玛特,那么估计无人不知无人不晓。这家成立于2010年的潮玩企业,凭借琳琅满目让消费者爱不释手的创新产品&#xf…...

淘宝商品sku信息抓取接口api

在电商行业中,SKU是一个经常被使用的术语,但是对于很多人来说,这个词可能还比较陌生。在这篇文章中,我们将详细解释什么是SKU,以及在电商业务中它的作用和意义。 什么是SKU? SKU是“Stock Keeping Unit”…...

MySQL 多表关系(多表查询 一)

多表关系描述 MySQL是一种关系型数据库管理系统,它支持多表关系,这在数据库设计和查询中非常重要。 项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务…...

【面试高高手】——JavaIO篇(23题)

文章目录 1.什么是Java IO?2.如何从数据传输方式理解IO流?3.Java IO设计上使用了什么设计模式?4.什么是Java NIO?5.什么时BIO?6.什么是AIO?7.你怎么理解同步IO和异步IO?8.你怎么理解阻塞IO和非阻塞IO?9.IO中的输入流和输出流有…...

图像采集 deep OCR

按照芯片类型可以分为CCD相机、CMOS相机 按照传感器的结构特性可以分为线阵相机、面阵相机 按照扫描方式可以分为隔行扫描相机、逐行扫描相机 按照分辨率大小可以分为普通分辨率相机、高分辨率相机按照输出信号方式可以分为模拟相机、数字相机 按照输出色彩可以分为单色(黑白)相…...

Linux 终端命令总结

一、常用的七条命令 命令 对应英文作用lslist查看当前文件夹下的内容pwdprint work directory查看当前所在文件夹cd [目录名]change directory切换文件夹 touch [文件名]touch如果文件不存在新建文件mkdir [目录名]make directory创建目录rm[文件名]remo…...

中国核动力研究设计院使用 DolphinDB 替换 MySQL 实时监控仪表

随着仪表测点的大幅增多和采样频率的增加,中国核动力研究设计院仪控团队原本基于 MySQL 搭建的旧系统已经无法满足大量数据并发写入、实时查询和聚合计算的需求。他们在研究 DB-Engines 时序数据库榜单时了解到国内排名第一的 DolphinDB。经过测试,发现其…...

速看!软考中项100条重要知识点集锦!

1. 项目的特点有哪些? 2. 项目的组织方式有哪些?分别具有什么优缺点? 3. 项目管理过程组有哪些? 4. 怎么样才能成为一位优秀的项目经理? 5. PMO的主要职能有哪些? 6. 项目经理(PM&#xff…...

Pycharm在进行debug时出现collecting data如何解决?

Pycharm在进行debug时变量界面出现collecting data,问题如下: 解决方法:打开Setting界面,在Python Debugger选项中勾选下图中的Gevent compatible即可。...

【算法分析与设计】算法概述

目录 一、学习要点二、算法的定义三、算法的性质四、程序(Program)五、问题求解(Problem Solving)六、算法的描述七、算法分析的目的八、算法复杂性分析(一)算法时间复杂性分析(二)算法渐近复杂性1、渐进上界记号-大O符号2、渐进下…...

如何进一步全面提高项目估算精准度?

项目估算非常重要,这直接关系着项目的成本和收入,如果估算不准确,将为项目带来较大风险。一般软件规模可以用多种方式进行估算,但是用功能点估算方式更准确,而自动估算让估算更快速,我们以CoCode开发的估算…...

深度测评2026广州个体户核定流程精选榜单,革新个体工商户税务办理新变革

在数字经济浪潮席卷之下,个体工商户税务办理正面临前所未有的变革压力与机遇窗口。2026年的广州,作为电商与直播产业的高地,其个体户核定流程的效率与合规性,已成为衡量区域营商环境的试金石。然而,一个深层的价值悖论…...

Node.js 服务端项目接入 Taotoken 多模型 API 的完整步骤

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Node.js 服务端项目接入 Taotoken 多模型 API 的完整步骤 对于使用 Node.js 构建后端服务的开发者而言,统一接入多个大…...

Java SSRF漏洞深度解析:从URLConnection到安全防御实战

1. 项目概述:从一次内部安全审计说起最近在帮一个朋友的公司做代码安全审计,他们有一个对外提供数据聚合服务的Java Web应用。在翻看一个看似平平无奇的“网页内容抓取”功能模块时,我一眼就看到了那段熟悉的、几乎每个Java开发者都写过的代码…...

Whisky停止维护后,如何在M系列Mac上继续运行Windows应用?5种技术实现路径深度解析

Whisky停止维护后,如何在M系列Mac上继续运行Windows应用?5种技术实现路径深度解析 【免费下载链接】Whisky A modern Wine wrapper for macOS built with SwiftUI 项目地址: https://gitcode.com/gh_mirrors/wh/Whisky 当看到Whisky项目官方宣布&…...

LaTeX中文排版难题:如何快速解决字体缺失问题?

LaTeX中文排版难题:如何快速解决字体缺失问题? 【免费下载链接】latex-chinese-fonts Simplified Chinese fonts for the LaTeX typesetting. 项目地址: https://gitcode.com/gh_mirrors/la/latex-chinese-fonts 你是否曾经在深夜赶论文时&#x…...

ARM RAS架构中ERR<n>FR寄存器解析与应用

1. ARM RAS架构与错误记录机制概述 在服务器和关键任务计算领域,硬件可靠性直接决定了系统的可用性水平。ARMv8/v9架构中的RAS(Reliability, Availability, Serviceability)扩展提供了一套完整的硬件错误处理机制,其核心是通过一组专用寄存器实现错误检测…...

ElevenLabs泰米尔文TTS接入全链路详解:从API密钥配置、音色微调到低延迟流式响应(附3个避坑代码片段)

更多请点击: https://intelliparadigm.com 第一章:ElevenLabs泰米尔文TTS接入全链路详解:从API密钥配置、音色微调到低延迟流式响应(附3个避坑代码片段) ElevenLabs 自 2024 年起正式支持泰米尔语(ta-IN&a…...

2026届最火的十大降AI率神器解析与推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 人工智能生成内容也就是 AIGC 技术迅猛发展着,其在学术领域的应用引发着深刻变革…...

纸张计数技术深度解析:基于STM32与FDC2214的高精度电容传感系统架构剖析

纸张计数技术深度解析:基于STM32与FDC2214的高精度电容传感系统架构剖析 【免费下载链接】2019-Electronic-Design-Competition 【电赛】2019 全国大学生电子设计竞赛 (F题)纸张数量检测装置 (基于STM32F407 & FDC2214 & …...

桌面级机械臂DIY全攻略:从运动学建模到PID控制实战

1. 项目概述:一个桌面级机械臂的诞生最近在逛GitHub的时候,发现了一个挺有意思的项目,叫“ClawPuter”。光看名字,你可能会有点摸不着头脑,Claw是爪子,Puter是计算机,合起来是“爪式计算机”&am…...