探讨应用层网络协议栈设计-捕获模块(一)

系列想从这几个方向聊

  1. 整套系统它的受众业务,为何要探讨和学习
  2. 网络协议栈开发基础知识,各模块角色的定位,为什么要设计这几个模块
  3. 如何进行设计框架、工作线程模式、各模块如何高效协作

系列讨和可学习的知识点

基础模块定位

线程竞争处理

负载均衡设计

工作模式设计

快慢的分离


为什么开启本系列文章

应用层网络协议栈的开发,它是一套通用的解决网络需求的系统,网络需求指的是对网络数据的监控、审计、研判、提取、防护、可视等;具体比如现在要对一个公司,整个高校,一个地区互联网出入口流量做一个检查,检查该地区是否有人使用QQ传输非法文件,监测公司是否有人上班摸鱼,高校是否有人考试作弊(基于网络作弊手段),电脑或服务器是否被黑客攻击,被攻击了后的防护措施,这些都在网络协议栈的业务范畴中。

本系统对比交换机和路由器的业务,它们同样处理网络流量,但是交换机和路由器只是处理网络的二、三层,再往上的内容不再做进一步处理了。

学习和探讨应用层网络协议栈的开发的目的有:

  • 其一是普及网络协议栈产品开发,帮助新手或为入行,并想从事网络产品类研发的同学尽快入行,了解开发需要的基础知识,行业的业务面知识;
  • 其二深层次探讨,系统设计,实现方式,算法的优缺点,通用性,专用性的一些技术细节,学习并改进。

应用协议栈-捕获模块

回顾下

捕获模块主要是针对互联网上传输的流量进行捕获,捕获的目的是将二进制的bit数据,提供给后续的模块进行解析、信息提取、审计、研判等等,以支撑市场的业务需求。

如何捕获流量

终于来到讨论如何进行捕获的议题了,我们知道捕鱼需要用渔具,捕获网络流量也是需要有网具,它就是网卡。

网卡即是计算机和网络传输介质之间的接口,它将计算机上的数据转换为可在网络上传输的格式,并且能够接收网络上的数据包,将其解码并传递给计算机,最终传递到app程序上,呈现给用户体验。无论如何,网络流量都是通过网路适配器(网卡)、传输介质(网线、光缆、无线波等)、才能确保数据能够正确无误地在计算机之间传输。

网卡本身是一组硬件,显然我们开发的应用协议栈-捕获模块程序是软件,软件需要通过驱动程序才能操作硬件。好,逻辑清晰了,整理下流程:

 

图 流量捕获流程

如何捕获,流程如上图所示了。

如何考虑设计

通过捕获流量流程图,整理以下常识:

  1. 捕获模块是通过调用网卡驱动,操作网卡来捕获网络流量的;
  2. 网卡驱动一般是由网卡硬件厂商提供,集成在操作系统内核中,或者第三方一些解决方案中;
  3. 捕获模块抓取的网络流量,会送入后续的解码模块;

做以下解读:

第一点说的是用户态程序操作网卡需要通过驱动程序;

第二点说的是要调用网卡驱动,需要通过内核接口或者第三方解决方案提供的接口;

第三点指的是捕获模块和解码模块之间需要传递数据,需要交互。

所以,捕获模块作为一个用户态程序,大的方向需要考虑两点,一是选择合适的内核或者第三方提供的网卡驱动的系统调用方案;二是设计好捕获模块和后续模块间的数据交互。

再往下分解一步:

  1. 捕获流量的待选方案有libpcap、netmap、pfring、afpacket、xdp、dpdk...等;
  2. 模块间的设计主要考虑的是,交互流程是同步还是异步,数据如何存储和传递;
  3. 如何合理利用系统资源,才能达到高效的处理,合理的利用。

下一章将详细针对以上三点设计展开,详细聊一些...

待续!

  • 15
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值