首页 / 专利库 / 银行与财务事项 / 证券 / 具有修改通知的动态TCP流处理

具有修改通知的动态TCP流处理

阅读:687发布:2020-05-08

专利汇可以提供具有修改通知的动态TCP流处理专利检索,专利查询,专利分析的服务。并且用于通信网络中的内容检查的技术,包括检测在第一和第二端点之间传输中的分组,确定分组的内容未通过内容检查, 修改 包含该内容的净荷,调整序列号以考虑修改,以及在相反的方向上将响应消息注入到相应的流中。响应消息可以包含与拒绝的原因有关的信息。,下面是具有修改通知的动态TCP流处理专利的具体信息内容。

1.一种方法,包括:
在第一端点和第二端点之间建立的双工联网会话期间,
检查分组的流;
在确定从第一端点发送的选择的分组内的消息要被修改时,
修改选择的分组中的消息以生成修改的分组;
确定修改的序列号以考虑修改消息;
向第二端点发送修改的分组;以及
向第一端点发送指示原始消息被修改的回复消息。
2.根据权利要求1所述的方法,其中,确定修改的序列号的步骤包括:
基于被修改的分组的序列号来确定序列标记值;
保持累加器值;
存储表示原始选择的分组和修改的分组之间的字节计数中的差异的增量值;
检测来自第二端点的对修改的分组的确认;以及
将增量值添加到累加器值。
3.根据权利要求2所述的方法,附加地包括:
当随后接收到的分组具有大于或等于序列标记值的序列号时,
通过累加器值修改从第一端点接收到的随后的分组的序列号。
4.根据权利要求3所述的方法,附加地包括:
基于累加器值调整从第二端点接收到的另一个分组的确认序列号。
5.根据权利要求1所述的方法,其中,修改选择的分组中的消息包括:用具有不同长度的第二消息替换分组中的消息。
6.根据权利要求5所述的方法,其中,第二消息包括以下各项中的一个:心跳消息、测试消息或序列填充消息。
7.根据权利要求1所述的方法,其中,修改选择的分组中的消息包括:从分组中移除消息。
8.根据权利要求1所述的方法,其中,第一端点是与交易公司相关联的客户端设备,第二端点是与证券交易所系统相关联的市场设备,并且消息是用于交易证券的订单。
9.根据权利要求8所述的方法,其中,回复消息包括修改消息的原因。
10.根据权利要求8所述的方法,其中,修改消息的原因与符合交易规则、安全险和分组内容过滤中的至少一项有关。
11.根据权利要求2所述的方法,附加地包括:
确定是否已经从第二端点接收到针对修改的分组的ACK;以及
当已经确定尚未接收到针对修改的分组的ACK时,则
重传修改的分组;以及
在超时时间段之后断开会话。
12.根据权利要求11所述的方法,其中,以常规的间隔来执行确定是否已经接收到针对修改的分组的ACK。
13.根据权利要求11所述的方法,附加地包括:
当从第二端点接收到的ACK具有大于或等于序列标记的序列号时,则
清除修改未决值。
14.根据权利要求11所述的方法,其中,确定是否已经接收到针对修改的消息的ACK包括:周期性地轮询增量值。
15.根据权利要求1所述的方法,附加地包括:
当仍尚未接收到针对修改的分组的ACK时,并且
在随后的分组也需要被修改以生成第二修改的分组时,
停止第二修改的分组,直到接收到针对修改的分组的ACK。
16.根据权利要求15所述的方法,附加地包括:
轮询增量值以确定何时已经接收到针对修改的分组的ACK;
在预定时间间隔内重传修改的分组;
在没有接收到针对修改的分组的ACK的情况下,在预定时间到期之后断开会话。
17.一种方法,包括:
在第一TCP端点和第二TCP端点之间建立的双工TCP会话期间,
检查从第一TCP端点接收到的TCP分组;
从选择的TCP分组中提取TCP序列号;
标识与选择的TCP分组相关联的TCP会话;
确定选择的TCP分组中的内容是否符合规则;
当选择的TCP分组符合规则时,
允许选择的TCP分组到达第二TCP端点;
当选择的TCP分组不符合规则时,
确定拒绝原因数据值;
防止选择的TCP分组的至少一部分到达第二TCP端点;
移除选择的TCP分组的至少一部分以形成修改的TCP分组;
将增量值设置为取决于如此移除的部分的大小的值;
将增量值应用于与TCP会话相关联的每个会话TCP累加器;
通过取决于每个会话TCP累加器的大小的值来调整修改的TCP分组的TCP序列号;
向第二TCP端点发送修改的TCP分组;
生成具有指示拒绝的原因的值的响应分组;以及
向第一TCP端点发送响应分组。
18.一种装置,包括:
固定逻辑直通设备,其具有彼此独立地操作的第一网络接口和第二网络接口,固定逻辑直通设备使得一个或多个TCP分组流能够在第一和第二网络接口之间传播;
分组检查设备,用于检查TCP分组流以
从选择的TCP分组中提取TCP序列号;
标识与选择的TCP分组相关联的会话;
确定选择的TCP分组是否包含不符合规则的内容;
当选择的TCP分组不符合时,
防止选择的TCP分组的至少一部分到达第二网络接口;
控制器,其包括固定逻辑和一个或多个可编程数据处理器,所述控制器用于:
从分组检查设备接收选择的TCP分组和拒绝原因数据值;
将基于选择的TCP分组的序列号的值存储为每个会话TCP序列标记;
修剪来自TCP分组的拒绝内容,以形成修改的TCP分组;
将修改的分组写入到与固定直通设备共享的存储器,以用于通过第二网络接口发送修改的分组;
将每个会话增量值设置为取决于修剪内容的大小的值;
根据每个会话TCP累加器中的值调整修改的TCP分组的TCP序列号;
提取随后通过第二网络接口到达的TCP分组的序列号和会话标识符;
如果随后通过第二网络接口到达的TCP分组具有等于或大于相关联的会话的TCP序列标记的ACK序列号,则将相关联的每个会话增量值应用于与会话相关联的TCP累加器;
通过与会话相关联的TCP累加器的值来调整随后通过第二网络接口到达的分组的ACK序列号;以及
生成用于通过第一网络接口发送的响应分组,所述响应分组包括指示拒绝的原因的值。
19.根据权利要求18所述的装置,其中,所述控制器被进一步用于:
针对与不符合规则的选择的分组相关联的会话设置连接停止模式;
当从第二网络接口接收到的随后的分组属于设置连接停止模式的会话时,将生成的响应分组转发到第一接口;
在已经将生成的响应分组转发到第一接口之后,将随后的分组转发到第一接口;以及清除会话的连接停止模式。
20.根据权利要求18所述的装置,其中,控制器中的固定逻辑执行以下步骤中的一个或多个:
从分组检查设备接收选择的TCP分组和拒绝原因数据值;
将基于选择的TCP分组的序列号的值存储为每个会话TCP序列标记;
根据每个会话TCP累加器中的值调整修改的TCP分组的TCP序列号;
提取随后通过第二网络接口到达的TCP分组的序列号和会话标识符;
如果随后通过第二网络接口到达的TCP分组具有等于或大于相关联的会话的TCP序列标记的ACK序列号,则将相关联的每个会话增量值应用于与会话相关联的TCP累加器;以及通过与会话相关联的TCP累加器的值来调整随后通过第二网络接口到达的分组的ACK序列号。
21.根据权利要求20所述的装置,其中,可编程数据处理器执行程序代码以执行以下步骤中的一个或多个:
修剪来自TCP分组的拒绝内容,以形成修改的TCP分组;
将修改的分组写入到与固定直通设备共享的存储器;
将每个会话增量值设置为取决于修剪内容的大小的值;
提取随后通过第二网络接口到达的TCP分组的序列号和会话标识符;以及生成用于通过第一网络接口发送的响应分组,所述响应分组包括指示拒绝的原因的值。
22.根据权利要求18所述的装置,其中,控制器被进一步用于:
针对与不符合规则的选择的TCP分组相关联的会话设置防止模式指示符值;
将与随后通过第一网络接口到达的分组相关联的信息存储在处理队列中;
确定与处理队列中的分组相关联的信息是否已经被处理;以及
当已经确定与处理队列中的分组相关联的信息已经被处理时,则清除防止模式指示符。

说明书全文

具有修改通知的动态TCP流处理

[0001] 对(一个或多个)相关申请的交叉引用本申请要求2017年6月8日提交的题为“Dynamic TCP Stream Processing”的共同未决美国临时专利申请序列号62/516,753的优先权。上述申请的全部内容通过引用合并于此。

背景技术

技术领域

[0002] 该专利申请涉及网络连接的设备,并且更特别地涉及在线(in-line)内容检查。
[0003] 背景信息内容检查是由联网数据处理系统出于各种原因经常采用的技术。数据分组在其通过检查点时被检查,从而搜索病毒、垃圾邮件、敏感数据、关键字或其他内容级别标准。内容检查着眼于实际消息净荷包含什么,而不是聚焦于各个分组的报头或其他路由行为上。
[0004] 内容检查通过捕获网络上传输中的数据分组并针对敏感性分析它们的内容来起作用。这可能涉及标识已知的数据结构(诸如用于信用卡号码的模式)或指示敏感性的关键字(诸如“机密”),或垃圾邮件或病毒的签名。内容检查还可被用于对数据进行归类或分类,并可应用预先配置的规则来确保符合支付卡行业数据(PCI)、个人可标识信息(PII)、受保护的健康信息(PHI)、证券交易规则和其他标准。
[0005] 美国专利9,607,307(Amicangioli)中描述的一种方法是利用透明直通逻辑设备和实时分组处理器的在线网络流量捕获系统,其在高频电子证券交易网络中是特别有用的。该系统经由第一接口从一个或多个客户端机器(其可以由经纪公司或其他客户操作)接收包含所请求的交易的消息。交易信息被检查以确定符合至少一个交易险规则,并且然后经由第二接口发送到一个或多个市场服务器(其可以由证券交易所操作)。接口通过固定直通逻辑彼此耦合,并且彼此独立地操作。固定直通逻辑是二端口设备,其将在第一端口上接收到的交易信息直接转发到第二端口;不终止与客户端机器或市场服务器的通信连接;并且可以在从客户端接收到关于交易的所有的信息之前,开始向市场服务器发送交易信息的部分。如果交易将违反规则,则交易信息消息在整个消息被发送到市场服务器之前被更改。
发明内容
[0006] 关于先前解决方案的问题现有的内容检查技术在一些应用中呈现了问题。作为一个示例,考虑其中多个客户端设备将证券交易订单发送到市场设备的高频证券交易网络。交易订单可以被形成为消息,并与分组中的其他消息组合。在该环境中,应该拒绝交易订单,即除非它符合多个规则,否则不应允许它从客户端传播到市场(C2M)。
[0007]  在该环境中,内容检查实现通常已经使用两种方法用于消息拒绝,即“一次完成(One and Done)”和“间隙填充覆盖(overwrite)”。这两种方法都是有缺陷的,因为就市场符合而论它们是有风险的,使想要了解他们的订单的状态或需要从交易会话完全断开的客户困惑。
[0008] 例如,一次完成迫使客户端设备从会话断开,即高速、低延迟交易系统的领域中的不理想策略。由一次完成造成的断开还可能导致丢失订单、客户端算法混乱以及重新连接困难。
[0009] 间隙填充覆盖使用比如ZVZZT的测试符号来覆盖消息,即现在更受到各种交易所限制的方法。由于该限制,间隙填充覆盖将系统暴露于潜在的符合问题。覆盖还依赖于市场以针对覆盖消息的确认(ACK)做出响应。在没有该ACK的情况下,客户端不被通知消息拒绝,并且他们无法知道他们的订单是当天完成的,还是仍在交易所上开放。实际上,已经观察到订单“取消风暴”由诸如这样的问题引起。
[0010] 优选实施例的概要本文档描述了对用于内容检查的分布式、透明、在线风险管理和流量捕获系统的改进。
本文中描述的方法提供了一种用于在分组通过检查设备被发送时实时修改或甚至从分组中移除拒绝的消息的解决方案。通过基于每个会话保持跟踪移除的字节,保留序列编号。在消息修改的情况下,通知被返回给消息发起者,以通知他们该修改。
[0011] 在一个实施例中,与网络会话相关联的分组在它们在第一网络端点和第二网络端点之间传播时被检查。在确定所选择的分组内的消息应该被修改时,诸如当消息不符合内容规则时,确定使拒绝内容被移除或修改的修改的分组。还通过调整所选择的分组的序列号来确定修改的分组的修改的序列号。然后,修改的分组代替所选择的分组被发送到第二端点。回复消息也被返回到第一端点,指示所选择的分组中的原始消息被修改。
[0012] 修改的序列号可以通过保持累加器值和表示原始分组和修改的分组之间的字节计数中的差异的增量值来确定。当从第二端点检测到对修改的分组的确认时,增量值可以被添加到累加器值。
[0013] 此外,当随后接收到的分组具有大于序列标记值的序列号时,从第一端点接收到的随后的分组的序列号可以通过累加器值修改。
[0014] 此外,可以基于累加器值来调整从第二端点接收的另一分组的确认序列号。
[0015] 在一些实现中,第一端点可以是与交易公司相关联的客户端设备,并且第二端点可以是与证券交易系统相关联的市场设备,并且消息是用于交易证券的订单。在那些实现中,回复消息可以包括拒绝订单的原因。
[0016] 实施例还可以确定是否已经从第二端点接收到对回复消息的确认。虽然尚未接收到该确认,但可以反复地(on a repeated basis)重传修改的分组,直到超时时间段之后断开会话。
[0017] 在一些实现中,确定是否已经接收到对回复消息的确认可以涉及周期性地轮询增量值。
[0018] 当仍尚未接收到对修改的分组的确认时,并且当随后的分组也需要被修改以生成第二修改的分组时,停止第二修改的分组直到接收到针对修改的分组的确认可能是有利的。
[0019] 在一些优选实现中,通信是双工的,使得具有修改的序列号(根据需要)的消息及其确认可以同时在两个方向上在第一端点和第二端点之间被发送。这允许内容检查和消息修改在一个方向上即时(on the fly)发生,同时还在另一个方向上同时注入通知回复消息。附图说明
[0020] 下面的描述参考附图,其中:图1是一个示例实施例的高级图;
图2更详细地图示了检查设备;
图3A示出了证券交易系统中的实现,并且图3B更一般地是用于分组过滤的实现图4是固定直通逻辑设备的更详细的视图;
图5和图6是执行以修改序列号的步骤的序列;
图7是交易前风险软件(PTRS)的更详细的视图;
图8A和图8B是时序图;
图9是用于在客户端到市场(C2M)方向上修剪分组的详细序列图;
图10是用于在市场到客户端(M2C)方向上注入分组的详细序列图;
图11示出了丢弃分组场景;
图12呈现了在修改分组时可能出现的问题;
图13示出了其中已经实现针对图12中图示的问题的可能的解决方案的场景;以及图14呈现了示出在修改分组时可能出现的不同问题的场景。
[0021] 说明性实施例的详细描述如上面提到的那样,本发明的实施例被配置成提供在线内容检查和修改。实现下面描述的方法和装置的设备通常在位于第一和第二网络端点之间的计算机联网设备中实现。跟随的优选实施例的详细描述主要是在监视高频证券交易系统中的包含市场订单的消息的检查设备的环境中。然而,检查设备的实施例可以被部署在其中将以最小的延迟来监视数据流的内容的其他应用中。这些可以包括在健康记录处理系统、链系统中以及更一般地在分组过滤设备中检测敏感数据或其中数据完整性和排序是至关重要的应用(诸如在数据库系统中)。
[0022] 作为一个示例实现,考虑图1中所示的高频证券交易网络。一个或多个客户端设备120、122(其可以由经纪公司操作)与一个或多个市场设备130、132(其可以由证券交易所操作)建立联网会话140、142,并将证券交易订单发送给这些市场设备130、132。交易订单可以被形成为消息,并与其他消息组合在分组中。可以根据应用层协议(例如诸如NASDAQ OUCH)来交换消息。检查设备110检查通过客户端设备和市场设备之间的联网会话140、142发送的消息的内容。检查设备110优选地是直通设备,使得其在网络中的存在对于客户端和市场设备是不透明的。在这些直通实施例中,联网会话140、142可以直接流过检查设备110,而在检查设备110处没有任何网络终止。
[0023] 在一些实施例中,根据诸如TCP或Infiniband之类的顺序传输层协议来建立网络会话140、142。
[0024] 在该实施例中,检查设备110用于确保拒绝“不良”交易订单——即在客户端到市场方向(C2M)中流动的消息不被允许到达相应的市场设备,除非它符合多个规则。为了防止从客户端设备120发送的格式不良或不符合的消息到达市场设备130,检查设备110可以修改不符合的消息,从而可能调整消息的大小。在其中网络会话根据诸如TCP之类的顺序传输协议的环境中,检查设备110可以调整在C2M方向上到达该会话上的随后的分组的传输协议序列号(以及在M2C方向上到达的随后的分组的确认序列号)以考虑由于修改分组中不符合的应用层消息而导致的字节中增加或减少。
[0025] 在优选实施例中,检查设备110还创建指示不符合的消息被修改的回复消息,并将该回复消息发送给发起不符合的消息的客户端设备。在一些实施例中,回复消息可以由检查设备110“注入”到网络会话中,并且可以看起来源自是不符合的消息的预期接收者的市场设备。当在客户端设备和市场设备之间建立的网络会话是根据诸如TCP之类的顺序传输协议时,将回复消息注入到网络会话中还可以涉及针对在市场到客户端方向(M2C)上发送的会话中的分组调整传输协议序列号,以考虑回复消息的大小。
[0026] 图2更详细地示出了检查设备110的示例实施例。尽管在该示例中,检查设备110中的功能跨硬件和软件两者分布,但是检查设备110可以以包括纯硬件和纯软件实现的硬件和软件的任何合适组合来实现。例如,在该实施例中,为了实现低平的延迟,一些功能以固定逻辑直通设备110中的硬件实现,而其他功能以设备驱动250和交易前风险软件应用220中的软件实现。固定逻辑直通设备210可以以任何合适的方式来实现,包括专用集成电路(ASIC)或现场可编程阵列(FPGA)。交易前风险软件应用220和设备驱动250可以被实现为在一个或多个可编程数据处理器(诸如计算核心(CPU))上执行的指令。
[0027] 尽管可以采用任何合适的物理网络层(包括Infiniband或以太网,通过光纤或缆),但在该示例中,检查设备110具有两个千兆以太网SFP+连接器(接口)231和232,其可以分别被连接到客户端设备和市场设备。这些连接器231和232在该示例中分别被电耦合到10千兆以太网(GigE)MAC核心211和212,在本实施例中,其由固定逻辑直通设备210实现。
[0028] 在一些实施例中,固定逻辑直通设备210还可包括其他组件。在图2的示例中,固定逻辑直通设备210还包括固定逻辑213组件,其可以实现诸如分组检查和序列号修改的功能,如下面详细描述的那样。固定逻辑213本身可以在FPGA 213中实现(如也将在下面提及)。固定逻辑直通设备210还包括PCI-E核心214,其可以实现PCI Express功能。在该示例中,PCI Express被用作在硬件和软件之间或更具体地在固定逻辑直通设备210和交易前风险软件应用220之间通过PCI Express总线240经由设备驱动250传递数据的管道机制。然而,可以采用硬件和软件之间的任何合适的数据传递机制,包括直接存储器访问(DMA)、共享存储器缓冲器(其可以以环布置)或存储器映射。
[0029] 由检查设备110执行的功能图3A是检查设备110可以如何在交易网络中实现动态流修改(DSM)的示例。在步骤301处,客户端设备120生成包含用于交易证券的订单的消息的原始分组。原始分组经由它们之间的会话140连接被寻址到市场设备130。然而,该分组首先传播通过检查设备110,该检查设备也能够监视会话140。在该示例中,原始分组包含四个从客户端到市场的订单(OCM):用于购买Caterpillar(CAT)股票的第一个OCM、用于出售Apple计算机(APPL)的第二个订单、用于购买Google(GOOG)的第三个订单以及用于出售Tesla(TSLA)的第四个订单。
[0030] 检查节点110针对与交易规则的符合来检查这些消息的内容。例如,规则可能检查订单,以确定数量和价格是否在预期范围内,或者用于限制性股票、卖空或明显错误的交易。规则检查还可能包括每个帐户数量、价格和价值限制测试、信用限制、集中度限制、重复订单、风险敞口(exposure)、经纪人帐户和会话禁用测试。用于检查消息的特定规则可以是多个类型的,并且对于本实施例而言是不重要的。
[0031] 重要的是,在步骤302处,检查设备110确定第三消息(针对Google股票的订单)是不良消息,并且不应被整体地允许到达市场设备130。因此,发送到市场的修改的分组不包括该不良消息,并且在步骤302处,将通知消息发送(例如,“注入到会话140中)回到客户端120。在优选实施例中,通知消息包括具有为什么拒绝订单的原因的字段。
[0032] 如先前提到的那样,应当理解,本文中描述的动态流修改(DSM)概念可以被应用于其他内容检查应用。图3B更一般地示出了该情况,其中第一端点320与第二端点330建立会话。在步骤351处,从第一端点发送具有消息m1、m2、mN、…mK的原始分组。在步骤352处,检查引擎310确定一个消息mN需要被修改并生成修改的消息mN'。然后允许包含消息m1、m2、mN'、…mK的修改的分组传播到第二端点330。在步骤353处,通知消息被返回到第一端点320,警告第一端点320原始分组中的消息被修改。
[0033] 动态流修改如先前提到的那样,检查设备110优选地将动态流修改(DSM)实现为从C2M TCP流中的分组中移除不良消息并将错误消息添加到M2C TCP流中的分组的方式。为了做到这一点而不干扰TCP会话,它通过以下步骤进行:a)保持跟踪在C2M方向上移除的所有字节,以及b)即时修改TCP序列号。
[0034] DSM优选地基于每个会话、每个方向保持若干个数据值,如下:累加器——贯穿TCP流的生命周期移除/插入的字节的总数。这优选地是被用于修改分组的TCP序列号的硬件寄存器(即,保持在固定逻辑直通设备210中)。通过保持跟踪所有修改的字节,可以即时修改分组的TCP序列。然而,当分组使字节被修改时,优选地仅当接收到针对该分组的ACK时才更新该寄存器。
[0035] 增量——在设置序列标记的最后分组(最后修改的分组)中移除/插入的字节数。增量优选是充当该最后分组中移除的字节数的临时存储设备的硬件寄存器。当接收到针对该分组的ACK时,将增量添加到累加器。
[0036] 序列标记——基于使字节被移除/插入的最后分组(即最后修改,即终止或注入的分组)的序列号的值。例如,在使用TCP的实施例中,其中分组具有起始序列号和ACK序列号,序列标记可以是基于最后修改的分组的(起始)序列号和以字节为单位的最后修改的分组的长度的和的值(如修改)。在TCP中,该值也将等于在相同会话上在相同方向上传播的随后的分组的下一个预期的起始序列号。对于作为修改的部分而被完全移除的分组,与移除分组相对应的序列标记可能等于移除分组的起始TCP序列号,因为如修改的移除分组的长度是零。当使用TCP时,序列标记值也等于确认最后修改的分组的ACK序列号(如果最后修改的分组由于修改而没有被完全移除)。该ACK序列号存在于在相反方向上被发送的分组中,确认接收到修改的分组。
[0037] 具有小于序列标记的序列号的分组仅通过累加器来使它们的TCP序列被修改。对于具有大于或等于序列标记的序列号的分组,它们的TCP序列通过累加器加上增量来修改。当接收到针对最后修改的分组的ACK时,清除序列标记。一些实施例可以存储与最后若干个修改的分组相对应的序列标记值,即使在多个修改的分组仍未被确认,这也允许对分组进行序列值调整。
[0038] CONN_MOD_PENDING——布尔值(其可以在PTRS应用软件220中被设置),用于指示仍尚未接收到针对修改的ACK。在修改的分组的DMA时,设置布尔值。在修改的分组的ACK时,将其清除。该布尔值被用于确保修改的分组到达其预期的目的地。存在CONN_C2M_MOD_PENDING和CONN_M2C_MOD_PENDING,因为数据修改可以(而且通常将)同时针对两个方向发生。
[0039] 作为动态流修改的部分,可以由检查设备110执行以下功能:-不良消息移除。DSM从C2M分组流中的分组中移除不良消息,并将错误消息添加到M2C分组流中的分组。为了做到这一点而不干扰连接,它应该:a)保持跟踪移除的所有字节,以及b)即时修改TCP序列号。DSM基于每个会话保持多个值来做到这一点,包括累加器、序列标记和增量(在后面的部分中更详细描述)。
[0040] -C2M(客户端到市场)修改分组构造、传输和保证到达。检查设备110可以通过移除不良消息来修改拒绝的C2M分组。然后将这些修改的分组传输到市场设备。可以通过使用惰性ACK检测、轮询和重复重传的组合来保证它们的成功传输。保证C2M修改的分组到达市场。
[0041] -M2C(市场到客户端)错误分组构造、传输、返回到发送者和保证到达。为了通知客户端拒绝的消息,检查设备110可以构造M2C错误分组。
[0042] -避免TCP功能障碍(dysfunctionality)/断开——DSM可以避免TCP功能障碍,并将干净地移除/添加数据到TCP流。它还可以在TCP分段的中间中处置针对修改消息的传输尝试。除非必要,否则应避免断开会话。
[0043] 数据插入/错误注入——当在C2M方向上发生修改时,数据插入/错误注入可被用于通知客户拒绝。与包含1)报头和2)协议特定拒绝消息的消息串接的分组将被注入到M2C TCP流中。这让客户端知道它们的订单的状态,避免不必要的取消风暴或算法混乱。这样的错误注入将对市场侧完全隐藏,并且一旦注入字节,TCP连接将保持活跃。
[0044] ACK检测/保证到达——一旦在客户端或市场方向上传输了修改的分组,则检查设备110优选地应保证所述分组的到达。可以通过以下方式完成该保证的到达:1)检查在修改的分组被传输的相反的方向上到达的分组的ACK序列,或2)从固定逻辑(FPGA)213读取增量寄存器以查看其是否已被调零(发信号通知对应于序列标记的ACK已到达)。ACK检测采用这两种方法来检查分组是否已到达预期的目的地处。如果在某个时间内未检测到ACK,则重传修改的分组。这被持续直到检查设备110放弃并断开会话。
[0045] 数据移除/修改——从终止的分组中移除字节允许检查设备110避免间隙填充覆盖以及作为拒绝消息的方法的一次完成。该数据移除将对市场侧完全隐藏,并且TCP连接将保持活跃。
[0046] 固定逻辑直通设备210DSM从C2M TCP流中的分组中移除不良消息,并将错误消息添加到M2C TCP流中的分组。
为了做到这一点而不干扰连接,它应该:a)保持跟踪移除的所有字节,以及b)即时修改TCP序列号。上面列出了DSM用于做到这一点的三个值(累加器、序列标记和增量)。
[0047] 图4是首先在图2中图示的固定逻辑直通设备210的实施例的更详细图示。固定逻辑直通设备210包括两个10千兆以太网MAC核心211、212(针对客户端侧和市场侧各一个)、固定逻辑(FPGA)213、PCI express核心214和消息修改数据存储设备440。
[0048] 在一些实施例中,固定逻辑213可以包括分组检查引擎(PIE)组件420和序列号修改逻辑组件430。分组检查引擎420可以检查包含通过客户端与市场设备之间的联网会话发送的应用层消息的联网分组,以针对源自客户端的消息确定给定消息是否符合并应被允许到达市场设备,或者消息是否代之以需要修改。在一些实施例中,一旦消息已被修改,相同会话上的随后的分组的传输协议序列号可以由序列号修改逻辑430来修改。
[0049] 在该示例中,固定逻辑直通设备213还包括消息修改数据存储设备440,其可以存储结合消息修改和序列号修改使用的状态信息。消息修改数据440可以按会话、按方向(C2M和M2C两者)来维护。尽管在该示例中,消息修改数据440被图示为被驻留在固定逻辑直通设备110本身中,但是消息修改数据可以在固定逻辑直通设备210中的任何其他合适的存储组件中或对固定逻辑直通设备210而言可访问的任何其他合适的存储组件中。
[0050] 消息修改数据440可以包括一个或多个硬件累加器441,硬件累加器441中的每个可以被用于保持跟踪累积值,通过该累积值可以修改在给定会话中的给定方向流动的分组的序列号,作为针对该方向和会话的一个或多个先前的分组修改的结果。在其中用于给定会话的协议包括确认(ACK)分组的实施例中,该确认(ACK)分组包括已经被接收端点确认的分组的序列号,(一个或多个)硬件累加器341也可以被用于修改在该会话中在相反方向上流动的ACK分组的ACK序列号。在一些实施例中,维护一个或多个增量寄存器442可能是有用的,所述增量寄存器442可以被用于保持跟踪由于仍尚未经由ACK分组被确认的新修改的分组的大小中的差异而导致的序列号中的差异。(一个或多个)增量寄存器442中的值可被存储在硬件寄存器或检查设备中的任何其他合适的易失性或非易失性存储器或存储设备中。消息修改数据440还可以包括(一个或多个)序列号标记444,该序列号标记444可以被用作用于基于分组的序列号来采取动作的(一个或多个)阈值。例如,在一些实施例中,序列号标记443可以被用于表示新发送的修改的分组的期望的ACK序列号,使得当接收到具有与存储在序列号标记443中的值匹配的ACK序列号的分组时,可以将增量寄存器442中的值应用于硬件累加器441。
[0051] 虽然不符合的分组仍在被检查设备110修改的过程中,但是在一些实施例中,延迟随后在与修改的分组相同的会话上在相同的方向上接收的分组的传输,直到修改的分组已经完全被处理,这可能是期望的。该延迟可能是期望的,以防止其中在需要修改的分组之后发送的在相同会话中的符合的分组(不需要修改)在修改的消息之前到达目的地市场设备的情况。这样的实施例可以使得跳过分组防止指示符446能够指示对需要修改的消息的检测,并且还可以在最新序列号444中存储仍在被修改的过程中的这样的分组的序列号的值。在该示例中,当使能跳过分组防止指示符446时,可以延迟随后的分组的传输。当修改的分组已经被完全处理并且由于使能跳过分组防止而随后延迟的分组也已经被完全处理时,一些实施例可以清除跳过分组指示符446。在一些实施例中,确定是否清除跳过分组防止指示符446可以附加地或替代地涉及在修改的分组的序列号与最新序列号444中的值之间的比较。一旦已经清除了跳过分组防止指示符446,就可以以通常的方式处理到达检查设备110处的分组,使得符合的分组可以直接传递通过检查设备传递到预期的接收者系统(即,客户端设备120或市场设备130)。
[0052] 类似地,在一些实施例中,一旦它已经确定C2M方向上的消息需要修改并且可以在M2C方向上为该会话注入相应的回复消息,则可以采用连接停止模式指示符448来延迟来自M2C方向上的分组的转发。在一些实施例中,连接停止模式指示符448可以在检测到C2M分组可能需要修改时被使能,并且可以在完全构造或注入M2C回复消息时被禁用。在这样的实施例中,当连接停止模式指示符448被使能时,在该会话上在M2C方向上随后接收的消息可以被延迟。在分别由跳过分组防止指示符446和连接停止模式指示符448指示的C2M方向上和M2C方向上的延迟两者的情况下,延迟可以以任何合适的方式来实现。例如,在一些实施例中,当指示符被使能时,在该方向上处理消息的CPU核心可能被停止。在其他实施例中,随后发送的消息可以排队以用于之后的处理。
[0053] 具有通知的消息修改的示例操作的序列图5和图6是示出了可以由检查引擎110执行以实现动态序列修改的操作的序列的更详细的示例。
[0054] 这些(一个或多个)图图示了在不终止或中断该连接的情况下,在从分组移除字节(或甚至整个消息)时,可以如何使用累加器、增量和序列标记来保留TCP连接的一侧(C2M流)。
[0055] 转到图5,在时间t0(步骤500)处,将累加器和增量设置为初始值,诸如“0”。在时间t1(步骤501)处,当分组需要被“终止”(即分组中至少一个消息需要被修改)时,被移除的字节数被存储在增量寄存器中。在该示例中,在序列号70处起始的10个字节被终止,并且增量寄存器设置为值“-10”。序列标记相应地被设置为值“70”。当针对分组的ACK到达时,来自增量的字节数被添加到累加器。从终止分组移除的字节数在传输时不立即被添加到累加器。即,在终止分组之前被传输的分组可能潜在地被ACK。为了确保针对在终止分组之前被传输的这样的分组的ACK不具有错误的值,增量到累加器的添加被推迟到时间t2(步骤502)。
[0056] 序列标记、累加器和增量寄存器值被用于调整在时间t2处在M2C方向上传播的ACK分组的ACK序列号。
[0057] 在时间t3(步骤503)处的第二接收到的C2M分组具有起始序列号80和分组长度20。该分组不具有任何不良消息,并且不需要被终止,并且可以传递到市场。然而,累加器值被用于在允许分组继续去往市场之前调整该分组的序列号。
[0058] 在时间t4(步骤504)处接收针对第二C2M分组的ACK,并且在将ACK传递到客户端之前,累加器值将再次被用于调整其序列号。
[0059] 继续到图6,在时间t5(步骤505)处接收到的第三C2M分组具有序列号100和长度20。在传递到市场侧之前,还将通过累加器值使得调整其序列号。
[0060] 在时间t6(步骤506)处,在从市场接收到针对第三C2M分组的ACK之前,接收具有序列号120和长度20的第四C2M分组。该第四分组需要使得移除或“终止”字节。因为在时间t7(步骤507)处仍尚未接收到针对先前分组的ACK,所以从M2C确认序列号中减去累加器。在t8(步骤508)处,一旦接收到该ACK,就可以将增量添加回到累加器。
[0061] 在时间t9(步骤509)处,接收具有序列号140和长度20的第五C2M分组。如前所述,累加器值被添加以到达用于修改的分组的序列号。在时间t10(步骤510)处接收到的另一个ACK再次通过累加器值来调整。
[0062] 如先前提到的那样,借助DSM的该实现,C2M和M2C侧具有并行架构。因此,对于C2M方向以及对于M2C方向,以及对于每个会话,优选地存在单独的累加器、增量和序列标记。因此,当针对通知消息将字节添加到M2C TCP流中(用于错误注入)时,可以使用正增量。因此,当针对M2C侧将增量添加到累加器时,示出正变化,表示附加字节。M2C和C2M机制的双重性是优选的DSM架构的重要方面。
[0063] 在一些实现中,如从下面的详细讨论将理解的那样,固定逻辑213(FGPA)硬件和PTRS软件220可以使用不同数量的累加器和增量寄存器。例如,PTRS软件220可以使用两组累加器和增量(在每个流上,每个方向(C2M和M2C)一个);并且固定逻辑硬件213可以使用四组累加器和增量。前两组硬件累加器/增量被用于跟踪针对每个会话(流)在每个方向(C2M和M2C)上的常规序列号。后两组被用于跟踪针对每个会话在每个方向(C2M和M2C)上的ACK序列号。在下面更详细地描述沿这些线的累加器/增量模型。
[0064] 图7是图示检查设备110中的交易前风险软件220的组件的图,其实现DSM功能中的一些,包括模块化分解、C2M不良消息修改和C2M修改传输。
[0065] 交易前风险软件220可以包括消息修改数据存储设备770,其可以由交易前风险软件220结合消息修改来使用。如与结合固定逻辑直通设备210描述的消息修改数据440一样,消息修改数据770可以是每个会话、每个方向(即,C2M和M2C两者)存储的状态信息。可以由交易前风险软件220以任何合适的方式存储和访问消息修改数据770。消息修改数据770可以包括(一个或多个)软件累加器771和(一个或多个)增量值772,在概念上分别类似于(一个或多个)硬件累加器441和(一个或多个)增量寄存器442。消息修改数据770还可以包括修改未决指示符775(对于C2M方向,在本文中有时也称为‘CONN_C2M_MOD_PENDING’,并且对于M2C方向,有时被称为‘CONN_M2C_MOD_PENDING’)。在一些实施例中,这些消息修改未决指示符可以被用于指示针对修改分组仍尚未接收到ACK。
[0066] 图7还图示了下面更详细描述的组件710到746,组件710到746处理流过检查设备110的分组并利用消息修改数据770。在该示例中,连接管理器710可以例如基于源和目的地IP地址/端口来标识会话),并且诸如通过维护ACK的状态和SYN ACK在客户端和市场侧两者上实现连接状态的模型。连接管理器710还可调用惰性ACK检测模块720,惰性ACK检测模块
720可包含使用消息修改数据470来确保由市场成功接收修改的分组或由客户端成功接收注入的消息的逻辑。惰性ACK检测模块720可以通过周期性地重传修改或注入的分组直到由接收侧接收到针对分组的ACK来做到这一点。
[0067] 在利用被排序并保证按顺序递送的诸如TCP之类的网络会话的实施例中,连接管理器710还可以确保由检查设备110根据分组的序列号以正确的顺序来处理该分组,并且可以避免分组的重复处理。
[0068] 如先前提到的那样,分组通常可以包括一个或多个消息。这样,分组中的每个消息都可以由组件732、734和736单独处理。在其中可以根据多种应用协议发送消息的实施例中,协议抽象层732可以处置应用协议特定处理。
[0069] 然后可以由C2M数据修改分组构造器模块734处理需要修改的消息,该C2M数据修改分组构造器模块734可以修改不符合的消息。如果修改的消息具有与原始未修改的消息不同的大小,则C2M数据修改分组构造器模块734还可在与会话相关联的C2M方向上针对软件累加器771和/或增量值772计算新值(如在别处解释的那样)。类似地,M2C数据插入分组构造器模块736可以构造回复消息以针对与修改的消息相同的会话在M2C方向上注入,并且还可以在与会话相关联的M2C方向上针对软件累加器771和/或增量值772计算新值。
[0070] 在图7的示例中,C2M数据修改分组构造器模块734然后可以执行逻辑以将修改的分组传输到市场。在一些实施例中,C2M数据修改分组构造器模块734可以实现修改的分组到固定逻辑直通设备210的数据传递,以传输到市场设备130。C2M数据修改分组构造器模块734还可以在C2M方向上将软件累加器771中的相关联值和/或增量值772传递到固定逻辑直通设备210。
[0071] 类似地,M2C数据插入分组构造器模块736可以执行逻辑以将回复消息注入到要被发送到客户端120的会话中。在一些实施例中,M2C数据插入分组构造器模块736可以实现包含回复消息的新构造分组到固定逻辑直通设备210的数据传递以用于传输。M2C数据插入分组构造器模块736还可以在M2C方向上将软件累加器471中的相关联值和/或增量值472传递到固定逻辑直通设备210。
[0072] 如由PTRS应用软件220的以上组件控制的DSM数据流的示例可以是如下:当具有终止的消息的分组到达数据路径中(例如,在连接管理器710处)时,其被解析(例如,由协议抽象层732)并且然后被发送以由C2M数据修改分组构造器734修改。
[0073] 对于每个终止的消息,然后由M2C数据插入分组构造器736创建M2C错误分组。该分组将被用于通知客户端拒绝。
[0074] 在创建了这些消息之后,调用传输功能(例如C2M数据修改744和M2C数据插入746)。修改的C2M终止分组和M2C错误分组两者都被传输。
[0075] 在传输分组之后,在惰性ACK检测模块720中检测针对分组序列的ACK。为了保证到达,可以周期性地(诸如对于总共100ms(毫秒),每10ms)重传分组。在100ms时,如果ACK尚未到达,则断开会话。
[0076] 在传输模块744、746中也可以发生其他功能,诸如CPM(紧密接近修改)检测和核心停止。当第二终止的分组在针对第一个终止的分组的ACK到达之前到达软件中时,CPM发生。在以下部分中更详细地讨论该情况。
[0077] 优选地实现C2M方向上的数据修改,以允许要在活跃TCP流中移除或修改的任何数量的不良消息,同时仍然保留活跃TCP会话的排序。因此,尽管客户端仍应该被通知被移除的消息,但是应该对客户端和市场TCP堆栈隐藏模块744中的TCP分组修改,如上面解释的那样。
[0078] 在一些实现中,用某种类型的新消息(诸如心跳)替换不良消息。换句话说,在一些实现中,在没有用其他一些事物替换不良消息的情况下,C2M数据修改744从不移除不良消息。这是为了简化消息修改,并允许传输至少一些净荷(即,将从不存在被完全覆盖低至0字节净荷的分组)。
[0079] 在一些实施例中,消息修改功能可以至少部分地通过协议抽象层732中的逻辑来实现,因为所需的修改的类型可以取决于在其上建立给定会话的特定市场协议。例如,根据NASDAQ OUCH应用协议,可以从分组中移除整个消息。但是,当根据TSE应用协议交换消息时,应当用心跳替换终止的消息,以便保留市场和客户端之间的应用层排序。
[0080] 在一些实施例中,C2M数据修改传输(重传)可以执行其他功能,诸如:-重新计算分组的IP报头长度,以确保不包括移除的字节;以及
-当使用DMA来将修改的分组传输回到固定直通设备210时(例如,在DMA报头中和在DMA调用中),设置必要的值/位。这些值可以包括:
DMA报头中的原始/转换位——将该DMA报头位设置为一,以便硬件重新计算TCP校验和、CRC和TCP序列。
[0081] DMA报头中的有符号的12位增量——设置DMA报头中的增量,以传送分组中修改的字节数(添加正增量信号字节,减去负信号字节)。固定逻辑213使用该值来更新其硬件增量寄存器。
[0082] 无符号的32位序列标记——将序列标记设置为基于正在被传输的修改分组的起始TCP序列的值。这被用于在修改分组的ACK时弹出“捕鼠器(mousetrap)”。
[0083] 无符号的32位CAM条目——针对要DMA输出的分组设置内容可寻址存储器(CAM)值。这可以被用于通知s固定逻辑213:a)正确的TCP序列以在其触及分组时使用,以及b)增量/累加器以用新值更新。
[0084] 在传输修改的分组之后,可以设置先前提到的CONN_C2M_MOD_PENDING布尔值。
[0085] 惰性ACK检查的时序图8A和8B是更详细地图示C2M惰性ACK检查功能的时序图。
[0086] 惰性ACK检查被用于:1)保证修改的分组到达市场,以及2)避免CPM(在另外的部分中讨论)。修改的分组具有在检查设备110和市场之间被丢弃的可能性。由于该风险,因此应该有用于重传并保证分组到达的适当的(in place)系统。
[0087] 当CONN_C2M_MOD_PENDING布尔值被设置时可以使能的惰性ACK检查功能操作如下:检查相关联会话的所有M2C分组,以查看是否已接收到针对具有大于或等于序列标记的序列号的分组的ACK。如果分组被ACK,则清除CONN_C2M_MOD_PENDING布尔值。
[0088] 固定硬件213中的增量寄存器不晚于每100ms(去往市场和返回的大约1次往返(rtt))进行轮询。该寄存器优选地被轮询不要多于每10ms一次,因为就时间复杂度而言,这是昂贵的调用。如果已经清除寄存器,则接收针对修改的分组的ACK(因为增量被添加到累加器),并且可以清除CONN_C2M_MOD_PENDING布尔值。
[0089] 如果尚未清除增量,则重传修改的分组。Buzzsaw中的分组重传应调整序列号,使得由FPGA应用的增量不会导致不正确的序列。因为增量仍在等待在FPGA中被清除,所以任何重传分组都将不正确地使该增量值应用于序列。因此,软件应在重传之前调整TCP序列号,以便撤销该调整。
[0090] 在100ms时,会话超时并被断开,假设如果在去往市场和返回的4个rtt内没有看到ACK,则将永远不会接收到ACK,并且断开会话是最好的。
[0091] 一旦已经接收到ACK,就清除CONN_C2M_MOD_PENDING布尔值,并且惰性ACK检查系统对该连接不再是活跃的。
[0092] 可以在两个不同的模块中实现惰性ACK检查。一个模块出现在连接管理器710的CONN_ACTIVE状态的顶部处(图7)。CONN_ACTIVE状态将检查帧方向、CONN_MOD_PENDING布尔值和针对TCP序列的ACK。另一个模块检查10ms重传时间,该重传时间其可以在连接管理器710中的单独进程或线程中被跟踪。
[0093] C2M分组重传对于保证终止的分组的到达不是必要的,因为客户端将为我们重传终止的分组。然而,重传对于CPM避免而言是需要的(对于更多细节,参见别处的CPM讨论),因此对于C2M侧可以保留自动重传。
[0094] M2C数据流——数据插入概述数据插入是旨在响应于已拒绝C2M消息而注入错误消息的M2C功能。拒绝消息的客户端通知是重要功能,因为客户端侧服务器需要知道发送到市场的订单的状态。如果客户端未能接收到它们的订单的通知,则其通常可能导致客户端侧上的取消风暴或算法混乱。
[0095] M2C错误注入分组可以包括多个字段,以将分组标识为包含M2C通知消息、向其应用拒绝的消息的标识符(诸如客户端订单ID)、指示消息为什么被拒绝的原因的错误掩码和/或取决于客户端和市场设备之间使用中的更高级别协议(诸如FIX)的市场协议特定字段。
[0096] 在执行C2M数据删除后,调用M2C错误插入模块。M2C错误插入将M2C错误消息添加到净荷。该M2C错误消息将通过使用市场协议特定消息拒绝中的拒绝的客户端订单ID通知客户端被拒绝的特定消息。
[0097] 应该针对每个拒绝创建一个M2C错误消息。如果单个分组具有多个拒绝,则M2C错误分组将具有每个拒绝一(1)个错误消息。每个错误消息的长度优选地应小于终止消息的大小。这允许将多个M2C错误消息串接到单个分组中,并避免创建大于1 MTU的M2C错误分组的风险。因此,对于每个终止的分组,有且仅有一个(one and only one)M2C错误分组需要被传输。
[0098] 将注意返回到图7,现在更详细地描述M2C数据插入分组构造器模块的功能。
[0099] 在传输C2M修改分组之后立即调用M2C错误传输功能。该功能进行以下操作:重新计算分组的IP报头长度,以确保包括注入的字节。
[0100] 设置新的IP报头ID。该ID有助于标识TCP堆栈中的分段分组。插入随机ID避免了接收侧上的逻辑解释该错误注入是分段分组的部分的可能性。
[0101] 在DMA报头中和在DMA调用中设置必要的值/位,对于值描述,参见下文:DMA报头中的原始/转换位——将该DMA报头位设置为1,以便硬件重新计算TCP校验和、CRC和TCP序列。
[0102] DMA报头中的有符号的12位增量——设置DMA报头中的增量,以传送分组中修改的字节数(添加正增量信号字节,减去负信号字节)。FPGA使用该值来更新其硬件增量寄存器以用于标识的CAM。
[0103] 无符号的32位序列标记——将序列标记设置为基于正在被传输的修改分组的起始TCP序列的值。这被用于在修改分组的ACK时弹出“捕鼠器”。
[0104] 无符号的32位CAM条目——针对要DMA输出的分组设置CAM值。这告诉FPGA:a)正确的TCP序列以在其触及分组时使用,以及b)增量/累加器以用新值更新。
[0105] DMA报头中的M2C连接停止清除位——将该DMA报头位设置为1,以便其清除M2C连接停止。当在C2M数据删除模块中检测到第一终止消息时,M2C方向被置于连接停止模式中。
[0106] 跟踪M2C分段状态。一旦分组被终止,软件将把M2C方向设置为连接停止模式。然后,它处理连接停止M2C分组,直到它检测到M2C方向不再处于分段状态中。如果连接的M2C方向处于两个分段分组其间,则M2C错误分组不能被注入到TCP流中。因此,M2C错误传输功能应该继续处理M2C分组,直到它不再处于分段状态中。所有M2C错误分组都被存储在队列中。一旦确认M2C方向不处于分段状态中,队列中的所有分组就可以被传输。
[0107] 在传输分组之后,设置CONN_M2C_MOD_PENDING布尔值。
[0108] M2C错误重放(replay)如果客户端在M2C错误分组正在被发送到它们的同时从会话断开,则存在它们可能错过一些注入消息的可能性。惰性ACK检查仅重传相同连接上的分组。一旦客户端重新连接,客户端就需要一种方法来从检查设备重放丢失的M2C错误消息。
[0109] 为了处置这一点,可以在任何新连接的起始时向客户端重放多个(诸如最后1000个)M2C错误注入。这些注入将在登录接受被DMA输出到客户端并详细说明CAM之后立即被发送。M2C分组将保持停止,直到所有注入都已被重放。因为客户端应该只由于断开而错过M2C错误注入,所以M2C错误重放将只在重新连接后登录时发生。
[0110] 可以通过将“重放关闭”帐户级别权限设置为真来禁用该功能。
[0111] 注意,M2C错误重放与市场重放不同。市场重放是由市场发送给客户端的消息的重放。M2C错误重放是由检查设备注入到M2C TCP流中的消息的重放。
[0112] M2C返回到发送者M2C返回到发送者模式是其中由FPGA将M2C错误分组放回到环中的功能。在传输M2C错误分组后,FPGA将分组复制到环中。这允许数据路径:
解析分组;
确定以什么顺序将分组插入到M2C TCP流中;以及。
[0113] 在日志中报告消息拒绝。
[0114] M2C惰性ACK检查M2C惰性ACK检查被设计有与C2M惰性ACK检查相同的架构。有两个模块:
一个模块,其检查C2M ACK,以查看注入的M2C错误分组是否已被ACK。如果设置了CONN_M2C_MOD_PENDING布尔值,则该检查在处于CONN_ACTIVE状态中的连接状态机中发生。
[0115] 第二模块,其是其自己单独的进程或线程。对于具有设置的CONN_M2C_MOD_PENDING的所有连接对象,该单独的进程或线程跟踪10ms超时。在10ms时,它重传M2C错误分组。在100ms时,它断开会话。
[0116] C2M DSM硬件细节和与PTRS软件的接口图9图示了固定逻辑(FPGA)213硬件及其与数据路径和与PTRS应用220软件的操作。图9示出了用于处置其中客户端发出错误分组的情况的附加细节。如先前解释的那样,分组由在那里检测到错误的分组检查引擎来处理,并且分组被标记为拒绝的分组。然后将该分组发送到PTRS软件220以进行附加处理和重传。
[0117] 对于客户端到市场(C2M)方向,处理如下:(1a)分组检查引擎(PIE)420处理每个分组的TCP/IP报头,标识其会话(例如,通过使用分组的源IP地址和端口以及目的地IP地址和端口),并提取其TCP序列号。更新用于跟踪每个标识会话的最高TCP seq值的每个会话的latest_seq_num寄存器。
[0118] (1b)PIE拒绝分组,从而防止其完成FPGA 213到市场130的直通路径。分组被转发到用DMA报头中的正确的终止原因标记的PTRS应用220软件(例如,通过环缓冲器)。
[0119] (1c)针对与拒绝分组相关联的会话设置每个会话跳过分组防止模式。直到清除跳过分组模式,该特定会话的任何未来分组将被阻止传递通过FPGA 213并发送到软件220进行传输。例如,这可能涉及将与分组相关联的信息发送到处理队列、环缓冲器或在FPGA 213和软件220之间共享的其他合适的存储器或存储设备。在一些实施例中,由于跳过分组防止模式,对于被设置为软件220的每个分组,可以递增计数器。当软件220处理与由于设置了跳过分组防止模式而被发送到软件220的分组相关联的信息时,软件220可以递减计数器。处理与分组相关联的信息可以包括传输分组(或者如果原始分组由于不符合规则而需要修改,则修改的分组)。在优选的实现中,当与被发送到软件220的分组相关联的计数器已经被清除时,可以清除跳过分组防止模式。其他实施例可以以其他合适的方式确定与被发送到软件220的分组相关联的所有信息是否已经被处理。例如,一些实施例可以使用一对指针或索引而不是计数器。
[0120] (1d)软件处理拒绝的分组,并修剪(切下)拒绝的内容。然后,将分组的其余未拒绝内容DMA输出回到FPGA。DMA操作可以包括首先将分组净荷写入到共享存储器中,然后对FPGA 213中的某些寄存器进行编程。这促使FPGA执行对共享存储器的读取,以检索要发送到市场的净荷。DMA命令寄存器可以包含新字段“增量”,该字段“增量”对应于修改(修剪掉)的内容的大小。
[0121] (1e)DMA分组的TCP序列号(seq)在FPGA 213中被提取。并在确定是否应针对相应的会话清除跳过分组模式时使用。
[0122] (1f)写入DMA命令寄存器的增量值被应用于每流TCP累加器和ack_accumulator,用于调整C2M流量的TCP序列号和M2C流量的TCP ACK号。然而,两个累加器状态都应保持在原始状态中,直到影响的分组传递通过它们的路径。
[0123] (1g)影响的分组根据累加器中保存的值来使其TCP排序被调整(在增量对累加器进行调整之前)。修改的分组被发送到其网络目的地。
[0124] (1h)针对DMA输出分组计算未决ACK号,并将其复制到M2C路径中的ack_seq_marker。在M2C路径中,ack_seq_marker触发ack_delta到ack_accumulator的应用。
[0125] (1i)在将分组发出到市场后,将增量应用于累加器。
[0126] 应当理解,以上只是FPGA 213(固定逻辑)硬件的一个示例实现,并且变化是可能的。例如,尽管示出了两个累加器(C2M路径中的累加器和M2C路径中的ack_accumulator),但是可以用单个累加器替换那两个累加器。例如,可以通过将增量寄存器中的值延迟应用到累加器中,直到修改的分组已被市场确认之后,来避免第二累加器和增量寄存器。然后,针对在C2M方向上传播的随后的分组的序列号的调整将包括累加器中的值以及增量寄存器中的值。
[0127] 对于在市场到客户端(M2C)方向上流动的消息,处理如下。
[0128] (2a)提取每个到达分组的recv_ack_seq号,并标识其会话。如果该特定分组的流具有未决ack_seq_marker,并且recv_ack_seq等于或大于ack_seq_marker,则将未决的每流ack_delta应用于ack_accumulator。
[0129] (2b)ack_accumulator被用于调整传递的M2C分组的ACK号。
[0130] 硬件中的M2C DSM图10图示了M2C拒绝消息处理。PTRS应用220软件最近拒绝了消息,并且优选地然后将相应的通知消息注入回到客户端,从而通知他们该事件,以及可选地,拒绝的原因。为了干净地做到这一点,软件220将影响的会话设置为M2C连接停止模式,导致针对该会话的所有流量被阻止传递通过FPGA 213。软件220将经由DMA将所拦截的流量传输到市场130,并且将在干净的边界处注入拒绝消息。
[0131] (1a)首先,PTRS应用220软件针对其将针对其注入拒绝消息的会话(流)设置M2C连接停止模式。
[0132] (1b)从市场130接收的分组在FPGA 213中被处理,标识其会话(例如,通过使用分组的源IP地址和端口以及目的地IP地址和端口)。如果该分组被标识为属于被设置在连接停止模式中的会话,则FPGA 213拒绝该分组经由直通路径到达客户端,并将其发送到环缓冲器以进行软件传输。
[0133] (1c)PTRS应用220软件处理环上的传入M2C流量。在处理因连接停止而被终止的分组时,该软件将未决拒绝消息注入到分组中,并通过FPGA 213将其DMA输出。PTRS软件220清除影响的会话的连接停止模式(bh_clear位)。
[0134] (1d)在DMA输出分组的传输期间清除连接停止模式。
[0135] (1e)写入DMA_CMD的增量值将被应用于每流TCP累加器和ack_accumulator,并用于调整M2C流量的TCP序列号和用于调整C2M流量的TCP ACK号。然而,两个累加器状态都应保持在原始状态中,直到影响的分组传递通过它们的路径。
[0136] (1f)将包括注入消息的修改的分组发送到环(或其他缓冲器)。这样做使得拒绝消息呈现在M2C环上以进行重放。
[0137] (1g)修改的分组根据累加器中保存的值来使其TCP排序被调整(在增量被用于对累加器调整之前)。修改的以太网分组将被发送到其网络目的地。
[0138] (1h)针对DMA输出分组计算未决ACK号,并将其复制到C2M路径中的ack_seq_marker。在C2M路径中,ack_seq_marker触发ack_delta到ack_accumulator的应用。
[0139] (1i)在将分组发出到市场130之后,将增量应用于累加器。
[0140] 2.客户端120将流量发送到市场130。
[0141] (2a)提取每个到达分组的recv_ack_seq号,并标识其会话。如果该特定分组的会话具有未决ack_seq_marker,并且recv_ack_seq等于或大于ack_seq_marker,则将未决每流ack_delta应用于ack_accumulator。
[0142] (2b)ack_accumulator被用于调整传递的C2M分组的ACK号。
[0143] 修改前传递分组模式修改前传递分组是已经由客户端或市场侧重传并且无法通过FPGA以通常方式使其TCP序列被更新的分组。当重传至此返回TCP序列中时,这可能发生,最近的累加器和增量不再准确反映正确的序列修改。因此,应采取动作以防止TCP功能障碍。
[0144] 图11是图示修改前传递分组状况的问题的示例。
[0145] 作为问题的编排(setup),在时间t0时,将良好分组1传输到市场。然而,我们可以看到,在时间t1时,在检查设备110和客户端120之间丢弃针对GoodPacket1的ACK,因此客户端120在预期的时间帧内未接收到针对GoodPacket1的ACK。在时间t2时,下一个C2M分组KilledPacket1被检查设备110终止,导致设置非零增量值(在该示例中为‘-10’)以考虑字节计数中的变化。在时间t3时,针对KilledPacket1的ACK由检查设备110观察,但是与针对GoodPacket1的ACK一样,也在检查设备110与客户端之间被丢弃。因为已经由检查设备110看到了针对KilledPacket1的ACK,所以将增量值‘-10’添加到累加器。
[0146] 当在预期的时间帧内尚未接收到针对GoodPacket1的ACK的客户端将GoodPacket1重传到市场时,问题在步骤t4处暴露其自身。然而,累加器被设置为针对该序列的错误的值。这将导致重传的GoodPacket1使得用该错误的累加器值来修改其序列号,从而导致市场侧上的潜在的TCP功能障碍。因此,一旦分组已经被终止,随后的分组将通过累加器使它们的序列号被调整。然而,如从该示例可以看到的,在终止的分组到达之后,具有低于终止的分组的序列号的较旧的分组晚到达检查设备110处,这是可能的。
[0147] 修改前传递分组可以在客户端侧或市场侧上发生。针对该状况的检测在连接状态机中发生。为了避免可能由该状况引起的TCP功能障碍,如果1)该分组的TCP序列号小于最近的序列标记(CONN_SEQ_MARKER)以及2)没有MOD_PENDING布尔值被设置,则可以检测修改前传递分组状况。
[0148] 当检测到修改前传递分组时采取的一个可能的动作是断开会话。作为正确处置修改前传递分组(即具有比最近的序列标记低的序列号的晚到达的分组)的另一种方法,FPGA 213可以保留增量、累加器和序列号标记值的历史表。因此,可以通过从历史表中应用与适用于晚到达分组的序列标记值相关联的累加器和/或增量的相关值来确定晚到达分组的正确序列号。
[0149] M2C错误注入分段——在一个实施例中,PTRS软件220存储M2C错误注入,直到其可以肯定M2C方向不再处于分段状态中。然而,其他实施例是可能的,其中可以沿着均匀的消息边界分割分段的M2C分组,从而消除对停止M2C方向的需求。通过在错误注入时移除M2C分段,可以执行错误分组的更快传输。
[0150] TCP序列号与TCP序列标记交互。
[0151] 在一些实施例中,当新消息到达时,固定逻辑213可以将新消息的TCP序列号与序列标记寄存器中的值进行比较。如果当前消息TCP序列号小于序列标记的值,则转发该消息而不修改。如果当前消息TCP序列号大于或等于序列标记的值,则该消息的TCP序列号将使累加器寄存器的值添加到它。
[0152] 跳过分组防止和快速路径与慢速路径的使用当分组被终止时,CAM(或更一般地,检查设备110)被设置成跳过分组防止模式。跳过分组防止模式将所有客户端到市场(C2M)分组发送到软件,而不首先由固定硬件213处理。
[0153] 这避免了某些竞争状况——图12中示出了一种这样的竞争状况。
[0154] 在图12中所示的该情况下,在时间t0时发送终止分组1(k1)。然而,在之后的时间t1时,良好分组1(g1)传递通过硬件(FPGA),其中需要由PTRS应用软件220并且在软件(PTRS应用220)有时间处理终止分组1(k1)之前处理。这意味着良好分组1(g1)可以在终止分组1(k1)有时间被覆盖之前到达市场处。同样,GoodPacket1的序列号可能是不正确的,因为它将不准确反映由于完全处理KilledPacket1而需要的修改。
[0155] 为了避免像这样的竞争状况,在跳过分组防止模式下,所有分组被发送到软件,直到已经传输被发送到软件的最后的分组。因此,在时间t2时,如果使能了跳过分组功能,则FPGA自动自行处置跳过分组,并且其不需要通过软件来打开和关闭。
[0156] 图13示出了这一点的示例。在时间t0时,当第一分组k1被终止时,所有后面的分组(诸如在时间t1和t2时接收的那些分组)都被发送到PTRS软件而不是FPGA。这持续直到在时间t3时传输被发送到软件g2的最终良好分组。然后关闭跳过分组模式,并且然后现在可以通过硬件转发时间t4时的良好分组g3,而不必如先前那样通过软件。
[0157] 紧密接近修改(CPM)紧密接近修改(CPM)是竞争状况,当仍尚未从市场接收到针对终止的分组的ACK而另一个终止的分组正在等待被传输时,竞争状况发生。在该情况下,增量仍将正在存储从原始终止的分组中移除的总字节,并且它不能被添加到累加器或清除,直到针对该分组的ACK到达。当CPM发生时,第二终止分组应在其可以被传输之前停止。一旦接收到针对第一终止分组的ACK,就可以传输第二终止分组。在一些实施例中,不是停止,而是将随后终止的分组排队,这可以是可能的。
[0158] 图14示出了紧密接近修改(CPM)场景。
[0159] 如果当正在传输终止的C2M分组时已经设置(在时间t0时)CONN_C2M_MOD_PENDING布尔值,则C2M传输模块进行以下操作:1)一旦检测到状况(诸如时间t2),就停止整个核心。这里,随后接收到的终止分组2将在检查设备中被停止。(注意,当在时间t2时接收到紧密接近于KilledPacket1的KilledPacket2时(即,在已经接收到针对KilledPacket1的ACK之前),检测紧密接近状况。
时间t1时的良好分组1将由硬件处置并发送到市场,但是随后的分组应被停止,直到接收到针对KilledPacket1的ACK)。
[0160] 2)针对CPM已经在其上发生的会话持续轮询增量寄存器:在时间t3时,一旦增量寄存器为0,则已接接收到针对第一终止分组1的ACK。在该时刻,可以释放停止,并且可以在时间t4时传输第二终止分组2。
[0161] 如果增量寄存器仍是非零:则以固定间隔(例如,每10ms)重传最后修改的分组(例如,在该示例中为
KilledPacket1)。
[0162] 如果在超时时间段(例如100 ms)之后仍未接收到针对最后修改的分组的ACK,则断开会话。
[0163] 此刻,假设交易在检查设备110上是活跃的时,CPM应该是非常罕见的情况。由于这个原因,整个核心可能在检测到CPM时被停止。
[0164] 重要的是要注意,当CPM的数量超过硬件中的序列标记寄存器的数量时,上述处置CPM的方法使用软件。在一些实施例中,可以存在多个序列标记、增量和累加器寄存器以在硬件路径上容纳多个CPM。例如,具有三组序列标记、增量和累加器寄存器的实施例可以一次容纳三个未解决的(outstanding)未确认的修改分组。在这样的示例实施例中,当即使仍尚未接收到针对第一修改分组的确认,第二分组也需要被修改时,对应于第二修改分组的增量值、序列标记和/或累加器值可以被存储在第二组寄存器中。类似地,在确认前两个修改分组之前需要修改的第三分组将导致将增量值、序列标记和/或累加器值存储到第三组寄存器中。在先前的三个修改分组已经被确认之前需要修改的第四分组然后可以由软件处置或停止,如上面描述的那样。因此,只要一组序列标记、增量和/或累加器寄存器仍然可用于与新到达的需要修改的分组相关联,这样的实施例就避免当需要修改的分组到达时停止。当接收到与一组序列标记、增量和/或累加器寄存器相关联的修改分组的确认时,与确认的修改分组相关联的寄存器中的值可以被清除,并使得可用于由需要修改的另一个传入分组重新使用。
[0165] 每个双工会话的硬件机制的实例。
[0166] 每个会话存在本文档中描述的硬件机制的单独实例对。该对中的一个实例处置TCP会话的C2M方向,另一个实例处置TCP会话的M2C方向。在实施中,典型的FPGA将支持128个会话(该机制的256个实例),然而该实际数量是任意的,并且仅限于FPGA芯片上的存储器。
[0167] 用于修改TCP分组的选项本文档中描述的技术将允许直通超低延迟设备从建立的TCP流中完全移除消息,用不同大小的消息替换现有的消息“飞行中(in-flight)”消息,或在C2M或M2C方向上注入附加消息。
[0168] 合成市场拒绝消息本文档中描述的技术将适应现有TCP流中的消息的移除、添加和修改。这些较低级别的机制被用于移除未通过风险检查的交易事件消息,并将防止数据到达目标交易场所处。另外,使它们的交易消息被拒绝的客户端将将需要拒绝通知,以便它们知道它们的消息未被场所接收。该技术将合成协议特定拒绝消息,使得已被编码为交易场所协议的客户端交易服务器可以无缝地解释拒绝。最终结果将呈现给交易客户端,就像交易场所因违反交易前风险控制而拒绝该消息一样。此外,系统将添加关于特定拒绝原因的附加信息,以便客户端可以正确地解释为什么原始交易消息被拒绝。
[0169] FPGA环缓冲器在一些实现中,FPGA(固定硬件)213和PTRS软件220之间的一个主要通信机制可以是环缓冲器。该环缓冲器由两个指针来维护:头指针和尾指针。FPGA 213将所有数据写入到以尾指针的位置起始的缓冲器。一旦FPGA 213完成数据的写入,它将尾指针前进到最后写入的字节的存储位置。当软件从缓冲器读取时,头指针被前进到最后读取的字节的位置,使得存储器可以被FPGA 213安全地覆盖。跟踪有效数据的起始和结束存储位置的头和尾指针从环缓冲器的基址“环绕(wrap)”到(基址加缓冲器大小),因此创建了“圆环”。采取考虑以防止FPGA 213溢出环缓冲器,这将导致尾指针在“环绕”事件发生后覆盖超出头指针。
[0170] 其他用例上面描述的架构可以在其他应用中使用。例如,出于检查证券交易订单之外的原因,它可以被用于监视跨网络流动的数据流、捕获分组、解码分组的原始数据以及实时分析分组内容。
[0171] 进一步的实现选项应当理解,上面描述的示例实施例可以以许多不同的方式来实现。在一些情况下,各种“数据处理器”可以各自由具有中央处理器、存储器、磁盘或其他大容量存储设备、(一个或多个)通信接口、(一个或多个)输入/输出(I/O)设备和其他外围设备的物理或虚拟通用计算机来实现。通用计算机被转换成处理器并执行上面描述的过程,例如,通过将软件指令加载到处理器中,并且然后使得执行指令以执行描述的功能。
[0172] 如本领域中已知的,这样的计算机可以包含系统总线,其中总线是用于计算机或处理系统的组件之间的数据传递的一组硬件线路。一根或多根总线本质上是连接计算机系统的不同元件(例如,处理器、磁盘存储设备、存储器、输入/输出端口、网络端口等)的(一个或多个)共享管道,其使能元件之间的信息的传递。一个或多个中央处理器单元被附接到系统总线并提供计算机指令的执行。通常还附接到系统总线的是用于连接各种输入和输出设备的I/O设备接口。(一个或多个)网络接口允许去往附接到网络的各种其他设备的连接。存储器为用于实现实施例的计算机软件指令和数据提供易失性存储。磁盘或其他大容量存储设备为计算机软件指令和数据提供非易失性存储,所述计算机软件指令和数据用于实现例如本文中描述的各种程序。
[0173] 因此,实施例通常可以以硬件、定制设计的半导体逻辑、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、固件、软件或其任何组合来实现。
[0174] 在某些实施例中,本文中描述的程序、设备和过程是计算机程序产品,包括为系统提供软件指令的至少一部分的计算机可读介质(例如,可移动存储介质,诸如一个或多个DVD-ROM、CD-ROM、软盘、磁带等)。这样的计算机程序产品可以通过任何合适的软件安装程序来安装,如本领域中公知的那样。在另一个实施例中,软件指令的至少一部分也可以通过电缆、通信和/或无线连接来下载。
[0175] 实施例还可以被实现为被存储在非暂时性机器可读介质上的指令,其可以被一个或多个程序读取和执行。非暂时性机器可读介质可以包括用于以通过机器(例如计算设备)可读的形式存储或传输信息的任何机制。例如,非暂时性机器可读介质可以包括只读存储器(ROM);随机存取存储器(RAM);包括磁盘存储介质的存储设备;光学存储介质;闪存设备;以及其他。
[0176] 此外,固件、软件、例程或指令可以在本文中被描述为执行某些动作和/或功能。然而,应当理解,在本文中所包含的这样的描述仅仅为了便利,并且这样的动作事实上由计算设备、处理器、控制器或执行固件、软件、例程、指令等的其他设备引起。
[0177] 还应该理解,框图和网络图可以包括被不同地布置或者被不同地表示的更多或更少的元件。但是进一步应该理解,某些实现可以规定框图和网络图,并且以特定方式实现说明实施例的执行的框图和网络图的数量。
[0178] 因此,进一步的实施例还可以在多种计算机架构、物理、虚拟、计算机和/或其一些组合中实现,并且因此本文中描述的计算机系统仅旨在用于说明的目的,而不作为对实施例的限制。
[0179] 因此,虽然本发明已经特别地参考其示例实施例被示出和描述,但是本领域技术人员将理解,可以在其中做出在形式和细节上的各种改变,而不脱离如由所附权利要求所包含的发明的范围。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈