JavaEE初阶---网络原理之TCP篇(二)

文章目录

  • 1.断开连接--四次挥手
    • 1.1 TCP状态
    • 1.2四次挥手的过程
    • 1.3time_wait等待
    • 1.4三次四次的总结
  • 2.前段时间总结
  • 3.滑动窗口---传输效率机制
    • 3.1原理分析
    • 3.2丢包的处理
    • 3.3快速重传
  • 4.流量控制---接收方安全机制
    • 4.1流量控制思路
    • 4.2剩余空间大小
    • 4.3探测包的机制
  • 5.拥塞控制---考虑中间节点
    • 5.1机制的考量
    • 5.2阻塞情况图像分析

1.断开连接–四次挥手

建立连接:一般是我们的客户端发起的;

断开连接:我们的客户端和服务器都可以断开链接;

1.1 TCP状态

listen:表示的就是我们的这个服务器已经建立这个socket对象,端口号什么的已经全部处理好了,这个时候就可以允许我们的客户端进行连接了;

establist状态:表示我们的服务器和客户端之间的这个链接已经建立完成,这个时候可以开始进行通信了;

image-20241030191518907

1.2四次挥手的过程

下面的这个就是我们的四次握手的过程,我们的这个fin就是结束报文段:表示我要和你断开连接了,这个中间的B向A发送的这个ack和fin是不可以进行合并的;

A:我要把你删除了啊~~

B:我要把你删除了啊~~

这个其实可以理解为这个两个人互相拉黑的过程~~

四次挥手两步不可以合并:这个过程的B向A发送的ack和这个fin不可以合并,因为两个触发的时间不是一样的,我们的这个ack是有这个内核发送的,这个速度是很快的,但是我们的这个fin是当我们的传输对象socket执行这个close方法的时候,这个中间还会经历一段时间,因此这两步不可以进行合并的操作;

三次握手里面可以合并:三次握手的时候这个ack,syn是同时触发的,因此这个三次握手的时候两个消息是可以进行合并的,这个也是一个区别;

image-20241030192427663

image-20241030124427066

延时应答:当这个ack的回应时间滞后,这个时候我们的两个ack,fin就可能会一起执行,转换为这个三次挥手;

1.3time_wait等待

这个等待主要是为了防止我们的这个ack(最后一次发送的这个ack)丢失,如果丢失了,我们需要进行重传,但是我们的这个左边的已经释放连接,重传也是无人可以处理的;

我们引入这个time_waited就是为了等待一段时间,保证我们的这个右边的没有信息发送过来,保证右边没有重传;

这个其实也是出于我们的这个两者通信的可靠性进行考虑,但是我们的这个time_wait不会无限的等待,最多是2MSL(这个是我们的网络上面的两个节点之间的这个通信消耗的最大时间),但是这个一般不会达到2MSL的时间;

image-20241030193046541

1.4三次四次的总结

如何正确的理解这个握手和挥手的过程,我认为下面的这个图片足够了,加上自己的理解,应该不会有太大的问题;

image-20241030131701822

2.前段时间总结

确认应答机制:ack数据包;

超时重传机制:就是出现丢包的情况,我们会进行二次发送设置是多次发送;

连接管理机制:就是我们的三次握手,四次挥手的过程;

上面的这三个机制就是为了解决我们的这个可靠性问题,下面的这个是为了提高效率,和这三个机制是有本质的区别的,这个是可靠性,下面的这个是安全性;

3.滑动窗口—传输效率机制

3.1原理分析

TCP引入可靠性,因此这个效率就会降低,我们通过这个滑动窗口,就是为了缩短和UDP的传输的效率的差距,这个相当于就是一个亡羊补牢的操作;

下面的这个就是我们的滑动窗口和普通传输方式的一个对比:滑动窗口是为了进行数据的批量传输,因为左边的这个情况下,我们的进行等待的时候是两段时间:一个是我们的这个发过去的时间,一个是我们的这个ack返回的时间,我们的滑动窗口是为了减少这个等待时间的消耗;

image-20241030194019439

我们的这个滑动窗口是批量处理数据,这个批量也会有限制的,当我们的发送数据量达到最大的时候,我们需要等待,等待一个ack返回之后,我们开始发下一个,而不是等待所有的全部回来再发送,而是回来一个发一个,这个就是滑动窗口的精髓

在这个视觉效果上面,好像就是这个窗口不断的移动,这个就给人一个滑动的感觉,这个就是滑动窗口的名字由来;

image-20241030194308870

3.2丢包的处理

下面的这个就是两个丢包的情况:一个是我们的这个ack丢了,或者这个响应数据包丢了;

第一个情况,我们是不用处理的,例如我们的第一次应答ack是1001,就是想要索取这个1001开始的数据,但是后来我们的第二次和第三次的数据ack丢失了,这个时候直接返回这个4001,这个时候我们的主机A就明白之前的这个100-3000的数据,我们的这个主机B是收到的,因为不然的话这个序号不会是这个4001,只不过这个ack中间丢了,这个时候我们不用进行处理的;

但是这个数据包丢了:我们需要进行处理,1001-2000丢了,这时候主机A不知道,接下来只要这个主机A发数据,我们就返回这个1001,就一直问这个主机A索要这个1001,直到这个主机A给了我们(这个过程我们的主机A就会知道,这个B一直问我要1001,肯定是我的这个数据没有发送成功)这个时候他就会重传数据;

image-20241030194617840

3.3快速重传

我们的这个哪个数据包丢失了,我们就重新传输那一个数据包,这个是快速重传,使我们之前的超时重传的变种;

当这个数据量很大的时候,我们可以使用,可以使用滑动窗口里面的这个快速重传;

如果是这个数据量不是很大,这个时候我们就可以使用之前介绍这个超时重传进行处理;

上面的两个重传的机制有各自的这个应用的场景,这个并不冲突;

4.流量控制—接收方安全机制

4.1流量控制思路

这个还是书接上回:我们的窗口不断的发送数据,但是我们的这个B根本来不及接受,接受的能力超出了B上限,即使我们窗口传输的效率很高,这个也是没用的;

我们的流量控制,就是对于这个发送方的发送速率进行控制,让他刹刹车,不要发的很快,要适应我们的这个接受的能力;

这个其实也是我们的生产者消费者模型的一个使用,就是我们的这个B从这个自己的这个接受缓冲区取出来数据,这样即使我们的这个发送速率很快,也不会影响我们的这个B接受数据,处理数据的效率;

4.2剩余空间大小

就是衡量我们的接收方的处理的能力:我们的这个B进行应答的时候,会把这个剩余缓冲空间的大小包含在这个ack里面去,当我们的这个ack里面写的这个缓冲区见很小的时候,

下面的这个16位窗口大小:就是我们的这个ack返回里面指明的这个剩余空间大小;

但是这个不意味着我们的这个剩余空间最大就是16位,我们的这个选项里面可以对于这个剩余空间大小进行动态的调整,我们的这个A根据我们的这个剩余空间大小对于A发送的数据进行调整,

image-20241030195937245

4.3探测包的机制

就是我们的这个探测包是探测一下我们的这个剩余空间是不是大于0,原本我们的这个剩余空间已经是0了,这个时候A就会使用探测包,实时对于这个剩余空间大小进行查看;

这个探测包就是为了看看我们的这个B里面是不是有空间了,如果有了我们就会开始发送数据包,没有的话我们就会接着等待,再使用探测包不断的探测这个剩余空间大小,以此类推;

image-20241030200311837

5.拥塞控制—考虑中间节点

5.1机制的考量

上面的是考虑的我们的接收方的接受处理能力,但是我们的这个考虑的就是我们的传输过程路径中的经过的节点的处理能力,中间经过的这个节点的处理能力达到上限,这个也是不行的;

image-20241030201008517

中间节点的结构复杂,不好进行控制,我们可以先让这个A以一个小的窗口发送数据,看看是不是丢包,在这个基础上面 不断的扩大这个滑动窗口,如果出现丢包,我们在缩减这个滑动窗口的大小;

如果不丢包了,我们就变大窗口,丢包就减小这个窗口大小,不断的进行调整这个滑动窗口的大小,这个做法就是通过实验的方式找到我们的这个中间节点的传输瓶颈参数—进而确定窗口大小;

5.2阻塞情况图像分析

下面的这个就是我们的窗口大小随着我们的传输过程的调整过程:刚开始是指数增长,然后就是线性增长,出现丢包(图上面的网络拥堵),我们就减小窗口的大小,再重新进行这个指数增大,线性增加,重复进行下去;

image-20241030201513243

们的窗口大小随着我们的传输过程的调整过程:刚开始是指数增长,然后就是线性增长,出现丢包(图上面的网络拥堵),我们就减小窗口的大小,再重新进行这个指数增大,线性增加,重复进行下去;

[外链图片转存中…(img-iOLNIv6E-1730292373618)]

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

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

相关文章

【C语言刷力扣】3216.交换后字典序最小的字符串

题目: 解题思路: 字典序最小的字符串:是指按照字母表顺序排列最前的字符串。即字符串在更靠前的位置出现比原字符串对应字符在字母表更早出现的字符。 枚举数组元素,尽早将较小的同奇偶的相邻字符交换。 char* getSmallestString…

定时器(多线程)

标准库中的定时器 • 标准库中提供了⼀个 Timer 类. Timer 类的 核⼼⽅法为 schedule . • schedule 包含两个参数. 第⼀个参数指定即将要执⾏的任务代码, 第⼆个参数指定多⻓时间之后 执⾏ (单位为毫秒). Timer timer new Timer (); timer.schedule( new TimerTas…

Linux(centOS)的安全命令

先全部列出来: 命令及其作用: - setenforce 0:将 SELinux 临时切换为宽松模式(permissive) - setenforce 1:将 SELinux 临时切换为强制模式(enforcing) - selinux的配置文件在/e…

Java:Map和Set练习

目录 查找字母出现的次数 只出现一次的数字 坏键盘打字 查找字母出现的次数 这道题的思路在后面的题目过程中能用到,所以先把这题给写出来 题目要求:给出一个字符串数组,要求输出结果为其中每个字符串及其出现次数。 思路:我…

【宠粉赠书】大模型项目实战:多领域智能应用开发

在当今的人工智能与自然语言处理领域,大型语言模型(LLM)凭借其强大的生成与理解能力,正在广泛应用于多个实际场景中。《大模型项目实战:多领域智能应用开发》为大家提供了全面的应用技巧和案例,帮助开发者深…

【商汤科技-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

Chromium HTML5 新的 Input 类型week对应c++

一、Input 类型: week week 类型允许你选择周和年。 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>test</title> </head><body><form action"demo-form.php">选择周: <inp…

Nginx防盗链配置

1. 什么是盗链? 盗链是指服务提供商自己不提供服务的内容&#xff0c;通过技术手段绕过其它有利益的最终用户界面&#xff08;如广告&#xff09;&#xff0c;直接在自己的网站上向最终用户提供其它服务提供商的服务内容&#xff0c;骗取最终用户的浏览和点击率。受益者不提供…

Oracle+11g+笔记(8)-备份与恢复机制

Oracle11g笔记(8)-备份与恢复机制 8、备份与恢复机制 8.1 备份与恢复的方法 数据库的备份是对数据库信息的一种操作系统备份。这些信息可能是数据库的物理结构文件&#xff0c;也可能是某一部分数 据。在数据库正常运行时&#xff0c;就应该考虑到数据库可能出现故障&#…

基于Multisim的篮球比赛电子记分牌设计与仿真

一、设计任务与要求 设计一个符合篮球比赛规则的记分系统。 &#xff08;1&#xff09;有得1分、2分和3分的情况&#xff0c;电路要具有加、减分及显示的功能。 &#xff08;2&#xff09;有倒计时时钟显示&#xff0c;在“暂停时间到”和“比赛时间到”时&#xff0c;发出声光…

CTF-PWN: 什么是_IO_FILE?

重要概念:fopen()返回的是一个结构体的指针 _IO_FILE 结构体在什么时候被创建&#xff1f; _IO_FILE 结构体的实例是在程序使用标准 I/O 函数&#xff08;如 fopen、fclose、fread、fwrite 等&#xff09;时创建和管理的。这个结构体实际上是 GNU C Library (glibc) 用于处理…

Apache paimon-CDC

CDC集成 paimon支持五种方式通过模式转化数据提取到paimon表中。添加的列会实时同步到Paimon表中 MySQL同步表:将MySQL中的一张或多张表同步到一张Paimon表中。MySQL同步数据库:将MySQL的整个数据库同步到一个Paimon数据库中。API同步表:将您的自定义DataStream输入同步到一…

电子信息-毕业设计选题推荐

人工智能与电子信息工程的融合 基于深度学习的电子信息系统故障诊断 人工智能算法在电子信息工程中的优化应用 电子信息工程中的智能图像识别技术 无线传感器网络 无线传感器网络在环境监测中的电子信息采集 多传感器融合的无线传感器网络应用 无线传感器网络中的数据压缩算法与…

linux 删除当前目录下修改时间超过1天的文件

在Linux中&#xff0c;你可以使用find命令结合-mtime选项来删除当前目录下修改时间超过1天的文件。以下是具体的命令示例&#xff1a; find . -type f -mtime 1 -delete解释一下上述命令&#xff1a; find&#xff1a;这是用于在文件系统中查找文件和目录的命令。.&#xff1…

【面试全纪实 | Linux 01】请回答,你真的了解Linux吗?

1. 什么是Linux Linux是一套免费使用和自由传播的类Unix操作系统&#xff0c;是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位 硬件。Linux继承了Unix以网络为核心的设计思想&#…

代码随想录训练营Day11 | 226.翻转二叉树 - 101. 对称二叉树 - 104.二叉树的最大深度 - 111.二叉树的最小深度

226.翻转二叉树 题目链接&#xff1a;226.翻转二叉树思路&#xff1a;遍历二叉树&#xff0c;遍历的时候交换左右节点即可代码&#xff1a; TreeNode* invertTree(TreeNode* root) {reverse(root);return root;}// 迭代法&#xff0c;层序遍历void f2(TreeNode* root) {queue…

易友BOM管理软件

易友BOM管理软件介绍 易友BOM管理软件是一款功能齐全、操作简便、安全可靠的BOM管理系统。它为企业提供了多方面的BOM管理解决方案&#xff0c;帮助企业提高生产效率、降低成本、增强灵活性并提升竞争力。制造企业&#xff0c;都可以通过易友BOM管理软件来实现BOM管理的优化和…

安全见闻-二进制与网络安全的关系

一、二进制的基本概念 二、二进制在网络安全中的重要性 三、二进制安全的概念与范畴 1. 二进制安全的定义 2. 范畴 四、二进制安全的渗透测试方法 1. 静态分析 2. 动态分析 3. 模糊测试 4. 漏洞利用 5. 代码审计 五、结论 学习视频泷羽sec&#xff1a;安全见闻&…

git 怎么保留某个文件夹忽略其下面的所有文件?

在 Git 中&#xff0c;如果你想要保留某个文件夹&#xff08;比如 folder/&#xff09;但忽略其下面的所有文件&#xff0c;可以使用 .gitignore 文件来实现。需要注意的是&#xff0c;Git 不会自动创建空目录。因此&#xff0c;为了让 Git 记录这个空目录&#xff0c;你需要在…

【模型学习之路】手写+分析bert

手写分析bert 目录 前言 架构 embeddings Bertmodel 预训练任务 MLM NSP Bert 后话 netron可视化 code2flow可视化 fine tuning 前言 Attention is all you need! 读本文前&#xff0c;建议至少看懂【模型学习之路】手写分析Transformer-CSDN博客。 毕竟Bert是tr…