fix/fast协议中PMAP(存在图)和Sequence的解析要点

fix/fast协议中PMAP(存在图)和Sequence的解析要点

吴旻

泰岩网络工作室

因为升级的原因,我整理了一个从前的兄弟写的FIX/FAST解析代码。其中一直让我看不懂的是PMAP和Sequence的解法(因为代码事实上是有问题的),我也没找到相关的文档。下载了Quickfast的安装包,费了牛劲安装好,发现更复杂。好在只用到了一点点,算是把这两件事弄明白了。

         PMAP可能没有。

这是一个致命的陷阱。一个正常的消息第一个数据就是PMAP,而且这个PMAP的第一个bit就是指后面有没有此消息的TID。正常的消息一定会有PMAP。

但对于Sequence来说,它后面的第一个数据是这个Sequence的长度。再下一个数据可能是PMAP,也可能是正式的数据。有还是没有,判断错了,后面就全错了。

由于找不到相关的文档,只好查Quickfast的代码。Quickfast的代码显示,有没有PMAP是根据这个template中所有的filed是不是可能用到PMAP有关。如果说,这个template中所有的字段都不需要使用PMAP就能判断出来,那就不会有PMAP出现。比如下面的例子:

<sequence name="BidPriceLevel"presence="optional">

<lengthname="NoBidPriceLevel" id="10068"presence="optional"/>

<int64name="BidSize" id="134"/>

<int32name="BidPx" id="132" decimalPlaces="3"/>

</sequence>

因为Sequence里的field操作符是None,所以这个Sequence就不会有PMAP。有还是没有,是在加载模板后,就要算出来的。

         Sequence的长度显式和隐式表示法。

上面的例子中,Sequence下的第一个field指的是全部Sequence的个数,只需要读取一次就够了。千万别把它当成是Sequence中的field。另一种隐式的写法也许更理一些,如下:

<sequence id="73" presence="optional"name="Orders">

<uInt32 id="38" presence="mandatory"name="OrderQty" />

</sequence>

         FAST模板是个自相似的结构。

自相似是分形的另一个表述,就是整体和局部非常像,单独拿出来,你分不清哪是整体,哪是局部。这个用函数表述就是递归,一层一层调用,但调用的是同一个函数。quickfast用几十个类去解析,我只用了3个类就做完了。

fix/fast协议中PMAP(存在图)和Sequence的解析要点

时间: 2024-10-11 08:16:16

fix/fast协议中PMAP(存在图)和Sequence的解析要点的相关文章

STP 3 - 生成树协议中4个guard 和 3个fast加一个filter

最近出的几个问题总是和生成树协议有问题,复习的时候顺带总结,温故而知新. 先上一个大牛总结的图(Vinny), 总结的非常好,你看完后面的文章再来看这张图就会会心一笑 - i got it ! 先讲下计时器,不论什么协议总是有些计时器,Hello数据包什么的.尤其到路由协议,怎么建立邻居关系,怎么通知拓扑改变,各种不同路由协议是各显神通. 所以在理解的时候最好要了解为什么这些协议需要计时器等等,这样我们就可以以不变应万变. STP Timer  (计时器的配置在当前交换机成为根桥时有用,因为默认

http协议中的编码和解码

http://www.csdn1 2 3.com/html/itweb/20130730/29422_29378_29408.htm ****************************** 一.字符集与文字编码简介 1. 计算机如何显示文字 我们知道,计算机是以二进制的“形式”来保存和处理数据的,也 就是说,不管我们使用键盘进行输入,还是让计算机去读取一个文本文件,计算机得到的原始内容是一些二进制序列,当需要对这些二进制序列进行显示时,计算机 会依照某种“翻译机制”(也就是编码方式),取到

Socks5协议中文文档

译者:Radeon(Radeon [email protected]) 译文公布时间:2001-6-18 文件夹 1.介绍 2.现有的协议 3.基于TCP协议的客户 4.请求 5.地址 6.应答 7.基于UDP协议的客户 8. 安全性考虑 9. 參考书目 1.介绍 利用网络防火墙能够将组织内部的网络结构从外部网络如INTERNET中有效地隔离,这样的方法在很多网络系统中正变得流行起来.这样的防火墙系统通常以应用层网关的形式工作在两个网络之间,提供TELNET.FTP.SMTP等的接入.随着越来越

TCP 协议中MSS的理解

在介绍MSS之前我们必须要理解下面的几个重要的概念.MTU: Maxitum Transmission Unit 最大传输单元MSS: Maxitum Segment Size 最大分段大小PPPoE: PPP Over Ethernet(在以太网上承载PPP协议),就是因为这个协议的出现我们才有必要修改我们的MSS或者是MTU值.MTU最大传输单元,这个最大传输单元实际上和链路层协议有着密切的关系,EthernetII帧的结构DMAC+SMAC+Type+Data+CRC          

SPI总线协议及SPI时序图详解

SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口.SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议.SPI是一个环形总线结构,由ss(cs).sck.sdi.sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换. 上升沿发送.下降沿接收.高位先发送.上升沿到来

tcp协议中mss的理解

在介绍MSS之前我们必须要理解下面的几个重要的概念.<blockquote>MTU: Maxitum Transmission Unit 最大传输单元MSS: Maxitum Segment Size 最大分段大小PPPoE: PPP Over Ethernet(在以太网上承载PPP协议),就是因为这个协议的出现我们才有必要修改我们的MSS或者是MTU值.</blockquote>MTU最大传输单元,这个最大传输单元实际上和链路层协议有着密切的关系,EthernetII帧的结构&l

PBOC协议中对于所有电子存折/电子钱包应用的预处理

下图给出了PBOC协议中规定的对电子存折/电子钱包应用的所有交易类型共有的预处理流程 图1 1.1 插入卡片 终端应具有检测IC卡是否已经插入读卡器的功能.如果IC卡已经插入,终端将继续执行1.2的应用选择功能 1.2 应用选择 成功地选择了电子存折/电子钱包应用后,IC卡回送包含发卡方专用数据在内的文件控制信息.表1定义了此应用必备的发卡方专用数据. 表1 1.3 IC卡有效性检查 对于SELECT命令回送的数据,终端将对这些数据进行以下检查:——该卡是否在终端存储的黑名单3卡之列(使用发卡方

LWIP协议中tcp_seg结构相关指针的个人理解

最在在研读老衲五木写的那本<嵌入式网络那些事儿:LWIP深度剖析与实战>书的时候,由于项目的需要,操作LWIP协议中TCP层的tcp_seg结构指针.遇到了问题: 对 如上图所示,其tcp_seg中的dataptr指针和payload指针全都指向了TCP数据部分.而在老衲五木的那个博客文档中确写成如下: 对应的图为: 上下存在一些出入.因此我查阅了一下tcp_enqueen()函数(在tcp_out.c中).其源代码如下: 重点在上图红箭头部分那个pbuf_header(seg->p,T

DTLS协议中client/server的认证过程和密钥协商过程

我的总结:DTLS的握手就是协商出一个对称加密的秘钥(每个客户端的秘钥都会不一样),之后的通信就要这个秘钥进行加密通信.协商的过程要么使用非对称加密算法进行签名校验身份,要么通过客户端和服务器各自存对方信息进行对比校验身份. 1.DTLS介绍 1.1 DTLS的作用 互联网先驱们最开始在设计互联网协议时主要考虑的是可用性,安全性是没有考虑在其中的,所以传输层的TCP.UDP协议本身都不具备安全性.SSL/TLS协议是基于TCP socket,利用加密.基于数字证书的身份验证等机制在传输层和应用层