探讨应用层网络协议栈设计-基础篇(一)

本篇想从这几个方向聊:

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

本篇探讨和可学习的知识点:

基础模块定位

线程竞争处理

负载均衡设计

工作模式设计

快慢的分离


为什么开启本篇文章:

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

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

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

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

大白话说模块设定:

模块角色

  • 一个完整的处理应用层网络的协议栈必需要包括如下几个模块:
  • 捕获模块
  • 解码模块
  • Flow模块
  • stream模块
  • app模块
  • 可能还需要额外的:
  • log模块(debug,output,statis)
  • channl模块(分布式,上报,信令)
  • 针对必要的核心模块设定的原由,我做以下解读:
捕获模块

为什么要设定一个捕获模块的角色,捕获指的是捕获网络数据,你想,处理网络的协议栈,它的输入源会是什么,输入源当然就是网络流量了,网络流量指的就是在网线,光纤等介质中传输的bit数据,宏观上看就是刷抖音,看头条,玩游戏,微信视频等一切需要通过联网来完成的动作,都是会产生网络流量的源。那么问题来了,设计一个处理各种应用协议的网络协议栈,第一步是不是需要捕获这些数据,即收集网络流量,那么捕获模块的设定就合乎情理了。

解码模块

解码模块指的是什么呢?网络流量,Ethernet的流量它想在介质中传播,比如北京的王伟发微信给南京的李浩,这条微信的信息(数据帧)在介质中需要经过漫长的传播,它可能先从北京传输到上海,从上海传输的山东,从山东再传输到南京,中间有N个转发设备帮助该条数据帧准确的送达到南京居住的李浩手中。你想呀,中间的N个转发设备凭什么能帮助王伟将微信信息(一个数据帧)准确的传达到李浩手中,它们之间必然是要相互认识,要想相互认识,是不是需要穿统一“服装”,那么这个统一服装套在数据帧上,就是在定义数据帧的格式,当数据帧有一套标准的格式,好了,你好我好大家好,都可以相互认识,相互传播了,事实也正是如此。说了这么多,解码模块的角色该出现了,它就是按照数据帧的格式处理数据帧,因为要想知道传输的数据,就得按照数据帧的格式解开它。

Stream模块:

在网络中,Stream表示的是一种动态数据流,它强调的是一个个数据包能够有序,准确,完整的到达目的地方。怎么理解Stream?它好比是一个条大河中的鱼群或是船队,一个航海船队他的目的性,安全性,纪律有序是多么的重要,这样才能正确的到达目的地。正是如此,我们需要设定一个Stream模块的角色,Stream模块就是来解读数据流它有序,准确,完整的规则,我们只有通过Stream模块按照对不同数据流的规则进行解读,才正确获取到其传达的数据信息,才能做进一步的数据处理。

Flow模块:

Flow直译为(数据)流,区别于stream,可以这么理解,现在有一条宽阔的河流,河里面有各种各类的鱼群,那么这条河流就是Flow,不同的鱼群就是不同的stream,组成鱼群的一条条鱼就是传输的数据包了。这样相关概念就理解了,那为什么要设定Flow模块角色?捕鱼是不是需要去河边,找到河流是第一步,所以Flow的角色必须得有,需要通过Flow找到stream,通过stream再抓捕和解析到具体的数据包(鱼)。Flow模块区别于Stream模块,Flow注重的是整个网络流量,流量的大小,流量的速度(并发),流量的周期管理;Stream关注的具体的数据流,具体的数据流信息如何在Flow准确,有序,完整的传输。

app模块:

app模块是应用层协议解析模块,app(应用层)协议是承载在Stream中的,所以app协议能准确的表达信息,比如app能让我们体验一场电影,一个游戏,刷抖音等等,这绝大部分都得益于Stream的完整,有序,准确的数据流管理能力。app模块它是一个具体的业务面的模块了,这么理解,比如我要做一个审计网络产品,需要记录每个抖音用户的账号登录时间(摸鱼员工监测),抖音用户这个数据信息就需要通过app模块来做解析了,我们需要通过app模块解析抖音传输相关协议,从而提取出用户名和登录时间。不同的app可能分析方法大相径庭,所以app模块的设计非常重要。如何统一框架,如何将差异抽象出来,一个设计合格的app模块,它不应该需要频繁的调整代码,来新增app信息的解析。

你可能感兴趣的:(网络协议,网络,系统架构)