TCP内部的十大核心机制

news2024/9/22 3:56:44

文章目录

  • 1、确认应答机制
  • 2、超时重传机制
  • 3、连接管理机制
    • 1、三次握手
    • 2、四次挥手
  • 4、滑动窗口机制
  • 5、流量控制机制
  • 6、拥塞控制
  • 7、延时应答机制
  • 8、捎带应答机制
  • 9、面向字节流
  • 10、特殊情况

1、确认应答机制

TCP是可靠传输,那么TCP协议能够实现可靠传输的核心机制就是确认应答机制
A给B发了一条信息,B收到后会返回一个应答报文(ACK),此时,A收到应答之后,就知道刚才的数据顺利到达B了
在这里插入图片描述
但是如果A给B发了两条信息,B再次做出应答,就无法分辨B应答的是哪个信息,因为在网络上存在 “后发先到” 的情况,即后发出的信息比先发出的信息更早到目的地
在这里插入图片描述
如上图所示,我们无法分辨B应答的是哪一条信息
针对上述的问题,我们直接给报文加上编号就行了

任何一个数据包括应答报文都是有序号的。但是确认序号,一般只有应答报文有,普通报文的确认序号无意义。

如何辨别普通报文和应答报文呢?看下图:
在这里插入图片描述


实际上,TCP的序号并不是一条一条来编号的,因为TCP是面向字节流的,所以TCP的序号也是按照字节来编号的 假设一条数据是1000个字节,那么假设他从1开始编号,此时第一个字节序号就是1,第二个字节序号就是2......以此类推,最后一个字节序号就是1000。

但是由于这1000个字节都属于同一个TCP报文,所以TCP报头里就只记录当前的第一个字节序号,当A发送的第一条数据到达B之后,B会返回一个应答报文,该应答报文的序号是1001,表示前1000个字节的数据我已经收到了,现在A现在要发送第1001个字节的数据了(B向A索要1001的数据);


2、超时重传机制

在确认应答机制中,只是做出了数据传输顺利的情况,但是如果数据传输不顺利呢?A发送完后却数据迟迟收不到应答报文即 “丢包” 情况;丢包主要有两种:1、A发送的数据丢了 ; 2、B返回的应答报文(ack)丢了;
当出现丢包情况时,TCP就会启动超时重传机制,即重新发送一遍相同的数据
在这里,TCP引入了一个时间阈值,当发送方发送数据时,就会开始计时,如果到达时间阈值后也没有收到接收方返回的ack,此时不管是ack还在路上还是丢包了,都统一认为是丢包,发送方会重新发送数据;

超时重传机制:超过一定时间,还未响应,就重新发送数据;

但是这个时间阈值具体时间多少,就要根据系统来决定,没有一个绝对值;


问题一:如果出现了重复传输的数据怎么办?
TCP存在一个接收缓存区(接收饭是钢操作系统内部的一段内存),每个TCP都有一个socket对象,都有一个接收缓存区;主机B收到A发送的数据后,就把数据放到对应的接收缓存区中,根据数据的序号,很容易就分辨出两端数据是不是重复数据,如果是重复数据,就直接将后进来的数据丢弃;
TCP的这个接收缓冲区,是用来给接收到的数据进行排序的,保证应用程序读到的数据是有序的(和发送的数据一致)


可靠传输是TCP最核心的部分,而可靠传输就是通过确认应答机制+超时重传机制来体现的! 确认应答机制是在数据传输顺利的情况下应用的; 超时重传机制是在数据传输不顺利的情况下应用的;

3、连接管理机制

连接管理机制即客户端与服务端建立连接与断开连接的过程,这里就涉及到一个非常重要的知识点三次握手与四次挥手
建立连接:三次握手;
断开连接:四次挥手;


1、三次握手

建立连接(三次挥手) 过程:建立连接就是一个彼此之间记录对方的信息,并且相互认同的过程;
在这里插入图片描述

三次握手本质上就是确定双方的接收和发送能力;

三次握手的意义:

  1. 让通信双方各自建立对对方的认同
  2. 验证通信双方的发送和接受能力
  3. 双方协商一些重要参数

在这里插入图片描述

在这里插入图片描述


2、四次挥手

四次挥手:就是断开连接的过程
大致可以用下图来表示:
在这里插入图片描述
更准确的可以根据下图来表示:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
这里客户端保持TIME_WAIT的状态就是TCP超时重传机制的体现;那么客户端具体等多久呢?大概是2msl左右,一旦超过2msl客户端还没有收到服务端发来的FIN,就默认ACK已经到达,客户端就关闭了


4、滑动窗口机制

上面三个机制确认应答机制、超时重传机制、连接管理机制都是TCP为可靠连接提供的机制,那么因为TCP可靠连接的性能较高,相应的传输效率就会下降,因此== TCP就有了滑动窗口机制来提高传输效率!(但是再怎么提高也不会超过UDP的传输效率)==


滑动窗口的本质是降低了确认应答,等待ACK报文的时间;即批量发送批量等待,把多个报文同时发送,多份等待时间合成一份了;
看下图了解二者的区别:
在这里插入图片描述
在这里插入图片描述
问题一:发送完一个窗口的数据之后什么时候继续往下发送数据呢?
在这里,发送完数据之后就进入了等待ACK的时间,但是并不是等所有ACK都返回,才发送数据,而是返回一个ACK就发送一条数据!所以窗口的大小始终不变,称为“滑动窗口”;


在这里插入图片描述
问题二:如果在上述进程中出现了丢包怎么办?
1、ACK丢包了:不需要做任何处理在这里插入图片描述

2、数据丢了:
在这里插入图片描述


5、流量控制机制

这是一个干预滑动窗口机制中窗口大小的机制;
滑动窗口机制中,窗口越大,效率越高,相同时间等待的ACK也就越多;但是窗口也不能无限,如果窗口大大小超过了接收方的接受能力,发送的数据接收方处理不完,发送也是白发送;

而流量控制机制就是根据接收方的处理能力来控制窗口大小,即发送方的发送效率;
接收方的接收能力可以根据接收方的接收缓存区的剩余空间来判断

在这里插入图片描述

当滑动窗口的大小是0时,客户端就会停止发送,在这个停止等待的时间里,客户端会定时给服务端发送一个窗口探测报文,这个报文没有任何业务数据,他的作用仅仅是为了触发服务端的ACK,来获取窗口大小的值;


6、拥塞控制

拥塞控制和流量控制共同决定了滑动窗口的大小!
流量控制:考虑的是接收方的处理能力;
拥塞控制:考虑的是传输过程中,中间节点处理能力;

在这里插入图片描述

拥塞控制的本质就是通过实验的方法来找到适合的窗口大小


在这里插入图片描述


7、延时应答机制

延时应答机制也是TCP用来提高效率的一种机制,他是在接收方处理能力之内将窗口大小放大一点的机制;

延时机制:在接收方收到数据后,稍微等待一会在发送ACK报文,在这个等待的过程中,接收方的应用程序就会把缓存区的数据先消费一波,此时缓存区的剩余空间就多了一点,返回的值也就大了,发送方的窗口大小也就大了一点;
在这里插入图片描述


8、捎带应答机制

这是在延时应答的基础上进行捎带应答
在这里插入图片描述
捎带应答是说能不能合并,而延时应答是提高了合并的概率;


9、面向字节流

因为TCP是面向字节流的,此时就有了"粘包问题";
接收方把数据放到接收缓存区后,当应用程序read读取缓存区数据时,就分不清哪里是应用层数据报结尾,此时read的数据可能是半个应用层数据报,可能是完整的数据报,这是不得而知的;
此时就需要我们自己去定义区分方法:1、约定好分隔符 ;2、约定好每个包的大小
在这里插入图片描述


10、特殊情况

特殊情况一般是出现不可抗力:
在这里插入图片描述

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

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

相关文章

Anker推出Security SmartTrack卡,详谈苹果Find My技术

Anker 旗下品牌 Eufy 近日在欧洲、美国市场推出了 Security SmartTrack 卡。其工作原理和苹果 AirTag 类似,允许用户通过手机定位追踪到绑定的物品。 Security SmartTrack卡通过蓝牙连接,范围为 260 英尺(约 80 米)。采用防水设…

跨境数据传输是日常业务中经常且至关重要的组成部分

跨境数据传输是日常业务中经常且至关重要的组成部分。在过去的20年中,由于全球通信网络和业务流程的发展,全球数据流的模式已迅速发展。随着数据从数据中心移到数据中心和/或跨边界移动,安全漏洞已成为切实的风险。有可能违反国家和国际数据传…

INOBITEC PRO DICOM VIEWER 2.9.0 Crack

inobitec dicom高级 3D 重建,以 OBJ、STL、PLY 格式导出表面,先进的多计划重建,添加标记和标记线,将系列与高级工具相结合,具有多种选择的虚拟内窥镜检查,从视口录制视频(仅限 64 位版本&#x…

CSS的6个新特性

1、容器查询(Container Queries) 容器查询container类似于媒体查询media,区别在于查询所依据的对象不同。媒体查询依据的是浏览器的视窗大小,容器查询依据的是元素的父元素或者祖先元素的大小。 有关容器查询的属性一共有三个&a…

vue2的动画和过渡效果

文章目录过渡 & 动画Transition 组件基于 CSS 的过渡效果CSS 过渡类名 class为过渡效果命名CSS 过渡 transition实例1:实例2:CSS 动画自定义过渡的类名同时使用 transition 和 animation深层级过渡与显式过渡时长性能考量JavaScript 动画可复用过渡效…

STM32 HAL库硬I2C的TOF050C模块

前言最近在倒腾毕业设计,需要用到TOF050C,但是现有的案例都是软IIC,并且还是基于STM32F103的,笔者用的STM32F767,没有GPIO->CRH寄存器。问题来了,如果我每次都要去看寄存器手册属实费时间,这…

案例08-让软件的使用者成为软件的设计者

一:背景介绍 对于需求的开发每天可能都会有上线的情况,为了防止每次上线拉取代码或者修改配置而引发的冲突以及发生了冲突应该找谁一起确定一下代码留下那一部分的情况。所以在开发的群中会有一个表格来记录每个需求上线修改的环境、是否修改数据库、是否…

【论文阅读】Research on video adversarial attack with long living cycle

论文链接:添加链接描述 Method OPTIMIZATION PROBLEM DESCRIPTION XXX是浮点数域中的对抗视频示例,XcX_cXc​表示encoded的视频对抗示例。设EXˆ−XE Xˆ−XEXˆ−X表示在对抗中增加的扰动,EcXc−XE_c Xc − XEc​Xc−X表示视频压缩编码损…

【线性筛+DP】最大和

看错题了,呃呃,其实就是个简单DP最大和 - 蓝桥云课 (lanqiao.cn)题意:思路:设dp[i]为以1为终点的最大和,然后枚举状态和决策就行了主要是线性筛的应用,它可以预处理出一个数的最小质因子是多少Code&#xf…

如何用BurpSuite抓取手机数据包

文章目录前言准备工具Burp Suite物理机或虚拟机(移动设备)手机抓包网络环境开启burp并设置代理手机配置代理安装Burp证书开始抓包踩坑后记前言 最近挖了一波src,挖来挖去发现有很多公众号或者app没有测试,这就需要Burp能够抓取手机的数据包了&#xff0…

九州云出席全球人工智能开发者先锋大会,圆桌论道开源未来

2月25日-26日,2023年全球人工智能开发者先锋大会(GAIDC)在临港成功召开。本届盛会以“向光而行的开发者”为主题,汇集政府职能部门领导、国内外知名专家学者、具有国际影响力的开源创业者,聚焦前瞻探索、开源开放、人才…

Linux gcc/g++编译链接头文件和库(动态库.so 和 静态库.a)

最近在学习log4cpp库时,使用g去编译,却发现自己不会链接...,这哪能行,于是网上钻研,终于解决,现在记录下来分享给遇到同样问题的人。 gcc和g类似,这里就以g为例! 刚好用到的log4cpp…

测开:vue入门(1)

目录 一、背景 二、介绍 三、创建项目 3.1 创建vue项目 方式二:直接在html页面中,引入vue 3.2 直接在html页面中,引入vue 3.2.1 引入在线的vue(方式一) 3.2.2 将vue 下载到本地(方式二) …

代码随想录算法训练营第二天| 977. 有序数组的平方、209. 长度最小子数组、59.螺旋矩阵II

977 有序数组的平方题目链接:977 有序数组的平方介绍给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。思路看到题目的第一反应,首先负数的平方跟正数的平方是相同的&…

Git系列:常见指令辨析

Git系列:常见指令辨析指令辨析工作区、暂存区、版本库傻傻分不清楚?主干和分支的关系是什么?git fetch/merge/pull辨析日志查看时,git log与git reflog的区别是?git diff和status的区别是?相关资料本文小结…

麒麟系统安全管理工具kysec机制详解

DAC访问控制 Linux下有多种权限控制的机制,常见的有:DAC(Discretionary Access Control)自主式权限控制和MAC(Mandatory Access Control)强制访问控制。 Linux上传统的访问控制标准是自主访问控制Discretionary Access Control(DAC)。在这种形式下,一个软件或守护进程以…

【MyBatis】源码学习 05 - 关于 xml 文件解析的分析

文章目录前言参考目录学习笔记1、章节目录概览2、14.3:SqlSourceBuilder 类与 StaticSqlSource 类3、14.4.2:ResultMapResolver 类3.1、测试代码说明3.2、结果集 userMap 解析流程3.3、结果集 getGirl 解析流程3.4、鉴别器 discriminator 解析流程4、14.…

汽车电子CAN协议上位机软件的设计实现

先不说汽车电子,通常上位机软件如何实现呢?作为控制嵌入式设备的PC端软件,主要功能就是配置和读取嵌入式设备基于特定接口的交互信息,所以首先需要控制一个通讯设备作为中间的通讯媒介。比如sscom5.13.1就可以作为上位机软件工具,它需要一个具有usb转UART通讯的接口设备或…

C#中,Elasticsearch.Net判断空字符串

之前有个业务需求,由于最开始存储到es里的,是默认空字符串,后面程序取数据时,发现需要取空字符串的数据时,不好取出来。 字符串的字段如图: 实际数据如图: 用的是C#语言,使用的是E…

【算法笔记】递归与回溯

递归与回溯 To Iterate is Human, to Recurse, Divine. —L. Peter Deutsch 人理解迭代,神理解递归。 —L. Peter Deutsch 1.什么是递归呢 递归形象描述: 你打开面前这扇门,看到屋里面还有一扇门。 你走过去,发现手中的钥匙还可以…