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

IP 分片重组与 TCP 会话重组

1. IP 分片重组(IP Fragmentation & Reassembly)

(1)分片原因

  • 当 IP 数据包长度超过 MTU(Maximum Transmission Unit)(如以太网默认 1500 字节)时,路由器或发送端会将其分片。

  • 分片字段

    • Identification(16 比特):同一数据包的所有分片共享相同 ID。

    • Fragment Offset(13 比特):当前分片在原始数据包中的偏移量(以 8 字节为单位)。

    • Flags(3 比特):

      • MF(More Fragments)=1:表示后续还有分片。

      • DF(Don’t Fragment)=1:禁止分片(如 ICMP 探测包)。

(2)重组原理

  • 接收端 根据以下字段重组分片:

    1. Identification:匹配同一数据包的所有分片。

    2. Fragment Offset:按偏移量排序分片。

    3. MF 标志:若 MF=0,表示最后一个分片。

  • 重组策略

    • 重叠分片处理

      • 若分片范围重叠(如恶意攻击或网络异常),协议栈通常选择 后到达的分片覆盖先到达的(Linux 默认策略)。

      • 也可选择 丢弃重叠分片(取决于实现)。

    • 超时机制

      • 若部分分片丢失,重组队列会等待一段时间(如 Linux 默认 30 秒),超时后丢弃所有分片。

(3)协议栈处理阶段

  • 在网络层(IP 层)完成重组,之后将完整数据包交给传输层(如 TCP/UDP)。

  • 关键函数(Linux 内核):

    • ip_defrag():处理分片重组。

    • ip_frag_queue():管理分片队列。


2. TCP 会话重组(TCP Stream Reassembly)

(1)重组原因

  • TCP 是面向流的协议,但网络传输可能乱序、丢失或重复。

  • 接收端需对数据段(Segment)按序列号(Sequence Number)排序,确保应用层收到有序数据。

(2)重组原理

  • 基于序列号(Sequence Number)

    • 每个 TCP 段的序列号标识其第一个字节的全局位置。

    • 接收方通过 滑动窗口机制 确认连续数据(ACK)并缓存乱序数据。

  • 重组策略

    • 乱序数据缓存

      • 若收到非连续数据(如 Seq=100 先于 Seq=50 到达),内核会缓存乱序段,等待缺失数据。

    • 重叠数据处理

      • 若数据范围重叠(如重传或恶意攻击),TCP 会选择 覆盖旧数据 或 丢弃新数据(取决于实现)。

      • Linux 默认策略:保留先到达的数据(避免重传污染)。

    • SACK(Selective ACK)

      • 通过 TCP 选项 SACK 精确告知发送方已收到的乱序数据块,减少不必要的重传。

(3)协议栈处理阶段

  • 在传输层(TCP 层)完成重组,排序后的数据存入接收缓冲区,供应用层读取。

  • 关键机制

    • 滑动窗口:动态调整接收窗口,控制发送速率。

    • 重传队列:管理疑似丢失的数据段。

  • 关键函数(Linux 内核):

    • tcp_rcv_established():处理已建立连接的数据。

    • tcp_data_queue():管理数据排序和提交。


3. IP 分片 vs. TCP 重组对比

特性IP 分片重组TCP 会话重组
触发条件数据包超过 MTU数据乱序、丢失、重复
依赖字段Identification、Fragment Offset、MFSequence Number、ACK、SACK
处理重叠策略后到覆盖先到(默认)先到优先(默认)或丢弃新数据
协议栈阶段网络层(IP 层)传输层(TCP 层)
超时机制30 秒(Linux)由 RTO(重传超时)动态计算
典型应用场景UDP、ICMP 大包TCP 流式传输(如 HTTP、FTP)

4. 协议栈中的重组阶段

  1. 网卡收包

    • DMA 将数据包拷贝到内核 Ring Buffer。

  2. IP 层处理

    • 检查分片(ip_defrag()),重组后交给传输层。

  3. TCP 层处理

    • 排序乱序数据(tcp_data_queue()),提交到接收缓冲区。

  4. 应用层读取

    • 通过 recv() 从 TCP 缓冲区拷贝数据到用户空间。


5. 关键问题与优化

(1)IP 分片的问题

  • 性能开销:重组消耗 CPU/内存。

  • 安全风险:分片可被用于攻击(如泪滴攻击)。

  • 优化

    • 避免分片:PMTUD(路径 MTU 发现)或设置 DF=1

(2)TCP 重组的挑战

  • 乱序容忍:需合理设置窗口大小和缓冲区。

  • 优化

    • 启用 SACK 减少重传。

    • 调整 tcp_rmem 扩大接收缓冲区。


总结

  • IP 分片重组 在网络层完成,依赖分片字段和超时机制,处理策略通常覆盖后到分片。

  • TCP 会话重组 在传输层完成,依赖序列号和滑动窗口,默认优先保留先到数据。

  • 重叠处理策略 影响安全性和可靠性,需根据场景权衡(如防御攻击 vs. 保证数据正确性)。

  • 协议栈分层 确保各司其职:IP 层负责分片,TCP 层负责流式重组。

相关文章:

IP 分片重组与 TCP 会话重组

1. IP 分片重组(IP Fragmentation & Reassembly) (1)分片原因 当 IP 数据包长度超过 MTU(Maximum Transmission Unit)(如以太网默认 1500 字节)时,路由器或发送端会…...

《Python实战进阶》No34:卷积神经网络(CNN)图像分类实战

第34集:卷积神经网络(CNN)图像分类实战 摘要 卷积神经网络(CNN)是计算机视觉领域的核心技术,特别擅长处理图像分类任务。本集将深入讲解 CNN 的核心组件(卷积层、池化层、全连接层)…...

【Django】教程-1-安装+创建项目+目录结构介绍

欢迎关注我!后续会更新django教程。一周2-3更,欢迎跟进,本周会更新第一个Demo的单独一个模块的增删改查【Django】教程-4-一个增删改查的Demo【Django】教程-2-前端-目录结构介绍【Django】教程-3-数据库相关介绍 1.项目创建 1.1 安装 Djan…...

力扣DAY29 | 热100 | 删除链表的倒数第N个结点

前言 中等 √ 链表心得:考虑好边界情况。 题目 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5]示例 2: 输入&#…...

渗透测试过-关于学习Token、JWT、Cookie等验证授权方式的总结

关于学习Token、JWT、Cookie等验证授权方式的总结 目录 一、为什么Cookie无法防止CSRF攻击,而Token可以? 二、为什么无论采用Cookie-session的方式,还是Token(JWT)的方式,在一个浏览器里,同一个…...

C#从入门到精通(3)

目录 第九章 窗体 (1)From窗体 (2)MDI窗体 (3)继承窗体 第十章 控件 (1)控件常用操作 (2)Label控件 (3)Button控件 &…...

greenhill编译出现:3201原因错误

ecom800: 21Mar25 16:26:45.609351: No licenses available for ecom800 Reason: ecom800 (3201): The License Manager cannot be contacted. 解决方式:重新加载lincese驱动。 检查是否安装正确: 检查驱动是否正确识别: 以上检查都正常&#xff0c…...

Docker 快速入门指南

Docker 快速入门指南 1. Docker 常用指令 Docker 是一个轻量级的容器化平台&#xff0c;可以帮助开发者快速构建、测试和部署应用程序。以下是一些常用的 Docker 命令。 1.1 镜像管理 # 搜索镜像 docker search <image_name># 拉取镜像 docker pull <image_name>…...

RISC-V AIA学习2---IMSIC

我在学习文档这章时&#xff0c;对技术术语不太理解&#xff0c;所以用比较恰当的比喻来让自己更好的理解。 比较通俗的理解&#xff1a; 将 RISC-V 系统比作一个工厂&#xff1a; hart → 工厂的一条独立生产线IMSIC → 每条生产线配备的「订单接收员」MSI 中断 → 客户通过…...

C#基础学习(五)函数中的ref和out

1. 引言&#xff1a;为什么需要ref和out&#xff1f; ​问题背景&#xff1a;函数参数默认按值传递&#xff0c;值类型在函数内修改不影响外部变量&#xff1b;引用类型重新赋值时外部对象不变。​核心作用&#xff1a;允许函数内部修改外部变量的值&#xff0c;实现“双向传参…...

【每日算法】Day 9-1:贪心算法精讲——区间调度与最优选择(C++实现)

掌握高效决策的核心思想&#xff01;今日深入解析贪心算法的底层逻辑&#xff0c;聚焦区间调度与最优选择两大高频场景&#xff0c;结合大厂真题与严谨证明&#xff0c;彻底掌握“局部最优即全局最优”的算法哲学。 一、贪心算法核心思想 贪心算法&#xff08;Greedy Algorit…...

Netty源码—8.编解码原理二

大纲 1.读数据入口 2.拆包原理 3.ByteToMessageDecoder解码步骤 4.解码器抽象的解码过程总结 5.Netty里常见的开箱即用的解码器 6.writeAndFlush()方法的大体步骤 7.MessageToByteEncoder的编码步骤 8.unsafe.write()写队列 9.unsafe.flush()刷新写队列 10.如何把对象…...

【踩坑系列】使用httpclient调用第三方接口返回javax.net.ssl.SSLHandshakeException异常

1. 踩坑经历 最近做了个需求&#xff0c;需要调用第三方接口获取数据&#xff0c;在联调时一直失败&#xff0c;代码抛出javax.net.ssl.SSLHandshakeException异常&#xff0c; 具体错误信息如下所示&#xff1a; javax.net.ssl.SSLHandshakeException: sun.security.validat…...

双目云台摄像头全方位监控方案

双目云台摄像头是一种具有两个镜头的摄像头设备&#xff0c;通常配备云台功能&#xff0c;能够实现水平和垂直方向的旋转&#xff0c;从而提供全方位的监控视角&#xff1a; 一、工作原理与特点 工作原理 &#xff1a;双目云台摄像头利用仿生学原理&#xff0c;通过两个标定后的…...

测谎仪策略思路

来源:【东吴金工 金工专题】“高频价量相关性拥抱CTA”系列研究&#xff08;四&#xff09;&#xff1a;CPV因子期货版3.0—CPV测谎机 原创 高子剑 量化邻距离 2024年09月20日 14:37 该报告主要介绍了“高频价量相关性拥抱CTA”系列研究中CPV因子期货版的相关内容&#xff0c;…...

2025年移动端开发性能优化实践与趋势分析

启动速度优化 本质&#xff1a;缩短首次可见帧渲染时间。 方法&#xff1a; iOS&#xff1a;利用Core ML本地模型轻量化部署&#xff0c;减少云端等待。Android&#xff1a;强制启用SplashScreen API&#xff0c;通过setKeepOnScreenCondition控制动画时长。冷启动需将耗时操…...

VScode-i18n-ally-Vue

参考这篇文章&#xff0c;做Vue项目的国际化配置&#xff0c;本篇文章主要解释&#xff0c;下载了i18n之后&#xff0c;该如何对Vscode进行配置 https://juejin.cn/post/7271964525998309428 i18n Ally全局配置项 Vscode中安装i18n Ally插件&#xff0c;并设置其配置项&#…...

vue vue3 走马灯Carousel

背景&#xff1a; 在项目中需要展示多张图片&#xff0c;但在页面上只有一张图片的有限位置&#xff0c;此时考虑使用轮播图实现多张图片的展示。element组件官网有走马灯Carousel的组件详细介绍。 实现效果&#xff1a; 官网链接&#xff1a;点击跳转 核心代码&#xff1a; …...

Android设计模式之Builder模式

一、定义&#xff1a;将一个复杂对象的构建与它的表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。 二、核心思想&#xff1a; 分离构造与表示&#xff1a;将对象的构建过程&#xff08;如参数组合、校验逻辑&#xff09;与对象本身分离。 链式调用&#xff1a;通…...

【时时三省】(C语言基础)关系运算符和关系表达式

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 在if语句中对关系表达式disc > 0进行判断。其中的“>”是一个比较符&#xff0c;用来对两个数值进行比较。在C语言中&#xff0c;比较符&#xff08;或称比较运算符&#xff09;称为关…...

运算放大器(二)运算放大器的选型与应用

1.运算放大器的工艺决定Vos和Ib 2.TI放大器的命名规律 3.TI精密放大器家族 4.精密运放的选型指南 5.高共模抑制比放大器 6.TI其他的精密放大器 7.选型时需考虑的问题 8.TI精密运放选型实例 先确定供电电压 9.确定放大器的步骤 参考&#xff1a; 注&#xff1a;本文出自对b…...

vulhub靶场jangow-01-1.0.1

启动靶机时点shift停在这个界面 点e进入编辑页面&#xff0c;把ro改成rw signie init/bin/bash Ctrlx保存&#xff0c;ip a查看网卡信息 vim /etc/network/interfaces 把enp0s17改为ens33&#xff0c;保存退出 重启靶机&#xff0c;nmap扫ip ip为192.168.93.179 nmap扫端口 扫…...

android 一步完成 aab 安装到手机

家人们谁懂&#xff01;在 Android 系统安装 aab 应用超麻烦。满心期待快速体验&#xff0c;却发现 aab 无法直装&#xff0c;得先转为 apks 格式&#xff0c;这过程复杂易错。好不容易转好&#xff0c;还得安装 apks&#xff0c;一番折腾&#xff0c;时间与耐心全耗尽。别愁&a…...

mysqlworkbench导入.sql文件

1、MySQL Workbench 新建数据库 或者 在左侧导航栏的 ​Schemas 区域右键选择 ​Create Schema...输入数据库名称&#xff08;例如 mydatabase&#xff09;&#xff0c;点击 ​Apply确认创建&#xff0c;点击 ​Finish 2、选择目标数据库 在左侧导航栏的 ​Schemas 列表中&a…...

pyqt 信号与槽

PySide6 信号与槽机制详解 引言 PySide6 是 Qt for Python 的官方绑定库&#xff0c;为 Python 提供了强大的 GUI 开发能力。其中&#xff0c;信号与槽&#xff08;Signals and Slots&#xff09; 机制是 Qt 事件处理系统的核心&#xff0c;它允许对象之间进行松耦合的通信&a…...

深入探索C++:从基础到实践

目录 引言 一、C 基础语法与特性 &#xff08;一&#xff09;命名空间&#xff08;Namespace&#xff09; 单独使用 嵌套使用 调用形式 &#xff08;二&#xff09;输入输出流&#xff08;I/O Streams&#xff09; &#xff08;三&#xff09;变量作用域 二、C 的…...

从零开始完成冒泡排序(0基础)——C语言版

文章目录 前言一、冒泡排序的基本思想二、冒泡排序的执行过程&#xff08;一&#xff09;第一轮排序&#xff08;二&#xff09;第二轮排序&#xff08;三&#xff09;第三轮排序&#xff08;四&#xff09;第四轮排序 三、冒泡排序的代码实现&#xff08;C语言&#xff09;&am…...

Echars插入的柱状图条形图,鼠标放在图上显示坐标值

只需要将axiosPointer改为cross axisPointer.type支持类型及作用&#xff1a; line&#xff1a;默认直线型指向线shadow&#xff1a;显示坐标轴方向的阴影区域cross&#xff1a;交叉线&#xff08;横向纵向双线&#xff09;none&#xff1a;不显示指向器inside&#xff1a;结合…...

机械臂如何稳稳上桌?Mujoco场景修改实操

视频讲解&#xff1a; 机械臂如何稳稳上桌&#xff1f;Mujoco场景修改实操 前面《常见机械臂模型不用找&#xff01;Mujoco这儿都有&#xff01;》中介绍的mujoco-menagerie中机械臂大多都是base_link放在地上的&#xff0c;这些场景往往和真实的场景对应不上&#xff0c;比如机…...

金融级密码管理器——抗内存扫描的密钥保险箱

目录 金融级密码管理器 —— 抗内存扫描的密钥保险箱一、模块概述与设计背景二、技术原理与设计目标2.1 关键安全原理2.2 设计目标三、系统架构设计3.1 系统架构图(Mermaid示意图)四、关键技术与安全策略4.1 密钥分割与加密存储4.2 动态内存随机化技术4.3 内存扫描检测与自动…...

如何查看 SQL Server 的兼容性级别

在 SQL Server 中&#xff0c;兼容性级别是一个非常重要的设置&#xff0c;它决定了数据库在特定版本的 SQL Server 中运行时所使用的行为和功能。不同版本的 SQL Server 可能会在 SQL 查询优化、索引、语法、错误处理等方面有差异&#xff0c;因此&#xff0c;设置正确的兼容性…...

AI for CFD入门指南(传承版)

AI for CFD入门指南 前言适用对象核心目标基础准备传承机制 AI for CFDLibtorch的介绍与使用方法PytorchAutogluon MakefileVscodeOpenFOAMParaviewGambit 前言 适用对象 新加入课题组的硕士/博士研究生对AICFD交叉领域感兴趣的本科生实习生需要快速上手组内研究工具的合作研…...

人工智能与网络安全

目录 1、人工智能的安全和安全的人工智能各有什么含义&#xff0c;如何解决 2、当人工智能技术应用于某一安全领域&#xff0c;会对该领域的攻守双方带来哪些机遇与挑战 3、ChatGPT原理 、ChatGPT的缺陷 ChatGPT的缺陷 4、人工智能与算力&#xff0c;风险挑战 应对 5、人…...

GPIO输出实验,控制LED灯

1.实验工具&#xff1a;FSMP1A开发板 核心板&#xff1a; 拓展板&#xff1a; 2.实验要求&#xff1a;编写汇编程序&#xff0c;实现三盏灯流水 程序代码&#xff1a; .text .global _start _start: 将RCC_MP_AHB4ENSET寄存器第4位设置为1&#xff0c;使能GPIO外设时钟 …...

小区团购管理设计与实现(代码+数据库+LW)

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装小区团购管理软件来发挥其高效地信息处理的作用&#xff0…...

How to use pgbench to test performance for PostgreSQL?

pgbench 是一个用于测试 PostgreSQL 数据库性能的基准测试工具。通过模拟多个客户端并发执行 SQL 查询&#xff0c;它可以帮助你评估数据库的性能。以下是使用 pgbench 的基本步骤&#xff1a; 安装 pgbench pgbench 是 PostgreSQL 的一部分&#xff0c;因此在安装 PostgreSQ…...

dbeaver连接mongodb 插入日期变成了字符串

dbeaver插入mongodb数据 日期默认使用ISODate处理&#xff0c;但是插入数据以后实际上是ISODate(2025-03-03T03:25:19.640Z)字符串 INSERT INTO xxx.aaa (_id, chatId, buddyId, pId, lastChatId, inspiration, createTime, modelType, version, selectedInspiration, _class)…...

wgcloud怎么实现服务器或者主机的远程关机、重启操作吗

可以&#xff0c;WGCLOUD的指令下发模块可以实现远程关机和重启 使用指令下发模块&#xff0c;重启主机&#xff0c;远程关机&#xff0c;重启agent程序- WGCLOUD...

PrimeTime生成.lib竟暗藏PG添加Bug

在primeTime里生成lib&#xff0c;如何能带上相关的pg信息&#xff1f; 这是一位群友的发问&#xff0c;就这个问题总结了下可能的原因和解决步骤&#xff1a; 概念 PrimeTime是Synopsys的静态时序分析工具&#xff0c;通常用于在设计的各个阶段进行时序验证。 1&#xff09…...

电话号码的字母组合组合总和II 回溯注意事项(Java)

电话号码的字母组合 思路&#xff1a;多个循环可以考虑回溯。 首先明确&#xff1a; 循环的宽度是多少&#xff0c;即从哪些区间取数&#xff08;本题目中每个数字都是3个字母&#xff0c;都是从三个字母中取一个数&#xff0c;所以可以确定循环宽度就是每个数字对应的字符串…...

【软件工程】填空题

真题 2024-10 16.数据字典是用来定义_____中各个成分的具体含义的。 17.模块设计的基本原则是_____。 18.接口是操作的一个集合,其中每个操作描述了类、构件或子系统的一个_____。 19.耦合是指不同模块之间_____的度量。 20.RUP的突出特点是,它是一种以用况为驱动的、…...

回归——数学公式推导全过程

文章目录 一、案例引入 二、如何求出正确参数 1. 最速下降法 1&#xff09;多项式回归 2&#xff09;多重回归 2. 随机梯度下降法 一、案例引入 以Web广告和点击量的关系为例来学习回归&#xff0c;假设投入的广告费和点击量呈现下图对应关系。 思考&#xff1a;如果花了…...

线程池详解:在SpringBoot中的最佳实践

线程池详解&#xff1a;在SpringBoot中的最佳实践 引言 在Java并发编程中&#xff0c;线程池是一种非常重要的资源管理工具&#xff0c;它允许我们在应用程序中有效地管理和重用线程&#xff0c;从而提高性能并降低资源消耗。特别是在SpringBoot等企业级应用中&#xff0c;正…...

.NET开源的智能体相关项目推荐

一、AntSK 由AIDotNet团队开发的人工智能知识库与智能体框架&#xff0c;支持多模型集成和离线部署能力。 核心能力&#xff1a; • 支持OpenAI、Azure OpenAI、星火、阿里灵积等主流大模型&#xff0c;以及20余种国产数据库&#xff08;如达梦&#xff09; • 内置语义内核&a…...

spring-security原理与应用系列:ignoredRequests

目录 WebSecurityConfig 何时调用 configure(WebSecurity) AbstractConfiguredSecurityBuilder 如何赋值ignoredRequests 紧接上一篇文章&#xff0c;这一篇我们来看看核心过滤器FilterChainProxy的构造参数对象ignoredRequests是如何被赋值的&#xff1f; 点击WebSecurity…...

(windows)conda虚拟环境下open-webui安装与启动

一、创建conda环境 重点强调下&#xff0c;如果用python pip安装&#xff0c;一定要选择python3.11系列版本&#xff0c;我选的3.11.9。 如果你的版本不是这个系列&#xff0c;将会出现一些未知的问题。 conda create -n open-webui python3.11 -y如下就创建好了 二、安装o…...

CentOS系统下安装tesseract-ocr5.x版本

CentOS系统下安装tesseract-ocr5.x版本 安装依赖包&#xff1a; yum update -y yum install autoconf automake libtool libjpeg-devel libpng-devel libtiff-devel zlib-devel yum install automake libtool bzip2 -y手动编译安装GCC&#xff08;因系统默认安装的GCC版本比较…...

第五周日志-伪协议(3)

常见读取源码的file&#xff0c;php://filter和各种编码 还有执行php的 php://input和各种编码&#xff0c;data 在进行文件包含之前&#xff0c;先定位一下 Flag 文件的位置&#xff08;这里可以使用工具扫&#xff09; or直接访问 /flag.php 文件&#xff0c;结果返回为空&…...

飞牛NAS本地部署小雅Alist结合内网穿透实现跨地域远程在线访问观影

文章目录 前言1. VMware安装飞牛云&#xff08;fnOS&#xff09;1.1 打开VMware创建虚拟机1.3 初始化系统 2. 飞牛云搭建小雅Alist3. 公网远程访问小雅Alist3.1 安装Cpolar内网穿透3.2 创建远程连接公网地址 4. 固定Alist小雅公网地址 前言 嘿&#xff0c;小伙伴们&#xff0c…...

十七天-Numpy 学习笔记

Numpy 学习笔记 Numpy 作为 Python 中用于进行科学计算的核心库&#xff0c;提供了高性能的多维数组对象&#xff0c;以及大量用于数组操作的工具。下面围绕 “常量”“数据类型”“时间日期和时间增量” 三个方面&#xff0c;梳理 Numpy 中基本的数据概念和数组创建相关知识。…...