【JavaEE】网络原理---TCP协议的易懂图文详解(确认应答、超时重传、连接管理、滑动窗口、流量控制)

一、TCP协议

TCP,即Transmission Control Protocol,传输控制协议。人如其名,要对数据的传输进行一个详细的控制。

1.1 TCP协议格式

在这里插入图片描述
(为了方便排版这样化的,我们从上到下依次理解)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、TCP原理

2.1 确认应答机制

确认应答是实现可靠性的最核心机制!!

引例:
在这里插入图片描述

为了解决上述问题,我们给信息标号:
在这里插入图片描述
这样就能清楚的分出各自的应答

而我们真实的TCP传输数据时也是这样的,引入了“序号”和“确认序号”

在这里插入图片描述
这就是确认应答机制

比如下面两台主机的传输:
在这里插入图片描述

2.2 超时重传机制

如果一切都顺利的话,就可以直接确认应答了,确认应答机制保证了可靠性

可是我们网络传输需要经过很多节点,其中任何一个节点出现问题,都会导致丢包

作为发送方会判定,如果出现丢包,就会重新再发一遍,即超时重传机制

在这里插入图片描述
这时候你可能有一个疑问:
上面的(2)情况下,数据重复传了两次,接收方得到重复的数据!!这种情况不会有什么问题吗?

不会!!!!

TCP协议会在接收缓冲区中根据我们数据的序号来进行自动去重,保证应用读到的数据只有一份!

假如同时有多个包丢失,TCP怎么确定超时时间?

在这里插入图片描述
上面介绍的这两种机制就是TCP可靠性的基石!!!

在这里插入图片描述

2.3 连接管理机制

在这里插入图片描述
下面详细说具体执行过程:

三次握手:

在这里插入图片描述
在这里插入图片描述

四次挥手:
在这里插入图片描述
可能这里大家会有疑问:为什么三次握手和四次挥手都是四次交互,而握手可以合并为一次,挥手却不行呢?

在这里插入图片描述

2.4 滑动窗口机制

刚才我们讨论了确认应答策略,对每一个发送的数据段,都要给一个ACK确认应答。收到ACK后再发送下一个数据段。
这样做有一个比较大的缺点,就是性能较差。尤其是数据往返的时间较长的时候。
在这里插入图片描述

想要提高效率,就需要缩短等待时间,批量发送数据!

一次发多条数据,一次等待多个ACK,提高效率

在这里插入图片描述
上述批量传输数据的过程就称为“滑动窗口”

注意:
在这里插入图片描述
在这里插入图片描述

上述的滑动窗口都是基于无丢包的情况下工作的,如果批量发送的过程中出现丢包怎么办?

在这里插入图片描述
在这里插入图片描述

2.5 流量控制机制

接收端处理数据的速度是有限的。如果发送端发的太快,导致接收端的缓冲区被打满,这个时候如果发送端继续发送,就会造成丢包,继而引起丢包重传等等一系列连锁反应。
因此TCP支持根据接收端的处理能力,来决定发送端的发送速度。这个机制就叫做流量控制

具体如何控制?

在这里插入图片描述
过程演示:
在这里插入图片描述
上述过程就达成了类似阻塞的效果

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

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

相关文章

【linux系列】创建软连接

文章目录 作用命令创建软连接删除软链接修改软链接 参数 作用 现在服务器使用的时候,可视化界面仅显示固定目录下的内容,无法访问前序目录,导致查看内容非常麻烦,这时候软连接的作用就显现出来了,在当前目录下连接上&…

【Spring】使用aop切面编程时要给那些类加注解

🎄欢迎来到边境矢梦的csdn博文🎄 🎄本文主要梳理 Spring 中使用aop切面编程时要给那些类加注解 🎄 🌈我是边境矢梦,一个正在为秋招和算法竞赛做准备的学生🌈 🎆喜欢的朋友可以关注一…

C++入门(4):auto、范围for、nullptr

一、关键词 auto 1.1 概念 auto 作为一个新的类型指示符来指示编译器&#xff0c;auto 声明的变量必须由编译器在编译时期推导而得。 #include <iostream> using namespace std;int main() {int a 0;auto b a;auto c &a;auto* d &a;auto& e a;cout &…

使用达梦数据库的总结

–修改当前会话所在模式&#xff1a; set schema 模式名;–创建表空间、用户名并为用户指定表空间&#xff0c;并为用户授权 create tablespace "RSGL_BZK" datafile REGL_BZK.DBF size 7488 autoextend on next 128 maxsize 33554431 CACHE NORMAL; create user …

【工具】Java请求带http重定向的地址 自动进行重定向

【工具】Java请求带http重定向的地址 自动进行重定向 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL;public class HTTPGETWithMultipleHeaders {public static voi…

嵌入式实时操作系统的设计与开发(信号量学习)

信号量 除了临界点机制、互斥量机制可实现临界资源的互斥访问外&#xff0c;信号量&#xff08;Semaphore&#xff09;是另一选择。 信号量与互斥量的区别 对于互斥量来说&#xff0c;主要应用于临界资源的互斥访问&#xff0c;并且能够有效地避免优先级反转问题。对于信号量…

Linux下导出dump文件(Oracle和PG数据)

dump文件可以快速的导入导出&#xff0c;所以在数据量较大的情况下用其他方法导出数据都不如dump。 不管是什么数据库&#xff0c;第一步都需要登录Oracle用户 su - oracle登录之后可以选择导出文件到当前目录 Oracle数据库导出&#xff1a; exp 数据库用户名/密码localhos…

UE4 中可全局获取的变量(例如游戏实例、玩家控制器等) 详解

目录 0 引言1 全局对象&#xff08;全局变量&#xff09;1.1 游戏实例 GameInstance1.1.1 介绍1.1.2 使用 GameInstance 1.2 玩家控制器 PlayerController1.3 游戏世界类 UWorld &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;UE虚幻引擎专栏&…

优雅的使用String字符串处理各种类型转换

文章目录 &#x1f31f; 优雅的使用String字符串处理各种类型转换&#x1f34a; 基本类型转字符串&#x1f34a; 字符串转基本类型&#x1f34a; 字符串与字符数组的转换&#x1f34a; 字符串与字节数组的转换&#x1f34a; 其他类型转字符串&#x1f34a; 总结 &#x1f4d5;我…

Flask后端开发(一)-基础知识和前期准备

目录 1.背景介绍1.1. 项目背景1.2. 项目难点1.3. 项目环境 2. flask后端开发实现的功能3. flask部署和前后端对接3.1. flask运行配置和服务器部署3.2. flask前后端传参 4. 后端测试工具4.1. 工具介绍4.2. 工具使用 后记 1.背景介绍 1.1. 项目背景 就是前几个月临时接手了一个…

CPU眼里的C/C++: 1.3 汇编级单步调试函数执行过程

1. 目的 2. 基于 GDB 的汇编级单步调试 原始代码 #include <stdio.h>long test() {long a 1;a 2;return a; }int main() {int ret test();printf("test return %d\n", ret);return 0; }关键 gdb 命令 si 指令执行汇编级的单步调试info registers 读取寄…

【RocketMQ系列十四】RocketMQ中消息堆积如何处理

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精…

RabbitMQ原理(五):消费者的可靠性

文章目录 3.消费者的可靠性3.1.消费者确认机制3.2.失败重试机制3.3.失败处理策略3.4.业务幂等性3.4.1.唯一消息ID3.4.2.业务判断 3.5.兜底方案 3.消费者的可靠性 当RabbitMQ向消费者投递消息以后&#xff0c;需要知道消费者的处理状态如何。因为消息投递给消费者并不代表就一定…

Unsupervised Medical Image Translation with Adversarial Diffusion Models

基于对抗扩散模型的无监督医学图像翻译 论文链接&#xff1a;https://arxiv.org/abs/2207.08208 项目链接&#xff1a;https://github.com/icon-lab/SynDiff Abstract 通过源-目标模态转换对缺失图像进行补全可以提高医学成像方案的多样性。利用生成对抗网络(GAN)进行一次映…

Leetcode—104.二叉树的最大深度【简单】

2023每日刷题&#xff08;六&#xff09; Leetcode—104.二叉树的最大深度 递归实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/int maxDepth(struct TreeNode* root){…

分类预测 | MATLAB实现SSA-CNN-GRU-Attention数据分类预测(SE注意力机制)

分类预测 | MATLAB实现SSA-CNN-GRU-Attention数据分类预测&#xff08;SE注意力机制&#xff09; 目录 分类预测 | MATLAB实现SSA-CNN-GRU-Attention数据分类预测&#xff08;SE注意力机制&#xff09;分类效果基本描述模型描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现…

python 正则表达式

re.match 在起始位置开始匹配 # 正则表达式是一个特殊的字符序列&#xff0c;它能帮助你方便的检查一个字符串是否与某种模式匹配# re.match() 尝试从字符串的起始位置匹配一个模式&#xff0c;如果不是起始位置匹配成功的话import rehhre.match(我爱你,我爱你-我爱你) # 在起…

C#,数值计算——分类与推理Phylo_upgma的计算方法与源程序

1 文本格式 using System; using System.Collections.Generic; namespace Legalsoft.Truffer { public class Phylo_upgma : Phylagglom { public override void premin(double[,] d, int[] nextp) { } public override double dminfn(doubl…

structs2 重构成SpringBoot架构

# 目录 structs2 重构成SpringBoot架构 1.1 structs2架构&#xff1a; 1.2 springboot 架构 1.3 演化要点&#xff1a; 1.基于前端的展示层不需要修改 2.HttpServlet 将会有SpringBoot annotation 来处理 3.构建前置的Structs url 转发器&#xff0c;适配 4.ActionSupport将由…

第五节——Vue 中如何编写样式

一、内联样式 <template><div style"color:red">红色</div> </template>二、在style标签中编写 1、创建learn-style.css文件 .red { color: red; } 3、在文件中引入 <template><div class"red">红色</div>…