TCP协议的核心机制

TCP协议的核心机制

  • 一:确认应答机制
    • 1.2:超时重传
      • 接收缓冲区
    • 超时重传时间
    • 重置连接

一:确认应答机制

对于TCP协议来说,要解决的一个很重要的问题,就是可靠传输
可靠传输,不是指发送方能够100%的把数据发送给接收方,而是尽可能.
尤其是让发送方知道,接收方是否收到.

举个例子:
我去吃麻辣烫,和老板说: 少加辣椒,
此时老板就会回应: 好的好的(这样用于"应答的数据,就成为"应答报文")
在这里插入图片描述
确认应答机制,核心就是靠对方给你一个应答.
但如果批量发送数据的时候,可能会出现一些问题,
因为网络中传输的数据可能会出现"后发先至"的情况(后发先至是网络通信中,客观存在的,改变不了)
比如:
(考虑鸡腿卖完了的情况)
我向老板说:少加辣椒,加个鸡腿
如果老板先听到"加个鸡腿",回复"不行"
然后听到"少加辣椒",回复"好的".
此时明显是错的.
那么就需要能够对要传输的数据进行编号,并且让应答报文的编号和发送数据的编号能够对应起来,即使出现后发先至,也不会影响传输意思的理解.
我: 1) 少加辣椒
2)加个鸡腿
老板:针对1):好的好的
针对2):不行
但实际上,真实的TCP的序号不是按照"一条两条"方式来编号的,而是按照以字节为单位进行编号的,每个字节会分配一个编号.
比如:传输的数据含有1000个字节,编号可能就是1-1000,但发送方的报头中,序号中的数值就是载荷部分的第一个字节的编号:1;发送方的报头中,序号字段有效,而确认序号字段是无效的;
而接收方的确认序号就是数据最后一个字节的编号+1;接收方返回的ack,"确认序号"有效,"序号"字段是无效的.
也就是1001.

1.2:超时重传

确认应答机制:讨论的是发送方能否把数据发给接收方,发送成功,接收方就会给一个应答,没发送成功,接收方就没有应答,没发送成功就称为丢包了.
但如果发送成功,但接收方的应答报文出现丢包的情况,导致发送方接收不到应答呢?
超时重传机制就是应对网络中出现丢包情况(发送方丢,接收方丢)时的一种策略

超时:发送方发送数据之后,会等待一定的时间,如果等待时间超过某个"阈值",还没收到ACK,就认为是出现丢包了.出现丢包,就会重传 ,把刚才发送的数据在发送一遍.

发送方等待一定时间后,没有收到ACK,(ack回应晚了,超过了等待时间,也认为是没有收到ACK)就会触发超时重传机制.
ack丢了,也会触发超时重传机制,不就发送了两份重复的数据了吗??
想一个场景:对于转账这样的操作,触发重传就引起重复转账
所以在应用层一定要保证应用程序在read的时候不能读到重复的数据.
其实TCP接收方会根据序号字段进行去重.

接收缓冲区

接收方的操作系统内核中,存在一个数据结构,“接收缓冲区”,类似于PriorityBlockingQueue.

在这里插入图片描述如何知道队列中,之前存在过?
接收缓冲区,除了去重之外,还有一个很重要的功能,针对收到的数据进行排序.
A按照1 2 3 4 这样的顺序write ,B这边read 的时候,也是按照1 2 3 4 read出来
虽然网络传输的中间过程可能是后发先至,可能是乱序的,但在接收缓冲区里,会对收到的数据先排个序,让序号小的,在前面,序号大的,在后面.
在这里插入图片描述
在这里插入图片描述

超时重传时间

丢包,本身就是一个概率性事件:
假设,网络丢包率是0.1 (已经很大了)
触发一个重传,如果重传的包也丢了,概率就是 0.1*0.1 =0.01,
也就是两次传输数据都丢包的概率是0.01,也就是0.99的概率是至少传输成功一次.
随着重传的次数增加,成功一次概率继续变大,反之,如果连续重传几次,都丢包,说明当前本身丢包的概率就非常大了,网络应该是存在严重故障了.

超时时间,不是固定的,而是随着重传次数的增加,会变得越来越长.
假设,第一次传输数据,等待50ms ,触发重传
重传之后,可能就会等待100ms,没收到ACK,触发重传
重传之后,可能就会等待150ms…
超时时间间隔就会越来越长(不一定是线性增长,具体怎么增长,取决于系统的具体实现)
也就是重传的效率越来越低.
大概率重传一次就会成功,如果需要重传多次,大概率就是网络故障了,能成功的概率就比较低了;如果重传的越来越快,但成功的概率比较低,是非常浪费系统资源的.

重置连接

如果网络上确实出现严重故障了,重传若干次,还是不成功,达到一定次数阈值,就会尝试"重置连接".
在这里插入图片描述网络出现严重故障,RST报文也无法顺利完成,此时重置也失败了,就只能断开连接了.(释放掉保存对方信息的数据结构)
(重置连接可能有用)
TCP的可靠传输,全靠确认应答机制和超时重传机制.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/21860.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详解:重庆耶非凡的选品师项目有哪些优势?

在竞争激烈的电商市场中,重庆耶非凡科技有限公司凭借其独特的选品师项目,成功地在众多企业中脱颖而出。这一项目不仅体现了公司对市场趋势的敏锐洞察力,更彰显了其专业的选品能力和对消费者需求的深刻理解。 首先,耶非凡的选品师项…

大模型时代的具身智能系列专题(七)

北大王鹤团队 王鹤,北京大学前沿计算研究中心助理教授,本科毕业于清华大学,博士毕业于斯坦福大学,师从美国三院院士Leonidas. J Guibas教授。他创立并领导了具身感知与交互实验室(EPIC Lab),实验室立足三维视觉感知与…

MyBatis的各种查询功能

1、查询: 查询的标签select必须设置属性resultType或resultMap,用于设置实体类和数据库表的映射关系 resultType:自动映射,用于属性名和表中字段名一致的情况 resultMap:自定义映射,用于一对多或多对一或…

Github生成SSH密钥,使用SSH进行连接

目录 一、生成新的SSH密钥 二、添加新的SSH密钥 三、测试SSH连接 四、SSH密钥密码 五、创建新仓库并推送到github 说明 使用 SSH URL 将 git clone、git fetch、git pull 或 git push 执行到远程存储库时, 须在计算机上生成 SSH 密钥对,并将公钥添加到…

(CVPRW,2024)可学习的提示:遥感领域小样本语义分割

文章目录 相关资料摘要引言方法训练基础类别新类别推理 相关资料 论文:Learnable Prompt for Few-Shot Semantic Segmentation in Remote Sensing Domain 代码:https://github.com/SteveImmanuel/OEM-Few-Shot-Learnable-Prompt 摘要 小样本分割是一项…

STP----生成树协议

目的:解决二层环路问题 跨层封装 广播风暴---广播帧在二层环路中形成逆时针和顺时针转动环路,并且无限循环,最终造成设备宕机,网络瘫痪。 MAC地址表的翻摆(漂移)---同一个数据帧,顺时针接收后记…

GUN compiler collection源代码编译过程

第一部分: 学习kernel需要了解编译的一些过程,为了详细理解GCC编译过程的原理,动手做了个sy,记录如下,有需要的童鞋可以参考。 1.环境:(均可,二次环境并非是WSL版本) r…

大模型应用框架-LangChain

LangChain的介绍和入门 💥 什么是LangChain LangChain由 Harrison Chase 创建于2022年10月,它是围绕LLMs(大语言模型)建立的一个框架,LLMs使用机器学习算法和海量数据来分析和理解自然语言,GPT3.5、GPT4是…

一维时间序列信号的奇异小波时频分析方法(Python)

最初的时频分析技术就是短时窗傅里叶变换STFT,由于时窗变短,可供分析的信号量减少,采用经典的谱估算方法引起的误差所占比重会增加。且该短时窗一旦选定.则在整个变换过程中其时窗长度是固定的。变换后的时频分辨率也即固定&#…

第十五届蓝桥杯物联网试题(省赛)

这个省赛题不算难,中规中矩,记得看清A板B板,还有ADC的获取要配合定时器

视频修复工具助你完成高质量的视频作品!

在短视频发展兴起的时代,各种视频层出不穷的出现在了视野中,人们已经从追求数量转向追求质量。内容相同的视频,你视频画质好、质量高的更受大家欢迎,那么如何制作高质量、高清晰度的视频呢?与您分享三个视频修复工具。…

Nios II 实现流水灯实验

Nios II 实现流水灯实验 一.硬件设计1.新建Quartus项目2. 设计Nios ii 二.软件设计 前言 实验目标: 学习 Quartus 、Platform Designer、Nios-II SBT 的基本操作;初步了解 SOPC 的开发流程,基本掌握 Nios-II 软核的定制方法;掌握 …

【Go语言精进之路】构建高效Go程序:零值可用、使用复合字面值作为初值构造器

🔥 个人主页:空白诗 文章目录 引言一、深入理解并利用零值提升代码质量1.1 深入Go类型零值原理1.2 零值可用性的实践与优势1.2.1 切片(Slice)的零值与动态扩展1.2.2 Map的零值与安全访问1.2.3 函数参数与零值 二、使用复合字面值作为初值构造器2.1 结构体…

LINUX系统编程:信号(1)

目录 什么是信号? 为什要有信号呢? 进程接受信号的过程 1.信号的产生 1.1kill命令产生信号 1.2键盘产生信号 1.3系统调用接口 1.3.1killl() 1.3.2raise() 1.3.3abort() 1.4软件条件 1.5异常 1.6对各种情况产生信号的理解 1.6.1kill命令 1…

突破 LST/LRT 赛道中心化困境,Puffer Finance 何以重塑以太坊再质押未来

纵观过去的 2023 年,LST 赛道竞争进入“白热化”状态。去中心化、DeFi 增强、全链化成为市场争夺关键词,诸多 LST 赛道老牌项目纷纷陷入“中心化矛盾”,指责对方在以太坊去中心化进程中的不利作为。 在这样的竞争情形下,以太坊联…

SpringBoot登录认证--衔接SpringBoot案例通关版

文章目录 登录认证登录校验-概述登录校验 会话技术什么是会话呢?cookie Session令牌技术登录认证-登录校验-JWT令牌-介绍JWT SpringBoot案例通关版,上接这篇 登录认证 先讲解基本的登录功能 登录功能本质就是查询操作 那么查询完毕后返回一个Emp对象 如果Emp对象不为空,那…

【数据结构】详解堆的基本结构及其实现

文章目录 前言1.堆的相关概念1.1堆的概念1.2堆的分类1.2.1小根堆1.2.2大根堆 1.3堆的特点堆的实用场景 2.堆的实现2.1初始化2.2插入2.3堆的向上调整2.4删除2.5堆的向下调整2.6判空2.7获取堆顶元素2.8销毁 3.堆排序3.1实现3.2堆排序的时间复杂度问题 前言 在上一篇文章中&#…

TMS320F280049 ECAP模块--总览(0)

ECAP 特性: 4个32bit的事件时间戳寄存器; 4个连续时间戳捕获事件的边沿极性可选上升沿、下降沿 4个事件中每个都能触发中断 4个事件都能做单词触发 可以连续捕获4个事件 绝对的捕获时间戳 差异模式捕获 不使用捕获模式时,可以配置输出…

Python 图书馆管理系统 有GUI界面 【含Python源码 MX_031期】

使用python3,PyQt5,Sqlite3数据库搭建 主要功能: 用户注册、登录、修改密码、用户管理存储图书信息、采购增加和淘汰删除功能、租借功能实现图书采购、淘汰、租借功能。实现查询图书信息、采购和淘汰、库存、和租借情况实现统计图书的采购、…

JavaScript 基础 - 对象

对象 对象是一种无序的数据集合&#xff0c;可以详细的描述描述某个事物。 注意数组是有序的数据集合。它由属性和方法两部分构成。 语法 声明一个对象类型的变量与之前声明一个数值或字符串类型的变量没有本质上的区别。 <script>let 对象名 {属性名&#xff1a;属性值…