本系列想从这几个方向聊
- 整套系统它的受众业务,为何要探讨和学习
- 网络协议栈开发基础知识,各模块角色的定位,为什么要设计这几个模块
- 如何进行设计框架、工作线程模式、各模块如何高效协作
本系列讨和可学习的知识点
基础模块定位
线程竞争处理
负载均衡设计
工作模式设计
快慢的分离
为什么开启本系列文章
应用层网络协议栈的开发,它是一套通用的解决网络需求的系统,网络需求指的是对网络数据的监控、审计、研判、提取、防护、可视等;具体比如现在要对一个公司,整个高校,一个地区互联网出入口流量做一个检查,检查该地区是否有人使用QQ传输非法文件,监测公司是否有人上班摸鱼,高校是否有人考试作弊(基于网络作弊手段),电脑或服务器是否被黑客攻击,被攻击了后的防护措施,这些都在网络协议栈的业务范畴中。
本系统对比交换机和路由器的业务,它们同样处理网络流量,但是交换机和路由器只是处理网络的二、三层,再往上的内容不再做进一步处理了。
学习和探讨应用层网络协议栈的开发的目的有:
- 其一是普及网络协议栈产品开发,帮助新手或为入行,并想从事网络产品类研发的同学尽快入行,了解开发需要的基础知识,行业的业务面知识;
- 其二深层次探讨,系统设计,实现方式,算法的优缺点,通用性,专用性的一些技术细节,学习并改进。
应用协议栈-捕获模块:
回顾下
捕获模块主要是针对互联网上传输的流量进行捕获,捕获的目的是将二进制的bit数据,提供给后续的模块进行解析、信息提取、审计、研判等等,以支撑市场的业务需求。
如何捕获流量
终于来到讨论如何进行捕获的议题了,我们知道捕鱼需要用渔具,捕获网络流量也是需要有网具,它就是网卡。
网卡即是计算机和网络传输介质之间的接口,它将计算机上的数据转换为可在网络上传输的格式,并且能够接收网络上的数据包,将其解码并传递给计算机,最终传递到app程序上,呈现给用户体验。无论如何,网络流量都是通过网路适配器(网卡)、传输介质(网线、光缆、无线波等)、才能确保数据能够正确无误地在计算机之间传输。
网卡本身是一组硬件,显然我们开发的应用协议栈-捕获模块程序是软件,软件需要通过驱动程序才能操作硬件。好,逻辑清晰了,整理下流程:
图 流量捕获流程
如何捕获,流程如上图所示了。
如何考虑设计
通过捕获流量流程图,整理以下常识:
- 捕获模块是通过调用网卡驱动,操作网卡来捕获网络流量的;
- 网卡驱动一般是由网卡硬件厂商提供,集成在操作系统内核中,或者第三方一些解决方案中;
- 捕获模块抓取的网络流量,会送入后续的解码模块;
做以下解读:
第一点说的是用户态程序操作网卡需要通过驱动程序;
第二点说的是要调用网卡驱动,需要通过内核接口或者第三方解决方案提供的接口;
第三点指的是捕获模块和解码模块之间需要传递数据,需要交互。
所以,捕获模块作为一个用户态程序,大的方向需要考虑两点,一是选择合适的内核或者第三方提供的网卡驱动的系统调用方案;二是设计好捕获模块和后续模块间的数据交互。
再往下分解一步:
- 捕获流量的待选方案有libpcap、netmap、pfring、afpacket、xdp、dpdk...等;
- 模块间的设计主要考虑的是,交互流程是同步还是异步,数据如何存储和传递;
- 如何合理利用系统资源,才能达到高效的处理,合理的利用。
下一章将详细针对以上三点设计展开,详细聊一些...
待续!