gpt4 book ai didi

c - DPDK 中 IPv4 数据包的大小错误

转载 作者:太空宇宙 更新时间:2023-11-04 01:48:10 25 4
gpt4 key购买 nike

我将这些数据包保存在 pcap 文件中(在 wireshark 中显示)

enter image description here

我正在使用 DPDK 解析这些数据包,但出于某种原因我无法使用 mbufs。要使用 struct ipv4_hdr 解析它们,iam和 struct ether_hdr如下:

eth_hdr = (struct ether_hdr *) pckt;
ip_hdr = (struct ipv4_hdr *)((unsigned char *) pckt + sizeof(struct ether_hdr));

ipv4_hdr中的total_length是ipv4头的大小+数据的大小。以太网头的大小应该是数据包的总长度,对吧?

size = rte_bswap16(ip_hdr->total_length) + sizeof(struct ether_hdr);

这给了我这 6 个数据包的输出:

54, 54, 54, 54, 54, 54

对于第一个、第三个和第五个数据包,它是正确的,但对于其他数据包,它比应有的少了 6 个字节。

我在问数据包中的这 6 个字节是什么以及如何使用 ipv4 和以太网 header 找出正确的大小:

54, 60, 54, 60, 54, 60

在 wireshark 中,所有这些数据包的 total_length 都是 40 字节,sizeof(ether_hdr) 是 14 字节 -> 它应该是 54。

最佳答案

我猜根本原因是最小以太网帧长度。作为Wikipedia says ,最小帧长为64字节。

在每个以太网帧的末尾,我们添加了帧校验序列(FCS,4 个八位字节),因此它至少有 60 个八位字节用于以太网报头和有效负载。

现在回答你的问题:

I am asking what these 6 bytes in packets

这些是使以太网帧(带有 FCS)至少为 64 个八位字节的零填充。

对于传出数据包,还没有填充,稍后将由驱动程序或NIC 本身添加。因此 Wireshark 显示未填充的帧,即 40 字节的 IP + 14 字节的以太网 header (无 FCS)构成 54 字节。

对于传入的数据包,发送部分已经添加了填充。因此 Wireshark 显示带有填充的帧,即 64 个八位字节 - 4 个八位字节 FCS = 60 个八位字节。

how to find out the correct sizes using ipv4 and ether headers

你的方法完全正确。帧末尾的那些零只是填充,应该被忽略。如果我们真的需要一个正确的长度,我们应该考虑如上所述的最小帧长度。

关于c - DPDK 中 IPv4 数据包的大小错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49218463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com