轻量级STEP会话层接口规范.docx

上传人:b****6 文档编号:7839715 上传时间:2023-01-26 格式:DOCX 页数:46 大小:617.60KB
下载 相关 举报
轻量级STEP会话层接口规范.docx_第1页
第1页 / 共46页
轻量级STEP会话层接口规范.docx_第2页
第2页 / 共46页
轻量级STEP会话层接口规范.docx_第3页
第3页 / 共46页
轻量级STEP会话层接口规范.docx_第4页
第4页 / 共46页
轻量级STEP会话层接口规范.docx_第5页
第5页 / 共46页
点击查看更多>>
下载资源
资源描述

轻量级STEP会话层接口规范.docx

《轻量级STEP会话层接口规范.docx》由会员分享,可在线阅读,更多相关《轻量级STEP会话层接口规范.docx(46页珍藏版)》请在冰豆网上搜索。

轻量级STEP会话层接口规范.docx

轻量级STEP会话层接口规范

 

轻量级STEP会话层接口规范

(LFIXT会话协议)

Version1.00

 

LightweightFixSessionLayerProtocol

 

本规范由上海证券交易所和深圳证券交易所联合发布

 

2015-08-28

 

文档说明

文档名称

轻量级STEP会话层接口规范

内容描述

描述了轻量级的STEP会话协议相关内容。

修订历史

日期

版本

修订说明

2014-01-20

0.8

创建

2014-3-26

1.00α

根据会员反馈意见进行修订:

1.增加了REJECT消息2.修正了一些文字错误3.将LFIXT协议细分为兼容模式和精简模式,并列明协议兼容性矩阵及典型应用场景;4.为Logon消息增补了会话状态字段5.根据会员反馈意见增补了字段长度说明;6.解释了什么叫做GarbledMessage7.根据正文的变更修订了附录

2014-04-10

1.00α1

1.修正了tag1408的说明文字,1.00α中写的“STEPn.x.y”并不合乎当前STEP协议的版本命名规则。

2.修正4.2节中tag49,tag56的说明文字及ResetSeqNumFlag的tag。

3.修正附录H中关于Reject消息检查的一个笔误

除此之外,本版本和1.00α内容并无不同。

2014-08-10

1.00α2

1.补充了一些字段的最大宽度说明

2.修正MessageEncoding的说明,令缺省值为GBK

2014-10-20

1.00β1

1.将版本名称从1.00α2重命名为1.00β1

2015-08-28

1.00

1.将版本名称从1.00β1重命名为1.00

名词释义

词汇缩写

含义

STEP

SecuritiesTradingExchangeProtocol

证券交易数据交换协议。

FIX

FinancialInformationExchange

金融信息交换协议。

目录

一、范围1

二、会话机制2

2.1术语和定义2

2.1.1会话层重传2

2.1.2应用层重传2

2.1.3NxtIn和NxtOut2

2.1.4会话发起方和接受方2

2.1.5消息序号3

2.1.6心跳4

2.1.7有序消息处理4

2.1.8可能的消息重复传送4

2.1.9可能的消息重新发送5

2.1.10消息完整性5

2.1.11混乱的消息(garbledmessage)5

2.1.12消息确认6

2.1.13加密6

2.2会话管理6

2.2.1建立会话6

2.2.1.1建立连接6

2.2.1.2身份认证6

2.2.1.3消息同步7

2.2.2消息交换7

2.2.3注销会话7

2.3恢复7

2.3.1登录消息处理7

2.3.2重传请求消息处理7

2.3.3序号重设消息处理8

三、消息定义9

3.1消息结构9

3.1.1消息头9

3.1.2消息尾9

3.2管理消息10

3.2.1Heartbeat心跳消息(MsgType=0)11

3.2.2Logon登录消息(MsgType=A)12

3.2.3TestRequest测试请求消息(MsgType=1)13

3.2.4Resend重发请求消息(MsgType=2)13

3.2.5Reject会话拒绝消息(MsgType=3)14

3.2.6SeqReset序号重设消息(MsgType=4)16

3.2.7Logout注销消息(MsgType=5)16

四、数据字典18

4.1数据类型18

4.2会话层域定义19

附 录 A21

(登录场景)21

正常登录场景一21

正常登录场景二21

正常登录场景三22

异常登录场景一24

异常登录场景二24

附 录 B26

(注销场景)26

正常注销场景26

附 录 C27

(处理重传请求场景)27

处理重传请求场景一27

处理重传请求场景二28

附 录 D30

(处理心跳和测试请求)30

处理心跳和测试请求30

附 录 E31

(处理会话拒绝)31

处理会话拒绝31

附 录 F32

(计算校验和)32

计算校验和32

附 录 G33

(状态转换参考图)33

LFIXT会话协议状态转换参考图33

附 录 H34

(实现参考)34

LFIXT会话协议实现参考34

1.Logon消息34

2.Heartbeat消息35

3.TestRequest消息35

4.ResendRequest消息35

5.SeqReset-Reset消息36

6.SeqReset-GapFill消息36

7.Reject消息37

8.Logout消息37

9.应用消息37

轻量级STEP会话协议接口规范

一、范围

本标准对STEP会话层协议(即FIX会话层协议FIXT1.1版本)进行了裁剪和改造,确立了一个基于TCP的轻量化STEP会话层协议(记作:

LFIXT会话层协议),同时LFIXT标准仍然可以保持和标准STEP/FIX会话层协议的互操作性。

本标准规定了LFIXT会话层协议使用的会话机制、消息格式、安全与加密、数据完整性、扩展方式、消息定义、数据字典等内容。

如无特别说明,本标准中提及的接收方、发送方等通信参与方均特指遵循LFIXT会话层协议而实现的应用程序或模块。

由于遵循本协议开发的程序或模块将可以同标准FIX引擎进行正常通信,因此若通信的一方是标准的FIX引擎,则除本文特别制订的少数额外约束外,其实现不受本文档约束。

二、会话机制

二.1术语和定义

二.1.1会话层重传

会话层重传是标准FIX会话层协议所规定的一种重传机制,用来确保有序、无失地传输每一条会话层消息。

在标准FIX会话层协议中,会话层重传由消息接收方在识别出消息序号缺口之际主动发起,采取的方式是发送一条消息重传请求给到对方。

LFIXT会话协议在事实上取消了标准FIX会话层协议的会话层重传,只对外仍然表现为标准的FIX会话层,且可以和对端的标准FIX会话层实现进行互操作。

由于单个LFIXT会话使用单个TCP连接作为底层通信机制,因此在单个TCP连接内部,每一条消息将被有序、无失地传输。

属于同一会话的、前后相继的若干次TCP连接之间,将可能存在会话层消息丢失,但收到的会话层消息将仍然具有有序接收的性质。

由于在LFIXT下会话层可能存在消息丢失,因此丢失的业务消息将只能通过应用层重传予以恢复。

二.1.2应用层重传

由于LFIXT会话协议的会话层恢复机制仅仅是为了与标准FIX会话协议兼容,不能作为真正的消息恢复机制使用。

因此,必须通过应用层商定的重传机制予以恢复。

应用层重传的具体机制不属于本文档规定的范畴,请参见具体的应用层数据接口规范。

二.1.3NxtIn和NxtOut

会话双方收发的每条消息都带有一个消息序号。

参与通信的每一端都需要维护一对序号(NxtIn,NxtOut),NxtIn表示下一个期望的入向消息序号,NxtOut表示下一条出向消息将被赋予的序号。

二.1.4会话发起方和接受方

会话的建立需要一个发起方,需要一个接受方。

发起方是先发出Logon消息并希望对方响应以一个Logon消息的一方,接受方则是等待发起方首先发出Logon消息并响应以Logon消息的一方。

会话的发起方和接受方在会话建立后都可以双向地进行消息的发送和接收。

不要将会话发起方(initiator)、会话接受方(acceptor)同某条特定消息的发送方(sender)和接收方(receiver)混为一谈。

类似于会话发起方和会话接受方,也定义有注销发起方和注销接受方、会话重置发起方和会话重置接受方的概念。

标准FIX协议原则上适用于各种不同的传输层协议(如UDP),因此不可能根据TCPsocket等特定的传输层信息来区分哪些报文隶属于同一个FIX会话,而且由于FIX中并不为每个FIX会话定义有所谓“会话号”标签,且不是全部报文都具有username一类的标签,因此区分FIX会话的唯一标识符只能是SenderCompID和TargetCompID的组合。

标准FIX协议中,单个FIX引擎不能同时维护相同SenderCompID+TargetCompID的两个会话。

标准所推荐的做法是:

在已存在一个合法会话时,若一方试图以同样的SenderCompID+TargetCompID发起新的会话,对方将不发送任何Logout消息就直接终止新发起的会话,原先已存在的会话不应受到影响。

标准FIX协议并未明确不同的FIX引擎是否允许同时保有同样标识的会话。

一般而言,同一台服务器上的同标识会话较易进行查重,针对不同服务器建立的同标识会话则较难实现查重,但也非无法做到。

LFIXT协议规定:

在处理入向登录报文时,应利用SenderCompID和TargetCompID进行会话查重,之前已存在的同标识会话一定不受影响,但较晚收到的同标识会话请求可能被接受,但也可能被拒绝,协议不作限定。

若请求被拒绝,则拒绝方式将遵循标准FIX协议的约定,不回送Logout消息,直接断开TCP连接。

会话发起方应当对这种情形做好准备。

LFIXT协议只允许单个会话同时通过单个TCP连接进行全双工通信,因此在通过登录报文信息确定是否允许继续通信后,可以直接利用socket来区分报文所属会话,但对于从同一socket上收到的后续报文仍应检查其SenderCompID和TargetCompID是否和登录时一致。

二.1.5消息序号

所有的消息都由一个唯一的会话层消息序号(即消息头中的MsgSeqNum字段)进行标识。

消息序号在会话开始时[一般]被初始化为1,并在整个会话过程中连续递增,直到该会话过程全部结束。

通过监视消息序号的连续性,通信双方可以识别消息缺口并做出反应,并可在同一会话的前后多个连接间进行同步。

每次会话都会创建一套独立的入向及出向的序号序列,参与连接的任何一方都维护一套用于出向消息的序号序列(NxtOut),同时也维护另一套独立的入向消息的序号序列(NxtIn),用以监视接收的消息序号,以保证消息缺口的发现和处理。

会话建立后,当LFIXT协议实现者接收到的消息序号不等于预期接收的消息序号(NxtIn)时,需要考虑进行修正处理。

这里有几种情况:

1.如果入向消息序号

表明发生了严重的错误,必须立即结束会话,并开始进行人工干预。

2.如果入向消息序号

3.如果入向消息序号>NxtIn,那么表明有消息被遗漏。

因为LFIXT使用TCP为传输协议,出现这种情况说明发生了严重异常错误,应立刻终止当前会话。

二.1.6心跳

在消息交换的空闲期间,连接双方将以规定的时间间隔产生心跳消息。

通过心跳消息可以监控通讯连接的状态并识别出入向消息序号的缺口。

心跳间隔时间由会话发起人通过登录消息的HeartBtInt字段确定。

在传送了任何消息(而不仅仅是心跳消息)之后,都应立即重置心跳间隔计时器。

心跳间隔时间应该得到连接双方的确认,由会话发起人给出,并得到会话接受方的确认。

连接双方应使用相同的心跳间隔时间。

每个心跳消息都将占用一个MsgSeqNum消息序号。

二.1.7有序消息处理

LFIXT会话协议采用TCP连接作为底层通信机制,会话建立后,在同一个TCP连接的延续期间,接收方在发现入向消息缺口时,说明发生了严重异常,建议接收方终止该会话并断开TCP连接。

如果接收方为会话的发起方,则应根据需要重建会话。

二.1.8可能的消息重复传送

本会话协议采用TCP连接作为底层通信机制,会话双方在建立TCP连接之后,通过Logon消息进行序号协商,其后则是基于TCP进行的连续通信,正常情况下,不应该出现前面消息丢失却收到后面消息的情形。

所以,1)在发现入向消息序号缺口时,LFIXT会话协议的实现者不会发送重传请求,而是回送Logout后直接断开连接,但2)允许在入向消息中出现重传请求(比如基于标准FIX引擎的通信对手方虽然收到前面的消息但自己没保存,并期望能按标准FIX会话层协议通过重传请求取回),对此LFIXT会话协议实现者将简单回送SeqReset-Reset消息予以打发,3)允许在入向消息中出现PossDupFlag=Y的消息(比如基于标准FIX引擎的通信对手方虽未收到本方发出的重传请求,但仅仅因为怀疑本方可能错过某些消息,而向本方发送这类PossDupFlag=Y的消息)。

二.1.9可能的消息重新发送

在LFIXT会话协议中,应用层重发的标志应在应用层协议中明确设置,而不应该体现在会话层消息的标志位上。

由于互操作的对方必须遵从同样的应用层协议,因此LFIXT会话协议将不会给出向消息打上任何PossibleResend标志。

LFIXT会话协议允许在入向消息头中出现PossibleResend标志,但将忽略该标志,直接将不附带该标志的消息交由应用层处理。

二.1.10消息完整性

消息数据内容的完整性可以用两种方式来验证:

验证消息长度,及字符的简单校验和。

消息长度被包括在BodyLength字段中,可以通过清点消息之中跟在BodyLength字段之后、直至并包括直接先于CheckSum域号(”10=”)出现的那个域界定符之间的字符来验证。

校验和的验证方法是:

从消息头中‘8=’中的‘8’开始、直到并包括直接先于CheckSum域号‘10=’出现的字符,将每个字符的二进制值加总后,将计算值的最低8位同CheckSum字段中的值进行比较。

二.1.11混乱的消息(garbledmessage)

根据标准FIXT协议的附录,当至少出现以下情形之一时,一条消息被称为“混乱的”:

BeginString(tag8)不是消息的第一个标签,或不以8=FIXT.n.m的形式出现。

BodyLength(tag9)不是消息的第二个标签,或未包含正确的字节计数

MsgType(tag35)不是消息的第三个标签

CheckSum(tag10)不是最后的标签,或其取值不正确

若MsgSeqNum(tag34)缺失,必须立刻终止FIX连接,因为这表明出现了严重的应用错误,很可能只能通过修改软件来绕过。

二.1.12消息确认

由于会话层协议是基于乐观的消息传输模式,通过监视消息序号发现缺口,不支持对每个消息收发的确认。

但大量消息收发的确认可在应用层定义。

在应用层接受和拒绝是允许的。

二.1.13加密

LFIXT会话层不对数据进行加密处理,会话双方可考虑使用通信层的加密机制。

二.2会话管理

LFIXT会话协议采用TCP连接作为底层通信机制。

若LFIXT会话协议的实现者作为会话的主动发起方,必须在每次新建TCP连接之后通过置位序号重设标志(ResetSeqNumFlag)的Logon消息来将起始消息序号重置回1,因此,此时会话和TCP连接是一一对应的。

虽然LFIXT会话协议可以被设计成底层使用两个独立的TCP连接,每个连接都以单工模式工作,但由于在TCP连接上实现全双工的通信并不困难且维护简单,因此LFIXT会话协议规定:

对于单个会话而言,同时只使用一个全双工的TCP连接。

若LFIXT会话协议的实现者作为会话的接收方,由于该会话的发起方可能是标准的FIX引擎,此时建立的会话可以跨越多个TCP连接。

在单次TCP连接内部,每个会话都分为三个部分:

建立会话、消息交换、终止会话。

二.2.1建立会话

建立会话包含三个步骤:

建立连接(即为建立TCP连接)、身份认证、消息同步。

二.2.1.1建立连接

LFIXT会话的发起方与接受方建立TCP连接。

LFIXT会话协议的实现者在TCP连接建立后,应当总是初始化NxtIn=1,NxtOut=1。

二.2.1.2身份认证

1.会话发起方发送登录消息(Logon),接受方认证发起方身份的合法性。

2.如果发起方身份通过认证,则接受方发送一个登录消息作回应。

3.如果认证失败,会话接受方则在可选地发送一个含失败说明的注销消息(Logout)后关闭连接。

发送注销消息并非是必须的,因为这样做会消耗一个序号,在某些情况下可能会引起其他问题。

4.会话发起方必须等待来自接受方的确认Logon消息,方可向接受方发送其他消息。

否则,接受方可能尚未准备好接收它们。

5.在发起方被认证后,接受方将立即回应一个确认Logon消息。

发起方将把从接受方返回的Logon消息作为“一个会话已经建立”的确认。

二.2.1.3消息同步

LFIXT会话协议并不提供真正的会话层重传机制,因此LFIXT会话协议的实现者作为会话的发起方,可通过会话重置消息(即ResetSeqNumFlag=Y的Logon消息)将会话双方的消息序号重置,来完成会话层消息同步。

LFIXT会话协议的实现者作为会话接受方,可以利用Logon消息中的NextExpectedMsgSeqNum来完成会话层消息同步。

这种方式提供了对标准FIX会话协议的消息同步的兼容,具体机制参见“登录消息处理”一节。

二.2.2消息交换

在建立会话之后,会话双方可以开始进行正常的消息交换。

交换的消息包括“管理消息”和“应用消息”,本规范仅对管理消息进行描述。

应用消息请参见具体的数据接口规范。

二.2.3注销会话

LFIXT会话的正常结束是通过连接双方互相发送注销消息(Logout),注销时不需要进行消息缺口检查。

若结束时没有收到回送的注销消息(Logout),则把对方视作已注销。

除此之外的其它方式的会话结束视为非正常,并应按错误来处理。

在结束会话之前,注销消息(Logout)的发起方应该等待对方回送的注销消息(Logout)。

如果接收方在一定时间内没有答复,那么会话就可以立即中断。

二.3恢复

LFIXT会话协议的会话层恢复机制是为了与标准Fix会话协议兼容,不能作为真正的消息恢复机制使用,会话对端应通过应用层的消息恢复机制来获得缺失的数据。

LFIXT会话协议的实现者只在建立会话阶段存在消息序号同步,在会话持续期间不提供真正的消息恢复,而是简单地通过回应SeqReset-Reset消息来打发消息重传请求。

二.3.1登录消息处理

LFIXT会话协议的实现者作为会话接收方,只需将本方NxtIn设置为发起方Logon消息的MsgSeqNum+1,NxtOut设置为发起方Logon消息中的NextExpectedMsgSeqNum(789)即可。

会话接收方不需要检查任何缺口,会话接收方也不会向发起方请求重传任何消息。

如果发送方没有提供NextExpectedMsgSeqNum字段,则NxtOut设置为1.

二.3.2重传请求消息处理

作为LFIXT会话协议的实现者不会主动发送重传请求,但可能收到标准的FIX会话协议实现者发送的重传请求。

当LFIXT会话协议的实现者收到重传请求时,会使用SeqReset-Reset消息重置发送方序号,而不会提供历史消息的重传。

二.3.3序号重设消息处理

LFIXT会话协议的实现者收到序号重设消息时,会根据序号重设消息中的NewSeqNo来重置本方NxtIn。

三、消息定义

三.1消息结构

每一条消息都由消息头、消息体、消息尾组成。

消息总是由标准消息头开始,标准消息尾结束。

三.1.1消息头

会话双方所有交换的消息具有如下标准的消息头。

每一个消息都由一个标准消息头开始。

消息头定义了消息的类型,长度,目的地,顺序号,起始点和时间等数据域,均不加密传输。

其中有两个域用于消息重发。

当作为会话级事件的结果而重复传送消息时,PossDupFlag被设置为Y,发送时沿用原来的消息序号;当[应用级]重新发送消息时,使用新的消息序号,并将PossResend设置为Y。

接收者应按以下方法处理上述消息:

PossDupFlag=Y:

如果以前曾经收到过带有该消息序号的某条消息,则忽略本消息,如果不是,则按正常步骤处理。

PossResend=Y:

不附带本标志地将消息传递给应用层,由其确定此前是否收到该消息

Tag

域名

必须

字段描述

8

BeginString

Y

起始串FIXT.1.1(总是不加密,必须是消息的第一个域)

9

BodyLength

Y

消息体长度(总是不加密,必须是消息的第二个域)

35

MsgType

Y

消息类型(总是不加密,必须是消息的第三个域)

49

SenderCompID

Y

发送方代码字符串(总是不加密)

56

TargetCompID

Y

接收方代码字符串(总是不加密)

34

MsgSeqNum

Y

消息序号,整数类型

43

PossDupFlag

N

会话层可能重传标志,重复传送时,作此标记

97

PossResend

N

应用层可能重发标志。

LFIXT会话层协议的实现者不会在出向消息中主动设置本字段,对于入向消息中出现的本字段将简单忽略

52

SendingTime

Y

发送时间,UTCTimestamp类型

347

MessageEncoding

N

消息中编码域的字符编码类型,缺省为GBK

三.1.2消息尾

会话双方所有交换的消息具有如下标准的消息尾。

每一个消息(管理或应用消息)都用一个消息尾终止。

消息尾可用于分隔多个消息,包含有3位数的校验和值。

Tag

域名

必须

字段描述

10

CheckSum

Y

校验和,总是消息的最末域,总是不加密

三.2管理消息

LFIXT会话协议支持标准FIX会话协议的所有管理消息,但不会主动发送所有管理消息。

LFIXT会话协议分两种模式:

精简模式和兼容模式,各自有不同的使用范围。

已知通信对手方为LFIXT会话协议实现者时,可以采用精简模式,此时只需要支持如下消息的接收和发送处理。

此时由于本方不会主动发送ResendRequest,因此根据协议也不会触发对方回应SeqReset-Reset,因此不需要处理入向的SeqReset-Reset消息:

管理消息类型

来自对方

本方发送

Heartbeat

Logon

Reject

Logout

表1 精简模式:

仅和LFIXT实现者通信时

当需要和基于标准FIX引擎的对手方进行通信时,必须采用兼容模式。

此时LFIXT会话协议实现者需要支持所有管理消息的接收,但仍然不需要支持所有管理消息的发送。

兼容模式和精简模式主要的区别只在于前者需要处理更多的入向管理消息。

管理消息类型

来自对方

本方发送

Heartbeat

Logon

TestRequest

ResendRequest

Reject

SeqReset-Reset

SeqReset-GapFill

Logout

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 教育学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1