IMIX协议分析 联系客服

发布时间 : 星期日 文章IMIX协议分析更新完毕开始阅读ed574615f18583d049645960

4.1.4 组件

在IMIX协议中,组件是一个逻辑概念,它用来表示一组彼此之间有一定关系的消息域的组合。这些组件在IMIX协议中都赋以相应的名称,用来更好的理解消息结构以及所应用的场景。在实际消息传送过程中,这些组件名称并不会作为信息消息中出现,可以这么说,组件的出现是起到更好让人能够理解IMIX消息结构的作用。

4.1.5 重复组

域可以在重复组里多次重复,用以传输数组同类的数据。在IMIX协议中,重复组也同样是一个逻辑概念,它用来表示一组彼此之间有一定关系的消息域的组合能够连续反复地在消息中出现。在实际消息传送过程中,这些重复组件名称也不会作为信息消息中出现。

通常域名起始为’No’字符的域指明重复的次数,并位于重复组的开始处。本文档中重复组的定义通过缩进的符号表示,重复组也可嵌套。使用子重复组时不能省略父重复组。

重复组内的第一个域是必需的。在协议执行时把第一个域用作“分隔符”,表明新的重复组的开始。如果第XXX号(NoXXX)域大于0,那么第XXX号后所列的第一个域就变成有条件的必需的域。

指明重复组号的第XXX号(NoXXX)域 (如:交易会话号( NoTradingSessions), 分配号(NoAllocs))在重复组内只出现一次,必需直接位于重复组的内容之前。

如果重复组内有一个域是必需的,那么第XXX号(NoXXX)域就应当是必需的。如果重复组内的所有参与方都是可选择性的,那么第XXX号域也应当是可选择性的。

如果重复组的某一个域是必需的,那么在重复组内每次重复时该域都应出现。 通过缩进的符号“→”对消息定义内的重复组进行指定。 重复组可嵌入其他重复组(可不止一层嵌套)。通过缩进的符号“→”后跟缩进的符号“→”的方式对嵌套的重复组进行指定。

有嵌套重复组时,必需对外层的重复组进行指定。 例如定义一重复组: 454 → → NoSecurityAltID 455 456 SecurityAltID N N 备选债券代码个数 备选债券代码 备选债券代码源 SecurityAltIDSource N

表 5重复组

则该重复组实际使用例子如下 454 → → → → → → NoSecurityAltID 455 456 455 456 455 456 SecurityAltID SecurityAltIDSource SecurityAltID SecurityAltIDSource SecurityAltID SecurityAltIDSource 3 债券1 财政部发行 债券2 企业发行 债券3 央行发行 表 6

在传送过程中,该重复组在消息中如下所示:

454=3455=债券1456=财政部发行455=债券2456=企业发行455=债券3456=央行发行

5. IMIX Protocol会话机制

为了保证IMIX会话能够能够正常的开始和终止,保证IMIX消息在传送过程不会发生的消息丢失引起的消息序列缺口问题,以及其他一系列与IMIX消息传送相关的问题,IMIX定义了一套会话机制,该会话机制通过定义特殊的消息域以及会话消息实现了会话登录,会话注销,消息缺口填补,消息重复发送等传送场景的处理过程,这些都是IMIX协议为了保证消息正确传送提供的一种解决方案。如果具体的IMIX协议的实现者能够通过其他的技术或者机制保证消息的正确传送,就不用实现IMIX会话机制。

5.1 消息序号

任何一条消息都被分配一个唯一的消息序号来加以标识,消息序号在每次会话过程中从

1 开始,在整个会话过程中连续递增,直到该会话过程全部结束。通过监视消息序号的连续性可识别交换中的消息缺口,并做出反应,使得连接双方数据同步。连接双方都明确确定相互独立的消息序号,参与连接的任何一方负责维护自己发送的消息序号,并监视接收的消息序号以保证消息缺口能被发现并加以处理。

5.2 心跳

在消息交换的空闲期间,连接双方将在规定的时间间隔内发出心跳消息。通过心跳消息可以监控通讯连接的状态,识别接收信息的序号缺口。心跳间隔时间由会话发起人在登录时,用登录中的心跳指令域(HeartBtInt)来加以确定。每次传送信息完毕之后,应立即重新设置心跳间隔计时器。心跳间隔时间应得到连接双方的确认,由登录会话发起方设定并得到登录接受方的确认回应。连接双方使用相同的心跳间隔时间。

5.3 缺口填补

本协议的消息传输模式是基于消息被完整传送的。但消息在传输过程中可能存在丢失,而消息发送方无法检测是否丢失了消息,因此消息接收方应负责检测消息的缺口并加以处理。有两种处理方法:(1)消息接收方发现缺口后向消息发送方请求发送缺口消息及其后的所有消息;(2)消息接收方发现缺口后,保存已收到消息,并向消息发送方请求重复发送缺口消息。

5.4 消息重复发送

在响应一个重发请求而重复发送消息时,或者不确定对方是否收到已发消息而重复发送该消息时,消息发送方须在被重发消息内加上可能重复标志(Possible Duplicate=Y)。如何处理该消息则由消息接收方处理。注意:当生成有此类可能重复发送的消息时,由于某些信息可能会改变,如原始时间、发送时间、正文长度、可能重复标志等,所以应重新计算校验和。

5.5 消息重新发送

消息重新发送,是基于应用层的可能重发消息。如发送的订单在相当长的时间内没有得到确认,或者怀疑其根本未曾被发送过,消息发送方可通过设置可能重新发送标志来重新发送(Possible Resend=Y)。消息接收方收到该类消息后,应通过查询消息内的域(如订单编号等)来确定此前是否收到过该消息。注意:此类消息应确定包含相同的正文数据,同样,由于某些信息可能会改变,所以应重新计算校验和。

5.6 消息确认

本协议的消息传输模式是基于消息被完整传送的;并且通过监测消息序号缺口以识别对正常传送过程中的错误。协议不支持对单个消息收发的确认,但大量的应用消息须在应用层作出明确的收发确认,如订单的确认。

5.7 会话连接

会话过程的数据交换可以这样描述:连接双方各有一组连续的消息序号随消息传送;交易期间可能多次断开并重新连接,其断开的原因可以是外因引起,也可以是连接双方根据系统而统一制定何时断开并重新连接。建议一次会话连接不超过24 小时;如需要保持24 小时以上的连接,则可发送一条含有序号重设标志的登录消息来建立新的起始消息序号。会话过程分为三个部分:登录、消息交换、注销。

5.7.1 登录

登录连接包含三个步骤:建立电信通讯连接、连接双方的确认/认证、消息传输同步的初始化。主要有以下几点:

5.7.1.1 连接

会话的发起方与会话接收方建立电信通讯连接。

5.7.1.2 认证

会话发起方发送登录消息(Logon),会话接收方认证发起方身份的合法性。登录消息应包括认证的必要数据,如用户名、密码等。如果会话发起方身份通过认证,则会话接收方发送一个登录消息作回应。如果认证失败,会话接收方则在发送一个包含失败说明的注销消息(Logout)后关闭连接。发送注销消息不是必需的,因为其占用了一个消息序号,而且在某些情况下可能会引起其他问题。登录成功后,会话发起方可在登录消息之后立即开始发送消息,但此时会话接收方可能并没有作好接收消息的准备;因此会话发起方应在收到接收方的登录消息确认之后,才认为会话连接建立完成。

建议:在登录后或者刚发送完测试请求消息(TestRequest)时延迟等待一段时间,双方再发送新的消息,使得连接双方能有效控制重发请求;否则可能会导致一方会针对对方的每一条新消息发出重发请求。

5.7.1.3 初始化

在身份通过认证之后,会话发起方和会话接收方应首先同步消息序号,然后才能相互发送新的信息。同步消息序号通过消息序号域(MsgSeqNum)来确定,将登录消息里的消息序号(MsgSeqNum)与内部监控的下一个预期的消息序号进行比较,就能发现消息的消息序号缺口。同样,会话发起方通过将会话接收方发送的登录消息里的消息序号(MsgSeqNum)与下一个预期的消息序号进行比较,也能发现消息的缺口。