高性能网络数据捕获:netsniff-ng源码分析

本文介绍了netsniff-ng,一个高性能的网络嗅探器,利用零拷贝技术实现高效的数据捕获。文章详细探讨了网络数据接收流程,包括DMA控制器、BD表和sk_buff缓冲区的角色,以及如何通过内存映射减少数据拷贝,提高性能。此外,还分析了主要数据结构,如mode和ring,以及数据捕获过程。
摘要由CSDN通过智能技术生成

作者:Melo Chale  转载请注明出处!新浪微博:@melochale 腾讯微博:@melochale

1.简介

随着Internet的高速发展,网络传输的数据量越来越大,各种网络数据的类型也错综复杂,特别是在主干网络上尤为更甚。运营商在带宽增加的同时没有正比的增加相应的收益,所以他们需要对各种网络数据进行分析之后,在网关或者服务器上进行优化后再传输,提高带宽利用率。要对数据进行分析,首先要对网络数据进行捕获。现今对数据捕获的软件或者库也很多,比如linux平台的libpcap库,而本设计主要是非基于libpcap平台的开源软件netsniff-ng设计的,它使用了零拷贝技术高效的捕获网络数据,而根据需求,在此只讨论网络数据的接收部分,不考虑发送部分,其实基本原理是一样的。


2.netsniff-ng介绍

netsniff-ng是一个高性能的网络嗅探器,支持数据的捕获,重放,过滤等,是一个linux平台系统级的应用程序,说它是系统级的,是因为自己分析并构造协议栈来处理网络的原始数据。它的高效来源于它的零拷贝技术,通过这个技术,应用程序不再需要从内核空间拷贝数据到用户空间。具体信息可以查看它的官网。


3.高性能数据捕获的思想

网络数据接收流程原理(驱动层描述)

网络设备的核心处理模块是一个被称作DMADirectMemory Access)的控制器,DMA模块能够协助处理器处理数据收发。对于数据发送来说,它能够将组织好的数据自动发出,无需处理器干预;对于数据接收来说,它能够将收到的数据以一定的格式组织起来,通知处理器,并等待处理器来取。

DMA模块收发数据的单元被称为BDBufferDescription,缓存描述符,实际的操作系统中,比如LinuxBD表就是sk_buf数据结构)每个包都会被分成若干个帧,而每个帧则被保存在一个BD中。BD结构通常包含有以下字段:

typedef struct { 
    void *bufptr;    /* 保存当前 BD 对应缓存的起始地址  */ 
    int length;      /* 保存缓存中存储的数据包长度      */ 
    int sc;           /* 保存当前 BD 的状态信息          */ 
 } BD_STRUCT;

所有的BD

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值