核心机制三:连接管理(三次握手)

article/2025/6/17 16:55:08

核心机制一:确认应答 => 实现可靠传输的核心

        接受方给发送方返回"应答报文"(ack)

        1)发送方能够感知到对方是否收到

        2)如果对方没有收到,发送方采取措施

        序号按照字节编排 (连续递增)

        确认序号按照收到数据的最后一个字节序号 + 1

核心机制二:超时重传 => 产生丢包之后,重传数据

        可能是数据丢了,也有可能是 ack 丢了

        接受方按照序号对数据重传(超时时间)

核心机制三:连接管理

        有连接

        连接:虚拟的,抽象的连接

                通信双方各自保存对方的关键信息(IP,端口)

连接如何建立的(三次握手)

连接如何断开的(四次挥手)

连接如何建立的 (三次握手)

handshake 计算机术语

客套,打招呼,没有实质性的信息,通过打招呼换取对方的注意

TCP 中的握手,传输一个"打招呼"的数据包,这个数据包不携带任何"业务数据"(没有应用层的载荷),TCP 这个数据包自有报头,没有正文,也就是这个操作是不携带任何业务数据的

三次握手,建立连接的过程中,客户端和服务器要经过三次这样的"打招呼",连接才能在双方这边都建立好

synchronized 同步

在计算机中,通过一个术语,可能有多种用途需要结合上下文来理解含义

在多线程中表达的是"互斥"(只能有一个)

在咱们这个TCP 这个地方,表达的是"通知"这样的效果

1)客户端给服务器发起一个 syn(同步报文段)

        客户端告诉服务器:我要和你建立连接,请你保存我的信息

2)服务器给客户端返回一个 ack

        服务器告诉客户端:收到,我会保存的

3)服务器给客户端发起一个 syn

        服务器也告诉客户端:我也要和你建立连续,请你保存我的信息

4)客户端收到之后,也返回一个 ack

        客户端告诉服务器:收到,我会保存的

说好的三次呢

从流程/逻辑上是交互了四次,但是中间的两次,可以合并成一个 TCP 数据包,从网络上实际只传输了 三个数据包

返回 ack 和 发送 syn 都是内核控制的和应用程序代码无关(程序员干预不了),操作系统就可以在同一时间完成这俩的数据传输

三次握手的意义是什么? 解决了什么问题??

        三次握手,也可以视为是一种"保证可靠传输的手段"(辅助手段)

1.三次握手,相当于是"投石问路",验证通信链路是否畅通

        地铁 早上 6 点开始运营,0点就休息了,经过这个一晚上,地铁路线中是否会出现一系列的故障和异常?

        地体第一班一般都会先空车跑一趟

2.三次握手,也是在验证通信双发的发送能力和接受能力是否是正常的

3.通过三次握手,让通信双方协商关键信息(和可靠性不是很相关,但是也有用)

TCP 建立连接的过程中,有一个数据是需要进行协商的,就是 TCP 的起始序号

        TCP 的序号,针对载荷部分按照字节编号.

        当 TCP 建立好了之后,传输的第一个数据包的第一个字节的编号,不是从 1 / 0 开始编排的

        而是在三次握手阶段协商出来这样的数字,作为起始编号

                编号不从 0 开始有啥用?

                每次建立连接,协商出来的起始编号都是不同的(差别很大)

这样的设定的目的,为了避免出现网络传输中的特殊情况

"用前朝的剑,斩本朝的官"

在数据进行多次交换传输的时候,可能会出现 其中的某个数据"迷路了"因为网络的一些延迟导致绕了很长的路经过了很长的时间才到达服务器

当这个数据包到达服务器的时候,此时连接已经变了,已经是其他的连接

此时这个数据包该如何处理呢?

1.服务器正常处理

2.丢弃(正确做法)

三次握手的意义

1.验证通信链路是否畅通

2.验证通信双方的发送能力和接受能力

3.协商关键的信息

TCP 建立过程中涉及到的,操作系统的 原生 API (Linux 系统中提供的 C 语言风格的 api)

在 Java 里面对上面的 api 进行了大幅度的简化

咱们只需要知道,客户端 new Socket 对象触发 三次握手

服务器这边通过 accept 把已经建立好的连接拿到应用程序中(accept 接触阻塞的时候,三次握手已经完成了)

LISTEN :服务器存在的状态

服务器 new ServerSocket 就会进入到 LISTEN 表示在"监听"这个端口,端口上过来的客户端,就能 accept 了(手机开机,状态良好)

ESTABUSHED:客户端和服务端连接建立好了

客户端和服务器之间就可以进行通信了(电话已经接通,可以说话了)


http://www.hkcw.cn/article/PmcbpDVGQm.shtml

相关文章

三步问题 --- 动态规划

目录 一:题目 二:算法原理 三:代码实现 一:题目 题目链接:面试题 08.01. 三步问题 - 力扣(LeetCode) 二:算法原理 三:代码实现 class Solution { public:int waysT…

Adobe Acrobat 9.1.2 Pro (install)

Adobe Acrobat 9.1.2 Pro (install) PDF编辑工具安装Acrobat 9.1.2 E:\Downloads\Adobe_Acrobat_ProX\Adobe_Acrobat_ProX 1118-1905-0841-9679-7056-1416 先别启动哦!!!! 先别启动哦!!&…

我们通常说理解的软件设计的哲学是什么?

软件设计的哲学指的是一系列指导软件设计决策的根本理念、原则和价值观。它超越了具体的技术、工具或模式,深入到“我们为什么这样设计软件”以及“什么才是好的软件设计”的核心思考层面。 它不是一份具体的操作手册,而更像是一种思维方式和价值取向&a…

表单校验代码和树形结构值传递错误解决

表单校验代码,两种方式校验,自定义的一种校验,与element-ui组件原始的el-form表单的校验不一样,需要传递props和rules过去校验 const nextStep () > {const data taskMsgInstance.value.formDataif(data.upGradeOrg ) {elm…

Yolov8改进 C2f中添加注意力机制Attention 包括SE、CA、CBAM、MHSA等)具体实现代码,如何将这些模块集成到YOLOv8模型中

Yolov8改进 C2f中添加注意力机制代码 包括SE、CA、CBAM、MHSA等)的具体实现代码,以及如何将这些模块集成到YOLOv8模型中的示例。 文章目录 1. **Channel Attention (CA)**2. **Spatial Attention (SA)**3. **CBAM (Convolutional Block Attention Module…

Python:操作Excel公式

💻Python 操作 Excel 公式实战教程(含 openpyxl、xlwings 全解析 + 常用公式大全) 在日常的数据分析与自动化报表场景中,借助 Python 操作 Excel 文件能极大提高效率。尤其是在批量生成、写入与读取 Excel 公式方面,Python 提供了多个强大库支持。 📚一、主流库对比:选…

tomcat服务器以及接受请求参数的方式

1.javaee:意为java企业版,指java企业级开发的规范总和,包含13项技术规范 2.事实上服务器和客户端进行交互的过程中,有一个前端控制器在中间运作,这个控制器为DispatcherServlet,它负责将客户端请求的信息包…

AI文档排版工具永久免费

🚀 快速开始 1. 启动程序 双击 AI文档排版工具.exe 启动程序 下载地址:https://pan.quark.cn/s/1ce59c96040f 2. 首次配置 首次使用需要配置API信息点击"⚙️ API配置"按钮输入API地址和密钥点击"测试连接"验证 3. 开始排版 …

C语言 — 自定义类型(结构体,联合体,枚举)

目录 1.结构体1.1 结构体类型的声明1.2 结构体变量的创建和初始化1.3 结构体成员的使用1.4 结构体的大小1.4.1 计算以下结构体的大小1.4.2 计算以下结构体的大小1.4.3 结构体中嵌套结构体的大小计算 1.5 位段1.5.1 使用位段计算结构体大小1.5.2 位段的缺陷 2.联合体2.1 联合体的…

【CATIA的二次开发16】根对象Application涉及撤销和重做事务管理相关方法

在CATIA VBA开发中,对根对象Application涉及撤销和重做事务管理相关方法进行详细总结,并且用不同形式展示出来。供大家后续开发全面了解Application对象的方法,以便在开发过程中快速查找和使用: 一、Application常用方法分类 1、基础控制与进程管理(3个方法) 方法名功能…

基于 Intel CNVi 接口 WIFI 产品介绍

CNVi是什么?CNVi(Connectivity Integration),CNVi 即英特尔集成连接 I/O 接口,是英特尔专为 Wi-Fi 和蓝牙无线设备设计的一种连接架构。 架构原理: 在 CNVi 架构下,网络适配器中通常较大且昂贵…

【笔记】开源通用人工智能代理 Suna 部署全流程准备清单(Windows 系统)

#工作记录 一、基础工具与环境 开发工具 Git 或 GitHub Desktop(代码管理)Docker Desktop(需启用 WSL2,容器化部署)Python 3.11(推荐版本,需添加到系统环境变量)Node.js LTS&#xf…

零基础SEO优化操作全解析

内容概要 对于零基础的新手而言,SEO优化的系统性操作流程是入门的关键。本文以7个核心步骤为主线,从基础概念到实战应用,拆解搜索排名提升的核心逻辑。首先聚焦关键词挖掘的底层逻辑与工具实操,帮助建立精准的内容方向&#xff1…

【手搓一个原生全局loading组件解决页面闪烁问题】

页面闪烁效果1 页面闪烁效果2 封装一个全局loading组件 class GlobalLoading extends HTMLElement {constructor() {super();this.attachShadow({ mode: open });}connectedCallback() {this.render();this.init();}render() {this.shadowRoot.innerHTML <style>.load…

MYSQL:主从复制原理及简单实现

概述 概念 主从复制&#xff1a;指一台服务器充当主数据库服务器&#xff0c;另一台或多台服务器充当从数据库服务器&#xff0c;主服务器中的数据自动复制到从服务器之中 基础是主服务器对数据库修改记录二进制日志&#xff0c;从服务器通过主服务器的二进制日志自动执行更…

11.4java语言执行浅析4

编译成字节码&#xff08;.class 文件&#xff09; 使用 javac 命令将源代码编译为 Java 字节码&#xff08;bytecode&#xff09; 它不是机器码&#xff0c;而是 JVM 能理解的中间语言&#xff08;字节码&#xff09;&#xff0c;具有平台无关性。 编译过程简要&#xff1…

Luminar Neo:摄影室灯光

在专业人像摄影中&#xff0c;打光始终是一门核心技术。但对于多数摄影师而言&#xff0c;搭建真正的摄影棚既耗时又昂贵。Luminar Neo 推出的创新工具“摄影室灯光”&#xff08;Studio Light&#xff0c;也称“摄影棚光线”&#xff09;&#xff0c;正是为了解决这一难题而生…

机器学习知识图谱——NN全连接神经网络算法

目录 一、图解全连接神经网络(NN)算法知识图谱 二、什么是全连接神经网络(NN)? 三、网络结构 四、神经元计算公式 五、激活函数常用类型 六、前向传播 + 反向传播 七、训练流程图示 八、优点 九、缺点 十、Python 示例代码 (使用 PyTorch) 十一、应用领域 机…

DFS入门刷题

目录 P1683 入门 P1596 [USACO10OCT] Lake Counting S 1114. 棋盘问题 P1025 [NOIP 2001 提高组] 数的划分 P1683 入门 #include <iostream> using namespace std; char a[30][30]; bool vis[30][30]; int res 1; int n, m; int dx[] {-1, 1, 0, 0}; int dy[] {0,…

如何在 Ubuntu22.04 上安装并开始使用 RabbitMQ

单体架构学的差不多了&#xff0c;可以朝着微服务进军了&#xff0c;笔者打算实操一下 RabbitMQ&#xff08;这个和 Redis 一样重要的组件) 笔者这里采用的是本地 wsl2 的 Ubuntu22.04 先按指定的博客进行前置操作 Ubuntu22.04 安装 RabbitMQ 解决 ARM Ubuntu 22.04 缺少 libs…