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

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

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

相关文章

Flutter开发之下标

Flutter开发之下标 在iOS开发中使用下标就很方便,本文主要是记录一下Flutter中系统自带的下标,还可以通过对应的方法编写自己的下标。 在Objective-C中的下标 关键字Subscript。 NSArray - (ObjectType)objectAtIndexedSubscript:(NSUInteger)idx A…

Windows python多版本共享方案

1、先安装好python3.11 2、安装好python3.7 这时默认版本是python3.7, A、如果要切换回python3.11则修改环境变量即可 B、 如果想使用3.7,找到python3.7的安装路径 如果想使用3.7 C:\Users\用户\AppData\Local\Programs\Python\Python37 复制python…

零基础学python之高级编程(6)---Python中进程的Queue 和进程锁,以及进程池的创建 (包含详细注释代码)

Python中进程的Queue 和进程锁,以及进程池的创建 文章目录 Python中进程的Queue 和进程锁,以及进程池的创建前言一、进程间同步通信(Queue)二、进程锁(Lock)三、创建进程池Poorpool 类方法: End! 前言 大家好,上一篇文章,我们初步接触了进程的概念及其应…

【tingsboard开源平台】环境准备和安装

文章目录 环境准备:1.安装JAVA2.安装maven环境3.安装nodeJS(16.15.1)4.安装git环境5.安装npm依赖关系6.放入文件fetched7.安装IDEA 环境准备: 1.安装JAVA 以安装java11为例,安装tingsboard需要的jdk 下载地址:https://www.oracle.com/java/technologi…

初识C++(二)引用,内联函数,auto

目录 1.引用的概念与用法: 1.1引用特性: 1.2使用场景 1.2.1做参数 1.3传值、传引用效率比较 1.4引用做返回值 1.5引用和指针的对比 2.内联函数 3.auto关键字 4. 基于范围的for循环(C11) 5.指针空值nullptr(C11) 1.引用的概念与用法:…

腾讯云4核8G服务器支持多少人同时在线?

腾讯云4核8G服务器价格:轻量4核8G12M优惠价格646元15个月、CVM S5服务器4核8G配置1437元买1年送3个月。腾讯云4核8G服务器支持多少人同时在线?支持30个并发数,可容纳日均1万IP人数访问。腾讯云百科txybk.com整理4核8G服务器支持多少人同时在线…

独立看门狗

什么是独立看门狗?它有什么用?什么时候用?不用行不行? 独立看门狗(Independent Watchdog,简称IWDG)是一种微控制器中常见的硬件保护机制。它的主要作用是监视系统的运行状态,当系统出…

2024 年 15 个最佳自动化 UI 测试工具【建议收藏】

Web 开发行业正在不断发展,许多最佳自动化 UI 测试工具可用于测试基于 Web 的项目,以确保它没有错误并且每个用户都可以轻松访问。这些工具可帮助您测试您的 Web 项目并使其完全兼容用户端的要求和需求。 UI 自动化测试工具可测试基于 Web 的应用程序或软…

JRT菜单

上一章搭建了登录界面的雏形和抽取了登录接口。给多组使用登录和菜单功能提供预留,做到不强行入侵别人业务。任何产品只需要按自己表实现登录接口后配置到容器即可共用登录界面和菜单部分。最后自己的用户关联到JRT角色表即可。 登录效果 这次构建菜单体系 首先用…

Transformer的前世今生 day09(Transformer的框架概述)

前情提要 编码器-解码器结构 如果将一个模型分为两块:编码器和解码器那么编码器-解码器结构为:编码器负责处理输入,解码器负责生成输出流程:我们先将输入送入编码器层,得到一个中间状态state,并送入解码器…

号码采集协议讲解

仅供学习研究交流使用 需要的进去拿源码或者成品

上位机图像处理和嵌入式模块部署(qmacvisual图像拼接)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 qmacvisual本身提供了图像拼接的功能。功能本身比较有意思的。大家如果拍过毕业照,特别是那种几百人、上千人的合照,应该就…

Rust编程(二)语法和数据类型

编程规范 类C语法,函数需要定义,指令需要以;结尾。需要大括号{} 文件名,变量,函数命名使用snake case,eg:new_function() 结构体,特征命名,使用大驼峰命名,e…

微信小程序商城构建全栈应用

今天,将之前大学朋友分享给我的好几个小程序内容,简单的从百度网盘下载了一下,重新回顾小程序内容,重新构建融合一些不同语言的元素。下面是网盘的简单截图。 我先挑选了一个微信小程序商城项目,简单看了看&#xff0…

中霖教育:不是会计专业能参加24年的中级会计师考试吗?

经常有很多同学问:我不是会计专业的能报中级会计师考试吗? 先来看报名需要满足的必要条件: 1、大学专科学历,从事会计工作满5年。 2、大学本科学历或学士学位,从事会计工作满4年。 3、第二学士学位或研究生班毕业&#xff0c…

Rust编程(三)生命周期与异常处理

生命周期 生命周期,简而言之就是引用的有效作用域。在大多数时候,我们无需手动的声明生命周期,因为编译器可以自动进行推导。生命周期的主要作用是避免悬垂引用,它会导致程序引用了本不该引用的数据: {let r;{let x …

Partisia Blockchain:真正做到兼顾隐私、高性能和可拓展的公链

目前,包括 Secret Network、Oasis Protocol 等在内的绝大多数以隐私为特性的可编程公链,在兼顾隐私的同时,在可拓展以及性能上或多或少的有所牺牲,即难以对诸多实际应用场景进行支撑。这归咎于链的设计以及共识机制的不合理&#…

袁志佳:前端全栈工程师精英班

教程介绍 本套课程涵盖大前端的全部领域,并对传统的Web前端全栈深入教学。如利用前端知识开发 AI、VR、AR、iOS、Android、PC、Server、智能硬件。 同时我们将核心打造 JavaScript语言新发展、Vue源码分析、前端持续集成方案汇总、MV*框架深度分析 、前端图形学、N…

Python爬虫如何快速入门

写了几篇网络爬虫的博文后,有网友留言问Python爬虫如何入门?今天就来了解一下什么是爬虫,如何快速的上手Python爬虫。 一、什么是网络爬虫 网络爬虫,英文名称为Web Crawler或Spider,是一种通过程序在互联网上自动获取…

目前2024年腾讯云4核8G服务器租用优惠价格表

2024年腾讯云4核8G服务器租用优惠价格:轻量应用服务器4核8G12M带宽646元15个月,CVM云服务器S5实例优惠价格1437.24元买一年送3个月,腾讯云4核8G服务器活动页面 txybk.com/go/txy 活动链接打开如下图: 腾讯云4核8G服务器优惠价格 轻…