SIG-MODULE作为实现DPI 7层协议识别功能的公用程序组件,以二进制函数库的形式嵌入到具体的网络产品中。具体的网络产品通过调用SIG-Module的API,获取SIG-Module的DPI 7层协议识别能力。SIG-Module要求输入的网络报文经过预处理,将同一源IP的报文递交给同一个SIG-Module实例进行识别处理,要求对流初步解析,包括L2~L4报文的解析,及IP碎片重组、IP包保序。 
SIG-Module还要求外部系统提供流识别中间结果的传递能力,即SIG-Module会将流识别中间结果输出给外部系统,在该流的下一个报文送给SIG-Module识别时,SIG-Module要求外部系统将上一次该流识别的中间结果一并送给SIG-Module。这通常需要外部系统建立和维护流结点。 
SIG-Module输出被识别流的协议类型,如果识别不成功则输出“未知”协议类型。如果识别未完成,SIG-Module会输出流识别中间结果。 外部系统基于SIG-Module提供的流的协议/应用类型,可以进一步进行流量统计、带宽控制、协议内容/事件解析等处理。 

解决方案 »

  1.   

    功能分解
    考虑到部署的灵活性,将CBB分为SAM-C和SAM-A两个处理部分。SAM-C负责升级处理,根据升级配置信息,获取知识库。SAM-A为SAM的核心处理部分。获取知识库信息并按指定的配置信息和license信息进行数据包检测,输出告警、日志信息和相应的识别结果信息。 SAM-C与SAM-A可以分开部署,也可以部署在一起。如SAM-C部署在主控板,SAM-A部署在业务板;也可同时部署在集中处理的CPU。分布式部署需要每个SAM –A上都自定义策略。
      

  2.   

    前期准备
    首先用户需要熟悉SIG-Module的框架及其基本功能,可以参考“基础知识和术语”。 其次,要注册SIG-Module组件需要的各种系统函数。SIG-Module组件不依赖于系统,不依赖于平台,对于通用的文件操作、内存操作、定时器、互斥锁、读写锁、字符串转换等处理函数需要由适配层注册到组件。具体细节可参考系统初始化过程。 
      

  3.   

    SAM-A实例初始化
    接口原型: SAM_INT32 SAM_EngineInit([In] SAM_UCHAR *pucAllocBuf,[In] SAM_ULONG ulBufLen,[In]SAM_CHAR *pcFilePath[In]SAM_ULONG ulFlowScope,[In]SAM_ULONG ulRelationScope)接口描述: SAM-A实例初始化调用条件: 在调用通用基本函数注册后调用。
      

  4.   

    输入参数: pucAllocBuf: 外部系统提供给SAM-A使用的内存地址ulBufLen: 如上内存空间的大小, 该内存大小根据需要流规模以及关联表规模给出。pcFilePath: SAM-A系统工作目录路径名。 如果为空则不存储配置内容(系统知识库,License,自定义知识库) 。 如果在该路径下存在配置文件samaconf.cfg. 则初始化函数会导入该配置文件,并将其中的配置项作为该SAM-A实例的默认配置。如果在SAM-A运行中,外部系统通过配置接口修改了配置,SAM-A将自动更新系统文件路径下的配置文件。 注:对于不同的SAM-A实例,应该使用各自独立的工作目录。否则会由于多个SAM-A实例操作同一个配置文件,而导致配置信息不能正确保存到文件中。 ulFlowScope: 流的规模ulRelationScope: 关联表规模注:外部分配的内存大小应该与流和关联表的规模一致。(单位:字节)1.固定大小分配的有:46,864,348
    2.AC模式库以及规则需要内存,30M(含主备):31,457,280
    3.关联表项(28) * 关联表规模 
    4.流节点(20) * 流规模
    5.多包节点(40) * 流规模
    6.多流节点(36) * 流规模
    举例:在流规模100000。关联规模50000情况下需要内存: 89,321,628
    在流规模1000000。关联规模500000情况下需要内存:188,321,628输出参数:无
      

  5.   

    返回值:SAM_OK: 成功SAM_ERR_NOMEM: 提供内存不足SAM_ERR_ENGINE_INITED: 只能初始化一个实例SAM_ERR_PARAMETER: 参数错误SAM_ERR_LIB_NOTINITED 基本回调函数未初始化SAM_ERR_ENGINE_OTHER: 其它错误其它: 无数据结构: 无