发明名称 一种Linux下基于网卡驱动的零拷贝以太网报文捕获及发送的实现方法
摘要 一种Linux下基于网卡驱动的零拷贝以太网报文捕获及发送的实现方法,一、用户进程将整个物理内存映射到用户进程空间;二、使用队列方式管理报文驱动模块接收到的报文及要通过其发送的报文;三、使用报文驱动模块隔离各类型网卡驱动的区别对用户进程的影响;四、各类型网卡驱动加载成功后向报文驱动模块注册设备及相关操作方法。本发明采用分层实现,使得该方法能够同时支持多种类型的网卡,且易于添加对新网卡的支持。本发明在报文的捕获和发送过程中没有一次拷贝动作,能够实现高性能的报文捕获及发送,适用于网络流量监控及分析等对报文的收发的性能有很高要求的情景。
申请公布号 CN101917350B 申请公布日期 2012.08.15
申请号 CN201010279606.5 申请日期 2010.09.13
申请人 南京中兴特种软件有限责任公司 发明人 姚文顶
分类号 H04L12/56(2006.01)I;H04L12/26(2006.01)I 主分类号 H04L12/56(2006.01)I
代理机构 南京天华专利代理有限责任公司 32218 代理人 夏平;瞿网兰
主权项 一种Linux下基于网卡驱动的零拷贝以太网报文捕获及发送的实现方法,其特征是它包括以下步骤:首先,在内核态报文驱动模块中建立捕包队列、报文释放队列、报文缓存队列及发送队列以实现对报文的管理,并创建相应的报文填充线程、报文释放线程及报文发送线程; 其次,在加载网卡驱动且打开相应的网卡设备时,立即向前述报文驱动模块进行网卡设备注册,获得相应的报文发送接口;第三,在用户进程中将整个物理内存映射到用户空间,使得用户进程能够直接访问整个物理内存;第四,当用户进程需要进行报文捕获或者发送时,用户进程通过Linux下的/proc文件项方式通知内核态报文驱动模块进行初始化工作,内核态报文驱动模块创建相应资源及记录用户进程的初始配置,内核态报文驱动模块初始化成功后,用户进程映射相应资源到用户空间;最后,采用物理地址在用户态和内核态之间进行数据交互,在用户态使用过程中将用户态的物理地址转换为虚拟地址,在内核态使用过程时,将内核态的物理地址转换为内核虚拟地址,以实现零拷贝的以太网报文捕获及发送。
地址 211100 江苏省南京市江宁开发区将军大道55号腾飞创造中心A座3层