快速业务通道

Linux系统捕获数据包流程

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-03
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() 拥有帝国一切,皆有可能。欢迎访问phome.net时,已经将NET RX_SOFTIRQ软中断对应的处理函数映射成了net_rx_action(),因此do_softirq()将调用net_rx_action()对数据包进行处理.在函数net_rx_action()中,根据数据包类型的不同调用ip_recv()或者packet_recv()函数对netif_rx()传入的封装成sk buff的数据包进行处理.处理的最终结果是将数据包放到Socket等待队列中,并通知上层有数据包到达.这就是数据包从网卡到达系统内核空间的过程.在网络中数据包的数量是非常大的.为了防止在获取数据包时,效率低下而引起数据包丢弃的问题,下面将研究数据获取时的瓶颈问题.

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

拥有帝国一切,皆有可能。欢迎访问phome.net

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号