<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /> <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
FPB主要由三部分构成,分别为协议模块模型类库、运行库和内置协议定义。协议模块模型类库是为了描述协议语法表示语言(Protocol Syntax Notation,简称PSN)的结构而用EMF定义的模型类库,定义协议的模块文件的内存模型就使用该模型类库来构建。运行库是FPB的主体,它包括文件编译器、通用CD架构和Pcap通信等功能模块。内置协议定义由根据PSN所描述的协议模块文件和协议编码扩展类库两部分构成。
 
 
Fine Packet Builder的系统构成
 
上图描述了FPB的系统构成概况。系统的三大构成部分中,模块模型由“模块模型对象”来表示,运行库由“FPB运行库”来表示,内置协议定义由“模块文件”和“协议编码扩展类库”来表示。图中“模块描述对象”内的元素与“模块模型对象”内的元素一一对应,模型对象只具有模块内元素的数据模型,而编码和解码等具体功能则包含在描述对象内,所以解码、编码、数据完整性验证以及值对象的创建和文本描述的取得等功能最终都要通过“模块描述对象”来完成。图中“值对象”与模块文件中所能描述的值类型的种类相匹配,用来存储协议中字段的具体值。

FPB中的协议定义以协议模块为单位来管理,在系统启动时并不将所有的协议模块载入,只是将所有搜索路径上的合法(.module为扩展名)协议模块文件以Proxy形式在Module Registry中登记一下,在实际使用时才将完整内容载入内存,这就是所谓的“延迟载入技术”。比如在创建协议模块文件中所描述类型的值对象时,首先通过Module Registry来取得Value FactoryValue 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] ANTLRAnother Tool for Language Recognition的缩写,是开发编译器的辅助工具。

 
[2] EMFEclipse Model Framework的缩写,用来定义通用软件模型的架构。