Java TCP可靠传输(1)
TCP 可靠传输
一. 确认应答
由发送方填充,再由接收方在序号的基础上+1,填充到确认序号中,来表示已经接收到前面发送的,表明下一个从哪个位置发送。

二. 超时重传
数据在网络上传输时会经过很多网络设备,如果其中一个设备出现问题,这个请求会发生超时。
1. 发送超时
主机B未接收到数据,主机A在达到一定时间间隔后,重新发送一次数据。

2. 接收方收到了数据,返回应答的时候超时
主机B接收到了数据,但ACK应答时丢包。
所以主机A不知道是发送丢包还是应答丢包。于是等待一段时间间隔后,重新发送一次数据。
主机B会根据序号来判断出再次接收到了相同的数据,直接舍弃新发来的数据,重新进行ACK应答。

三. 连接管理
在发送方和接收方建立连接时,确认双方的收发能力
1. 初次建立时,三次握手

当ACK和SYN统一的返回主机A时,就形成了三次握手。

1.主机A发送SYN请求,生成一个随机数据填充在序号区域
2.主机B接收到主机A发来的SYN请求后,在序号的基本上+1,把结果填充成确认序号中,并把ACK标志位置为1,表示要进行应答 同时也生成一个随机数据填充在序号区域,并把SYN标志位置为1,表示自己发送一个SYN同步请求
3.主机接收到主机B发来的ACK+SYN请求时,首先判断ACK,表示主机B有应答能力,再去判断SYN,在序号的基础上+1,把结果填充在确认序号中,把ACK标志位置为1
4.主机B接收到主机A发来的ACK,表示主机A有应答能力,网络验证完成,建立连接成功
2. 断开连接时,四次挥手
保证发送与接收方有效(安全)地断开连接

四次挥手能不能变成三次挥手?(第二次的ACK能不能与第三步的FIN合并在一起?)
大概率不能合并因为:
- 发起的角色不同,(ACK)一个是操作系统,(FIN)一个是应用程序;
- 发起的时机不同,ACK是应答比较及时,FIN要回收一些资源之后才触发。
四. 滑动窗口
对每一个发送的数据段,都要给一个ACK确认应答,收到ACK之后再发送下一个数据段。
这样做的缺点就是性能较差,尤其是数据往返的时间较长的时候。
为了提升效率,改为批量发送。

接收到应答之后把缓冲区中管理的已发送的数据移出,并把后续要发送的数据加入缓冲区

1.发送方批量发送,把正在发送的数据加入到缓冲区,同时记录最大字节数
2.根据当前窗口的大小发送报文
3.接收方收到报文之后,返回一个ACK(确认序号)
4.发送方接收到一个ACK之后,把缓冲区的数据删除一组,然后再加入一组新的数据到缓冲区,继续发送
窗口越大,数据吞吐量越高
1. 情况一 数据包已经抵达,ACK丢失

TCP传输数据的过程中,如果收到了6001的确认序号,那么就可以证明前面的全部传输成功。
2. 情况二 数据包直接丢失

丢失了一个数据包,中间少了一个序号,导致字节流的连续编号,后续只要接收到数据包,都会在确认序号区域填充缺失部分的序号。
当有数据缺失的时候,对于后续正常接收的数据被缓存起来。当缺失数据重新发来时,接收方会按数据顺序把数据包组织好,再ACK最新的确认信号。
相关文章:
Java TCP可靠传输(1)
TCP 可靠传输 一. 确认应答 由发送方填充,再由接收方在序号的基础上1,填充到确认序号中,来表示已经接收到前面发送的,表明下一个从哪个位置发送。 二. 超时重传 数据在网络上传输时会经过很多网络设备,如果其中一个…...
ipad和macbook同步zotero文献附件失败的解决办法
背景:我所有的文献及其附件pdf都是在台式机(windows系统),想要把这些文献同步到云上,然后再从云上同步到平板和其他笔记本电脑比如macbook。文献同步虽已成功,但文献附件都无法打开。 平板报错如下…...
linux-ubuntu学习笔记碎记
~指/home/user_name这个目录 查看软件安装目录:whereis vim 查看当前路径:pwd 终端中键入ctrls会挂起终端,即终端不响应键鼠;ctrlq可以恢复。 和虚拟机开启共享文件夹互传文件 点击桌面,按ctrlaltt,开…...
RV1126+FFMPEG推流项目(11)编码音视频数据 + FFMPEG时间戳处理
本节介绍本章节主要讲解的是push_server_thread线程的具体处理流程, push_server_thread这个线程的主要功能是通过时间戳比较,来处理音频、视频的数据并最终推流到SRT、RTMP、UDP、RTSP服务器 push_server_thread:流程如下 上图,…...
人工智能的出现,给生命科学领域的研究带来全新的视角|行业前沿·25-01-22
小罗碎碎念 今天和大家分享一份白皮书,系统总结并陈述人工智能在生命科学领域的应用。 人工智能在生命科学领域的应用,具体包括——单细胞转录组、疾病诊疗、医疗文本处理、RNA结构预测等多个方面,通过这份报告,我们可以详细了解相…...
python注释格式总结
三个双引号的用于文件,类,函数注释。 没有统一的规定,以下是比较清晰的写法。 文件注释(文件顶部):文件用途空行作者信息(每行一个键:值) 类注释(类名下行)…...
Django实现数据库的表间三种关系
Django实现数据库的表间三种关系 1. 一对多(One-to-Many)关系示例:关系说明:查询示例: 2. 一对一(One-to-One)关系示例:关系说明:查询示例: 3. 多对多&#x…...
C++蓝桥真题讲解
本篇文章和大家一起来试试一些简单的蓝桥真题 注意:本篇文章将全程使用devc和蓝桥官网,如果有小伙伴找不到devc安装包的可以本篇文章中下载。 赛前必知点 1.正式比赛时,先从蓝桥官网下载题目文档,然后用devc进行编译,…...
【21】Word:德国旅游业务❗
目录 题目 NO1.2.3 NO4 NO5.6 NO7 NO8.9.10.11 题目 NO1.2.3 F12:另存为布局→页面设置→页边距:上下左右选中“德国主要城市”→开始→字体对话框→字体/字号→文本效果:段落对话框→对齐方式/字符间距/段落间距 NO4 布局→表对话框…...
如何分辨ddos攻击和cc攻击?
DDoS(分布式拒绝服务)攻击和 CC(Challenge Collapsar)攻击都属于网络攻击手段,主要通过消耗目标服务器资源使其无法正常提供服务,但它们在攻击原理、攻击特征等方面存在区别: 攻击原理 DDoS 攻…...
enum EPOLL_EVENTS详解
enum EPOLL_EVENTS 是 Linux 中 epoll 机制的核心定义之一,它定义了 epoll 支持的所有事件类型。每个事件类型对应一个唯一的位掩码(bitmask),通过按位或(|)可以组合多个事件类型,通过按位与&am…...
阿里前端开发规范
文章目录 1. 为什么前端写代码要规范?一、代码规范的必要性二、 规范带来的好处 2. 资源一、推荐 1. 为什么前端写代码要规范? 一、代码规范的必要性 可维护性 统一的代码风格便于理解和修改减少代码维护成本降低项目交接难度 团队协作 提高团队开发效…...
从函数式编程到响应式编程:现代开发中的范式转变
引言 随着软件开发领域的不断进化,编程范式也在经历着一场又一场的变革。从面向过程到面向对象,再到近年来流行的函数式编程和响应式编程,开发者正逐步适应不同的编程思想来解决现代软件开发中的复杂问题。本文将带你了解函数式编程和响应式编…...
Django学习笔记(启动项目)-03
Django学习笔记(启动项目)-03 1、在urls文件中配置一个路由url 2、在views文件中创建视图函数 3、启动项目测试结果 # 输入项目启动命令 python manage.py runserver4、创建HTML模版和静态文件 1、在templates文件夹中创建一个html 2、创建url路由与视图函数 3、测试效果 4、…...
量变引起质变
量变引起质变,这个是最本质的规律,重复进行一件事情,这件事情就会越来越完善,越来越完美,哪怕是菜鸟,重复多了就是大佬。 我从说话结结巴巴,到说话流畅,只是用了15天直播写代码&…...
NewStar CTF week1 web wp
谢谢皮蛋 做这题之前需要先去学习一些数据库的知识 1 order by 2 1可以理解为输入的id,是一个占位符,按第二列排序用来测试列数,如果没有两列则会报错-1 union select 1,2 -1同样是占位符,union的作用是将注入语句合并到原始语句…...
李沐vscode配置+github管理+FFmpeg视频搬运+百度API添加翻译字幕
终端输入nvidia-smi查看cuda版本 我的是12.5,在网上没有找到12.5的torch,就安装12.1的。torch,torchvision,torchaudio版本以及python版本要对应 参考:https://blog.csdn.net/FengHanI/article/details/135116114 创…...
深度学习中Batch Normalization(BN)原理、作用浅析
最近做剪枝学习,其中一种是基于BN层的γ作为缩放因子进行剪枝的,那么我想搞懂BN的工作原理更好的理解网络、剪枝等,所以有了该文。 首先先说BN的作用在详细拆解,理解。以知乎一条高赞评论说明BN层到底在干什么。 Batch Norm 为什…...
C语言常用字符串处理函数
头文件:#include <string.h> strlen size_t strlen( char *str ); 功能:函数返回一个整数值,表示给定字符串的长度(不包括结束符\0) strcat char *strcat( char *str1, const char *str2 ); 功能&a…...
文件上传漏洞详解
第一关(JS绕过) 1.1使用bp进行绕过 先将要上传的php文件的后缀改为png,然后在上传时抓包,将png后缀再改为php,发包,此时上传成功 1.2使用js进行绕过 打开浏览器的检查,将其中的checkFile函数…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
c# 局部函数 定义、功能与示例
C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...
阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)
cd /home 进入home盘 安装虚拟环境: 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境: virtualenv myenv 3、激活虚拟环境(激活环境可以在当前环境下安装包) source myenv/bin/activate 此时,终端…...
热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁
赛门铁克威胁猎手团队最新报告披露,数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据,严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能,但SEMR…...
高端性能封装正在突破性能壁垒,其芯片集成技术助力人工智能革命。
2024 年,高端封装市场规模为 80 亿美元,预计到 2030 年将超过 280 亿美元,2024-2030 年复合年增长率为 23%。 细分到各个终端市场,最大的高端性能封装市场是“电信和基础设施”,2024 年该市场创造了超过 67% 的收入。…...
Git 命令全流程总结
以下是从初始化到版本控制、查看记录、撤回操作的 Git 命令全流程总结,按操作场景分类整理: 一、初始化与基础操作 操作命令初始化仓库git init添加所有文件到暂存区git add .提交到本地仓库git commit -m "提交描述"首次提交需配置身份git c…...
Cursor AI 账号纯净度维护与高效注册指南
Cursor AI 账号纯净度维护与高效注册指南:解决限制问题的实战方案 风车无限免费邮箱系统网页端使用说明|快速获取邮箱|cursor|windsurf|augment 问题背景 在成功解决 Cursor 环境配置问题后,许多开发者仍面临账号纯净度不足导致的限制问题。无论使用 16…...
CppCon 2015 学习:Simple, Extensible Pattern Matching in C++14
什么是 Pattern Matching(模式匹配) ❝ 模式匹配就是一种“描述式”的写法,不需要你手动判断、提取数据,而是直接描述你希望的数据结构是什么样子,系统自动判断并提取。❞ 你给的定义拆解: ✴ Instead of …...
深入理解 C++ 左值右值、std::move 与函数重载中的参数传递
在 C 编程中,左值和右值的概念以及std::move的使用,常常让开发者感到困惑。特别是在函数重载场景下,如何合理利用这些特性来优化代码性能、确保语义正确,更是一个值得深入探讨的话题。 在开始之前,先提出几个问题&…...
