Fine Packet Builder的系统构成

 
FPB 主要由三部分构成,分别为协议模块模型类库、运行库和内置协议定义。协议模块模型类库是为了描述协议语法表示语言( Protocol Syntax Notation, 简称 PSN )的结构而用 EMF 定义的模型类库,定义协议的模块文件的内存模型就使用该模型类库来构建。运行库是 FPB 的主体,它包括文件编译器、通用 CD 架构和 Pcap 通信等功能模块。内置协议定义由根据 PSN 所描述的协议模块文件和协议编码扩展类库两部分构成。
 
 
 
上图 描述了 FPB 的系统构成概况。系统的三大构成部分中,模块模型由“模块模型对象”来表示,运行库由“ FPB 运行库”来表示,内置协议定义由“模块文件”和“协议编码扩展类库”来表示。图中“模块描述对象”内的元素与“模块模型对象”内的元素一一对应,模型对象只具有模块内元素的数据模型,而编码和解码等具体功能则包含在描述对象内,所以解码、编码、数据完整性验证以及值对象的创建和文本描述的取得等功能最终都要通过“模块描述对象”来完成。图中“值对象”与模块文件中所能描述的值类型的种类相匹配,用来存储协议中字段的具体值。
FPB 中的协议定义以协议模块为单位来管理,在系统启动时并不将所有的协议模块载入,只是将所有搜索路径上的合法( .module 为扩展名)协议模块文件以 Proxy 形式在 Module Registry 中登记一下,在实际使用时才将完整内容载入内存,这就是所谓的“延迟载入技术”。比如在创建协议模块文件中所描述类型的值对象时,首先通过 Module Registry 来取得 Value Factory Value Factory 与协议模块文件是一一对应的,当该协议模块还没有载入时 Module Registry 则会调用 Module Parser( 通过 ANTLR 编译类库 ) 来编译外部的协议模块文件,然后从得到的 ModuleExt( 模块描述对象 ) 哪里取得 Value Factory ;接着用 Value Factory 来创建值对象。另外,编码和解码操作通过 Value Serializer 来完成,值对象的文本描述打印通过 Value Dumper 来完成,链路层的通信则通过 Pcap Socket 来完成。还需特别指出,针对 HTTP 协议等基于流协议的解码 FPB 提供了增量解码的功能,也就是将非连续的数据存入 Ensurable Bit Buffer 中, Value Serializer 则通过该 Buffer 对象来取得数据并用阻塞方式完成面向流的解码。

[1] ANTLR Another Tool for Language Recognition 的缩写,是开发编译器的辅助工具。
 
[2] EMF Eclipse Model Framework 的缩写,用来定义通用软件模型的架构。

你可能感兴趣的:(职场,休闲)