TCP协议 ---可靠传输的各种机制

news2024/9/23 21:24:12

目录

一、可靠

确认应答机制:保证数据可靠、有序的到达对端

超时重传机制

二、效率

2.1 提高自身发送数据量

滑动窗口机制:

滑动窗口的发送缓冲区是环形队列

滑动窗口的大小会变化吗?

滑动窗口的nb之处

滑动窗口丢包问题

2.2  对方的接受能力

流量控制机制

场景:

 0窗口(0号窗口通告):接收方个发送方发送了一个窗口大小为0的数据,称之为0号窗口通告

延时应答机制

2.3 网络转发能力

拥塞控制机制:  通过网络拥塞程度,控制tcp的发送数据量

1、慢开始(启动)

2、拥塞避免

3、拥塞发生时的策略

 捎带应答机制

TCP的保活计时器(心跳数据包)


一、可靠

确认应答机制:保证数据可靠、有序的到达对端

        确认应答机制的背后原理:           本质上是对序号的确认,电脑不知道发的内容是什么,他只认识序号

可靠:

 

有序:

超时重传机制

当发送方发送时候启动超时重传计时器,当即使的时间超过 “超时重传时间” 之后,还没有收到确认应答,则重传该报文

场景:

超时时间:

        能够写成固定时间吗?不能, 要依据网络传输情况进行动态变化 

RTO = 2RTT

RTO:超时重传时间

RTT:报文往返时间(根据每次发送数据的时间以及确认回来的时间可以计算出来)

二、效率

TCP需要考虑传输效率的问题,需要从三个方面考虑

1、自身发送数据量,换句话说,一次性发哦是那个的数据越多,传输的越多

                MSS:决定了一次性传递的数据的上线(这个没办法更改)

                确认应答机制,决定了每一个TCP数据包都说需要确认的(这个可以打破)- 后面说的滑动窗口机制

2、对方的接收能力,换句话说,对方的接收缓冲区的大小

3、网络转发能力,换句话说,从A主机到B主机的网络链路上的转发设备的负载大不大

2.1 提高自身发送数据量

滑动窗口机制:

允许窗口大小的数据(不需要等待上次数据的确认)发送到网络当中进行传输,提高数据吞吐量

优点:      在不考虑网络的情况下, 可以提高发送数据量。 因为发送的越多, 传输的越多

缺点:      需要防备数据丢失的情况, 触发超时重传,一旦触发超时重传,则数据就需要重新发送过去。 也就是意味着发送方在没有接收到确认之前, 是需要将数据缓存起来的 (这个就是TCP的发送缓冲区)

滑动窗口的发送缓冲区是环形队列

滑动窗口的大小会变化吗?

动态变化的

谁在影响滑动窗口的大小呢?

结论:接收方的接收缓冲区的大小在影响滑动窗口的大小

滑动窗口的nb之处

如果收到中间某个分组的确认,即使前面的确认没有收到,也直接按收到处理(确认序号的含义)

也就是说滑动窗口一次性可以滑动很多的距离

滑动窗口丢包问题

1、分组ACK丢失:

 

2、数据丢失

                                这里的快充穿不是因为超时重传,而是收到3次重复的确认应答

2.2  对方的接受能力

通过对方的接受能力,来限制发送方发送的数据量

图解:

流量控制机制

场景:

发送方发送了大量的窗口数据(滑动窗口当中的分组数据),被接受方接收了之后,是先缓存在tcp维护的接收缓冲区当中的,由于缓存了大量的数据,会导致接收缓冲区当中的空间急剧减少,所以说,接收方就通过应答当中的窗口大小,去控制发送方的发送数据量

 0窗口(0号窗口通告):接收方个发送方发送了一个窗口大小为0的数据,称之为0号窗口通告

引申含义 接收方  告诉   发送方自己接受不了了,发送方你别发送数据了

那么什么时候恢复呢?

1、接收方主动发送窗口更新通知(本质上就是发送了一个窗口大小部位0的tcp数据包)

 

 2、发送方发送窗口探测数据包

 

延时应答机制

 接收方接收到数据之后,等待一小会儿,再给发送方回复确认

                                本质上是为了让接收方应用层程序调用recv从tcp的接收缓冲区将数据读走

 

2.3 网络转发能力

1.TCP通过滑动窗口来做流控,但是TCP觉得这还不够,

因为滑动窗口需要依赖于连接的发送端和接收端,其并不知道网络中间发生了什么。TCP的设计者觉得,一个伟大而牛逼的协议仅仅做到流控并不够,因为流控只是网络模型4层以上的事,TCP的还应该更聪明地知道整个网络上的事

2、TCP不是一个自私的协议,当拥塞发生的时候,要做自我牺牲。就像交通阻塞一样,每个车都应该把路让出来,而不要再去抢路了

 

拥塞控制机制:  通过网络拥塞程度,控制tcp的发送数据量

                                      tcp发送数据量  =  min(发送窗口,拥塞窗口)

拥塞控制机制有三个阶段:

 

早期tcp拥塞控制机制的图

现在tcp拥塞控制机制的图

和早期的不同也就是网络拥塞的处理办法,因为早期的网络比较差,而现在的网络拥塞很多只是因为网络闪断而已,不需要降低到那么低就可以了

 

1、慢开始(启动)

 

2、拥塞避免

3、拥塞发生时的策略

 

 

 捎带应答机制

 

TCP的保活计时器(心跳数据包)

 

TCP一共有三个计时器: 超时重传计时器,  TIME_WAIT计时器    , 保活计时器

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

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

相关文章

锻炼管理器wger的安装

本文是 2021 年 2 月完成的,最近因为工作比较忙,就把这些老文章翻出来,但为了发表,老苏差不多又重写了一遍。 因为当时跑的是 wger/apache ,现在新的 wger/apache 版本在老苏的机器上,会遇到 AH00141: Coul…

Windows Git Bash 配置

Windows Git Bash 配置 本文参考的文章: 在 Windows 的 Git Bash 中使用包管理器 - iris (ginshio.org)Git bash 安装 pacman & Windows 解压 zst 文件 | 伪斜杠青年 (lckiss.com) 一、Git的安装 Git 的安装应该是都会的,但还是应该说以下&#…

前端常见基础面试题css篇

目录 1.css3有哪些新特性? 2.CSS有哪些基本选择器?它们的权重是如何表示的? 3.css 选择器的类型优先级排序 4.写出几种CSS实现元素两个盒子垂直水平居中的代码 5.CSS 常见的伪类和伪元素有哪些? 6.CSS的引入方式有哪些?ink…

CMMI-外包与采购管理

外包与采购管理(Outsourcing and Procurement Management, OPM)是指外包管理和采购管理,目的是选择合适的承包商和供应商,并依据合同进行有效的管理。外包与采购管理过程域是SPP模型的重要组成部分。本规范阐述了外包与采购管理过…

自定义认证器

自定义认证器工作流程 1、设备向AWS IoT发送http请求,包含token和token签名 2、IoT判断这是一个自定义认证请求,然后确认token和token签名是否匹配 3、Lambda函数验证token之后,将输出5项数据, isAuthenticated:求是…

Zookeeper入门与应用

Zookeeper入门与应用1.简介1.1.应用场景1.2.Zookeeper的设计目标1.3数据模型2. 单机安装3.常用shell命令3.1.查询3.2.创建3.3.更新3.4.删除4.zookeeper的Acl权限控制案例/远程登录acl 超级管理员5.zookeeper的 JavaAPI连接到Zookeeper5.1.新增节点5.2.修改节点5.3.删除节点5.4.…

4、数组、切片、map、channel

目录一、数组二、切片三、map四、channel五、引用类型一、数组 数组: 数组是块连续的内存空间,在声明的时候必须指定长度,且长度不能改变所以数组在声明的时候就可以把内存空间分配好,并赋上默认值,即完成了初始化数组…

Spring反射内置工具类ReflectionUtils

Spring反射内置工具类ReflectionUtils前言反射1,什么是反射2,反射的实现2.1获取class对象的三种实现2.1.1Object ——> getClass();2.1.2 任何数据对象(包括数据基本类型)都有一个静态的class属性通过Class类的静态方法&#x…

TX Text Control .NET 31.0 SP1 for WPF 企业版Crack

将文档编辑、创建和 PDF 生成添加到 WPF 应用程序。 TX Text Control for WPF Enterprise 是一个免版税、完全可编程的丰富编辑控件,它在专为 Visual Studio 设计的可重用组件中为开发人员提供了广泛的文字处理功能。它提供全面的文本格式,强大的邮件合并…

golang fmt.Sprintf(“%.2f“) 的舍入问题

首先,fmt.Sprintf("%.2f")使用的是banker rounding 而不是四舍五入,banker rounding 的定义如下(来自百度百科):1.要求保留位数的后一位如果是4,则舍去。例如5.214保留两位小数为5.21。2.如果保留…

第四代英特尔至强重磅发布,芯片进入下半场:软硬加速、绿色可持续

编辑 | 宋慧 出品 | CSDN 云计算 2023 年的第二周,英特尔重磅发布其企业级芯片领域重要的产品——第四代英特尔 至强 可扩展处理器。作为数据中心处理器当之无愧的王牌产品,迄今为止,英特尔已经向全球客户交付了超8500万颗​至强可扩展处理器…

agent扩展-自定义外部加载路径

自定义classLoader实现加载外部jar, 以skywalking agent 类加载器为例子 整体思路 扩展findClass ,解决loadClass可以查找到扩展findResource,解决getResources可以获取到资源 基本原理 ClassLoader loadClass的加载顺序 findLoadedClass 加载本地已经…

Spring Boot学习篇(十三)

Spring Boot学习篇(十三) shiro安全框架使用篇(五) 1 准备工作 1.1 在SysUserMapper.xml中书写自定义标签 <select id"findRoles" resultType"string">select name from sys_role where id (select roleid from sys_user_role where userid (S…

Matlab论文插图绘制模板第77期—对数刻度横向柱状图

在之前的文章中&#xff0c;分享了Matlab对数刻度柱状图的绘制模板&#xff1a; 进一步&#xff0c;再来看一下对数刻度横向柱状图的绘制模板。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;Matlab论文插图绘制模板系列&#xff0c;旨在降低大家使用Matlab进行科研绘…

[WTL/ATL]_[初级]_[TreeView控件如何显示ToolTip]

场景 在开发界面程序时&#xff0c;CTreeViewCtrl(它实际内部封装的就是Win32的TreeView控件)一般会用来作为选择某些类型的树形菜单&#xff0c;点击某项的时候&#xff0c;右边能显示某些对应的数据。当这个控件的宽度固定时&#xff0c;有时候每行的文本项可能由于过长从而…

【图像分类】基于PyTorch搭建LSTM实现MNIST手写数字体识别(双向LSTM,附完整代码和数据集)

写在前面&#xff1a; 首先感谢兄弟们的关注和订阅&#xff0c;让我有创作的动力&#xff0c;在创作过程我会尽最大能力&#xff0c;保证作品的质量&#xff0c;如果有问题&#xff0c;可以私信我&#xff0c;让我们携手共进&#xff0c;共创辉煌。 在https://blog.csdn.net/A…

【CSS】元素居中总结-水平居中、垂直居中、水平垂直居中

【CSS】元素居中一、 水平居中1.行内元素水平居中&#xff08;1&#xff09;text-align2.块级元素水平居中2.1 margin&#xff08;1&#xff09;margin2.2布局&#xff08;1&#xff09;flex justify-content&#xff08;推荐&#xff09;&#xff08;2&#xff09; flexmargin…

张驰咨询:关于六西格玛,有一些常见的疑惑!

​ 很多想要学习六西格玛的学员&#xff0c;经常会有这些困惑&#xff1a; 以前没有接触过六西格玛&#xff0c;需要什么基础吗&#xff1f;自学还是培训&#xff1f;哪些行业会用到六西格玛呢&#xff1f;学习六西格玛对以后的工作有哪些帮助&#xff1f;如何选择六西格玛培…

STM32配置读取双路24位模数转换(24bit ADC)芯片CS1238数据

STM32配置读取双路24位模数转换&#xff08;24bit ADC&#xff09;芯片CS1238数据 CS1238是一款国产双路24位ADC芯片&#xff0c;与CS1238对应的单路24位ADC芯片是CS1237&#xff0c;功能上相当于HX711和TM7711的组合。其功能如下所示&#xff1a; 市面上的模块&#xff1a; …

股票买卖接口怎么来的?

现在股票买卖接口主要是在线上研发&#xff0c;有专业的开发团队进行源码开发和完善&#xff0c;但是&#xff0c;常常会在开发过程中出现问题&#xff0c;也就是遇到一些特殊的情况需要及时处理&#xff0c;那么股票买卖接口怎么开发实现出来的&#xff1f;一、股票买卖接口开…