- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我将这些数据包保存在 pcap 文件中(在 wireshark 中显示)
我正在使用 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/
我有一个使用 DPDK 的程序,我正在使用示例中提供的 Makefile 编译它。 如果我将程序编译为 APP(如描述 here ),一切顺利出色地。但是,我的代码是一个更大项目的一部分,为此使用单独
我是英特尔 DPDK 的新手。我打算编写一个 http 网络服务器。 是否可以使用DPDK使用以下逻辑实现? 获取数据包并将其发送到 Worker 逻辑核心。 客户端发送的工作逻辑核心构建“http
我用的是centos 7.3。当我运行 insmod igb_uio.ko 时,我在/var/logs/message 中收到此错误: igb_uio:加载树外模块污染内核。 警告:模块“igb_ui
我已按如下方式配置 NIC 卡:- [root@localhost ethtool]# ../../tools/dpdk-devbind.py -s Network devices using DPD
我尝试使用 ovs-vsctl 将 PCI 接口(interface) (I219-V) 添加到 OVS 桥,但没有成功: root@pc:/home/me# ovs-vsctl add-port b
当我使用 dpdk-devbind.py 绑定(bind) X710 的网络端口时。我得到错误: 错误:0000:20.00.0 的绑定(bind)失败 - 无法绑定(bind)到驱动程序 uio_p
我一直在尝试从 rx 队列接收数据包,修改它们并将它们发送到 tx 队列。目前我被困在数据包修改上。 我的观察和问题: 1) 我发现有函数操纵 mbufs,其中包含 pkt 数据: 添加数据: rte
我有一个四端口 Intel 1G 网卡。我正在使用 DPDK 在一个物理端口上发送数据并在另一个物理端口上接收数据。 我在 DPDK 代码中看到了一些示例,但无法使其工作。如果有人知道如何做到这一点,
我正在尝试使用连接到OVS(openvswitch)和ubuntu 18.04(VMWare工作站)上的DPDK的Iperf3(任何吞吐量测试器应用程序)来测试两个docker容器之间的吞吐量。这样做
我已在 Ubuntu 16.04.2 系统上设置了 DPDK 17.08.01。我已遵循涉及 HugePages 设置的指南。我设置了 2048 个 HugePages(每个 NUMA 核心 1024
我正在运行 DPDK 应用程序,为此我使用脚本分配大页面。分配和启动应用程序很好。但是后来当我停止应用程序并通过删除挂载点并在 numa 系统的 nr_hugepages 下修改来释放大页面时。 稍后
据我所知,DPDK 代码示例对整个应用程序(或给定端口的所有队列)使用单个 rte_mempool。 假设所有 EAL 线程只与它们自己的 RX/TX 队列交互,是否建议每个 lcore/队列有一个内
无法使用来自辅助进程的现有 rte Hash: h = rte_hash_find_existing("some_hash"); if (h) { // this will w
我使用的是 DPDK 1.7,并按照“快速入门指南”和“运行示例应用程序”文档中提到的所有步骤来编译和执行名为“load_balancer”的示例应用程序。 Load_balancer 应用程序包含某
我有一个使用 dpdk 内存池的 Linux 应用程序。我正在尝试分配一个内存池,其中包含 8000000 个 24 字节的对象。当在内存池创建中没有MEMPOOL_F_NO_CACHE_ALIGN
我确实对 DPDK 有一些经验,但目前我正在阅读许多关于 XDP 的博客。我试图比较这两种技术并了解 DPDK 和 XDP 之间的差异。这提出了一些问题。我希望有人可以帮助我解决以下问题: 使用 DP
我在运行基于 dpdk 的应用程序时遇到一些错误。我发现调用dpdk库提供的rte_eth_dev_configure()函数时出现错误。错误代码为-22。但是,我希望应用程序显示更多调试信息,以便我
我将这些数据包保存在 pcap 文件中(在 wireshark 中显示) 我正在使用 DPDK 解析这些数据包,但出于某种原因我无法使用 mbufs。要使用 struct ipv4_hdr 解析它们,
我想绕过 Linux 网络堆栈并将原始数据包转换为我在 userland 中的自定义代码并在那里处理它们。 我知道您可以使用 pf-rings 或 DPDK 等来制作您的自定义驱动程序。但是我不明白为
我有一个基于 DPDK 的网络应用程序,适用于基于 Linux 的系统。我想将它移植到 netmap 以克服我使用基于 Intel 的 NIC 的限制。在我基于 DPDK 的应用程序中,我使用了 DP
我是一名优秀的程序员,十分优秀!