当前位置: 首页 > news >正文

TCP重传机制详解——02SACK

文章目录

  • TCP重传机制详解——02 SACK
    • SACK是什么?
    • 为什么要有SACK?
    • 实际场景
      • 抓包具体显示信息
      • 流程
    • 实战抓包讲解
      • SACK关闭场景下,三次重复ACK后会快速重传
      • SACK打开但是不携带SACK块信息场景下,三次重复ACK也不会快速重传
      • SACK打开并且携带SACK块信息场景下,两次重复ACK也会快速重传
    • SACK reneging
      • 1. 故意不发送SACK
      • 2.SACK选项丢失
      • 3.丢弃已确认接收的数据包
    • 总结
    • REF

TCP重传机制详解——02 SACK

SACK是什么?

Selective Acknowledgment有选择的ACK,显而易见这是在ACK的基础上的扩展。在ACK包上会携带SACK选项,表示一个接收范围,也称之为"空洞"。

为什么要有SACK?

传统的TCP在丢包时会采用超时重传的方式,即等待一段时间后重传丢失的数据段。而使用SACK机制,接收端可以选择性地向发送端反馈已经成功接收的数据段范围,从而使发送端能够更精确地知道哪些数据段需要重传,提高了重传的效率。
SACK机制可以提高TCP的性能和可靠性,特别是在丢包较多或网络拥塞的情况下。

实际场景

在这里插入图片描述

TCP选项,在三次握手的时候,进行协商是否支持SACK选项(必须双方支持才可以使用),协商好则会在连接建立后数据从传输的时候决定是否携带SACK块信息。

抓包具体显示信息

SACK的抓包显示

  1. 报文显示SLE和SRE就是表示是SACK的块信息了,SLE即SACK left edge表示左边沿,SRE即SACK right edge右边沿。
  2. ACK报文不消耗序列号因此不会重传,所以可以看到如果没有确认就会在后面的ACK中继续去附加之前的SACK信息
  3. SACK块信息个数一定是有限的,因为报文就是有大小限制(MSS)

流程

接收端根据接收到的数据的序号,回复ACK,携带已经确认序号的信息块。
例如:收到了P(25-30),则回复SACK(25-31),发送端根据接收到的SACK块信息来重传数据(填洞)

实战抓包讲解

SACK关闭场景下,三次重复ACK后会快速重传

/proc/aya/net/ipv4/tcp_sack=0
在这里插入图片描述
SACK的"bug"(不是真正的bug,是缺点):SACK开启但是不携带SACK选项信息的场景下比不打开SACK场景的效率还要低

SACK打开但是不携带SACK块信息场景下,三次重复ACK也不会快速重传

/proc/aya/net/ipv4/tcp_sack=1,但是不携带SACK块信息
在这里插入图片描述

SACK打开并且携带SACK块信息场景下,两次重复ACK也会快速重传

是不是被标题吓到了?(嘿嘿,不小心做了标题党),这里其实只是抓包看起来是dup ACK两次,实际上SACK的判定条件是不一样的!

其实主要是因为SACK开启下的dup ACK的判定条件是不一样的。这也是为什么dup ACK三次(不携带SACK块)也不会触发快速重传!原因就是:SACK对于dup ACK的认定不是判断ack number的不同,而是根据SACK选项块信息的个数(>=3个)
在这里插入图片描述

SACK reneging

SACK reneging,即SACK违背承诺,或者SACK撤销确认。
SACK seneging是指在TCP通信中,接收端故意不发送SACK选项或者SACK选项丢失或者丢弃已确认成功接收的数据包,从而导致发送端错误地认为数据包丢失,触发不必要的重传行为。即之前确认的SACK选项信息和后面的ACK或者SACK选项信息产生了冲突,导致发送端误认为数据包丢失

1. 故意不发送SACK

攻击者利用TCP协议的漏洞:攻击者可能会发送特制的TCP数据包,故意不发送SACK选项,以此来干扰正常的数据传输,导致发送端频繁地进行不必要的重传,从而消耗网络资源和带宽。

2.SACK选项丢失

网络设备或防火墙的干预:有些网络设备或防火墙可能会过滤或修改TCP选项字段,导致SACK选项被删除或篡改,从而触发SACK seneging。
还有一种有可能导致SACK reneging:

3.丢弃已确认接收的数据包

在这里插入图片描述

总结

场景触发条件
/proc/aya/net/ipv4/tcp_sack=0dup ACK三次后会触发快速重传
/proc/aya/net/ipv4/tcp_sack=1但不带SACK块信息dup ACK三次后会触发快速重传
/proc/aya/net/ipv4/tcp_sack=1且携带SACK块信息SACK块个数三个后会触发快速重传

REF

SACK下的重传
SACK reneging

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Python编程基础 001 开篇:为什么要学习编程
  • leetcode代码记录(平衡二叉树
  • 由浅到深认识Java语言(11):封装
  • stable diffusion 提示词进阶语法-年龄身材肤色-学习小结
  • C++类模板详解
  • 学习总结!
  • 用html画一个烟花特效
  • Java练习:进制转换、日期计算、乘法表两种实现
  • GPT4.0
  • 在linux中展示本月最后一个周五的日期
  • 【C语言进阶篇】编译和链接
  • C语言从入门到实战----数据在内存中的存储
  • ETH 智能合约Gas文章整理
  • JavaScript、ES6与微信小程序之间的联系:工具箱、升级与新房子
  • C语言:文件操作解析
  • 【译】JS基础算法脚本:字符串结尾
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • Android系统模拟器绘制实现概述
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • Java的Interrupt与线程中断
  • JS字符串转数字方法总结
  • MobX
  • Python 基础起步 (十) 什么叫函数?
  • REST架构的思考
  • vue-cli在webpack的配置文件探究
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 简单易用的leetcode开发测试工具(npm)
  • 一文看透浏览器架构
  • 关于Android全面屏虚拟导航栏的适配总结
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • ​一些不规范的GTID使用场景
  • ​用户画像从0到100的构建思路
  • # Redis 入门到精通(一)数据类型(4)
  • # 数据结构
  • ### RabbitMQ五种工作模式:
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • (2022 CVPR) Unbiased Teacher v2
  • (26)4.7 字符函数和字符串函数
  • (7)svelte 教程: Props(属性)
  • (C语言)fgets与fputs函数详解
  • (delphi11最新学习资料) Object Pascal 学习笔记---第14章泛型第2节(泛型类的类构造函数)
  • (MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2
  • (Python) SOAP Web Service (HTTP POST)
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (分布式缓存)Redis哨兵
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (含笔试题)深度解析数据在内存中的存储
  • (十六)串口UART
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (转载)深入super,看Python如何解决钻石继承难题
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...