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

TCP通信三次握手、四次挥手

目录

前言

一、三次握手

TCP三次握手的详细过程

二、四次挥手

四次挥手的详细过程


前言

        前面我说到了,UDP通信的实现,但我们经常说UDP通信不可靠,是因为他只会接收和发送,并不会去验证对方收到没有,那么我们说TCP通信可靠,就是因为他会进行验证接收端是否能够接收和发送,并且只有在验证通过的情况下才会发送数据,并且会通过一些操作来保证数据发送的完整性。本小节主要介绍TCP通信过程中如何通过三次握手和四次挥手来保证数据的传输。

一、三次握手

         TCP(Transmission Control Protocol)通信中,三次握手是指在客户端和服务器之间建立可靠连接时的三步过程。这一过程的目的是确保双方都能够准备好进行数据传输,并且能确认彼此的接收和发送能力。视频链接:屏幕录制 2024-09-10 221512-CSDN直播

TCP三次握手的详细过程

  1. 第一次握手:客户端发送SYN包

    • 客户端向服务器发送一个SYN(Synchronize)标志位为1的TCP报文段,表示客户端想要发起连接,并请求同步序列号(Sequence Number)。
    • 在这个阶段,客户端会生成一个初始序列号(ISN,Initial Sequence Number),并将这个序列号放入报文中。
    • 报文格式:SYN = 1, SEQ = xx 是客户端的初始序列号)
  2. 第二次握手:服务器回复SYN-ACK包

    • 服务器收到客户端的SYN报文后,理解到客户端想建立连接。于是,服务器也生成一个自己的初始序列号,并发送一个SYN-ACK(Acknowledgment)报文段回给客户端,表示接收到客户端的连接请求。
    • 在这个SYN-ACK报文中:
      • SYN = 1:表示服务器同意建立连接。
      • ACK = 1:表示确认客户端发出的SYN。
      • ACK序列号:x + 1,表示确认客户端的序列号x
      • 服务器同时也会发送自己的序列号y
    • 报文格式:SYN = 1, ACK = 1, SEQ = y, ACK = x + 1
  3. 第三次握手:客户端发送ACK包

    • 客户端收到服务器的SYN-ACK报文后,确认服务器收到了自己的连接请求,接着客户端发送一个确认报文段(ACK = 1)给服务器,确认服务器的SYN和ACK。
    • 在这个ACK报文中:
      • ACK = 1,表示确认服务器的序列号。
      • ACK序列号:y + 1,表示确认服务器的序列号y
    • 报文格式:ACK = 1, SEQ = x + 1, ACK = y + 1

此时,双方都已经完成了三次握手,客户端和服务器之间的TCP连接已经建立,接下来可以开始数据传输。

 

我们可以这样理解:

客户端需要知道:客户端自己的接收和发送能力;服务器的接收和发送能力;

服务器需要知道:客户端的接收和发送能力;服务器自己的接收和发送能力;

        第一次握手:客户端发送请求,服务器接收请求,这时,服务器知道自己有接收能力;其余能力没有。

        第二次握手:服务器发送信号告诉客户端,自己知道了客户端的连接请求,等到信号传递到客户端之后,这时,客户端知道服务器有接收能力,发送能力;客户端也知道了自己有发送能力,和接收能力,但是服务器不知道客户端有没有接收能力。

        第三次握手:客户端发送信号给服务器表示自己知道了服务器有发送和接收能力,等到服务器接收到信号以后,服务器知道了客户端收到了第二次握手发送的数据,这时,服务器知道客户端有接收能力;

        到此:客户端知道自己和对方有的接收和发送能力;服务器也知道的自己和对方有接收和发送能力;

二、四次挥手

         四次挥手是指在TCP(Transmission Control Protocol)通信中,客户端与服务器之间关闭连接的过程。与三次握手类似,四次挥手也是为了确保双方能够有序地终止连接。由于TCP是全双工通信协议,即通信双方都可以同时发送和接收数据,因此关闭连接时需要双方都同意停止发送和接收数据,整个过程需要四个步骤,称为“四次挥手”。

四次挥手的详细过程

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

    • 当客户端想要结束数据传输时,它会发送一个**FIN(Finish)**标志位为1的报文,告诉服务器它已经不再发送数据了,但仍然可以接收来自服务器的数据。
    • 这时,客户端进入FIN_WAIT_1状态,等待服务器的响应。
    • 报文格式:FIN = 1, SEQ = xx为当前的序列号)
  2. 第二次挥手:服务器回复ACK包

    • 服务器收到客户端的FIN报文后,回复一个ACK(Acknowledgment)报文,表示它收到了客户端的请求,但此时服务器可能仍然有数据要发送,因此不会立即关闭连接。
    • 服务器发送的ACK报文中的确认号为x + 1,表示确认客户端的序列号x
    • 此时,客户端进入FIN_WAIT_2状态,继续等待服务器的FIN报文,而服务器进入CLOSE_WAIT状态,准备关闭连接。
    • 报文格式:ACK = 1, SEQ = y, ACK = x + 1
  3. 第三次挥手:服务器发送FIN包

    • 当服务器处理完剩余的数据并准备好关闭连接时,它会发送一个FIN报文,通知客户端它也准备结束通信,不再发送数据了。
    • 服务器此时进入LAST_ACK状态,等待客户端的最后确认。
    • 报文格式:FIN = 1, SEQ = yy为服务器当前的序列号)
  4. 第四次挥手:客户端回复ACK包

    • 客户端收到服务器的FIN报文后,回复一个ACK报文,确认服务器已经关闭连接。
    • 发送完ACK报文后,客户端进入TIME_WAIT状态,等待一定的时间(通常为2个最大段寿命时间,2MSL,Maximum Segment Lifetime),以确保服务器收到这个ACK报文后不会重发FIN报文。如果在此期间没有收到任何新数据包,客户端才正式关闭连接,进入CLOSED状态。
    • 服务器收到客户端的ACK报文后,也进入CLOSED状态,连接彻底关闭。
    • 报文格式:ACK = 1, SEQ = x + 1, ACK = y + 1

相关文章:

TCP通信三次握手、四次挥手

目录 前言 一、三次握手 TCP三次握手的详细过程 二、四次挥手 四次挥手的详细过程 前言 前面我说到了,UDP通信的实现,但我们经常说UDP通信不可靠,是因为他只会接收和发送,并不会去验证对方收到没有,那么我们说TCP通…...

【实施文档】软件项目实施方案(Doc原件2024实际项目)

软件实施方案 二、 项目介绍 三、 项目实施 四、 项目实施计划 五、 人员培训 六、 项目验收 七、 售后服务 八、 项目保障措施软件开发管理全套资料包清单: 工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书&am…...

BeanFactory vs. ApplicationContext

在Spring框架中,BeanFactory和ApplicationContext都是用于管理Spring容器中的bean的接口,但它们在功能和应用场景上有所不同。下面是它们的主要区别: 1. 基础功能 vs. 扩展功能 BeanFactory: 是Spring框架的最基础的IoC容器,提供…...

JDBC客户端连接Starrocks 2.5

<?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://ma…...

004——双向链表和循环链表

目录 双向链表 双向链表的初始化&#xff08;与单链表类似&#xff09; 增&#xff1a; Ⅰ&#xff09;头插法 Ⅱ&#xff09;尾插法 Ⅲ&#xff09;中间插入 删 改 查 整体代码示例&#xff1a; 循环链表 循环单链表 ​编辑 循环双链表 双向链表 不同于单链表&…...

framebuffer帧缓存

framebuffer:帧缓冲&#xff0c;帧缓存 Linux内核为显示提供的一套应用程序接口。&#xff08;驱动内核支持&#xff09; framebuffer本质上是一块显示缓存&#xff0c;往显示缓存中写入特定格式的数据就意味着向屏幕输出内容。framebuffer驱动程序控制LCD显示设备&#xff0…...

24_竞赛中的高效并查集

菜鸟&#xff1a;老鸟&#xff0c;我最近在做一个与社交网络相关的项目&#xff0c;需要频繁地检查两个用户是否属于同一个群组。但我发现每次检查都很耗时&#xff0c;性能很差。你有什么建议吗&#xff1f; 老鸟&#xff1a;你可以试试使用并查集&#xff08;Union-Find&…...

新手c语言讲解及题目分享(十七)--运算符与表达式专项练习

本文主要讲解c语言的基础部分&#xff0c;运算符与表达式的学习&#xff0c;在这一部分中&#xff0c;往往有许多细节的东西需要去记住。当各种运算符一起用时&#xff0c;就会存在优先级的关系&#xff0c;本文末尾有各种运算符的优先级顺序表。 参考书目和推荐学习书目&#…...

香帅的金融学讲义:深入剖析与解读

香帅的金融学讲义&#xff1a;深入剖析与解读 金融学&#xff0c;这个看似高深复杂的学科&#xff0c;实则与我们的生活息息相关。从个人理财到国家宏观经济政策&#xff0c;金融学无处不在。那么&#xff0c;如何更好地理解金融学呢&#xff1f;今天&#xff0c;我们就来借助…...

java基础-IO(6)转换流InputStreamReader、OutputStreamWriter

引入&#xff1a; 从第一节可知&#xff0c;流分为两类&#xff1a;字节流和字符流&#xff0c;转换流就是在两者之间进行转换。 字节流转换为字符流&#xff1b; 字符流转换为字节流。 字符集 字符集&#xff1a;定义了可用字符及其对应的数字编码的集合。常见的字符集有UT…...

使用Azure Devops Pipeline将Docker应用部署到你的Raspberry Pi上

文章目录 1. 添加树莓派到 Agent Pool1.1 添加pool1.2 添加agent 2. 将树莓派添加到 Deployment Pool2.1 添加pool2.2 添加target 3. 添加编译流水线3.1 添加编译命令3.2 配置触发器 4. 添加发布流水线4.1 添加命令行4.2 配置artifact和触发器 5. 完成 1. 添加树莓派到 Agent P…...

91、K8s之ingress上集

一、Ingress service模式&#xff1a; loadbalance NodePort&#xff1a;每个节点都会有一个指定的端口 30000-32767 内网 clusterip&#xff1a;默认模式&#xff0c;只能pod内部访问 externalName&#xff1a;需要dns提供域名 1.1、对外提供服务的ingress service&…...

NISP 一级 | 2.1 密码学

关注这个证书的其他相关笔记&#xff1a;NISP 一级 —— 考证笔记合集-CSDN博客 通过上一章的学习&#xff0c;我们知道了&#xff0c;网络安全的 CIA 模型&#xff0c;而本期学习的“密码学”&#xff0c;则能为 CIA 模型提供很好的技术支持&#xff1a; 面临的攻击威胁所破坏…...

深度学习速通系列:混淆矩阵是什么

混淆矩阵&#xff08;Confusion Matrix&#xff09;是一种评估分类模型性能的工具&#xff0c;尤其在监督学习中用于分析分类结果。它通过一个矩阵的形式&#xff0c;将模型的预测结果与实际标签进行比较&#xff0c;从而可以清晰地看到模型在各个类别上的表现。以下是混淆矩阵…...

综合评价 | 基于熵权-变异系数-博弈组合法的综合评价模型(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 根据信息熵的定义&#xff0c;对于某项指标&#xff0c;可以用熵值来判断某个指标的离散程度&#xff0c;其信息熵值越小&#xff0c;指标的离散程度越大&#xff0c; 该指标对综合评价的影响&#xff08;即权重&…...

模板与泛型编程笔记(一)

1. 推荐书籍 《C新经典 模板与泛型编程》难得的很容易看得懂的好书&#xff0c;作者讲技术不跳跃&#xff0c;娓娓道来&#xff0c;只要花点时间就能看懂。 2. 笔记 模板为什么要用尖括号&#xff1f;因为便于编译器解析&#xff0c;可以将模板和普通函数声明分开。其实尖括…...

ubuntu 和windows用samba服务器实现数据传输

1&#xff0c;linux安装samba服务器 sudo apt-get install samba samba-common 2&#xff0c;linux 配置权限&#xff0c;修改目录权限&#xff0c;linux下共享的文件权限设置。 sudo chmod 777 /home/lark -R 3. 添加samba用户 sudo smbpasswd -a lark 4&#xff0c;配置共享…...

NISP 一级 | 3.2 网络安全威胁

关注这个证书的其他相关笔记&#xff1a;NISP 一级 —— 考证笔记合集-CSDN博客 网络安全威胁主要来自攻击者对网络及信息系统的攻击&#xff0c;攻击者可以通过网络嗅探、网络钓鱼、拒绝服务、远程控制、社会工程学等网络攻击手段&#xff0c;获得目标计算机的控制权&#xff…...

【技术实践】MySQL分表分库全解析:从理论到实战

文章目录 【技术实践】MySQL分表分库全解析&#xff1a;从理论到实战1. 引言1.1 MySQL数据库面临的挑战1.2 分表分库的概念与优势 2. MySQL分表分库的基本原理2.1 水平分表2.2 垂直分表2.3 水平分库2.4 分表分库的选择标准 3. 实现分表分库的技术方案3.1 中间件解决方案3.2 自定…...

动手学深度学习(一)简介+预备知识+基础知识(上)

一、简介 1、机器学习 机器学习研究如何使用经验改善计算机系统的性能。 2、表征学习 表征学习是机器学习的一类&#xff0c;研究的是&#xff0c;如何自动学习出数据合适的表示方式&#xff0c;更好地由输入得到正确的输出。 3、深度学习 深度学习是具有多级表示的表征学…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!

目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...

第八部分:阶段项目 6:构建 React 前端应用

现在&#xff0c;是时候将你学到的 React 基础知识付诸实践&#xff0c;构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段&#xff0c;你可以先使用模拟数据&#xff0c;或者如果你的后端 API&#xff08;阶段项目 5&#xff09;已经搭建好&#xff0c;可以直接连…...

goreplay

1.github地址 https://github.com/buger/goreplay 2.简单介绍 GoReplay 是一个开源的网络监控工具&#xff0c;可以记录用户的实时流量并将其用于镜像、负载测试、监控和详细分析。 3.出现背景 随着应用程序的增长&#xff0c;测试它所需的工作量也会呈指数级增长。GoRepl…...

CMS内容管理系统的设计与实现:多站点模式的实现

在一套内容管理系统中&#xff0c;其实有很多站点&#xff0c;比如企业门户网站&#xff0c;产品手册&#xff0c;知识帮助手册等&#xff0c;因此会需要多个站点&#xff0c;甚至PC、mobile、ipad各有一个站点。 每个站点关联的有站点所在目录及所属的域名。 一、站点表设计…...