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

tcp 的三次握手与四次挥手

      • 问1: 请你说一下tcp的三次握手
          • 一次握手
          • 两次握手
          • 三次握手
          • 问: 为什么不四(更多)次握手?
      • 问 2: 请说一下 tcp 的 4 次挥手
          • 一次挥手
          • 两次挥手
            • 问题:能不能等到数据传输完成再返回 ack?
          • 三次挥手
          • 四次挥手
          • 问: 为什么要等两个最大报文存在时间?

bg: tcp 是可靠的连接,如何保证

  1. 建立连接: 三次握手
  2. 传输: 重传,拥塞机制
  3. 断开: 四次挥手

问1: 请你说一下tcp的三次握手

如果自己去设计一个tcp建立连接的流程会怎么做?

一次握手

客户端(请求连接:SYN)->服务端

问题 1: 客户端不知道服务端能不能收到
问题 2: 客户端不知道服务端是否可以发送数据
问题 3: (假设服务端收到请求,并同意连接)服务端不知道客户端是否可以接收到数据.

举个例子:
客户端连接的是一个关闭的服务器,如果只进行一次握手,客户端发送给关闭的服务器,服务器是不可能收到的.

结论: 一次握手不行

两次握手

客户端(请求连接:SYN)->服务端
服务端(ack+SYN)->客户端

问题 1: 服务端不知道客户端是否可以收到数据

举个例子:
第二次握手的数据丢包了,客户端没有收到
这时候客户端认为连接没有建立好(没有收到服务器的返回)
服务器认为连接已经建立好了
这时服务器发送数据给客户端,客户端是不接收的(因为客户端认为连接没有建立好)

结论: 两次握手也不行

三次握手

客户端(请求连接:SYN)->服务端
服务端(ack+SYN)->客户端
客户端(ack)->服务端

服务端知道客户端可以发送与接受数据
客户端知道服务端可以发送与接受数据

结论: 三次握手可以

问: 为什么不四(更多)次握手?

三次握手已经满足需求,多余的只是在浪费性能.

问 2: 请说一下 tcp 的 4 次挥手

自己来设计断开连接的流程会怎么设计?

终端 A 数据传输完成,准备与终端 B 断开连接

一次挥手

A(FIN)->B

问题 1:A不知道 B 是否能收到断开连接的信号
问题 2: A不知道 B 的数据是否已经传输完成,可能会丢失数据

举个例子:
B 并没有传输完成数据,这时 A 断开了连接,没有完成传输的数据就丢失了

结论: 一次挥手不行

两次挥手

A(FIN)->B
B(ack)->A

问题 1: A不知道 B 的数据是否已经传输完成,可能会丢失数据

问题:能不能等到数据传输完成再返回 ack?

不能
举个例子: 如果 A 发送 FIN 给 B ,这个过程可能丢包了,B 没有收到 A 发起的 FIN 就不会 ACK,所以 3 有重传,只要一段时间没有收到 ACK 就会重传 FIN

那么问题来了,如果等到数据传输完成再返回 ack,那么如果 B 数据没有传输完成,还需要传输很久,比如 10 分钟,那么这十分钟都没有返回 ack,A 端没收到 ack 会认为丢包了,就会不断的重发 FIN

结论: 两次挥手不行

三次挥手

A(FIN)->B
B(ack)->A
B(FIN)->A

问题: B 不知道 A 是否能收到发出的 FIN 信号,如果丢包,A 会保持 tcp 连接

四次挥手

A(FIN)->B
B(ack)->A
B(FIN)->A
A(ack)->B

保证双方数据都传输完毕,等待两个报文段最大存活时间就会断开

问: 为什么要等两个最大报文存在时间?

有两种说法:

  1. 确保 B 能收到 ack,不然 B 就会认为FIN丢包了,继续发送 FIN
  2. 最后 ack 后可能网络中还有一些数据包(丢包重传的),如果这时再建立连接可能会是同一个端口,那么这些(上一个连接)数据包可能在新的连接中被接受到,造成数据的错乱.

相关文章:

tcp 的三次握手与四次挥手

问1: 请你说一下tcp的三次握手一次握手两次握手三次握手问: 为什么不四(更多)次握手? 问 2: 请说一下 tcp 的 4 次挥手一次挥手两次挥手问题:能不能等到数据传输完成再返回 ack? 三次挥手四次挥手问: 为什么要等两个最大报文存在时间? bg: tcp 是可靠的连接,如何保证 建立连…...

QT--信号与槽机制

什么是信号与槽? 在 Qt 中,信号与槽是一种用于对象间通信的机制。它使得一个对象可以通知其他对象某个事件的发生,而不需要直接知道这些对象的具体实现。这种机制非常适合事件驱动的编程模型,如用户界面交互。 1. 信号&#xff…...

vue3项目history路由模式部署上线405、刷新404问题(包括部分页面刷新404问题)

一、找不到js模块 解决方法:配置Nginx配置文件: // root /your/program/path/dist root /www/wwwroot/my_manage_backend_v1/dist;二、刷新页面导致404问题(Not found) 经过一系列配置后发现进入页面一切正常,包括路由前进和回退&#xff0…...

电阻容差是啥意思

定义 电阻器在生产过程中,由于工艺等因素的限制,其实际阻值不可能与标称阻值完全一致,总会存在一定的误差。例如,一个标称阻值为100Ω、容差为5%的电阻,其实际阻值可能在95Ω至105Ω之间。 产生原因 材料特性差异&a…...

Rust: offset祼指针操作

offset是偏移元素个数,不是字节数! fn main(){let student_a Student{id:20240001,name:"张三娃".into(),class_id:3,age:14,grade:1};let student_b Student{id:20240002,name:"李四牛".into(),class_id:3,age:15,grade:1};let …...

SD本地部署和云端部署的区别以及优劣

相信有相当多多小伙伴应该是看了一些技术或者设计的博主的教程后开始尝试使用SD的,在大多数的SD教程中,绝大多数都是推荐本地化的部署流程,毕竟本地部署后的SD自由度会显得高一些,大部分的操作也都完全可以实现,只不过…...

4、数据结构与算法解析(C语言版)--栈

栈的数据存储遵循“后进先出的规则”&#xff0c;这在计算机里面是非常有用的&#xff0c;比如word等编辑软件的"撤销"功能&#xff0c;就是使用栈进行实现的。 1、创建项目 main.h #ifndef _MAIN_H #define _MAIN_H#include <stdio.h> #include <stdlib.…...

c# 后台任务自动执行

如果有些任务需要在后台自动执行&#xff0c;且时不时需要添加一个任务&#xff0c;且按照优先级顺序执行&#xff0c;那么可以参考本文的方法。 后台任务类 定义一个后台任务类BackgroundTaskThread&#xff0c;其中Start方法是用来启动任务的&#xff0c;循环查询是否有添加…...

被裁20240927 --- 嵌入式硬件开发 前篇

前篇主要介绍一些相关的概念&#xff0c;用于常识扫盲&#xff0c;后篇开始上干货&#xff01; 他捧着一只碗吃过百家的饭 1. 处理器芯片1.1 处理器芯片制造商一、 英特尔&#xff08;Intel&#xff09;二、 三星&#xff08;SAMSUNG&#xff09;三、 高通&#xff08;Qualcomm…...

重温设计模式--观察者模式

文章目录 观察者模式&#xff08;Observer Pattern&#xff09;概述观察者模式UML图作用&#xff1a;实现对象间的解耦支持一对多的依赖关系易于维护和扩展 观察者模式的结构抽象主题&#xff08;Subject&#xff09;&#xff1a;具体主题&#xff08;Concrete Subject&#xf…...

vulnhub靶场——Log4j2

第一步:搭建靶场环境 #开启环境 cd vulhub/log4j/CVE-2021-44228 docker-compose up -d 来到网站首页 第二步:搭建一个dnslog平台上获取我们注入的效果 第三步:发现 /solr/admin/cores?action 这里有个参数可以传 我们可以看到留下了访问记录并且前面的参数被执行后给我们回…...

Vue3中使用resolve进行路径别名设置

Vue3中使用resolve进行路径别名设置 使用Vite初始化Vue3项目工程请参考文章&#xff1a;Vite创建Vue3工程并引入ElementPlus&#xff08;图文详细&#xff09; 1.使用~路径别名替换根目录&#xff0c;使用路径别名替换src目录 在vite.config.js配置文件下添加如下配置 impo…...

Linux 添加磁盘

1、编辑虚拟机添加磁盘 然后开启虚拟机 选项如下&#xff1a; DOS (MBR) a 切换可引导标志 b 编辑嵌套的 BSD 磁盘标签 c 切换 DOS 兼容标志 通用 d 删除一个分区 F 列出未分配的空闲空间 l 列出已知的分区类型 n 添加一个新分区 p 打印分区表 t 更改分区类…...

集成 jacoco 插件,查看单元测试覆盖率

文章目录 前言集成 jacoco 插件&#xff0c;查看单元测试覆盖率1. 添加pom2. 配置完成、执行扫描3. 执行结果4. 单元测试报告 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞…...

MySQL purged gtid是如何生成和维护的

目录 1. GTID的基本概念2. GTID的生成3. GTID的清除3.1 手动清除二进制日志3.2 自动清除二进制日志3.3 重置主库 在MySQL中&#xff0c;gtid_purged表示已清除的GTID集合。 gtid_purged的生成和维护过程如下&#xff1a; 1. GTID的基本概念 GTID&#xff08;Global Transact…...

[创业之路-206]:《华为战略管理法-DSTE实战体系》- 6-关键成功因素法CSF

目录 一、概述 1、定义与起源 2、关键成功因素的定义 3、关键成功因素的来源 4、关键成功因素的确认方法 5、关键成功因素法的步骤 6、关键成功因素法的应用 7、关键成功因素法的优势与局限性 二、 关键成功因素法CSF的应用 1、企业战略管理 2、项目管理 3、绩效管…...

[Unity]【图形渲染】【游戏开发】Shader数学基础4-更多矢量运算

在计算机图形学和着色器编程中,矢量运算是核心的数学工具之一。矢量用于描述空间中的位置、方向、速度等各种物理量,并在图形变换、光照计算、纹理映射等方面起着至关重要的作用。本篇文章将详细讲解矢量和标量之间的乘法与除法、矢量的加法与减法、矢量的模与单位矢量、点积…...

目标检测——基于yolov8和pyqt的螺栓松动检测系统

目录 1.项目克隆和环境配置1.1 我这里使用的是v8.0.6版本1.2 项目代码结构介绍 2.数据集介绍2.1 数据集采集2.2采集结果介绍 3.模型训练4.pyqt界面设计4.1 界面内容介绍4.2 界面实现 5.操作中的逻辑实现5.1 图片检测5.2 文件夹检测5.3 视频检测和摄像头检测 6. 效果展示 1.项目…...

【Java数据结构】LinkedList

认识LinkedList LinkedList就是一个链表&#xff0c;它也是实现List接口的一个类。LinkedList就是通过next引用将所有的结点链接起来&#xff0c;所以不需要数组。LinkedList也是以泛型的方法实现的&#xff0c;所以使用这个类都需要实例化对象。 链表分为很多种&#xff0c;比…...

图像处理-Ch4-频率域处理

Ch4 频率域处理(Image Enhancement in Frequency Domain) FT &#xff1a;将信号表示成各种频率的正弦信号的线性组合。 频谱&#xff1a; ∣ F ( u , v ) ∣ [ R 2 ( u , v ) I 2 ( u , v ) ] 1 2 |F(u, v)| \left[ R^2(u, v) I^2(u, v) \right]^{\frac{1}{2}} ∣F(u,v)…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

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

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

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

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

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

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

Spring Security 认证流程——补充

一、认证流程概述 Spring Security 的认证流程基于 过滤器链&#xff08;Filter Chain&#xff09;&#xff0c;核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤&#xff1a; 用户提交登录请求拦…...

Python 高级应用10:在python 大型项目中 FastAPI 和 Django 的相互配合

无论是python&#xff0c;或者java 的大型项目中&#xff0c;都会涉及到 自身平台微服务之间的相互调用&#xff0c;以及和第三发平台的 接口对接&#xff0c;那在python 中是怎么实现的呢&#xff1f; 在 Python Web 开发中&#xff0c;FastAPI 和 Django 是两个重要但定位不…...

Linux基础开发工具——vim工具

文章目录 vim工具什么是vimvim的多模式和使用vim的基础模式vim的三种基础模式三种模式的初步了解 常用模式的详细讲解插入模式命令模式模式转化光标的移动文本的编辑 底行模式替换模式视图模式总结 使用vim的小技巧vim的配置(了解) vim工具 本文章仍然是继续讲解Linux系统下的…...

【多线程初阶】单例模式 指令重排序问题

文章目录 1.单例模式1)饿汉模式2)懒汉模式①.单线程版本②.多线程版本 2.分析单例模式里的线程安全问题1)饿汉模式2)懒汉模式懒汉模式是如何出现线程安全问题的 3.解决问题进一步优化加锁导致的执行效率优化预防内存可见性问题 4.解决指令重排序问题 1.单例模式 单例模式确保某…...