• Linux系统捕获数据包流程


    Linux系统捕获数据包流程
    为了提高数据包的捕获效率,瓶颈问题是一个需要非常关注的焦点。减少在捕获数据包过程中的瓶颈,就能够提高数据包捕获的整体性能。下面本文将以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等待队列中,并通知上层有数据包到达。这就是数据包从网卡到达系统内核空间的过程。在网络中数据包的数量是非常大的。为了防止在获取数据包时,由于效率低下而引起数据包丢弃的问题,下面将研究数据获取时的瓶颈问题。

    本文出自 “李晨光原创技术博客” 博客,谢绝转载!

  • 相关阅读:
    Sql语句创建表
    刷新、关闭等误操作造成当前页面信息的丢失的解决方案
    asp.net文本框中只允许用户输入数字
    为每个用户创建文件夹,并实现图片上传
    在updatepanel中使用fileupload控件
    解决弹出提示框后字体变大的BUG
    SQL 2005新增的几个函数之学习
    .net实现单张图片的上传
    数据分页
    所谓三门问题
  • 原文地址:https://www.cnblogs.com/chenguang/p/3742318.html
Copyright © 2020-2023  润新知