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等待队列中,并通知上层有数据包到达。这就是数据包从网卡到达系统内核空间的过程。在网络中数据包的数量是非常大的。为了防止在获取数据包时,由于效率低下而引起数据包丢弃的问题,下面将研究数据获取时的瓶颈问题。
 本文转自 李晨光 51CTO博客,原文链接:http://blog.51cto.com/chenguang/586803,如需转载请自行联系原作者

Linux系统捕获数据包流程相关推荐

  1. linux网卡发送数据包流程,linux内核Ethernet以太网卡驱动收发数据过程

    linux内核Ethernet以太网卡驱动收发数据过程 linux内核Ethernet以太网卡驱动收发数据过程 下图简单描述了网卡驱动与Linux内核之间的联系: 关于上图的一些说明: 系统初始化: ...

  2. linux数据包注释,关于 linux中TCP数据包(SKB)序列号的小笔记

    关于  SKB序列号的小笔记 为了修改TCP协议,现在遇到了要改动tcp分组的序列号,但是只是在tcp_sendmsg函数中找到了SKB的end_seq  一直没有找到seq 不清楚在那里初始化了,就 ...

  3. Linux内核网络数据包处理流程

    Linux内核网络数据包处理流程 from kernel-4.9: 0. Linux内核网络数据包处理流程 - 网络硬件 网卡工作在物理层和数据链路层,主要由PHY/MAC芯片.Tx/Rx FIFO. ...

  4. Linux内核网络数据包发送(三)——IP协议层分析

    Linux内核网络数据包发送(三)--IP协议层分析 1. 前言 2. `ip_send_skb` 3. `ip_local_out` and `__ip_local_out` 3.1 netfilt ...

  5. Linux内核网络数据包发送(一)

    Linux内核网络数据包发送(一) 1. 前言 2. 数据包发送宏观视角 3. 协议层注册 4. 通过 socket 发送网络数据 4.1 `sock_sendmsg`, `__sock_sendms ...

  6. 利用WinPcap技术捕获数据包

    前言  随着网络入侵的不断发展,网络安全变得越来越重要,于是网络入侵取证系统的研究也变得日益重要.在网络入侵取证系统中,对网络上传送的数据包进行有效的监听即捕获包是目前取证的关键技术,只有进行高效的数 ...

  7. Linux内核网络数据包发送(四)——Linux netdevice 子系统

    Linux内核网络数据包发送(四)--Linux netdevice 子系统 1. 前言 2. `dev_queue_xmit` and `__dev_queue_xmit` 2.1 `netdev_ ...

  8. Linux内核网络数据包发送(二)——UDP协议层分析

    Linux内核网络数据包发送(二)--UDP协议层分析 1. 前言 2. `udp_sendmsg` 2.1 UDP corking 2.2 获取目的 IP 地址和端口 2.3 Socket 发送:b ...

  9. windows下手把手教你捕获数据包

    希望通过这一系列的文章,能使得关于数据包的知识得以普及,所以这系列的每一篇文章我都会有由浅入深的解释.详细的分析.以及编码步骤,另外附上带有详细注释的源码 文章作者:nirvana 经常看到论坛有人问 ...

最新文章

  1. 平均年薪50.8万,这个证书真!香!
  2. wing 切换python版本
  3. python jupyter notebook运行没反应_jupyter notebook运行命令没有反应,右上报错这个
  4. Java并发编程:CopyOnWrite容器的实现
  5. CI 如何获取get请求过来的数据
  6. Windows下C/C++获取当前系统时间
  7. python oracle连接池_【Python + Oracle】Python Oracle连接池—改进版
  8. [偏序关系与CDQ分治]【学习笔记】
  9. 集群间动态扩展和删除hdfs的datanode和hbase的regionserver
  10. elasticsearch入门(三)
  11. 操作系统——Windows 控制台命令
  12. 星星之火-7:从数值空间理解模拟信号、离散信号、数字信号的区别
  13. CC00009.CloudOpenStack——|OpenStack组件.V02|——|openstack-glance|controller节点下部署glanc
  14. flutter_engine 交叉编译【自定义编译器(最新)】
  15. 【excel】如何绘制斜线表头
  16. android输入过滤回车换行,Android实现输入框回车输入
  17. 计算机关机键消失了,电脑关机键不见了,没有了关机按钮怎么办
  18. Visual studio 2015 未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包
  19. 频率选择性衰落和时间选择性衰落详解
  20. [Azure DevOps] 如何安装并配置 Build Agent

热门文章

  1. Dom 学习总结及其实例
  2. Android 关于Handler
  3. 对用户输入内容进行字数提示功能
  4. Clipboard类summary
  5. h5滚动时侧滑出现_H5触摸事件中如何判断用户滑动方向
  6. 梳理MVC 架构 MVVM架构
  7. 每秒递减的方波扫频信号怎么生成_逆变器是怎么工作的?
  8. Unity 2D游戏开发教程之游戏中精灵的跳跃状态
  9. ​Xamarin iOS教程之视图显示图像
  10. Xamarin iOS开发实战(内部资料)