当前位置: 首页 > news >正文

【网络协议】聊聊TCP如何做到可靠传输的

网络是不可靠的,所以在TCP协议中通过各种算法等机制保证数据传输的可靠性。生活中如何保证消息可靠传输的,那么就是采用一发一收的方式,但是这样其实效率并不高,所以通常采用的是累计确认或者累计应答。

如何实现一个靠谱的协议?

TCP为了保证顺序性,每个包都有一个ID,这个是建立连接之后开始使用的ID,一般确认包都是采用累计确认或者累计应答的模式。

发送端和接收端需要记录已经发送和处理确认的包的记录。
主要几种情况:

  • **已确认:**发送端已经发送,接收端已经确认。
  • **处理中:**发送端已经发送,接收端正在处理。
  • **等待发送:**发送端准备发情,接收到准备接收。
  • **没有发送:**发送端没有发送,接收端没有接收。

我们来聊聊为什么还要区分等待发送和没有发送这部分,本质其实为了控制接收端可以处理的数据能力。也就是滑动窗口大小就是接收端的,在TCP的保文中接收到会给发送端一个窗口的大小,暗示自己可以处理的数据。如果过多就处理不过来了。 Advertised window

发送端维护的数据结构:
在这里插入图片描述

  • LastByteAcked 已经确认的数据
  • LastByteSent 已发送但是还没有确认的。
  • LastByteAcked + AdvertisedWindow 接收端最大处理数据量

接收端维护的数据结构
在这里插入图片描述
MaxRcvBuffer:最大缓存的量
LastByteRead 已经接收,但是还没有被应用层读取的。
NextByteExpected 第一部分和第二部分的分界线

顺序问题与丢包问题

在这里插入图片描述
假设上面的1,2,3 发送端和接收端已经达成共识,但是 4 ,5发送端还没有接收到,可能丢包了。
接收端8,9已经接收,但是 6,7没有接收,6,7可能丢包了。这种情况其实丢包和顺序问题都出现了,如何解决。
对于丢包问题,采用的是确认与重发机制
也就是设置一定的时间,发送端对于每个发送的包,如果一定的时间没有ACK的话,那么就进行重新发送,这个时间不宜过长和过短,一般是往返时间RTT。但是RTT也是TCP会进行算出一个平均值。也就是自适应重传算法。Adaptive Retransmission Algorithm。

但是对于再次丢包的,TCP 的策略是超时间隔加倍。每当遇到一次超时重传的时候,都会将下一次超时时间间隔设为先前值的两倍。两次超时,就说明网络环境差,不宜频繁反复发送

另一种快速重传的机制是,接收方收到一个大于下一个期望的报文段时,检测数据流中的一个间格。发送三个冗余的ACK,客户端收到后,就在定时器之前,重传丢失的报文端。

丢包问题采用的是确认机制,而顺序问题是通过序号确认的。

流量控制问题

流量控制其实在发送TCP报文的时候,就会携带一个窗口的大小。

在这里插入图片描述
会实时的根据接收方的数据大小进行调整,当接收方的处理增大是,发送方会增加可发送的数据,如果缩小,那么发送方就停止发送。
发送方会定时发送窗口探测数据包,看是否有机会调整窗口的大小。这个其实就是流量控制。

拥塞控制问题

流量控制是担心发送方把接收方缓存塞满,而拥塞控制是担心网络塞满。

LastByteSent - LastByteAcked <= min {cwnd, rwnd} ,是拥塞窗口和滑动窗口共同控制发送的速度。

水管有粗细,网络有带宽,也即每秒钟能够发送多少数据;水管有长度,端到端有时延。在理想状态下,水管里面水的量 = 水管粗细 x 水管长度。对于到网络上,通道的容量 = 带宽 × 往返延迟

TCP 的拥塞控制主要来避免两种现象,包丢失和超时重传
网络拥塞的判定?

  • 当网络发生拥塞时,路由器就会丢掉分组,因此,只要发送端没有按时收到应当到达的确认报文 ack,就可认为网络出现了拥塞

慢启动(2的N次增加)-拥塞避免(回退到一半窗口大小 +1操作) 当出现丢包 快速重传和快速恢复解决
在这里插入图片描述
快重传

  • 快重传算法规定:发送端只要一连收到三个重复 ack,即可断定有分组丢失,就应该立即重传丢失的报文,而不需要等待为该报文设置的重传计时器超时。
  • 与慢开始不同,拥塞窗口不设为 1,,而设为慢开始门限+3*mss(mss:最大报文段)。

在这里插入图片描述

流量控制和拥塞控制的理解吗?
流量控制考虑点对点的通信量的控制,也就是客户端和服务端直接数据传输数据量的大小。
拥塞控制考虑的问题是整个网络,是全局性的考虑。

小结

顺序、丢包、流量控制是通过滑动窗口来解决的。而拥塞控制是通过拥塞窗口来解决的,不能太快,也不能太慢,需要寻找到中间值。

相关文章:

【网络协议】聊聊TCP如何做到可靠传输的

网络是不可靠的&#xff0c;所以在TCP协议中通过各种算法等机制保证数据传输的可靠性。生活中如何保证消息可靠传输的&#xff0c;那么就是采用一发一收的方式&#xff0c;但是这样其实效率并不高&#xff0c;所以通常采用的是累计确认或者累计应答。 如何实现一个靠谱的协议&…...

记一次flask框架环境综合渗透测试

PART.01 登入过程 访问靶场地址http://101.43.22.226/?name2023&#xff0c;框架为Flask。 2. 测试存在ssti注入。 3. 直接执行以下命令。 http://101.43.22.226/?name{% for c in [].class.base.subclasses() %} {% if c.name ‘catch_warnings’ %} {% for b in c.i…...

博弈论学习笔记(2)——完全信息静态博弈

前言 这部分我们学习的是完全信息静态博弈&#xff0c;主要内容包括博弈论的基本概念、战略式博弈、Nash均衡、Nash均衡解的特性、以及Nash均衡的应用。 零、绪论 1、什么是博弈论 1&#xff09;博弈的定义 博弈论&#xff1a;研究决策主体的行为发生直接相互作用时候的决策…...

【COMP304 LEC4 LEC5】

LEC 4 1. Truth-Functionality Propositional logic 的connectives&#xff08;连接词&#xff09;are truth-functional 但是&#xff0c;有时候的描述不是true-functional的&#xff0c;比如&#xff1a;"Knowing that", "It is necessary that",&quo…...

表白墙(服务器)

目录 0.需求 1.创建Maven项目 2.给pom.xml内引入三个依赖 3.完善目录&#xff0c;并补充web.xml中的内容 4.编写代码 后端代码 ​编辑前端代码 5.引入数据库 创建message表 创建工具类 往MessageServlet类中添加方法 0.需求 前面写好了表白墙页面&#xff0c;但存…...

在 Mac 中卸载 Node.js

在 Mac 中卸载 Node.js&#xff0c;可以选择以下两种方法&#xff1a; 使用命令行卸载 Node.js 第一步&#xff1a;打开终端&#xff0c;输入以下命令显示 Node.js 的安装路径&#xff1a; which node 执行该命令后&#xff0c;会显示安装路径&#xff1a;/usr/local/bin/n…...

Hafnium构建选项及FVP模型调用

安全之安全(security)博客目录导读 目录 一、Hafnium构建选项 二、FVP模型调用 一、Hafnium构建选项 本节解释了在支持基于FF-A的SPM (SPMD位于EL3, SPMC位于S-EL1、S-EL2或EL3)的情况下进行构建时涉及的TF-A构建选项:...

第44天:前端及html、Http协议

前端 前端是所有跟用户直接打交道的都可以称之为是前端&#xff0c;比如&#xff1a;PC页面、手机页面、平板页面、汽车显示屏、大屏幕展示出来的都是前端内容。 前端的用处&#xff1a; 学了前端以后我们就可以做全栈工程师(会后端、会前端、会DB、会运维等),能够写一些简单的…...

shell_63.Linux产生信号

Linux 系统信号 信号 值 描述 1 SIGHUP 挂起&#xff08;hang up&#xff09;进程 2 SIGINT 中断&#xff08;interrupt&#xff09;进程 3 SIGQUIT 停止&#xff08;stop&#xff09;进程 9 …...

互联网摸鱼日报(2023-11-01)

互联网摸鱼日报(2023-11-01) 36氪新闻 毫末智行张凯&#xff1a;2023年高阶智能辅助驾驶市场迎来大爆发 ​撕开三星、金士顿市场&#xff0c;国产老牌存储器企业出海三年&#xff0c;营收翻三倍&#xff5c;insight全球 给医生一双“透视眼”&#xff0c;「锦瑟医疗」专注开…...

AR的光学原理?

AR智能眼镜的光学成像系统 AR眼镜的光学成像系统由微型显示屏和光学镜片组成&#xff0c;可以将其理解为智能手机的屏幕。 增强现实&#xff0c;从本质上说&#xff0c;是将设备生成的影像与现实世界进行叠加融合。这种技术基本就是通过光学镜片组件对微型显示屏幕发出的光线…...

语义分割 实例分割的异同点

语义分割和实例分割是计算机视觉领域中两个相关但不同的任务&#xff0c;它们都涉及对图像像素进行分类和标记&#xff0c;但关注的对象和目标有所不同。 目标对象&#xff1a; 语义分割&#xff1a;语义分割的目标是将图像中的每个像素标记为对应的语义类别&#xff0c;即将…...

C++学习初探---‘C++面向对象‘-继承函数重载与运算符重载

文章目录 前言继承继承是什么&#xff1f;三种访问权限的继承&#xff1a; 函数重载与运算符重载函数重载运算符重载可重载运算符&不可重载运算符 前言 第三次学习记录&#xff0c;依旧是C面向对象的内容。 继承 继承是什么&#xff1f; C中的继承是一种面向对象编程&am…...

Linux下搭建SRS服务器环境

搭建环境 Ubuntu的Linux环境srs 安装源码&#xff1a;源码地址为&#xff1a;GitHub - ossrs/srs at 3.0release 搭建步骤 下载srs源码 git clone GitHub - ossrs/srs: SRS is a simple, high-efficiency, real-time video server supporting RTMP, WebRTC, HLS, HTTP-FLV,…...

pytest 使用(一)

pytest 使用pytest&#xff0c;默认的测试用例的规则以及基础应用pytest测试用例的运行方式pytest执行测试用例的顺序是怎样的呢&#xff1f;如何分组执行&#xff08;冒烟&#xff0c;分模块执行&#xff0c;分接口和web执行&#xff09;pytest跳过测试用例 b站课程链接 使用…...

基于秃鹰算法的无人机航迹规划-附代码

基于秃鹰算法的无人机航迹规划 文章目录 基于秃鹰算法的无人机航迹规划1.秃鹰搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用秃鹰算法来优化无人机航迹规划。 1.秃鹰搜索算法 …...

08. 按键输入

08. 按键输入 按键原理图代码编写GPIO驱动代码按键驱动代码主函数 加上清除BSS段&#xff0c;代码不运行 按键原理图 按键KEY0连接到了UART1_CTS上。默认情况下&#xff0c;KEY0为高&#xff0c;当按下KEY0后&#xff0c;UART1_CTS为低电平 代码编写 在bsp下创建一个key和一个…...

YOLOv8-pose关键点检测:模型轻量化创新 |轻量高性能网络PPLCNet助力backbone

💡💡💡本文解决什么问题:轻量高性能网络PPLCNet替换YOLOv8 backbone PPLCNet | GFLOPs从9.6降低至6.6, mAP50从0.921下降至0.901,mAP50-95从0.697提升至0.752 Yolov8-Pose关键点检测专栏介绍:https://blog.csdn.net/m0_63774211/category_12398833.html ✨✨✨手…...

大数据笔记-关于Cassandra的删除问题

Cassandra是Facebook开源的一个NoSQL数据库&#xff0c;它除了具备一般的NoSQL分布式数据库特点以外&#xff0c;最大的一个特点是去中心化架构设计&#xff0c;这和Hadoop HDFS/HBase等不一样&#xff0c;比如HDFS分为NameNode和DataNode&#xff0c;而Cassandra集群中所有节点…...

Qt自定义文件选择框

文章目录 前言一、头文件二、源文件三、qss文件四、效果 前言 在开发过程中,经常遇到使用文件选择框的情况,qt默认的文件选择框,样式可能与开发的桌面程序差异比较大.此时,我们可以自定义文件选择框,设置其样式,尽量做到样式统一. 一、头文件 #ifndef CUSTOMFILEDIALOG_H #d…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...