TCP协议报文,核心特性可靠的原因,超时重传详细介绍

目录

一、TCP协议

二、TCP核心特性的保障

三、保留的六位标志位对于应答报文的作用

四、如何处理丢包——超时重传的原理

五、超时重传的时间


一、TCP协议

每一行是四个字节,前面的20个字节是固定的(TCP最短长度,20字节,选项部分:有/无都行,当然了你有多个也行)

4bit表示的范围0——15 此处的单位是4字节🌸 ,所以要把这里的数值*4,才是真正的报头长度TCP,最大的长度60字节。

保留六位的六个标识位:resvered设计TCP大佬比设计UDP的大佬,留个心眼,虽然现在不用,但是先占有个位置,后面可能需要用(目前TCP这么多年大概不用了 🌸 )

二、TCP核心特性的保障

TCP核心特性:有连接,可靠传输,面向字节流,全双工
可靠传输:内核实现的可靠传输,写代码的时候,感知不到(人本身就是这么设计,让感知成本,使用成本降低)🌻

网络传输中:常常会遇到那种后发先至(当连续发送多条信息的时候)🌻

网络上从A到B中间路径有很多(初心,冗余,让他不怕核弹这种,一个弹过来影响通讯)

比如:舔狗狗哥舔女神

问女神吃不吃麻辣烫呀?愿不愿意做我女朋友啊?

女神先回我:好的好的。😃 滚一边去,下头男啊🌚🌚🌚

结果后发先至,😍虽说没有吃麻辣烫,但是做我女朋友也挺好。(🤠小丑)。

另外每个节点/路由器/交换机/繁忙程度不一样,此时,这样的转发过程,也会存在差异。

那么我们该怎么办呢?

针对数据进行编号

TCP是面向字节流,不是按照条为单位进行传输的。

确认应答的意思,假如说应答下一个数据1001,就说明(1-1000)之前的数据全收到了,下面该从1001开始发。

1.针对字节进行编号的,而不是针对条

2.应答报文也是要和收到的数据序号相关联而不是相等。

只要知道这一串字节的开始编号,以及数据的长度,每个字节的编号也就知道了,TCP报头中,把这一串字节的编号表示出来,再结合报文长度,此时每个字节编号就都确定了。

编号也就是那个32位序号

32位确认序号——这个字段是给应答报文使用的,假如超越了32位,就开始从头计算,4个字节->42亿9千万,4个G,一般也不会一口气传4G

三、保留的六位标志位对于应答报文的作用

保留的六位具体是

那么对于应答报文是怎么样呢🐳🐳

ACK为0,表示这是一个普通报文,此时只有32位序号,是有效的

ACK为1,表示这是一个应答报文,这个报文的序号和确认序号都是有效的->确认报文的序号和正常报文,之间没有关联关系,各自论各自的,序号是你自己的主机发送的数据进行编号。

数据1-1000,序号1,长度1000,确认序号无意义,ACK为0

下一个返回确认报文1001,序号未知,假设是100(这个序号根发送序号没啥关系),长度不知道,确认序号是1001,ACK是1->应答报文可能携带载荷,也可能没有。

下一个传输应答的时候,应答是应答的序号,与发送的序号无关,上个应答序号是100,这个应答报文就应该是101,序号未知。

确认应答,是TCP保证->IP协议的报头中,可以知道载荷多长的,IP载荷长度——TCP报头长度->TCP载荷长度

如果设备过于繁忙,后来新来的等待的太久,就可能会被丢弃,越忙越容易丢包。

面对丢包,我们的应对机制是什么呢?,难道丢包就不可靠了吗?

四、如何处理丢包——超时重传的原理

这个问题最大的就是:无法区分是哪种情况,既然无法区分,那就都重新传输呗。但是也不能随意去重啊。你想想一个问题,你转50块钱,就算你没收到,我发出去了啊,我再发一个50,那不就亏了50嘛(任何问题一用钱💰🤬🤬考虑都好过分)接收方收到数据之后,需要对数据进行呢去重,把重复的数据丢弃掉,保证应用程序,调用inputStream的时候,读到的不会出现重复,如何进行去重?如何高效判定当前数据是否重复,直接使用TCP的序号,来作为判定依据

->TCP在内核中,给每个socket对象都安排一个内存空间,相当于一个队列,也称为“接收缓冲区”,收到的数据,都会被放到缓冲区里,并且按照序号排列,已经排好序了。

(这里又是一个生产者消费者模型,收到数据,接收的网卡,把数据放到对应socket的接收缓冲区内核中)

应用程序,调用read,就是从这个接收缓冲区中,消费数据,当数据被read走后,就可以从队列中删除掉了(read有两种模式,读到就删除,也可以读到不删除)-》接收缓冲区,数据按照序号有序排列~队列队首序号已经超过了新收到的这个数据的序号,新收到的序号在之前被读过了

以下是去重的思想:假如给B发一条序号为100,B成功收到消息后,并返回101作为确认,然后确认的消息发生了丢包,你不知道消息是否到达,所以你进行了重新发送,序号仍为100,确保B能正常接收,但是由于B之前已经读完了那个主机A的内容,所以他会帮你进行一个去重(注意不是根据内容去重的哈🌝🌝)

后发先至的这个问题,是根据序号重新排列的过程,因此应用程序不必考虑数据传输先后的顺序问题。

五、超时重传的时间

为啥我们重新传输的时候就能够传过去呢?(这就如同电脑重启,丢包的本质是概率问题)重传的次数增加,总体传输的成功概率也就越大,高中算数,一个丢包0.1概率,连着丢10的概率很低的。

超时时间当然也不是一个固定的值,(这段时间一直传不过去,就不传了这种),是会随着超时轮次的增加,进一步增加

随着转轮次数的增加,等待时间也会越来越长,当前认为,正常情况下,第二次重新传输有极大情况,重传成功,如果很多次都不成功,那就有可能当前的网络有故障。

超时重传的轮次也不是无限的,重新传输到一定次数,会重置TCP连接。使用复位报文

TCP复位报文

RST,那个六位里面的

RST为1,表示一个复位报文-》除非严重的故障,复位操作也无法成功,最后只好放弃连接。

确认应答是TCP可靠最核心的机制

超时连接是TCP可靠性的有效补充

下一篇更屌,面试最常考的就是我的下一章,等我

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

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

相关文章

PAT (Basic Level) Practice 1045~1066

PTA Basic Level Practice 解题思路和代码,主要用的是 C。每22题一篇博客,可以按目录来进行寻找。 文章目录 1045 快速排序1046 划拳1047 编程团体赛1048 数字加密1049 数列的片段和1050 螺旋矩阵1051 复数乘法1052 卖个萌1053 住房空置率1054 求平均值1…

拷贝构造函数(深拷贝+浅拷贝)

目录 拷贝构造函数浅拷贝深拷贝 拷贝构造函数 拷贝构造函数: Myclass(const Myclass& myclass) {amyclass.a;bmyclass.b;cmyclass.c; }浅拷贝 浅拷贝的思路就是和默认的拷贝构造函数一样: 即将原对象的值直接赋值给新对象,这样做一般情况下是没什…

Java“牵手”淘宝商品详情数据,淘宝商品详情接口,淘宝API接口申请指南介绍

采集场景 在淘宝首页(taobao.com)输入关键词搜索,采集搜索后得到的商品列表页数据然后再点击进去即是商品详情页面数据。示例中关键词为【新款连衣裙】,可根据需求进行更换,同时支持自动批量输入多个关键词&#xff0…

解读|美创深度参与5项电信和互联网行业数据安全标准发布实施

《数据安全法》、《个人信息保护法》等法律法规的颁布实施,坚持安全和发展并重的原则,积极应对复杂严峻的安全风险与挑战,加速构建数据安全保障体系,成为电信和互联网行业重要工作。 “安全发展、标准先行”,标准化工作…

力扣 -- 646. 最长数对链

参考代码&#xff1a; class Solution { public:int findLongestChain(vector<vector<int>>& pairs) {int npairs.size();sort(pairs.begin(),pairs.end());vector<int> dp(n,1);int ret1;for(int i1;i<n;i){for(int j0;j<i;j){if(pairs[j][1]<…

声音生成结果比较方法综述——FAD、JSD、NDB多种衡量参数

文章目录 引言正文Generation quality 生成质量FAD距离FAD论文总结FAD代码下载和安装FAD的使用 通过分类准确率衡量实现代码 Generation Deversity生成多样性NDBJSDNDB和JSD的实现代码代码修改和结果理解 NDB和JSD应用到声音生成 总结 引言 之前自己并没有对这方面的内容进行研…

【数据结构-堆】堆

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

异步FIFO设计的仿真与综合技术(2)

概述 本文主体翻译自C. E. Cummings and S. Design, “Simulation and Synthesis Techniques for Asynchronous FIFO Design 一文&#xff0c;添加了笔者的个人理解与注释&#xff0c;文中蓝色部分为笔者注或意译。前文链接&#xff1a;异步FIFO设计的仿真与综合技术&#xff0…

Java集合面试

文章目录 Java集合框架说说有哪些常见的集合&#xff1f;ArrayList和LinkedList的区别&#xff1f;List和Set的区别&#xff1f;HashMap的数据结构&#xff1f;把你了解的所有都讲一讲&#xff1f;数据结构&#xff1a; put流程Hashmap的resize方法的执行过程&#xff1f;get流…

【算法与数据结构】530、LeetCode二叉搜索树的最小绝对差

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;二叉搜索树的性质是左子树的所有节点键值小于中间节点键值&#xff0c;右子树的所有节点键值大于中间节…

招聘寒冬中,Python 程序员如何突出重围?

在当前的就业市场中&#xff0c;许多人都在感叹“招聘寒冬”。 尤其是对于 Python 程序员来说&#xff0c;似乎面临着更大的挑战。 然而&#xff0c;我要说的是&#xff0c;挑战与机遇并存&#xff0c;只要我们能够找准自己的定位&#xff0c;提升自己的技能&#xff0c;Pyth…

运用谷歌浏览器的开发者工具,模拟搜索引擎蜘蛛抓取网页

第一步&#xff1a;按压键盘上的F12键打开开发这工具&#xff0c;并点击右上角三个小黑点 第二步&#xff1a;选择More tools 第三步&#xff1a;选择Network conditions 第四步&#xff1a;找到User agent一列&#xff0c;取消复选框的勾选 第五步&#xff1a;选择谷歌爬虫…

Spring框架中的Resource接口是什么,以及它在加载和访问资源时的关键作用

文章目录 什么是 Resource 接口&#xff1f;使用 Resource 加载资源使用 Resource 访问文件系统资源总结 &#x1f388;个人主页&#xff1a;程序员 小侯 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 ✨收录专栏&#xff1a;Java框架 ✨文章内…

通过小程序实现微信扫码授权登录,网站接入微信扫码登录功能(永久免费)

需求 网站如果想要实现微信扫码登录其实有很多种方案&#xff0c;常见的方案就是微信开放平台和微信公众号服务号。前者是目前大部分网站并且是微信认可的一种方式&#xff0c;后者是开发者发现服务号具备扫码关注后即可获取用户基本信息的能力后而开发的一种方式。 而这两者…

【深入解析spring cloud gateway】08 Reactor 知识扫盲

一、响应式编程概述 1.1 背景知识 为了应对高并发服务器端开发场景&#xff0c;在2009 年&#xff0c;微软提出了一个更优雅地实现异步编程的方式——Reactive Programming&#xff0c;我们称之为响应式编程。随后&#xff0c;Netflix 和LightBend 公司提供了RxJava 和Akka S…

腾讯云centos7.6安装部署备忘

1.Mysql 1.1 安装mysql wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-release-el7-5.noarch.rpm yum install mysql-community-server 1.1.1 安装后重启 service mysqld restart 1.1.2 初次安装mysql&#xff0c;root账…

【Python】【Fintech】用Python和蒙特卡洛法预测投资组合未来收益

【背景】 想利用蒙特卡洛方法和yahoo,stooq等财经网站上的数据快速预测特定portfolio的收益。 【分析】 整个程序的功能包括 读取json中的portfolio组合创建蒙特卡洛模拟预测收益的算法创建从财经网站获得特定投资组合数据,并根据2的算法获得该Index或Portfolio收益预测结…

ARTS打卡第四周之删除链表倒数第几个节点、gdb start命令、扩散模型、如何学习分享

Algorithm 题目&#xff1a;删除链表倒数第 n 个结点 分析&#xff1a;可以把通过两个结点进行标记&#xff0c;有一个节点需要遍历得快点&#xff0c;简称为快结点&#xff0c;有个结点遍历得慢&#xff0c;简称为慢结点。快结点先停在正数第 n 个结点处&#xff0c;然后快慢…

蓝桥杯打卡Day7

文章目录 阶乘的末尾0整除问题 一、阶乘的末尾0IO链接 本题思路&#xff1a;由于本题需要求阶乘的末尾0&#xff0c;由于我们知道2*510可以得到一个0&#xff0c;那么我们就可以找出2的数和5的数&#xff0c;但是由于是阶乘&#xff0c;所以5的数量肯定是小于2的数量&#xf…

车载Android应用开发与分析 - 初试 SystemUI Plugin

在前面的视频、文章中我们介绍完了整个车载Android应用开发所需要的基础知识&#xff1a; 【视频文稿】车载Android应用开发与分析 - 走进车载操作系统 - 掘金【视频文稿】车载Android应用开发与分析 - AOSP的下载与编译 - 掘金【视频文稿】车载Android应用开发与分析 - 开发系…