DPDK——IP分片和重组库

本文介绍了DPDK库中处理IP分片和重组的实现,包括包分片和包重组的原理及源码分析。在分片过程中,当IP数据报大小超过MTU时,使用零拷贝技术进行分片。而在重组过程中,通过IP分片表进行存储和管理,确保分片数据的正确重组。同时提到了调试日志和统计收集的相关选项。
摘要由CSDN通过智能技术生成

一. 缘由

在网络数据包处理过程中,大量的包处理,就涉及到IP分片和重组。TCP/IP协议原理中,有对为什么要IP分片有描述。

在TCP/IP分层中,数据链路层用MTU(Maximum Transmission Unit,最大传输单元)来限制所能传输的数据包大小,MTU是指一次传送的数据最大长度,不包括数据链路层数据帧的帧头,如以太网的MTU为1500字节,实际上数据帧的最大长度为1512字节,其中以太网数据帧的帧头为12字节。

当发送的IP数据报的大小超过了MTU时,IP层就需要对数据进行分片,否则数据将无法发送成功。

二. 介绍

该库实现IPv4和IPv6包分片和重组。

1. 包分片

包分片程序将一个包分解为多个分片。rte_ipv4_fragment_packet()和rte_ipv6_fragment_packet()函数都假定输入mbuf数据指向分组的IP报头的开始(即L2报头已经被剥离)。

为避免实际包的拷贝,rte_pktmbuf_attach()使用了零拷贝技术。

对于么每个分片将创建两个新的mbufs结构:

Direct mbuf--mbuf将包含新分片的L3头部。

Indirect mbuf--mbuf将附加在原始数据包上。它的数据域指针指向原始数据包附加偏移的开始处。

L3 头部从原来mbuf结构中赋值到direct mbuf结构,并且更新分片状态。注意IPv4,头部校验和不会重新计算,且校验和置位0。

最后,通过mbuf的下一个文件将每个片段的“直接”和“间接”mbuf链接在一起,以构成新片段的数据包。

调用者有能力明确指定哪些mempools应用于从中分配“直接”和“间接”mbufs。<

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值