TCP可靠性传输
TCP可靠性传输机制
确认 重传 排序 流控
排序机制
分段 --- TCP是一款基于字节流的协议 --- 由传输层的TCP执行
MSS --最大段长度 --- TCP建立连接需要协商的参数 --- TCP在建立三次握手时前两个SYN报文中将携带该参数,并且双方的该参数允许不同,如果不同,将按照数值较小的执行。 --- MSS最大典型值为1460字节。
MTU --- 最大传输单元 --- 默认1500字节
分片 --- 由网络层的IP协议执行
序列号 --- TCP是基于“字节流" 的协议,这个序列号就是字节流的编号
确认机制
TCP为了保证对方能够收到本端发送的数据段的方法,使让对方回复一个确认报文段,这就是确认机制的做法。
确认序列号 --- 接收方期望收到发送方发送的下一个字节的序号 --- 累积确认
重传机制
超时重传
本端在一定时间内,没有收到对端反馈的确认报文而触发的重传机制。
RTO --- 超时重传时间
RTT --- 往返时间 --- 指的是发出端将数据发出后,到他接收到对端反馈的确认报文之后的这一段时间
如果RTO过长 --- 则会导致丢包之后,重传的效率降低,无法及时做出响应
如果RTO过短 --- 则会导致不必要的重传,导致网络负载增大
RTO的值在计算时,需要略大于RTT,因为RTT是一个可变化的值,所以RTO也是一个动态变化的值。
超时间隔加倍
原理
在 TCP 中,发送端发送数据后会启动一个定时器,若在超时时间内未收到接收端的确认应答(ACK),就会触发超时重传机制,重新发送未收到 ACK 的数据包。当超时重发的数据再次超时时,TCP 会将下一次的超时时间间隔设为先前值的两倍。例如,首次超时时间设为 1 秒,若重传后仍超时,下次超时时间就会变为 2 秒,再超时则变为 4 秒,以此类推,超时间隔呈指数增长。
作用
1、避免网络拥塞加剧:定时器过期很可能是由网络拥塞引起的,此时如果源持续重传分组,会使拥塞更加严重。通过超时间隔加倍,TCP 在网络不稳定时能够适当延长等待时间,以期待数据包能够成功传输,避免过早地重传数据,从而减少网络拥塞和带宽浪费。
2、 适应网络变化:网络状况是动态变化的,报文往返时间(RTT)也会经常波动。超时间隔加倍可以让 TCP 根据网络的实际情况调整等待时间,在网络延迟较大或出现丢包时,给予足够的时间让数据传输成功,提高数据传输的成功率和效率。
快速重传
失序报文
接收方收到一个数据段中的序列号大于自己期望的序列号,这样的报文就是一个失序报文。
冗余ACK --- Duplicate ACK
原因:
在 TCP 数据传输过程中,接收方会对收到的数据包进行确认,并向发送方发送 ACK。当发送方收到的 ACK 不是按顺序的下一个期望的 ACK 时,就会产生冗余 ACK。例如,发送方按顺序发送了 1、2、3、4 号数据包,接收方收到了 1 号数据包,会发送 ACK1;如果接收方接着收到了 3 号数据包,由于 2 号数据包丢失,接收方会再次发送 ACK1,这个重复的 ACK1 就是冗余 ACK。
作用:
1、检测丢包:冗余 ACK 的出现是数据包丢失的一个重要信号。发送方通过接收冗余 ACK,可以快速判断出有数据包在传输过程中丢失,而不必等待超时定时器超时后才进行重传,从而加快了重传的速度,减少了数据传输的延迟。
2、 触发快速重传:TCP 规定,当发送方连续收到三个相同的冗余 ACK 时,就会认为相应的数据包丢失了,立即触发快速重传机制,而不等待超时。例如,发送方收到了三个 ACK1,就会马上重传 2 号数据包,而不是等到超时时间到了才重传,这样可以更快地恢复丢失的数据,提高数据传输的效率。
选择确认机制(SACK)
在快速重传机制中,接收方在回复冗余ACK时,里面将携带自身已经收到的数据信息,避免重复发送,造成资源浪费。
工作过程
1、SACK 选项协商:在 TCP 连接建立时,通信双方通过在 SYN 报文中携带 SACK 选项来协商是否启用 SACK 机制。如果双方都支持 SACK,那么在后续的通信过程中就可以使用该机制。
2、数据接收与确认:当接收方收到数据时,它会检查接收到的数据段的序号,并将已接收的数据段的边界信息记录在 SACK 选项中。例如,接收方收到了序号为 1 - 1000、3001 - 4000 和 5001 - 6000 的数据段,那么它会在确认报文中通过 SACK 选项告知发送方这些不连续的数据段已经被接收。
3、发送方重传:发送方根据接收方发送的带有 SACK 选项的确认报文,得知哪些数据段已经被成功接收,哪些数据段丢失。然后,发送方只重传丢失的数据段,而不是像传统的 TCP 重传机制那样重传从丢失点开始的所有后续数据。
三次握手的可靠性保障
第一个SYN报文丢失 --- 这个报文发送后,客户端进入SYN_SENT状态等待服务器回复ACK。如果这个报文丢失,客户端没有等到回复,超过了RTO超时时间,则触发超时重传机制,客户端再次发送SYN,两次发送内容完全一样。因为是第一次发送数据包,则RTO超时时间的值为定义值,推荐时间为1S。如果再次丢失则触发超时间隔加倍,超时时间RTO为2RTO。如若一直丢失,系统会设置最大重传次数,达到最大重传次数则关闭TCP连接。
第二个SYN+ACK报文丢失 --- 这个报文具有双重作用,一方面对之前SYN进行确认ACK,另一方面本身发送SYN进行请求建立连接。一旦丢失,客户端收不到确认包导致客户端认为自己出现问题进行超时重传,并且服务器收不到客户端发送的ACK也会怀疑自身SYN丢失并触发超时重传机制。两端如果都达到超时重传的最大次数,则都会关闭连接进入CLOSE状态。
第三个ACK报文丢失 --- 在发送这个报文后客户端已经处于ESTABLISHED建立完成状态,而服务器还在等待客户端的ACK,服务器等不到认为自己出现问题触发超时重传机制并再次发送SYN+ACK报文,如果服务器收到客户端ACK则进入建立完成阶段,如果收不到待达到最大重传次数则服务器关闭连接
四次挥手的可靠性保证
与三次握手类似
相关文章:
TCP可靠性传输
TCP可靠性传输机制 确认 重传 排序 流控 排序机制 分段 --- TCP是一款基于字节流的协议 --- 由传输层的TCP执行 MSS --最大段长度 --- TCP建立连接需要协商的参数 --- TCP在建立三次握手时前两个SYN报文中将携带该参数,并且双方的该参数允许不同,如果…...
【图像处理基石】什么是RAW格式?
在图像处理中,RAW格式是一种未经处理、记录了相机传感器原始数据的图像文件格式。它保留了相机传感器捕捉到的全部原始信息,未经任何压缩或处理,因此被称为“原始数据”(Raw)。以下是关于RAW格式的详细解释:…...
Java 基础-30-单例设计模式:懒汉式与饿汉式
在软件开发中,单例设计模式(Singleton Design Pattern)是一种常用的设计模式,它确保一个类只有一个实例,并提供一个全局访问点。这种模式通常用于管理共享资源(如数据库连接池、线程池等)或需要…...
95. 费解的开关
你玩过“拉灯”游戏吗? 25 盏灯排成一个 55 的方形。 每一个灯都有一个开关,游戏者可以改变它的状态。 每一步,游戏者可以改变某一个灯的状态。 游戏者改变一个灯的状态会产生连锁反应:和这个灯上下左右相邻的灯也要相应地改变…...
Gin、Echo 和 Beego三个 Go 语言 Web 框架的核心区别及各自的优缺点分析,结合其设计目标、功能特性与适用场景
1. Gin 核心特点 高性能:基于 Radix 树路由,无反射设计,性能接近原生 net/http,适合高并发场景。轻量级:仅提供路由、中间件、请求响应处理等基础功能,依赖少。易用性:API 设计简洁直观&#…...
Golang的Web框架比较与选择
一、Golang的Web框架概述 又称Go语言)是一种由Google开发的开源编程语言,自诞生以来就备受关注,并被广泛应用于后端开发。在Golang的生态系统中,有许多优秀的Web框架可供选择,它们为开发人员提供了丰富的功能和灵活的性…...
18认识Qt坐标系
平面直角坐标系(笛卡尔坐标系) 数学上的坐标系 右手坐标系 计算机中的坐标系 左手坐标系 坐标系的原点(0,0) 就是屏幕的左上角 /窗口的左上角 给 Qt 的某个控件,设置位置,就需要指定坐标.对于这个控件来说, 坐标系原点就是相对于父窗口/控件的. QPushButton 的父元素/父控件/父…...
洛谷题单3-P1009 [NOIP 1998 普及组] 阶乘之和-python-流程图重构
题目描述 用高精度计算出 S 1 ! 2 ! 3 ! ⋯ n ! S 1! 2! 3! \cdots n! S1!2!3!⋯n!( n ≤ 50 n \le 50 n≤50)。 其中 ! 表示阶乘,定义为 n ! n ( n − 1 ) ( n − 2 ) ⋯ 1 n!n\times (n-1)\times (n-2)\times \cdots \t…...
【ABAP】REST/HTTP技术(一)
1、概念 1.1、SAP 如何提供 Http Service 如果要将 SAP 应用程序服务器 (application server)作为 http 服务提供者,需要定义一个类,这个类必须实现 IF_HTTP_EXTENSION 接口。IF_HTTP_EXTENSION 接口只有一个方法 HANDLE_REQUEST。…...
多线程代码案例 - 1
目录 单例模式 1. 饿汉模式 2. 懒汉模式 单例模式与多线程 问题1 问题2 问题3 完! 单例模式 单例模式是一种设计模式。 设计模式,是我们在编写代码时候的一种软性的规定,也就是说,我们遵守设计模式,代码的下限…...
Python网络爬虫:从入门到实践
目录 什么是网络爬虫? 网络爬虫的工作原理 常用Python爬虫库 编写爬虫的步骤 实战示例 注意事项与道德规范 未来趋势 1. 什么是网络爬虫? 网络爬虫(Web Crawler)是一种自动化程序,通过模拟人类浏览行为&#x…...
在线XML转义工具
XML转义是将XML的特定字符转换为转义符 在线XML转义工具...
GO语言学习(16)Gin后端框架
目录 ☀️前言 1.什么是前端?什么是后端?🌀 2.Gin框架介绍 🌷 3.Gin框架的基本使用 -Hello,World例子🌷 🌿入门示例 - Hello,World 💻补充(一些常用的网…...
GO语言 使用protobuf
1.什么是protobug,为什么要学它 protobuf是一种类似于json和xml的数据序列化格式 我们可能会存在这样的问题:不同语言之间真的没有办法互相传递数据吗?如果可以,那如果一个项目使用了多种语言有应该如何传递数据? 这…...
Golang的文件处理优化策略
Golang的文件处理优化策略 一、Golang的文件处理优化策略概述 是一门效率高、易于编程的编程语言,它的文件处理能力也非常强大。 在实际开发中,需要注意一些优化策略,以提高文件处理的效率和性能。 本文将介绍Golang中的文件处理优化策略&…...
Golang的文件同步与备份
Golang的文件同步与备份 一、Golang介绍 也称为Go语言,是谷歌开发的一种编程语言,具有高效的并发编程能力和出色的内存管理。由于其快速的编译速度和强大的标准库,Golang在网络应用、云平台和大数据等领域得到了广泛应用。 二、文件同步与备份…...
Go和Golang语言简介
李升伟 整理 Go 和 Golang 实际上指的是同一种编程语言,只是名称不同。 Go 名称:Go 是该编程语言的正式名称。 起源:由 Google 的 Robert Griesemer、Rob Pike 和 Ken Thompson 于 2007 年开始设计,2009 年正式发布。 设计目…...
spring boot集成reids的 RedisTemplate 序列化器详细对比(官方及非官方)
RedisTemplate 序列化器详细对比(官方及非官方) 1. 官方序列化器 (1) JdkSerializationRedisSerializer 特点: 基于 Java 原生序列化(Serializable)。支持复杂对象(需实现 Serializable 接口)…...
NLP高频面试题(三十二)——介绍一下CLIP和CLIP2
在人工智能领域,图像与文本的结合一直是研究的热点。近年来,OpenAI推出的CLIP模型,以及后续发展的CLIP2模型,在多模态学习方面取得了显著进展。本文将对这两个模型进行介绍,探讨它们的架构、训练方法和应用场景。 CLI…...
【FPGA】状态机思想回顾流水灯
【FPGA】状态机思想回顾流水灯 一、LED流水灯实现1. 基本要求2. 状态机思想3. 关键代码4. 仿真测试5. 效果演示 二、CPLD和FPGA1. 技术区别2. 应用场景 三、HDLbits组合逻辑题目四、实验总结 一、LED流水灯实现 1. 基本要求 用状态机思想写一个 LED流水灯的FPGA代码写出仿真测…...
Java——StringBuilder和StringBuffer
StringBuilder和StringBuffer 字符串的不可变性字符串修改StringBuilder和StringBuffer1 字符串拼接2 获取、修改和删除下标字符3 插入字符4 字符串替换5 字符串反转6 StringBuffer和StringBuilder类与String类的转换 StringBuffer和StringBuilder类的区别 前言 在Java中String…...
基于yolo11的BGA图像目标检测
1.产生图像数据的分辨率 2.产生图像的大小 3.产生图像是黑白或是RGB彩色 灰度图像,达到识别要求,减少计算量 4.标注数据的精准程度 1.模型标注后,少量标注全部人工校验,大量数据抽检,部分人工检验 2.明确边界框贴合…...
MongoDB 复制集实战
MongoDB 复制集实战 MongoDB 复制集架构 一、复制集核心原理 主从架构与数据冗余 复制集由主节点(Primary)和多个从节点(Secondary)构成,所有节点存储相同数据集副本。 主节点:唯一接受写操作的节点&…...
一个服务器算分布式吗,分布式需要几个服务器
一个服务器不构成分布式系统。分布式系统的核心在于多台独立的计算机(服务器)协同工作,通过通信网络共享资源、共同完成任务。以下是对问题的详细分析: 1. 单台服务器 ≠ 分布式 单台服务器的架构是集中式的,所有功能…...
k8s之Ingress讲解
一、Ingress基本介绍 Ingress是管理k8s外部访问(http/https)的API对象,提供应用层的路由功能,处理第七层(http/https)流量,支持基于域名、路径的路由。与service不同的是,service处理…...
centos-LLM+EmbeddingModel+VectorDB-简单模型
参考: Ollama平台里最流行的embedding模型: nomic-embed-text 模型介绍和实践-CSDN博客 https://blog.csdn.net/skywalk8163/article/details/145498041 https://docs.cherry-ai.com/knowledge-base/data Installation — Sentence Transformers docum…...
Uniapp 持续出现 Invalid Host/Origin header 解决方法
目录 前言1. 问题所示2. 原理分析前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器,无代码爬取,就来:bright.cn 1. 问题所示 执行代码的时候,源源不断,一直持续出现这个 Invalid Host/Origin header [WDS]...
密码学基础——古典密码学
目录 一、定义 特点: 二、发展阶段 三、代换密码 1.单表代换密码 1.1恺撒密码 1.2 移位变换 1.3 仿射变换 2.多表代换密码 维吉尼亚密码 四、置换密码 栅栏密码 一、定义 古典密码学是指在现代密码学出现之前,使用较为简单的数学方法和手工…...
Java 连接 Redis 的驱动(Jedis、Lettuce、Redisson、Spring Data Redis)分类及对比
Java 连接 Redis 的驱动分类及对比 1. Jedis 类型:纯 Java 实现的 阻塞式(同步) 客户端特点: 基于阻塞 IO,每个连接一个线程,适合中小型应用。支持单机、哨兵模式、集群模式。使用简单,直接操作…...
人工智能之数学基础:基于吉文斯变换完成矩阵的QR分解
本文重点 在数值线性代数中,QR分解是将矩阵分解为一个正交矩阵(Q)和一个上三角矩阵(R)的重要方法。它在求解线性方程组、计算矩阵特征值及最小二乘问题中具有广泛应用。吉文斯变换(Givens Transformation)作为实现QR分解的核心工具之一,通过平面旋转变换逐步消去矩阵元…...
后端框架入门:Django
Django 基础:模型、视图、模板Django REST Framework 的使用一、Django 概述 Django 是一个 高效、灵活、可扩展 的 Python Web 框架,主要用于快速开发 Web 应用 和 REST API。 📌 Django 的优势: ✅ MTV 架构:模型(Model)、视图(View)、模板(Template)分离,便于…...
16变量命名风格
给变量/函数/文件/类 起名字, 非常有讲究的~~ 1.起的名字要有描述性.不要使用 abc,xyz 这种比较无规律的名字来描述 2.如果名字比较长,由多个单词构成的,就需要使用适当的方式来进行区分不同单词 C中,偏好使用_来进行单词的分割. 形如: student_count(变量) unordered_map(stl容…...
【自学笔记】jQuery语言基础知识点总览-持续更新
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 jQuery基础知识点总览1. jQuery简介2. jQuery选择器示例代码 3. jQuery事件示例代码 4. jQuery动画示例代码 5. jQuery Ajax示例代码 6. jQuery DOM操作示例代码 总…...
基于机器学习的三国时期诸葛亮北伐失败因素量化分析
一、研究背景与方法论 1.1 历史问题的数据化挑战 三国时期(220-280年)的战争史存在史料分散、数据缺失的特点。本研究通过构建包含军事、经济、地理、政治四大维度的结构化数据库,收录建安十二年(207年)至建兴十二年…...
读取excel作为第一列创建数据表,然后将值插入数据表
读取 Excel 文件。创建一个数据库表,其列名与 Excel 表格的列名相同。插入数据,对于每一行,如果数据为 #N/A,插入空值。 下面是一个 Python 示例代码,使用 pandas 读取 Excel 文件,创建数据库表࿰…...
14-SpringBoot3入门-MyBatis-Plus之CRUD
1、整合 13-SpringBoot3入门-整合MyBatis-Plus-CSDN博客 2、表 3、crud package com.sgu;import com.sgu.mapper.UserMapper; import com.sgu.pojo.User; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.spri…...
英语口语 -- 常用 1368 词汇
英语口语 -- 常用 1368 词汇 介绍常用单词List1 (96 个)时间类气候类自然类植物类动物类昆虫类其他生物地点类 List2 (95 个)机构类声音类食品类餐饮类蔬菜类水果类食材类饮料类营养类疾病类房屋类家具类服装类首饰类化妆品类 Lis…...
《汽车噪声控制》课程作业
作业内容 在MATLAB绘制给出单个正弦波或余弦波的时域图和频域图 绘制实测数据的时域图和频域图 图1 单个正弦波的时频图 图1 单个正弦波的时频图 % 正弦波参数设置 f0 1000; % 信号频率 1kHz Fs 16384; % 采样频率 16kHz T 0.05; % 信号持续时间 0.05秒 A 0.8; % 信号幅度…...
nginx的反向代理和负载均衡
http 协议反向代理 反向代理配置参数: proxy_pass;#用来设置将客户端请求转发给的后端服务器的主机 可以是主机名(将转发至后端服务做为主机头首部)、IP地址:端口的方式 也可以代理到预先设置的主机群组,需要模块ngx_http_upstream_module支…...
栈 —— 数据结构基础刷题路程
一、P1739 表达式括号匹配 - 洛谷 算法代码: #include<bits/stdc.h> using namespace std; const int N300008; struct mystack {int a[N];int t-1;//压栈void push(int data){a[t]data; } //取栈顶元素int top(){return a[t]; } //弹出栈顶元素void pop(){i…...
SQL语句(一)—— DDL
目录 一、SQL 基础知识 (一)SQL 通用语法 (二)SQL 分类 二、DDL —— 数据库操作 1、查询所有数据库 2、查询当前数据库 3、创建数据库 4、删除数据库 5、切换数据库 三、DDL —— 表操作 (一)查…...
ROS2 高级组件中的webots介绍
前言 这一篇文章主要是和大家分享一下关于ROS2 高级组件中的webots,会介绍关于webots的知识点,以及如何安装和测试环节,最后就是利用 webots 实现一个差速轮式机器人的运动仿真。 正文内容 webots 引入和学习资料 webots 是来自瑞士的 Cy…...
SvelteKit 最新中文文档教程(17)—— 仅服务端模块和快照
前言 Svelte,一个语法简洁、入门容易,面向未来的前端框架。 从 Svelte 诞生之初,就备受开发者的喜爱,根据统计,从 2019 年到 2024 年,连续 6 年一直是开发者最感兴趣的前端框架 No.1: Svelte …...
Java 基础-29-final关键字-详解
在Java编程语言中,final是一个非常重要的关键字,它用于不同的上下文中以表示某些东西是不可变的。本文将详细介绍final关键字的各种用法和其应用场景。 1. final变量 当你将一个变量声明为final时,这意味着一旦给这个变量赋值后,…...
从数据透视到AI分析,用四层架构解决运维难题
在数字化转型的浪潮中,企业 IT 系统已从单一架构演变为多云、多设备、多应用的复杂生态。传统监控工具因覆盖不全、响应滞后、分析能力弱而逐渐失效。Site24x7 以“全栈覆盖 智能协同”为核心,构建了一套四层递进式监控架构,实现从基础设施到…...
大智慧前端面试题及参考答案
如何实现水平垂直居中? 在前端开发中,实现元素的水平垂直居中是一个常见的需求,以下是几种常见的实现方式: 使用绝对定位和负边距:将元素的position设置为absolute,然后通过top、left属性将其定位到父元素的中心位置,再使用负的margin值来调整元素自身的偏移,使其水平垂…...
PyQt学习记录
PyQt学习记录 要在界面上 创建一个控件,就需要在程序代码中 创建 这个 控件对应类 地一个 实例对象。 在Qt系统中,控件(widget)是 层层嵌套 的,除了最顶层的控件,其他的控件都有父控件。 几个函数 函数mo…...
人工智能赋能管理系统,如何实现智能化决策?
随着信息技术的飞速发展,人工智能(AI)已经成为推动各行各业变革的重要力量。在企业管理领域,人工智能技术的引入为管理系统的智能化决策提供了强有力的支持。本文将深入探讨人工智能如何赋能管理系统,实现智能化决策&a…...
【深度学习新浪潮】DeepSeek近期的技术进展及未来动向
一、近期技术进展 模型迭代与性能提升 DeepSeek-V3-0324版本更新:2025年3月24日发布,作为V3的小版本升级,参数规模达6850亿,采用混合专家(MoE)架构,激活参数370亿。其代码能力接近Claude 3.7,数学推理能力显著提升,且在开源社区(如Hugging Face)上线。DeepSeek-R1模…...
存储型XSS漏洞解析
一、存储型XSS漏洞的核心原理 定义与攻击流程 存储型XSS(Stored XSS)是一种将恶意脚本永久存储在服务器端(如数据库、文件系统)的跨站脚本攻击方式。其攻击流程分为四步: 注入阶段:攻击者通过输入点&…...