关于使用libnet时性能下降的问题分析

Libnet是一个用于构建和注入网络数据包的便携式框架。它提供了在IP层和链路层创建数据包的功能,以及一系列辅助和补充功能。Libnet非常适合编写网络工具和网络测试代码。一些使用libnet的项目包括arping、ettercap、ipguard、isic、nemesis、packit、tcptraceroute和yersinia。

通常使用c语言编写网络数据报文的程序时,会选择libnet这个成熟的第三方库,其源码地址如下

GitHub - libnet/libnet: A portable framework for low-level network packet construction

网上有很多的教程教授如何使用libnet库,我就不再这里赘述了,这篇文章主要来分析使用libnet库造成的性能下降问题。

使用libnet库,在网口带宽不高的时候,看不出来其对性能会造成影响。但一旦全速跑带宽时,就会发现,libnet库会造成至少10%的性能下降。

那么是什么原因造成的性能下降呢?让我们从探索过程中找寻问题的答案。

开始时,我发现了性能下降的问题,由此,先从我们自己的代码入手来分析。经过添加断点,我发现,当我初始化libnet后,性能立马会下降,即执行libnet_init函数。

然后我就进入源码查看libnet_init做了什么工作。经过分析,我发现libnet_open_link是罪魁祸首的函数。以下是其具体的源码。

这里面,唯一可能出现问题的,就是socket语句。socket语句中最后可能出问题的就是最后的参数,那么我们来看一下最后的参数是什么含义。

基于上述的描述,我们可以发现,除了不指定(即设置0)外,其他的设置方式,都会造成socket既接收报文又发送报文,而原始套接字的接收报文,是要进行一次额外的内存拷贝的。

所以问题的原因就定位清除了,是因为原始套接字的最后的参数,造成了额外的内存拷贝,所以影响了机器的性能。如果你是用的libnet仅仅只是用于构造报文并发送,并且需要较高的性能,那可以将源码中的ETH_P_ALL改成0,重新编译自己的libnet库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/293594.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣日记12.21【二叉树篇】98. 验证二叉搜索树

力扣日记:【二叉树篇】98. 验证二叉搜索树 日期:2023.12.21 参考:代码随想录、力扣 98. 验证二叉搜索树 题目描述 难度:中等 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义…

STM32能够做到数据采集和发送同时进行吗?

STM32能够做到数据采集和发送同时进行吗? 在开始前我有一些资料,是我根据自己从业十年经验,熬夜搞了几个通宵,精心整理了一份「STM32的资料从专业入门到高级教程工具包」,点个关注,全部无偿共享给大家&…

jetson nano系列安装nomachine

引言:项目需要实现远程控制和可视化,在实现了4G通信的基础上,使用namochine实现远程的可视化和操作 1、硬件:jetson orin nano 8G 2、环境:ubuntu20.04ros-noetic 注意:项目主要是为了方便客户端连接到这…

2000+线下门店数字化转型,盘活近500+门店账号!

伴随着社交媒体的快速发展,消费者的注意力开始往线上转移。社交媒体在消费者购买决策过程中发挥着越来越重要的作用,逐渐成为大家获取信息、产品种草并购买下单的平台。 今年双十一期间,抖音商城多数品类销售额均呈现大幅增长趋势&#xff0c…

怎么提取视频中的背景音乐?

当我们在刷视频的时候,有时候听到一个背景音乐很好听,但是又不知道歌名,比如英语歌,这个时候我们很难找到这首歌,相信有很多朋友会遇到这样的问题,不知道怎么弄,下面小编给大家推荐一些方法帮助…

自动化边坡监测设备是什么?

随着科技的不断进步,我们的生活和环境也在不断地发生变化。然而,自然灾害仍然是我们无法完全避免的风险。其中,边坡滑坡就是一种常见的自然灾害。为了保护人民的生命财产安全,科学家们研发出了自动化边坡监测设备。 WX-WY1 自动化…

【Kotlin】一款专门为 Java 程序员打造的快速掌握 Kotlin 技术博客

目录 初识 Kotlin 历史 工作原理 第一个Hello World! Kotlin 语法 变量 基本数据类型 函数 和 选择控制(if、when) if when 循环语句 类和对象 创建和使用 继承 构造 主构造 次构造 接口 定义 实现 权限修饰符 数据类…

React学习计划-React16--React基础(三)收集表单数据、高阶函数柯里化、类的复习

1. 收集表单数据 包含表单的组件分类 受控组件——页面中所有输入类的DOM,随着输入,把值存维护在状态里,需要用的时候去状态里取值(推荐,避免了过渡使用ref)非受控组件——页面中所有输入类的DOM,现用现取…

如何进行USB丢弃攻击?

USB丢弃攻击,类似于一场表演艺术,您需要构建一个引人入胜的故事,激发目标的好奇心,让他们忽略基本的安全意识,插入您精心准备的USB设备! 本文章仅限娱乐,请勿模仿或进行违法活动! 一、选择放置…

账号多、用户咨询量大无法及时回复?「互动管理」助力高效经营!

随着互联网行业不断向纵深发展,内容形态与营销场景也更加多元化。越来越多的品牌跑步入场,深耕社媒营销,建立多平台营销矩阵,借助社媒平台的全域态势助力品牌增长。 据云略《2023品牌新媒体矩阵营销洞察报告》显示,目前…

【算法】使用二分查找解决算法问题:理解二分法思想,模板讲解与例题实践

文章目录 二分算法思想 / 性质 / 朴素模板二分查找的引入(二段性)704.二分查找 模板34.在排序数组中查找元素的第一个和最后一个位置 二分查找的前提条件 / 时间复杂度分析 算法题69.x的平方根35.搜索插入位置852.山脉数组的峰顶索引162.寻找峰值153.寻找…