TCP重传机制详解——04FACK
文章目录
- TCP重传机制详解——04FACK
- 什么是FACK
- FACK的发展
- 为什么要引入FACK
- 实战抓包讲解
- 开启FACK场景,且达到dup ACK门限值
- 开启FACK场景,未达到dup ACK门限值
- 为什么要淘汰FACK
- 总结
- REF
TCP重传机制详解——04FACK
什么是FACK
FACK的全称是forward acknowledgement,FACK通过记录SACK块中系列号最大(forward-most)的SACK块来推测丢包信息。
举例说明:
Server:
- P1(0-9)、P2(10-19)、P3(20-29)、P4(30-39)、P5(40-49)
Client:
- 正常收到了P1包并回复了ACK确认包,P2、P3、P4则由于网络拥塞等原因丢失;
- 在收到P5时候回复一个Ack=10的确认包,并携带P5有SACK块信息(40-50)
这样server在收到P1的确认包和P5的dup ACK时候,就可以根据dup ACK中的SACK信息得知client端收到了P1报文和P5报文,计算出P1和P5两个数据包中间间隔了3个数据包,达到了dup ACK门限(默认为3),进而推测出P2报文丢失。
发送端根据发送数据的缓存区和SACK块信息,完全可以计算出丢失的数据包个数(即使这些数据包不是满MSS大小)
SO,当使能FACK的时候,实际上我们可以通过ACK + 一个SACK块信息来推测丢包情况进而触发快速重传。
FACK的发展
/proc/sys/net/ipv4开启 TCP FACK(Forward Acknowledgement) 支持。选项废弃了,新版内核不再生效。
FACK 是拥塞控制中快速恢复(Fast Recovery)阶段相关的机制,它主要解决有多个报文丢失的情况下,通过准确估计(当前连接)还在网络中传输的报文大小,在恢复阶段做出精确的拥塞控制。计算的方式如下:
记录 SACK 的最大序号数为 snd.fack
定义 awnd 代表正在网络中传输的数据:awnd = snd.nxt - snd.fack,这里假设了不存在乱序报文
在重传时,awnd 要加上重传的数据:awnd = snd.nxt - snd.fack + retran_data
于是在拥塞时,cwnd 会根据算法改变,此时为了充分利用带宽,可以使用如下方法控制包的发送:
while (awnd < cwnd)
sendsomething()
该方法比起 Reno 通过接收到的 dupack 数量来调整 cwnd 值更为精确。对于快速恢复的触发也有变化:
正常 Reno 算法会在 dupacks = 3 时触发快速恢复,如果丢失多个包,则 ACK 数量也随之减少,导致等待重传的时间变长,而 FACK 额外增加了一个触发条件:(snd.fack – snd.una) > (3*MSS),即假设没有乱序包的情况下,如果该条件成立,则说明网络中丢失了 3 个包,等价于 dupacks == 3,可以触发重传和快速恢复。
注:在 Linux 4.15[16] 中移除了 FACK 的支持,使用 RACK 机制替代。
为什么要引入FACK
因为当开始有SACK块信息的支持下,你可以准确的知道丢失包的范围信息。正是因为有了这些信息,不必再等待原有的dup ACK重复三次,而是应该计算这个范围丢包个数与阈值的关系从而决定是否快速重传。即发送端完全可以通过SACK+ack number来决定快速重传,不需要等待dup ACK三次
实战抓包讲解
开启FACK场景,且达到dup ACK门限值

开启FACK场景,未达到dup ACK门限值

为什么要淘汰FACK
- 过于激进的重传FACK依赖于接收端发送的SACK信息来判断丢包,有时候网络中的乱序可能被错误地解读为丢包,从而导致不必要的重传。特别是在网络拥塞时,频繁的重传可能会加剧拥塞,降低网络性能。
- 复杂度较高:FACK的实现和维护需要较为复杂的逻辑,包括跟踪和处理SACK信息,以及根据这些信息来决定何时重传。这种复杂性可能会影响内核的执行效率,也可能引入额外的实现风险。
- 难以适应极端网络状况:在某些网络环境下,如严重的网络延迟或大规模乱序,FACK可能不如后来提出的更为先进和适应性强的算法,如RACK(Receiver-based ACKnowledgment)等。RACK通过接收端的延迟信息来推测丢包,对网络状况变化的适应性更强。
- 对SACK的支持要求:并非所有TCP实现或网络设备都支持SACK选项,这意味着FACK的功能在这些环境下无法完全发挥,限制了其普适性。
- 并发丢包处理:FACK在处理并发丢包时可能不如其他算法有效,例如在连续丢包且数量较多时,FACK可能无法一次性准确判断所有丢失的数据段。
总结
- FACK的触发快速重传的原理就是:计算ACK和SACK块信息之间的丢失数据包个数是否达到3个
- FACK乱序场景下的判断是失准的,可能导致过多的重传。
- FACK已被淘汰,更优选为RACK
REF
FACK在Linux的落幕
TCP FACK与RACK
相关文章:
TCP重传机制详解——04FACK
文章目录 TCP重传机制详解——04FACK什么是FACKFACK的发展为什么要引入FACK实战抓包讲解开启FACK场景,且达到dup ACK门限值开启FACK场景,未达到dup ACK门限值 为什么要淘汰FACK总结REF TCP重传机制详解——04FACK 什么是FACK FACK的全称是forward ackn…...
安卓Java面试题 206- 210
206. 简述如何统计Activity的工作时间 ?如何统计Activity启动所用的时间? 可以通过分析Log得到(这个就是DDMS的那个Log)。 当我们点击触摸时会了类似以下的Log A: 03-06 03:36:47.865: VERBOSE/InputDevice(2486): ID[0]=0(0) Dn (0=>1) 03-06 03:36:47.865: INFO/Powe…...
huggingface的transformers训练bert
目录 理论 实践 理论 https://arxiv.org/abs/1810.04805 BERT(Bidirectional Encoder Representations from Transformers)是一种自然语言处理(NLP)模型,由Google在2018年提出。它是基于Transformer模型的预训练方法…...
计算机三级——网络技术(综合题第五题)
第一题 填写路由器RG的路由表项①至④。 目的网络/掩码长度输出端口输出端口172.19.63.192/30S0(直接连接)172.19.63.188/30S1(直接连接) 路由器RG的S0的IP地址是172.19.63.193,路由器RE的S0的IP地址是172.19.63.194。 【解析】…...
C#使用ASP.NET Core Razor Pages构建网站(三)
上一篇文章了解Razor Pages 链接:C#使用ASP.NET Core Razor Pages构建网站(二) 接下来继续了解ASP.NET Core Razor Pages构建网站的后续内容 一、将Entity Framework Core配置为服务 要在 ASP.NET Core 项目中配置 Entity Framework Core 服…...
R语言迅速计算多基因评分(PRS)
Polygenic Risk Scores in R 最朴素的理解PRS: GWAS分析结果中,有每个SNP的beta值、se值、P值,因为GWAS分析中将SNP变为0-1-2编码,所以这些显著的SNP的beta值,就可以用于预测。 比如:GWAS分析中…...
蓝桥杯刷题_day3
文章目录 DAY301字串判断闰年Fibonacci数列圆的面积序列求和 DAY3 01字串 【题目描述】 对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是: 00000 00001 00010 00011 00100 请按从小到大的顺序输出这32种01串。…...
Dubbo源码解析-Provider服务暴露Export源码解析
上篇我们介绍了ServiceBean初始化和依赖注入过程,地址如下 Dubbo源码-Provider服务端ServiceBean初始化和属性注入-CSDN博客 本文主要针Dubbo服务端服务Export过程,从dubbo源码角度进行解析。 Dubbo 服务端暴露细节流程比较长,也是面试过程中…...
在微信小程序中或UniApp中自定义tabbar实现毛玻璃高斯模糊效果
backdrop-filter: blur(10px); 这一行代码表示将背景进行模糊处理,模糊程度为10像素。这会导致背景内容在这个元素后面呈现模糊效果。 background-color: rgb(255 255 255 / .32); 这一行代码表示设置元素的背景颜色为白色(RGB值为0, 0, 0)&a…...
【JavaScript】JavaScript 程序流程控制 ⑥ ( while 循环概念 | while 循环语法结构 )
文章目录 一、while 循环1、while 循环概念2、while 循环语法结构 二、while 循环 - 代码示例1、打印数字2、计算 1 - 10 之和 一、while 循环 1、while 循环概念 在 JavaScript 中 , while 循环 是一种 " 循环控制语句 " , 使用该语句就可以 重复执行一段代码块 , …...
Keil笔记(缘更)
Keil 一、使用Keil时可能会出现的问题1.Project框不见了2.添加文件时找不到3.交换文件位置4.main.c测试报1 warning5.搜索CtrlF 二、模电常识(白话随便版)一、名词解释二、基础门电路 三、STLINK点灯操作1.配置寄存器进行点灯2.使用库函数进行点灯 四.GPIO1.LED闪烁4.按键控制L…...
举4例说明Python如何使用正则表达式分割字符串
在Python中,你可以使用re模块的split()函数来根据正则表达式分割字符串。这个函数的工作原理类似于Python内置的str.split()方法,但它允许你使用正则表达式作为分隔符。 示例 1: 使用单个字符作为分隔符 假设你有一个由逗号分隔的字符串,你可…...
Java 中的 Math. round(-1. 5) 等于多少?
在 Java 中,Math.round() 方法用于四舍五入一个浮点数。这个方法的工作原理是,它会查看要舍入数值的小数点后第一位。如果这一位是 5 或更大,那么整数部分加 1;如果小于 5,整数部分保持不变。 对于 Math.round(-1.5)&…...
MFC界面美化第三篇----自绘按钮(重绘按钮)
1.前言 最近发现读者对我的mfc美化的专栏比较感兴趣,因此在这里进行续写,这里我会计划写几个连续的篇章,包括对MFC按钮的美化,菜单栏的美化,标题栏的美化,list列表的美化,直到最后形成一个完整…...
设计模式|工厂模式
文章目录 1. 工厂模式的三种实现2. 简单工厂模式和工厂方法模式示例3. 抽象工厂模式示例4. 工厂模式与多态的关系5. 工程模式与策略模式的关系6. 面试中可能遇到的问题6.1 **工厂模式的概念是什么?**6.2 **工厂模式解决了什么问题?**6.3 **工厂模式的优点…...
CHAT~(持续更新)
CHAT(持续更新) 实现一个ChatGPT创建API设计页面布局业务操作技术架构 实现安装工具 其他 实现一个ChatGPT 创建API 最简单也最需要信息的一步 继续往下做的前提 此处省略,想要获取接口创建方式联系 设计 页面布局 按照官网布局 业务操作…...
linux系统------------Mysql数据库介绍、编译安装
目录 一、数据库基本概念 1.1数据(Data) 1.2表 1.3数据库 1.4数据库管理系统(DBMS) 数据库管理系统DBMS原理 1.5数据库系统(DBS) 二、数据库发展史 1、第一代数据库 2、第二代数据库 3、第三代数据库 三、关系型数据库 3.1关系型数据库应用 3.2主流的…...
文件操作3
随机读写数据文件 一、随机读写原理 在我们写数据时,有一个光标不断的在随着新写入的数据往后移动; 而读数据时,也有一个看不见光标,随着已经读完的数据,往后移动 这里的文件读写位置标记——可以想象成图形界面里的…...
算法D57 | 动态规划17 | 647. 回文子串 516.最长回文子序列 动态规划总结篇
647. 回文子串 动态规划解决的经典题目,如果没接触过的话,别硬想 直接看题解。 代码随想录 Python: class Solution:def countSubstrings(self, s: str) -> int:n len(s)dp [[0]*n for _ in range(n)]dp[0] [1]*nresult nfor i in range(1, n)…...
go的限流
背景 服务请求下游,oom,排查下来发现是一个下游组件qps陡增导致 但是司内网络框架比较挫,竟然不负责框架内存问题(有内存管理模块,但逻辑又是无限制使用内存) 每个请求一个r、w buffer,请求无限…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
