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

【CAPL实战:以太网】对IPv4报文的Payload部分进行分片并创建分片包

As we know,TCP/IP协议栈网络层接收到来自上层的数据时,并不是简单地添加报头发送出去,而是会受到来自网卡配置参数MTU的约束。也就是从网卡上发送出去的以太网帧报文的数据部分的长度不能大于MTU值。即网络层头部 + 有效载荷不能大于MTU。

所以网络层在发送上层的数据时,要判断这个数据加上网络层头部的总长度是否大于MTU?如果是,则要把数据部分分成多段,分别添加IP头部后发送到链路层。最终的目的是要确保所有的分段 + IP头部的总长度小于等于MTU。

我们今天要编写一个自定义函数,不是对网络层的数据部分分段,而是对一条给定的IPv4报文(我们姑且称之为源报文)的Payload部分,按照我们的需求,把想要的部分取出,封装成一条分片包。其中IPv4 Header和Eth Header的字段尽量保证和源报文的相同。比如说source mac/destination mac/eth type/source ip/destination ip/ttl/identification等。

而像total length/flags/checksum等必须要根据分片包的实际设置或填写!

比如一条ICMPv4 Echo Request报文:

http://www.xdnf.cn/news/111115.html

相关文章:

  • 从Kafka读取数据
  • Cephalon端脑云:神经形态计算+边缘AI·重定义云端算力
  • Trae或者VsCode无法识别相对路径(不自动切换工作目录)
  • 高光谱相机在生物医学中的应用:病理分析、智慧中医与成分分析
  • React在什么情况下需要用useReducer
  • 前缀和-724.寻找数组的中心下标-力扣(LeetCode)
  • java—14 ZooKeeper
  • 【C++游戏引擎开发】第23篇:基础阴影映射(Shadow Mapping)
  • 2025/4/24
  • LeetCode 2799.统计完全子数组的数目:滑动窗口(哈希表)
  • 机器学习(9)——随机森林
  • 缓存与数据库数据一致性:旁路缓存、读写穿透和异步写入模式解析
  • “Daz to Unreal”将 G8 角色(包括表情)从 daz3d 导入到 UE5。在 UE5 中,我发现使用某个表情并与闭眼混合后,上眼睑出现了问题
  • 加密认证库openssl初始附带c/c++的使用源码
  • Nginx 中间件
  • 焊接机排错
  • 【C++指南】位运算知识详解
  • 直播预告 |【仓颉社区】第32期WORKSHOP
  • 蓝牙低功耗设备的漏洞与攻击——最新信息回顾
  • 图论算法体系:并查集、生成树、排序与路径搜索全解析
  • STM32F103系列单片机寄存器操作和标准库操作
  • CIFAR10图像分类学习笔记(三)---数据加载load_cifar10
  • 前端 Excel 工具组件实战:导入 → 可编辑表格 → 导出 + 样式同步 + 单元格合并
  • 《Llama.cpp:开启本地大模型部署新时代》
  • 动态规划问题 -- 斐波那契数列模型(使用最小花费爬楼梯)
  • 怎么实现RAG检索相似文档排序:similarities
  • 【hadoop】HBase shell 操作
  • 在 Ubuntu 环境为 Elasticsearch 引入 `icu_tokenizer
  • docker部署Jenkins工具
  • 宝塔里redis停止了自动启用脚本