MoldUDP64 协议详解

331 阅读5分钟

MoldUDP64 协议详解

MoldUDP64 是一种高效、可扩展的网络协议,主要用于金融市场中“一个发送者对多个监听者”的实时数据传输场景。该协议建立在 UDP(User Datagram Protocol)之上,提供了一种轻量级的机制,使监听者能够检测丢失的数据包并重新请求,从而确保数据的完整性和准确性。本文将详细介绍 MoldUDP64 协议的消息格式及其应用。

1. 协议概述

MoldUDP64 通过 UDP 组播向多个监听者传输数据,每个外发的数据包仅发送一次,降低了网络负载。为了减少网络延迟和带宽占用,MoldUDP64 支持在单个网络数据包中聚合多个消息。此外,协议还允许在远程接收器附近部署可选的缓存重新请求服务器,以优化广域网(WAN)链路的传输性能。

在 MoldUDP64 协议中,服务器通过 UDP 组播发送下行数据包。监听者需要订阅指定的组播组才能接收下行数据。当数据包丢失时,监听者可以通过发送请求消息向重新请求服务器请求重新传输丢失的数据包。

2. 消息格式

MoldUDP64 协议中的消息分为几种类型,每种类型的格式和作用各不相同。

2.1 下行数据包 (Downstream Packet)

下行数据包是 MoldUDP64 协议的核心消息类型,主要用于传输数据流中的实际数据。每个下行数据包由一个固定的包头和一个或多个消息块组成。

下行数据包头部格式

字段名偏移量长度说明
会话 (Session)010字节ANUM表示该数据包所属的会话
序列号 (Sequence Number)108字节NUM数据包中第一条消息的序列号
消息计数 (Message Count)182字节NUM此数据包中包含的消息数量
  • 序列号:表示数据包中第一条消息的序列号。如果数据包中包含多条消息,后续消息将按顺序隐式编号。
  • 消息计数:表示该数据包中包含的消息块数量。如果消息计数为0,则表示这是一个心跳包;如果消息计数为0xFFFF(十六进制65535),则表示会话结束。

消息块格式

字段名偏移量长度说明
消息长度 (Message Length)*2字节NUM表示该消息块中消息的长度,以字节为单位
消息数据 (Message Data)*可变ANUM实际的消息数据
  • 消息长度:该字段表示消息数据的长度,不包括消息长度字段本身的两个字节。
  • 消息数据:该字段携带实际的数据,长度可变,根据应用程序的需求定义。
2.2 心跳 (Heartbeat)

心跳包是 MoldUDP64 服务器定期发送的一种特殊下行数据包,用于在低流量时段保持连接的活跃性。心跳包具有以下特点:

  • 消息计数:为0,表示这是一个心跳包。
  • 序列号:包含下一个预期的序列号,用于帮助监听者检测丢失的数据包。

心跳包通常每秒发送一次,以确保监听者能够及时发现数据丢失。

2.3 会话结束 (End of Session)

当一个会话结束时,MoldUDP64 服务器会发送一系列特殊的下行数据包,这些数据包的消息计数为0xFFFF(十六进制65535),表示当前会话已经结束。这些数据包与心跳包类似,也包含下一个预期的序列号。会话结束消息发送后,监听者仍然可以请求重新传输当前会话中的消息。

2.4 请求数据包 (Request Packet)

请求数据包是由监听者发送的,用于请求重新传输丢失的消息或消息组。请求数据包的格式如下:

字段名偏移量长度说明
会话 (Session)010字节ANUM表示该数据包所属的会话
序列号 (Sequence Number)108字节NUM请求重新传输的第一条消息的序列号
请求消息数量 (Requested Message Count)182字节NUM请求重新传输的消息数量
  • 序列号:表示请求重新传输的第一条消息的序列号。
  • 请求消息数量:表示请求重新传输的消息数量。如果请求的消息总大小超过了一个 UDP 数据包的最大有效载荷大小,则仅会返回可以完全适配的消息数量。

3. 应用场景

MoldUDP64 广泛应用于金融市场的数据传输中,如股票交易所的市场数据广播。在这些场景中,低延迟和高吞吐量是关键需求,MoldUDP64 的轻量级设计使其非常适合这些应用。

总的来说,MoldUDP64 通过其简洁的消息格式和高效的传输机制,为金融市场提供了可靠的实时数据传输解决方案。在实际应用中,MoldUDP64 不仅能够确保数据的完整性和准确性,还能够在丢包时快速恢复数据,从而保证交易信息的实时性和可靠性。