博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux系统捕获数据包流程
阅读量:7237 次
发布时间:2019-06-29

本文共 855 字,大约阅读时间需要 2 分钟。

Linux
系统捕获数据包流程<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

为了提高数据包的捕获效率,瓶颈问题是一个需要非常关注的焦点。减少在捕获数据包过程中的瓶颈,就能够提高数据包捕获的整体性能。下面本文将以Linux操作系统为平台,分析捕获数据包的整个过程,通过实验数据得出影响捕获数据包的关键因素,最终确定捕获数据包过程的瓶颈。

Linux平台下数据包的获取过程为,数据包到达网卡后,会产生一个硬件中断,然后调用网卡驱动程序中的函数来处理。这个中断处理程序首先要做的就是进行一些I/O操作将数据读入。当数据帧成功接收后,收到的数据包会被封装成sk buff结构,并脱离驱动程序,转到通用的处理函数netif_rx()中。Netif_rx()的一个重要工作就是将传入的sk_buff到等候队列中,并置位软中断标志位。其目的是快速从中断中返回,等待下一个数据的到来,从而提高对网络数据包的处理速度。

netif_rx()
将数据包传入等待队列中之后,为了提高CPU的处理效率,上层处理采用软中断do_softirq()实现。由于在系统初始化的时候,具体说是在调用函数net_dev_init()时,已经将NET RX_SOFTIRQ软中断对应的处理函数映射成了net_rx_action(),因此do_softirq()将调用net_rx_action()对数据包进行处理。在函数net_rx_action()中,根据数据包类型的不同调用ip_recv()或者packet_recv()函数对netif_rx()传入的封装成sk buff的数据包进行处理。处理的最终结果是将数据包放到Socket等待队列中,并通知上层有数据包到达。这就是数据包从网卡到达系统内核空间的过程。在网络中数据包的数量是非常大的。为了防止在获取数据包时,由于效率低下而引起数据包丢弃的问题,下面将研究数据获取时的瓶颈问题。

转载地址:http://wpofm.baihongyu.com/

你可能感兴趣的文章
2018-2019-2 网络对抗技术 20165324 Exp5:MSF基础应用
查看>>
final用法
查看>>
Flask架站基础篇(七)--SQLAlchemy(1)
查看>>
Java程序设计第一次作业
查看>>
浏览器盒子模型
查看>>
由上一个血案引发的关于property和attribute关系的思考
查看>>
BZOJ 2734: [HNOI2012]集合选数
查看>>
Xilinx FPGA结构
查看>>
day06<面向对象>
查看>>
Panel(面板)数据结构
查看>>
Python 学习笔记 -- 类的访问限制
查看>>
图片轮播——点击切换
查看>>
20145223《信息安全系统设计基础》第9周学习总结
查看>>
【转】Python特殊语法:filter、map、reduce、lambda
查看>>
Java实现Http服务器(二)
查看>>
JavaScript 开发者必备:七大资源共享
查看>>
leetcode260
查看>>
SQLAlchemy
查看>>
处理“远程主机强迫关闭了一个现有的连接”
查看>>
数据库每分钟运行监控SQL
查看>>