Java网络编程之TCP协议核心机制(二)

目录

题外话

正题

滑动窗口机制

如果出现丢包问题怎么办??

滑动窗口触发条件

流量控制

拥塞控制

小结


题外话

宿舍没有空调的感觉谁懂?!!!

人要蒸发了,八点自动热醒,直接强行学习

正题

我们继续讲解TCP协议核心机制

上篇博客讲完了,建立连接机制,确认应答机制,超时重传机制,接着往下书写

滑动窗口机制

由于确认应答机制,每次从客户端向服务器发送数据,服务器都会返回一个ACK(同步确认包)

如下图

我们可以看到,每次客户端发送数据到服务器,都要等待服务器返回ACK数据包才会再发送数据

如果数据包比较多,发送次数就会变得更高,而且会影响效率

当我们触发滑动窗口,就会把一条一条的数据发送转换成批量发送并且批量等待ACK

当客户端收到一个ACK数据包的时候,客户端就会往后继续发送数据包,比如客户端收到了服务器发来的1001序列号的ACK数据包,然后就会发送3001-4000这个数据包

如下图

这样就可以在同一时间发送多个数据包,从而使效率提升

如果出现丢包问题怎么办??

滑动窗口机制是一定要保证可靠性的

下面有两种丢包情况

1.客户端发送数据包抵达,但ACK数据包丢包

如果ACK数据包丢包,不会做任何处理

比如序列号1001和2001的ACK数据包全部丢失,但是3001ACK数据包没有丢失,成功发送到客户端,这就意味着客户端已经知道服务器接收到了0-1000,1001-2000的数据包

如下图

2.客服端发送数据包丢包

如果客户端发送序列号为0-1000数据包时发生丢包,服务器会不断发送序列号为1001的ACK,当客户端收到若干次相同序列号ACK,客户端则会重新发送丢包的数据包,并且之前客户端继续发送过来的数据包服务器也会正常接收

如下图

针对上述出现的丢包问题,整个处理过程是很高效的,这叫快速重传和超时重传不同

1.对于ACK丢失,不做任何处理

2.对于数据包丢失,只需要把缺失部分数据重传即可,不需要重传其它数据

滑动窗口触发条件

如果TCP传输数据比较少,不频繁,就不会触发滑动窗口

如果短时间传输大量的数据,此时才会触发滑动窗口

流量控制

在服务器会有一个接收缓冲区(阻塞队列)

服务器发送的ACK数据包中会在tcp报头中指定一个字段,表示未使用空间大小

客户端会根据接收缓冲区中的未使用空间的大小进行数据传输控制

如下图

客户端发送的数据包会被应用程序消耗

客户端会周期性发送一个"窗口探测报文",主要是为了触发服务器发送ACK

从而知道接收缓冲区空间情况

接收缓冲区大小在TCP中是可以扩容的,接收缓冲区中的未使用空间越多,也就意味着传输的数据可以更多

拥塞控制

拥塞控制和流量控制都是为了搭配滑动窗口机制而产生的

如上图,当我们要将大量数据包从A设备发送到B设备,中间可能会经过好几个节点

如果中间任何一个节点出现丢包都会影响整体数据传输效率

TCP会将它们都看做一个整体

通过"实验"的方式去找到一个合适的窗口大小从而提升数据传输效率

窗口具体变动如下图

由图可见窗口时刻处于一个动态变化

小结

本篇博客讲解了滑动窗口机制,流量控制机制,拥塞控制机制

喜欢的家人们麻烦给个三连(点赞关注收藏!!!)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

视频监控业务平台LntonCVS国标GB28181视频平台智慧城市应用方案

随着科技的不断进步,尤其是人工智能技术的飞速发展,视频应用已经超越了传统的视频监控、视频会议、视频通话和视频指挥调度等基本功能。它们正在向更加多元化、灵活化、融合化和智能化的方向发展。因此,建立一个视频AI中台变得至关重要。 通过…

ch3运输层--计算机网络期末复习(持续更新中)

运输层位于网络层之上 运输层协议提供的某些服务受到网络层协议的限制。比如,时限和带宽保证。 运输层也提供自己的特殊服务。比如,可靠数据传输服务,安全性服务。 网络层:两个主机之间的逻辑通信 运输层:两个进程之间的逻辑通信 网络地址:主机的标识(IP地址) 传输地址: …

RTT UART设备框架学习

UART简介 UART(Universal Asynchronous Receiver/Transmitter)通用异步收发传输器,UART 作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输。是在应用程序开发过程中使用频率最高的数据总线。 UART串…

Vitis HLS 学习笔记--块级控制协议-ap_ctrl_chain/ap_ctrl_hs/ap_ctrl_none

目录 1. 简介 2. 详细分析 2.1 使用场景区别 2.2 ap_continue 行为详解 2.3 ap_ctrl_chain 行为详解 3. 总结 1. 简介 块级控制协议允许硬件模块表明: 何时可以开始处理数据。何时完成了数据处理。以及何时处于空闲状态,准备接受新的数据输入。 …

LLAMA3==shenzhi-wang/Llama3-8B-Chinese-Chat。windows安装不使用ollama

创建环境: conda create -n llama3_env python3.10 conda activate llama3_env conda install pytorch torchvision torchaudio cudatoolkit11.7 -c pytorch 安装Hugging Face的Transformers库: pip install transformers sentencepiece 下载模型 ht…

【渗透测试】|文件上传

1、安装使用蚁剑 https://blog.csdn.net/weixin_42474304/article/details/116376746 1、登陆dvwa,进入初级文件上传&#xff0c;上传一句话木马文件cmd.php&#xff0c; //cmd.php <?php eval($_POST[ccit]); ?> //eval: 执行命令的函数 //ccit:一句话木马文件的参数…

随手记:多行文本域存数据有换行,回显数据换行展示

1.在新增的时候存储数据 <el-input type"textarea"v-model"XXXX"></el-input> 2.详情页返回的数据&#xff1a; replace一顿操作确实复杂 最快的方法直接写个样式:style"white-space: pre-line" 即可行内或者class样式都可以 …

【NumPy】深入理解NumPy的cov函数:计算协方差矩阵的完整指南

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

了解可燃气体报警器的检测原理与注意事项

在工业、商业以及家庭生活中&#xff0c;可燃气体报警器作为安全监测的重要设备&#xff0c;发挥着不可忽视的作用。 那么&#xff0c;可燃气体报警器主要检测哪些气体呢&#xff1f; 接下来&#xff0c;佰德将从可燃气体种类、报警器工作原理、检测范围与精度、应用场景与重…

JavaWeb基础(一)-IO操作

Java I/O工作机制&#xff1a; 注&#xff1a;简要笔记&#xff0c;示例代码可能较少&#xff0c;甚至没有。 1、Java 的 I/O 类库的基本架构。 ​ Java 的 I/O 操作类在包 java.io 下&#xff0c;大概有将近80个类&#xff0c;这些类大概可以分为如下四组。 基于字节操作的…

前端基础入门:静态页面与动态页面的区别

什么是静态页面和动态页面&#xff1f; 通俗的来讲&#xff0c;静态页面是随着HTML代码的生成&#xff0c;页面的内容和显示效果就基本不会发生变化&#xff08;除非修改页面代码&#xff09;&#xff0c;而动态页面&#xff0c;虽然同样页面代码不发生变化&#xff0c;但是其…

【错题集-编程题】小红取数(动态规划 - 01 背包 + 同余)

牛客对应题目链接&#xff1a;小红取数_牛客题霸_牛客网 (nowcoder.com) 一、分析题目 这道题是不能用空间优化的。 同余原理 a % k x 和 b % k y <> (ab) % k 0 <> (xy) % k 0 状态表示 dp[i][j]&#xff1a;表示从前 i 个数中挑选&#xff0c;总和 %k 等于 j…

【class19】人工智能初步---语音识别(5)

【class19】 上节课&#xff0c;我们学习了&#xff1a;语音识别模型的结构和原理&#xff0c;同时调用创建好的AipSpeech客户端实现了语音转文字功能。 本节课&#xff0c;我们将初识字幕&#xff0c;学习这些知识点&#xff1a;1. srt字幕 2. 获取时间数据 …

OpenWrt 安装Quagga 支持ospf Bgp等动态路由协议 软路由实测 系列四

1 Quagga 是一个路由软件套件, 提供 OSPFv2,OSPFv3,RIP v1 和 v2,RIPng 和 BGP-4 的实现. 2 web 登录安装 #或者ssh登录安装 opkg install quagga quagga-zebra quagga-bgpd quagga-watchquagga quagga-vtysh # reboot 3 ssh 登录 #重启服务 /etc/init.d/quagga restart #…

揭秘IDM:数字资产管理的未来之星

在当今数字化时代&#xff0c;数字资产管理的重要性日益凸显。随着科技的飞速发展&#xff0c;越来越多的企业和个人开始关注如何有效管理和保护他们的数字资产。在这个过程中&#xff0c;IDM&#xff08;身份管理系统&#xff09;逐渐成为了热门话题。IDM作为一种新兴的技术手…

一个生动的例子——通过ERC20接口访问Tether合约

生动的例子 USDT&#xff1a;符合ERC20标准的美元稳定币&#xff0c;Tether合约获得测试网上Tether合约地址通过自己写的ERC20接口访问这个合约 Tether合约地址&#xff1a;0xdAC17F958D2ee523a2206206994597C13D831ec7 IERC20.sol // SPDX-License-Identifier: GPL-3.0pra…

ARM-V9 RME(Realm Management Extension)系统架构之系统能力的内存隔离和保护

安全之安全(security)博客目录导读 目录 一、内存隔离和保护 1、颗粒PAS过滤Granular PAS filtering 2、Cache的一致性维护 2.1 物理别名点 Point of Physical Aliasing (PoPA) 2.2 加密点 3、内存(DRAM)保护 3.1 内存加密和完整性 3.2 DRAM scrubbing 本博客探讨 RME…

Django之rest_framework(九)

一、分页-PageNumberPagination类 REST framework提供了分页的支持 官网:Pagination - Django REST framework 1.1、全局设置 # settings.py REST_FRAMEWORK = {DEFAULT_PAGINATION_CLASS: rest_framework.pagination.PageNumberPagination,PAGE_SIZE: 100 # 每页数目 }提示…

【YashanDB知识库】自动选举配置错误引发的一系列问题

问题现象 问题出现的步骤/操作&#xff1a; ● 配置自动选举&#xff0c;数据库备库手动发起switch over&#xff0c;命令会报错 ● 主、备库变为只读状态&#xff0c;数据库无法进行读写操作 ● shutdown immediate 停止数据库&#xff0c;此时发现数据库一直没有退出&…

leetCode-hot100-数组专题之子数组+二维数组

数组专题之子数组二维数组 子数组238.除自身以外数组的乘积560.和为K的子数组 二维数组48.旋转图像 子数组 数组的子数组问题是算法中常见的一类问题&#xff0c;通常涉及到数组的连续元素。在解决这类问题时&#xff0c;常用的方法有前缀和、滑动窗口、双指针&#xff0c;分治…