CN107579949B - 数据报文处理方法及装置 - Google Patents
数据报文处理方法及装置 Download PDFInfo
- Publication number
- CN107579949B CN107579949B CN201610526263.5A CN201610526263A CN107579949B CN 107579949 B CN107579949 B CN 107579949B CN 201610526263 A CN201610526263 A CN 201610526263A CN 107579949 B CN107579949 B CN 107579949B
- Authority
- CN
- China
- Prior art keywords
- data message
- connection
- transmission direction
- request
- payload
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Computer And Data Communications (AREA)
- Communication Control (AREA)
Abstract
本申请提供了一种数据报文处理方法及装置,其中的方法包括:针对待处理的数据报文,根据所述数据报文所属的连接、数据报文中的序列号以及所述数据报文的传输方向对数据报文进行排序,其中,该数据报文包括:基于传输控制协议TCP的数据报文;对排序处理后的数据报文的净荷进行解码,以获得请求或者响应;对属于同一连接且传输方向相反的解码后的请求和响应进行请求响应配对。本申请提供的技术方案提高了数据报文的易用性,进而提高了测试维护等工作的工作效率。
Description
技术领域
本申请涉及通讯技术,尤其涉及一种数据报文处理方法以及数据报文处理装置。
背景技术
在服务器调试、程序测试以及操作模拟回放等测试维护应用场景中,通常需要使用网络中传输的数据报文。然而,网络中传输的数据报文不仅在数量上纷繁众多,在采用的协议方面也存在差异,这使得数据报文的使用存在诸多不便之处;另外,网络报文的乱序以及重传等传输异常现象,进一步影响了数据报文的易用性。
如何对网络中传输的数据报文进行处理,使数据报文便于使用,从而提高服务器调试、程序测试以及操作模拟回放等测试维护工作的工作效率,是一个值得关注的问题。
发明内容
本申请的目的是提供一种数据报文处理方法及装置。
根据本申请的一个方面,提供了一种数据报文处理方法,包括:针对待处理的数据报文,根据所述数据报文所属的连接、数据报文中的序列号以及所述数据报文的传输方向对数据报文进行排序,其中,该数据报文包括:基于传输控制协议TCP的数据报文;对排序处理后的数据报文的净荷进行解码,以获得请求或者响应;对属于同一连接且传输方向相反的解码后的请求和响应进行请求响应配对。
根据本申请的另一个方面,提供了一种数据报文处理装置,该装置主要包括:报文排序模块,用于针对待处理的数据报文,根据所述数据报文所属的连接、数据报文中的序列号以及所述数据报文的传输方向对数据报文进行排序,其中,所述数据报文包括:基于传输控制协议TCP的数据报文;解码模块,用于对排序处理后的数据报文的净荷进行解码,以获得请求或者响应;配对模块,用于对属于同一连接且传输方向相反的解码后的请求和响应进行请求响应配对。
可选的,前述的数据报文处理装置,其中,所述装置还包括:确定连接模块,用于确定待处理的数据报文所属的连接;且所述确定连接模块包括:匹配子模块,用于在连接信息集合中查找与所述接收到的数据报文的发送方地址信息和接收方地址信息相匹配的连接信息;第一确定子模块,用于在匹配子模块查找到相匹配的连接信息时,根据相匹配的连接信息确定所述数据报文所属的连接;第二确定子模块,用于在匹配子模块未查找到相匹配的连接信息时,根据所述数据报文的发送方地址信息和接收方地址信息确定所述数据报文所属的连接,并在连接信息集合中添加基于所述数据报文的发送方地址信息和接收方地址信息的连接信息。
可选的,前述的数据报文处理装置,其中,所述连接信息包括:连接两端的地址信息、第一传输方向当前期望序列号以及第二传输方向当前期望序列号;所述第一确定子模块还用于在匹配子模块查找到相匹配的连接信息,且该连接信息中的与所述数据报文的传输方向相对应的第一/第二传输方向当前期望序列号为初始值的情况下,将该初始值设置为数据报文中的序列号和净荷长度之和;和/或,所述第二确定子模块还用于将所述添加的连接信息中的与所述数据报文的传输方向相对应的第一/第二传输方向当前期望序列号设置为数据报文中的序列号和净荷长度之和。
可选的,前述的数据报文处理装置,其中,所述报文排序模块包括:第一排序子模块,用于基于数据报文的传输方向,在所述数据报文中的序列号大于所述数据报文对应的连接信息中的第一/第二传输方向当前期望序列号的情况下,确定所述数据报文为乱序数据报文并缓存;第二排序子模块,用于基于数据报文的传输方向,在所述数据报文中的序列号小于所述数据报文对应的连接信息中的第一/第二传输方向当前期望序列号的情况下,确定所述数据报文为重传数据报文;第三排序子模块,用于基于数据报文的传输方向,在所述数据报文中的序列号等于所述数据报文对应的连接信息中的第一/第二传输方向当前期望序列号的情况下,确定所述数据报文为正序数据报文,根据所述数据报文的净荷长度更新所述数据报文对应的连接信息中的第一/第二传输方向当前期望序列号,并在确定出缓存的数据报文的序列号等于第一/第二传输方向当前期望序列号的情况下,从缓存中读取数据报文,将读取出的数据报文作为正序数据报文,并根据读取出的数据报文的净荷长度更新相应连接信息中的第一/第二传输方向当前期望序列号。
可选的,前述的数据报文处理装置,其中,所述连接信息还包括:第一传输方向连接关闭信息和第二传输方向连接关闭信息,且所述装置还包括:维护模块,用于根据所述数据报文的传输方向以及数据报文中的关闭信息设置相应连接信息中的第一/第二传输方向连接关闭信息;且在连接信息中的第一传输方向连接关闭信息和第二传输方向连接关闭信息均被设置为关闭的情况下,针对所述连接信息进行资源释放处理。
可选的,前述的数据报文处理装置,其中,所述解码模块具体用于:利用根据排序处理后的数据报文的发送方地址信息和/或接收方地址信息确定出的所述数据报文的净荷所采用的协议调用相应的解码器,以由被调用的解码器对排序处理后的数据报文的净荷进行解码。
可选的,前述的数据报文处理装置,其中,所述解码模块包括:区分子模块,用于根据数据报文的发送方地址信息和/或接收方地址信息将排序处理后的数据报文的净荷区分为第一传输方向净荷或第二传输方向净荷;调用子模块,用于针对不同传输方向的净荷分别调用相应协议的解码器,并根据解码器输出的解码结果获得对象,且该对象为分布于一个或者多个净荷中的一个完整的请求/响应。
可选的,前述的数据报文处理装置,其中,所述配对模块包括:第一配对子模块,用于在所述对象是请求对象,且所述对象对应的协议属于有序协议的情况下,将所述对象放入其对应的连接的先进先出队列中;而在所述对象是响应对象,且所述对象对应的协议属于有序协议的情况下,从所述对象对应的连接的先进先出队列中读取出一个对象,并将两个对象作为一个请求响应对。
可选的,前述的数据报文处理装置,其中,所述配对模块包括:第二配对子模块,用于在所述对象是请求对象,且所述对象对应的协议属于无序协议的情况下,在所述对象对应的连接的存储区域中存储所述对象;而在所述对象是响应对象,且所述对象对应的协议属于无序协议的情况下,从所述对象对应的连接的存储区域中查找具有与该对象的响应标识相匹配的请求标识的对象,并将相匹配的两个对象作为一个请求响应对。
可选的,前述的数据报文处理装置,其中,所述配对模块还包括:第一判断子模块,用于根据对象中承载的信息确定对象是请求对象还是响应对象;第二判断子模块,用于根据对象对应的连接的端口信息确定对象对应的协议属于无序协议还是有序协议。
与现有技术相比,本申请具有以下优点:本申请通过针对一个连接中传输的数据报文进行排序处理,可以使在一个连接中传输的数据报文的净荷形成有序字节流,即排除乱序以及重传等传输异常现象而导致的净荷错乱问题;通过对排序处理后的数据报文中的净荷进行解码,可以使一个或者多个解码后的净荷形成一个完整的请求或者响应;通过进行请求响应配对处理,可以使相应的请求和相应的响应相关联,相关联的请求和响应更有利于测试维护分析;由此可知,本申请提供的技术方案提高了数据报文的易用性,进而提高了测试维护工作的工作效率。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1为本申请实施例一的数据报文处理方法流程图;
图2为本申请实施例一的确定数据报文所属的连接的一个具体例子的流程图;
图3为本申请实施例一的对数据报文进行排序的一个具体例子的流程图;
图4为本申请实施例一的对排序处理后的数据报文的净荷进行解码的一个具体例子的流程图;
图5为本申请实施例一的请求响应配对的一个具体例子的流程图;
图6为本申请实施例二的数据报文处理装置的一结构示意图;
图7为本申请实施例二的数据报文处理装置的另一结构示意图;
图8为本申请实施例二的确定连接模块的一个具体结构示意图;
图9为本申请实施例二的报文排序模块的一个具体结构示意图;
图10为本申请实施例二的解码模块的一个具体结构示意图;
图11为本申请实施例二的配对模块的一个具体结构示意图;
图12为本申请的一个具体应用系统的示意图;
图13为本申请的数据报文处理方法的一个具体例子的流程图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请的实施例作详细描述。
在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然本申请的流程图将各项操作描述成顺序的处理,但是,其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
本实施例中的服务器包括但不限于单个网络服务器、多个网络服务器组成的服务器组或者基于云计算(Cloud Computing)的由大量计算机或者网络服务器构成的云,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个超级虚拟计算机。其中,所述服务器可以接入网络并与网络中的其他设备进行信息交互操作。其中,所述服务器所能够接入的网络包括但不限于互联网、广域网、城域网、局域网、VPN网络等。
需要说明的是,所述服务器以及网络等仅为举例,其他现有的或今后可能出现的服务器或者网络如可适用于本申请,也应包含在本申请保护范围以内,并以引用方式包含于此。
后面描述所讨论的方法(其中一些通过流程图示出)实施例可以通过硬件、软件、固件、中间件、微代码、硬件描述语言或者其任意组合的形式来实施。当用软件、固件、中间件或者微代码来实施时,用以实施必要任务的程序代码或者代码段可以被存储在机器或计算机可读介质(比如存储介质)中。(一个或多个)处理器可以实施必要的任务。
这里所公开的具体结构和功能细节仅仅是代表性的,并且是用于描述本申请的示例性实施例的目的,但是,本申请可以通过许多替换形式来具体实现,并且不应当被解释成仅仅受限于这里所阐述的实施例。
应当理解的是,虽然在这里可能使用了术语“第一”、“第二”等等来描述各个单元,但是这些单元不应当受这些术语限制。使用这些术语仅仅是为了将一个单元与另一个单元进行区分。举例来说,在不背离示例性实施例的范围的情况下,第一单元可以被称为第二单元,并且类似地第二单元可以被称为第一单元。这里所使用的术语“和/或”包括其中一个或更多所列出的相关联项目的任意和所有组合。
应当理解的是,当一个单元被称为“连接”或者“耦合”到另一个单元时,其可以直接连接或者耦合到所述另一个单元,也可以存在中间单元。与此相对的,当一个单元被称为“直接连接”或者“直接耦合”到另一个单元时,则不存在中间单元。应当按照类似的方式来解释被用于描述单元之间的关系的其他词语(例如,“处于...之间”相比于“直接处于...之间”,“与...邻近”相比于“与...直接邻近”等等)。
这里所使用的术语仅仅是为了描述具体实施例,而不是意图限制示例性实施例。除非上下文中明确地另有所指,否则,这里所使用的单数形式“一个”、“一项”还意图包括复数。还应当理解的是,这里所使用的术语“包括”和/或“包含”规定了所陈述的特征、整数、步骤、操作、单元和/或组件的存在,而不排除存在或者添加一个或更多的其他特征、整数、步骤、操作、单元、组件和/或其组合。
还应当提到的是,在一些替换的实现方式中,所提到的功能/动作可以按照不同于附图中标示的顺序发生。举例来说,取决于所涉及的功能/动作,相继示出的两幅图实际上可以基本上同时执行或者有时可以按照相反的顺序来执行。
技术术语说明:
数据报文的净荷,是指数据报文的有效载荷(Payload);
数据报文的通讯双方形成一个连接,如一个连接对应一个四元组,该四元组如目的IP地址、目的端口、源IP地址以及源端口;
连接信息,用于描述一条连接,如连接一端的地址信息、连接另一端的地址信息、当前期望序列号(如第一传输方向当前序列号和第二传输方向当前序列号)以及连接关闭信息等;
连接信息集合,通常包括一条或者多条连接信息;
请求响应配对,是指将请求和针对该请求的响应关联起来;
解码器,对应一种协议,能够有效识别其所对应的协议的数据报文;
序列号,承载于数据报文中,可以表示出其所在的数据报文在发送方的发送顺序;
期望序列号,可以表示出期望接收到的数据报文的序列号。
下面结合附图对本申请的技术方案作进一步详细描述。
本申请的技术方案的一个具体应用系统如图12所示。
图12中的应用系统主要包括:网络设备1、终端设备2(如计算机)以及多个用户设备3(图12中仅示意性的示出了两个用户设备3)。
网络设备1主要用于接收各用户设备3发送来的数据报文,并将需要返回给用户设备3的数据报文向相应的用户设备3发送。
终端设备2主要用于对网络设备1接收到的来自用户设备3的数据报文以及向相应的用户设备3发送的数据报文进行处理,以形成请求响应对,且终端设备2对数据报文进行处理以形成请求响应对的过程如图13所示。
图13中,S1300、终端设备2实时获取网络设备1中的数据报文(如来自用户设备3的数据报文以及需要发送给用户设备3的数据报文),并确定数据报文所属的连接,如根据数据报文的四元组确定数据报文所属的连接。
四元组的一个具体的例子为,设定一个四元组为(10.0.2.15,50697,93.184.216.34,80),其中,93.184.216.34可以为目的IP地址,也可以为源IP地址,在93.184.216.34为目的IP地址时,80为目的端口,10.0.2.15为源IP地址,50697为源端口;而在93.184.216.34为源IP地址时,80为源端口,10.0.2.15为目的IP地址,50697为目的端口,凡是具有该四元组的数据报文均属于同一连接。
S1310、终端设备2对属于同一连接的数据报文进行排序,如根据数据报文中的序列号以及当前期望的序列号判断数据报文是否为乱序数据报文或者重传数据报文等,并根据判断结果将属于同一连接的数据报文整理为顺序排序的数据报文。一个具体的例子,设定在一个连接上发起一个HTTP请求,且该HTTP请求通过11个数据报文传输,如果第6个数据报文先于第5个数据报文到达网络设备1,则终端设备2可以根据当前期望的序列号以及第6个数据报文中的序列号确定网络设备1先于第5个数据报文接收到的第6个数据报文为乱序数据报文;如果网络设备1在接收到第5个数据报文和第6个数据报文后,又接收到第5个数据报文,则终端设备2应根据当前期望的序列号以及当前接收到的第5个数据报文中的序列号确定当前接收到的第5个数据报文为重传数据报文。该HTTP对应的HTTP响应与该HTTP请求属于同一连接,设定该HTTP响应也通过多个数据报文(如20个数据报文)传输,且这多个数据报文在由网络设备1发给用户设备3的过程中,同样需要在终端设备2处进行顺序排序处理。
S1320、终端设备2针对顺序排序的各数据报文分别区分传输方向,如根据数据报文的发送方地址信息和/接收方地址信息确定各数据报文的传输方向,从而针对每一个传输方向均获得顺序排序的一列数据报文。
S1330、终端设备2调用相应的解码器对不同传输方向的数据报文分别进行解码处理,以获得请求对象或者响应对象,如终端设备2可以根据数据报文的发送方端口号和/或接收方端口号调用相应的解码器。
续前例,上述HTTP请求所包含的11个数据报文已经被顺序排序,从第1个数据报文承载的信息中可以获知该HTTP请求的净荷长度,且从每个数据报文承载的净荷长度信息可以获得各数据报文中承载的净荷,因此,通过调用HTTP解码器对顺序排列的11个数据报文中的净荷进行顺序解码处理,可以根据11个数据报文中的净荷获得一个完整的HTTP请求,该HTTP请求即为一个请求对象。同样的,针对该HTTP请求所对应的HTTP响应,从该HTTP响应所包含的第1个数据报文中可以获知该HTTP响应的净荷长度,且从每个数据报文承载的净荷长度信息可以获知各数据报文中承载的净荷,因此,通过调用HTTP解码器对顺序排列的各数据报文的净荷进行顺序解码处理,可以根据各数据报文中的净荷获得一个完整的HTTP响应,该HTTP响应即为一个响应对象。
HTTP解码器的一个具体的解码过程可以为:由于HTTP请求通过11个数据报文传输,因此,HTTP解码器对顺序排列的第1个数据报文的净荷进行解码时,并不能获得一个对象(即HTTP请求),HTTP解码器等待对第2个数据报文的净荷进行解码,且解码后仍然判断出不能获得一个对象,HTTP解码器等待对第3个数据报文的净荷进行解码,以此类推,直到HTTP解码器对第11个数据报文的净荷进行解码后,可以判断出对第1数据报文的净荷的解码结果至对第11个数据报文的净荷的解码结果可以形成一个对象,HTTP解码器输出其解码获得的对象。
S1340、终端设备2对其获得请求对象或者响应对象进行配对处理,如判断当前解码获得的对象是请求对象还是响应对象,如果是请求对象,则存储在先进先出队列中,如果是响应对象,则从先进先出队列中获取一个请求对象,并将该请求对象与该响应对象作为匹配的请求响应对。
续前例,可以将上述HTTP请求和HTTP响应作为匹配的请求响应对。
实施例一、数据报文处理方法。
图1为本实施例的数据报文处理方法流程图。
在图1中,本实施例的方法主要包括:步骤S100、步骤S110以及步骤120,且图1所示的步骤S100、步骤S110以及步骤120通常在网络设备或者终端设备(如互联网公司内部的网络设备或者终端设备等)中执行,且本实施例的方法可以实现数据报文的实时处理(即在实时的获取到网络中传输的数据报文时,即时对数据报文进行处理),也可以实现数据报文的离线处理(如先将获取到的网络中传输的数据报文存储在文件中,然后,在需要对数据报文进行处理时,从文件中读取数据报文并对读取的数据报文进行处理)。
下面对图1中的各步骤分别进行详细描述。
S100、针对待处理的数据报文,根据数据报文所属的连接、数据报文中的序列号以及数据报文的传输方向对数据报文进行排序。
作为示例,本实施例可以利用网络数据抓取方式获得待处理的数据报文,且获取到的数据报文可以为基于TCP(Transmiss ion Control Protocol,传输控制协议)的数据报文。
作为示例,本实施例可以利用预先设置的连接信息集合来确定数据报文所属的连接。通常情况下,连接信息集合中设置有至少一条连接信息,而在本实施例的方法第一次被执行时,该连接信息集合通常会被初始化为空。
作为示例,本实施例的连接信息集合中的连接信息通常包括:连接两端的地址信息(如连接两端的IP地址和端口号)、第一传输方向当前期望序列号以及第二传输方向当前期望序列号;且该连接信息还可以包括:第一传输方向连接关闭信息和第二传输方向连接关闭信息;另外,该连接信息还可以包括:临时缓存的乱序数据报文等。上述连接两端的地址信息可以具体表现为该连接的其中一端的IP地址和端口号以及该连接的另一端的IP地址和端口号;当然,本实施例的该连接两端的地址信息也可以具体表现为:第一传输方向的发送方地址信息(如第一传输方向的发送方IP地址和端口号)和接收方地址信息(如第一传输方向的接收方IP地址和端口号)以及第二传输方向的发送方地址信息(如第二传输方向的发送方IP地址和端口号)和接收方地址信息(如第二传输方向的接收方IP地址和端口号)。
作为示例,本实施例可以通过在预先设置的连接信息集合中查找与数据报文的发送方地址信息和接收方地址信息相匹配的连接信息,来确定数据报文所属的连接;确定数据报文所属的连接的一个具体的例子如图2所示。
图2中,S200、获取数据报文的发送方地址信息和接收方地址信息。到S210。
S210、判断预先设置的连接信息集合中是否存在连接两端的地址信息与上述获取的发送方地址信息和接收方地址信息相同的连接信息,如果判断结果为连接信息集合中存在连接两端的地址信息与数据报文的发送方地址信息和接收方地址信息相同的连接信息,则到S220,而如果判断结果为连接信息集合中不存在连接两端的地址信息与数据报文的发送方地址信息和接收方地址信息相同的连接信息,则到S230。
S220、根据查找到的该连接信息(即相匹配的连接信息)确定该数据报文所属的连接(即该数据报文属于一个已有的连接)。
S230、根据该数据报文的发送方地址信息和接收方地址信息确定该数据报文所属的连接(即该数据报文属于一个新的连接),即根据该数据报文的发送方地址信息、接收方地址信息、数据报文中的序列号以及净荷长度产生新的连接信息,将该新的连接信息添加在连接信息集合中。
上述S230的一个具体实现过程可以为:在数据报文的传输方向为第一传输方向时,将数据报文的发送方地址信息作为连接信息中的第一传输方向的发送方地址信息,并将数据报文的接收方地址信息作为连接信息中的第一传输方向的接收方地址信息,将数据报文中的序列号作为连接信息中的第一传输方向当前期望序列号,将该连接信息中的第二传输方向当前期望序列号设置为初始缺省值(如数据报文中的序列号),将该连接信息添加在连接信息集合中。而在数据报文的传输方向为第二传输方向时,将数据报文的发送方地址信息作为连接信息中的第二传输方向的发送方地址信息,并将数据报文的接收方地址信息作为连接信息中的第二传输方向的接收方地址信息,将数据报文中的序列号作为连接信息中的第二传输方向当前期望序列号,将连接信息中的第一传输方向当前期望序列号设置为初始缺省值(如数据报文中的序列号等),将该连接信息添加在连接信息集合中。
需要特别说明的是,在获取到的数据报文中的关闭信息(如关闭标志位)表征关闭时,应根据数据报文的传输方向将该数据报文对应的连接信息中的第一/第二传输方向连接关闭信息设置为关闭;在连接信息中的第一传输方向连接关闭信息和第二传输方向连接关闭信息均被设置为关闭的情况下,本实施例应针对该连接信息进行资源释放处理,如删除连接信息集合中的该连接信息,释放该连接信息对应的连接所占用的存储资源(如先进先出队列等)以及计算资源等。
作为示例,本实施例通过对数据报文进行排序操作,可以使在同一连接中传输的多个数据报文的净荷形成一个有序字节流,且该有序字节流中两个不同传输方向的多个数据报文的净荷之间通常会穿插排列,而同一个传输方向的多个数据报文的净荷之间在有序字节流中是顺序排列的。即本实施例中的排序操作并不是指使属于同一连接的所有数据报文的净荷均按照数据报文中的序列号进行排列,而是指多个数据报文的净荷在形成该连接的字节流时,对于具有相同传输方向的所有数据报文的净荷而言,序列号在后的数据报文的净荷并不会出现在序列号在前的数据报文的净荷之前。属于同一个连接的不同传输方向的多个数据报文的净荷之间在字节流中排列的先后顺序,通常会与各数据报文的接收时间相关。由此可知,本实施例可以根据实时获取到的数据报文实时的形成相应连接的有序字节流,不仅可以避免由于数据报文传输乱序以及数据报文重发等现象而引起的字节流乱序,还可以对网络中实时传输的数据报文进行实时在线处理。
本实施例对数据报文进行排序的一个具体例子如图3所示。
图3中,S300、根据数据报文的发送方地址信息和/或接收方地址信息从该数据报文所对应的连接信息中获取第一传输方向当前期望序列号或者第二传输方向当前期望序列号,也就是说,根据数据报文的发送方地址信息和/或接收方地址信息确定数据报文的传输方向,如果数据报文的传输方向为第一传输方向,则从该数据报文所对应的连接信息中获取第一传输方向当前期望序列号,而如果数据报文的传输方向为第二传输方向,则从该数据报文所对应的连接信息中获取第二传输方向当前期望序列号。到S310。
S310、比较数据报文中的序列号与S300所获取的第一/第二传输方向当前期望序列号的大小,如果数据报文中的序列号大于数据报文对应的连接信息中的第一/第二传输方向当前期望序列号,则到S320;而如果数据报文中的序列号小于数据报文对应的连接信息中的第一/第二传输方向当前期望序列号,则到S330;如果数据报文中的序列号等于数据报文对应的连接信息中的第一/第二传输方向当前期望序列号,则到S340。
S320、确定该数据报文为乱序数据报文,缓存该数据报文,如将该数据报文缓存于该数据报文对应的连接信息中。在本实施例的图3中的步骤是通过上层调用方的调用而执行的情况下,可以向上层调用方返回不能提供该数据报文的净荷的信息,如向上层调用方返回空值。
S330、确定该数据报文为重传数据报文,可以采用丢弃等方式处理该数据报文。在本实施例的图3中的步骤是通过上层调用方的调用而执行的情况下,可以向上层调用方返回不能提供该数据报文的净荷的信息,如向上层调用方返回空值。
S340、确定该数据报文为顺序排列的数据报文,获取该数据报文中的净荷,并根据该数据报文的净荷长度更新该数据报文对应的连接信息中的第一/第二传输方向当前期望序列号,如将该数据报文对应的连接信息中的第一/第二传输方向的当前期望序列号更新为其与数据报文中的净荷长度之和。到S350。
S350、判断更新后的第一/第二传输方向的当前期望序列号所对应的数据报文是否被缓存,如果被缓存,则到S360,如果没有被缓存,则到S370。
S360、从缓存中读取出具有更新后的第一/第二传输方向的当前期望序列号的数据报文,根据从缓存中读取出的数据报文的净荷长度更新数据报文对应的连接信息中的第一/第二传输方向当前期望序列号,如将数据报文对应的连接信息中的第一/第二传输方向的当前期望序列号更新为其与读取出的数据报文中的净荷长度之和,从读取出的该数据报文中获取净荷,将上述S340中获取到的数据报文的净荷与本步骤获取到的净荷进行组合。返回到S350。
S370、输出最终获取到的净荷,如输出S360组合后的净荷或者输出S340所获得的净荷。在本实施例的图3中的步骤是通过上层调用方的调用而执行的情况下,可以向上层调用方返回最终获取到的净荷。
需要特别说明的是,本实施例在从相应的连接信息中读取出缓存的相应数据报文时,应从相应的连接信息中删除该缓存的数据报文。
S110、对排序处理后的数据报文的净荷进行解码,以获得请求或者响应。
作为示例,在通常情况下,数据报文中的净荷所采用的协议是可以根据数据报文的发送方地址信息和/或接收方地址信息来确定的,如本实施例可以根据数据报文的接收方端口号和/或者发送方端口号确定出该数据报文中的净荷所采用的协议。在确定出数据报文的净荷所采用的协议后,本实施例可以通过调用相应协议的解码器对数据报文的净荷进行解码处理。本实施例中的解码器可以采用现有的相应协议的解码器,且通过根据发送方地址信息和/或接收方地址信息(如发送方端口号和/或接收方端口号)来调用相应的解码器对数据报文的净荷进行解码,可以使本实施例的方法具有较好的可扩展性。
针对一个连接而言,排序处理后的数据报文的净荷形成了一个实时的有序字节流,在该有序字节流中,虽然是不同传输方向的数据报文中的净荷由于其所在的数据报文的先后传输时间不同而相互穿插排列,但是,针对一个连接中的同一个传输方向而言,数据报文的净荷在该有序字节流中的排列顺序是根据其所在数据报文的序列号决定的。
本实施例对排序处理后的数据报文的净荷进行解码的一个具体例子如图4所示。
图4中,S400、接收针对属于一个连接的数据报文进行排序处理后所形成的有序字节流。到S410。
S410、根据字节流中的净荷所在的数据报文的发送方地址信息(如发送方IP地址和端口号)和/或接收方地址信息(如接收方IP地址和端口号)判断净荷是流入净荷,还是流出净荷,即判断净荷所在的数据报文的传输方向是第一传输方向,还是第二传输方向;如果判断出净荷是流入净荷,则到S420,如果判断出净荷是流出净荷,则到S430。
S420、针对流入净荷调用相应协议的解码器,且调用的解码器是根据该流入净荷所在数据报文的发送方地址信息(如发送方端口号)和/或接收方地址信息(如接收方端口号)确定出的。到S440。
S430、针对流出净荷调用相应协议的解码器,且调用的解码器是根据该流出净荷所在数据报文的发送方地址信息(如发送方端口号)和/或接收方地址信息(如接收方端口号)确定出的。到S440。
S440、将一个解码器输出的信息作为一个对象,后续应针对该对象进行请求响应配对操作。
需要特别说明的是,一个请求或者一个响应通常会由于过长而被分割并承载于不同数据报文的净荷中,解码器的解码过程可以使分布在多个净荷中的请求或者响应重新还原为一个完整的请求或者响应。在本实施例中,将净荷解码所形成的一个完整的请求称为一个请求对象,将净荷解码所形成的一个完整的响应称为一个响应对象;由此可知,本实施例可以根据解码器输出的解码结果获得一个对象,且所有解码器先后输出的各个对象可以形成一个对象流,各对象在该对象流中的排列顺序通常由解码器输出对象的时间决定。
S120、对属于同一连接且传输方向相反的解码后的请求和响应进行请求响应配对。
作为示例,通过上述步骤,本实施例先后获得的多个对象可以形成一个对象流,该对象流中既包含有流入净荷所形成的对象(可以称为流入对象)又包含有流程净荷所形成的对象(可以称为流出对象),且对象在对象流中的排列位置通常取决于相应的净荷进行解码并形成一个对象的时间(如解码器对净荷进行解码并输出一个对象的时间)。由此可知,本实施例的数据报文处理方法可以是一个实时的数据报文处理方法,即实时的从网络中抓取到一个数据报文后,即刻开始对该数据报文进行排序处理,且针对排序处理后的数据报文的净荷立时进行解码处理,净荷解码处理后形成的对象汇聚为对象流,以进行请求响应配对处理。
作为示例,本实施例进行请求响应配对的一个具体例子如图5所示。
图5中,S500,接收到形成对象流的对象。到S510。
S510、判断接收到的对象所对应的协议是有序协议还是无序协议,如果是有序协议,则到S520,如果是无序协议,则到S530。
本实施例可以根据接到的对象所对应的端口信息(如数据报文的发送方地址信息和/或者接收方地址信息中的端口信息)确定该对象所对应的协议是无序协议,还是有序协议。
S520、判断该对象是请求对象,还是响应对象,如果是请求对象,则到S521,而如果是响应对象,则到S522。
S521、将该请求对象存储在先进先出队列(FIFO)中,且该先进先出队列对应该请求对象所属的连接,即本实施例中的不同的连接对应不同的先进先出队列。
S522、从该响应对象所对应的连接的先进先出队列中读取出一个请求对象,并将该响应对象与读取出的请求对象作为一个请求响应对,如建立该响应对象与读取出的请求对象之间的映射关系等。
S530、判断该对象是请求对象,还是响应对象,如果是请求对象,则到S531,而如果是响应对象,则到S532。
S531、将该请求对象存储在其所属连接所对应的存储区域中,且该请求对象中所包含的请求标识可以作为该请求对象的索引值;在实际应用中,本实施例可以将该请求对象以MAP的形式存储。
S532、利用该响应对象中的响应标识在响应对象所属连接所对应的存储区域中进行查找,以从相应存储区域中获取具有与该响应对象的响应标识相匹配的请求标识的请求对象,并将标识相匹配的请求对象和响应对象作为一个请求响应对,如建立该响应对象与读取出的请求对象之间的映射关系等。
需要特别说明的是,在上述针对图5的描述中,是按照先判断对象对应的协议是有序协议还是无序协议,然后再判断对象是请求对象还是响应对象进行说明的,然而,在实际应用中,也可以先判断对象是请求对象还是响应对象,然后,再判断对象对应的协议是有序协议还是无序协议;还可以并行执行两个判断操作。另外,本实施例也可以采用除了MAP之外的其他存储方式来存储请求对象。
实施例二、数据报文处理装置。
图6为本实施例的数据报文处理装置示意图。
在图6中,本实施例的装置主要包括:报文排序模块610、解码模块620以及配对模块630,且该装置还可以包括:确定连接模块600;另外,该装置还可以包括:维护模块640(如图7所示)。
本实施例的确定连接模块600、报文排序模块610、解码模块620、配对模块630以及维护模块640通常被设置于网络设备或者终端设备(如互联网公司内部的网络设备或者终端设备等)中,且本实施例的装置可以实现数据报文的实时处理(即在实时的获取到网络中传输的数据报文时,即时对数据报文进行处理),也可以实现数据报文的离线处理(如先将获取到的网络中传输的数据报文存储在文件中,然后,在需要对数据报文进行处理时,本实施例的装置从文件中读取数据报文并对读取的数据报文进行处理)。
下面结合图6-图11对本实施例的数据报文处理装置的结构进行说明。
确定连接模块600主要用于确定待处理的数据报文所属的连接。该确定连接模块600可以包括:匹配子模块601、第一确定子模块602以及第二确定子模块603(如图8所示)。其中的匹配子模块601主要用于在连接信息集合中查找与接收到的数据报文的发送方地址信息和接收方地址信息相匹配的连接信息;其中的第一确定子模块602主要用于在匹配子模块601查找到相匹配的连接信息时,根据相匹配的连接信息确定数据报文所属的连接;且该第一确定子模块602还可以用于在匹配子模块601查找到相匹配的连接信息,且该连接信息中的与所述数据报文的传输方向相对应的第一/第二传输方向当前期望序列号为初始值的情况下,将该初始值设置为数据报文中的序列号和净荷长度之和;其中的第二确定子模块603主要用于在匹配子模块601未查找到相匹配的连接信息时,根据数据报文的发送方地址信息和接收方地址信息确定数据报文所属的连接,并在连接信息集合中添加基于该数据报文的发送方地址信息和接收方地址信息的连接信息;且该第二确定子模块603还可以用于将添加的连接信息中的与数据报文的传输方向相对应的第一/第二传输方向当前期望序列号设置为数据报文中的序列号和净荷长度之和。
作为示例,确定连接模块600所获取到的待处理的数据报文可以是确定连接模块600利用网络数据抓取方式而获得的数据报文,且确定连接模块600获取到的数据报文可以为基于TCP的数据报文。
作为示例,确定连接模块600可以利用预先设置的连接信息集合来确定数据报文所属的连接。通常情况下,连接信息集合中设置有至少一条连接信息,而在本实施例的装置第一次被启动运行时,该连接信息集合通常会被初始化为空。
作为示例,本实施例的连接信息集合中的连接信息通常包括:连接两端的地址信息(如连接两端的IP地址和端口号)、第一传输方向当前期望序列号以及第二传输方向当前期望序列号;且该连接信息还可以包括:第一传输方向连接关闭信息和第二传输方向连接关闭信息;另外,该连接信息还可以包括:临时缓存的乱序数据报文等。上述连接两端的地址信息可以具体表现为该连接的其中一端的IP地址和端口号以及该连接的另一端的IP地址和端口号;当然,本实施例的该连接两端的地址信息也可以具体表现为:第一传输方向的发送方地址信息(如第一传输方向的发送方IP地址和端口号)和接收方地址信息(如第一传输方向的接收方IP地址和端口号)以及第二传输方向的发送方地址信息(如第二传输方向的发送方IP地址和端口号)和接收方地址信息(如第二传输方向的接收方IP地址和端口号)。
作为示例,确定连接模块600可以通过在预先设置的连接信息集合中查找与数据报文的发送方地址信息和接收方地址信息相匹配的连接信息,来确定数据报文所属的连接;匹配子模块601、第一确定子模块602以及第二确定子模块603确定数据报文所属的连接的一个具体的例子如下:
匹配子模块601获取数据报文的发送方地址信息和接收方地址信息,并判断预先设置的连接信息集合中是否存在连接两端的地址信息与上述获取的发送方地址信息和接收方地址信息相同的连接信息,如果判断结果为连接信息集合中存在连接两端的地址信息与数据报文的发送方地址信息和接收方地址信息相同的连接信息,则第一确定子模块602根据查找到的该连接信息(即相匹配的连接信息)确定该数据报文所属的连接(即该数据报文属于一个已有的连接),在该数据报文的传输方向为第一传输方向,且上述相匹配的连接信息中的第一传输方向当前期望序列号为空(或者为其他初始缺省值)的情况下,第一确定子模块602将该连接信息中的第一传输方向当前期望序列号设置为该数据报文中的序列号与净荷长度之和;而在该数据报文的传输方向为第二传输方向,且上述相匹配的连接信息中的第二传输方向当前期望序列号为空(或者为其他初始缺省值)的情况下,第一确定子模块602将该连接信息中的第二传输方向当前期望序列号设置为该数据报文中的序列号与净荷长度之和;如果匹配子模块601的判断结果为连接信息集合中不存在连接两端的地址信息与数据报文的发送方地址信息和接收方地址信息相同的连接信息,则第二确定子模块603根据该数据报文的发送方地址信息和接收方地址信息确定该数据报文所属的连接(即该数据报文属于一个新的连接),即第二确定子模块603根据数据报文的发送方地址信息、接收方地址信息、数据报文中的序列号以及净荷长度产生新的连接信息,第二确定子模块603将该新的连接信息添加在连接信息集合中,例如,第二确定子模块603在数据报文的传输方向为第一传输方向时,将数据报文的发送方地址信息作为连接信息中的第一传输方向的发送方地址信息,并将数据报文的接收方地址信息作为连接信息中的第一传输方向的接收方地址信息,将数据报文中的序列号与净荷长度之和作为连接信息中的第一传输方向当前期望序列号,将该连接信息中的第二传输方向当前期望序列号设置为初始缺省值(如设置为空或者无效值等),将该连接信息添加在连接信息集合中。而在数据报文的传输方向为第二传输方向时,第二确定子模块603将数据报文的发送方地址信息作为连接信息中的第二传输方向的发送方地址信息,并将数据报文的接收方地址信息作为连接信息中的第二传输方向的接收方地址信息,将数据报文中的序列号与净荷长度之和作为连接信息中的第二传输方向当前期望序列号,将连接信息中的第一传输方向当前期望序列号设置为初始缺省值(如设置为空或者无效值等),将该连接信息添加在连接信息集合中。
需要特别说明的是,在确定连接模块600获取到的数据报文中的关闭信息(如关闭标志位)表征关闭时,维护模块640应根据数据报文的传输方向将该数据报文对应的连接信息中的第一/第二传输方向连接关闭信息设置为关闭;在连接信息中的第一传输方向连接关闭信息和第二传输方向连接关闭信息均被设置为关闭的情况下,维护模块640应针对该连接信息进行资源释放处理,如删除连接信息集合中的该连接信息,释放该连接信息对应的连接所占用的存储资源(如先进先出队列等)以及计算资源等。
报文排序模块610主要用于针对待处理的数据报文(如确定连接模块600确定了所属连接的数据报文),根据数据报文所属的连接、数据报文中的序列号以及数据报文的传输方向对数据报文进行排序。该报文排序模块610可以包括:第一排序子模块611、第二排序子模块612以及第三排序子模块613(如图9所示);其中的第一排序子模块611主要用于基于数据报文的传输方向,在数据报文中的序列号大于数据报文对应的连接信息中的第一/第二传输方向当前期望序列号的情况下,确定数据报文为乱序数据报文并缓存;其中的第二排序子模块612主要用于基于数据报文的传输方向,在数据报文中的序列号小于数据报文对应的连接信息中的第一/第二传输方向当前期望序列号的情况下,确定数据报文为重传数据报文;其中的第三排序子模块613主要用于基于数据报文的传输方向,在数据报文中的序列号等于数据报文对应的连接信息中的第一/第二传输方向当前期望序列号的情况下,确定数据报文为正序数据报文,根据数据报文的净荷长度更新所述数据报文对应的连接信息中的第一/第二传输方向当前期望序列号,并在确定出缓存的数据报文的序列号等于第一/第二传输方向当前期望序列号的情况下,从缓存中读取数据报文,将读取出的数据报文作为正序数据报文,并根据读取出的数据报文的净荷长度更新相应连接信息中的第一/第二传输方向当前期望序列号。
作为示例,本实施例通过报文排序模块610对数据报文进行排序操作,可以使同一连接中传输的多个数据报文的净荷形成一个有序字节流,且该有序字节流中两个不同传输方向的多个数据报文的净荷之间通常会穿插排列,而同一个传输方向的多个数据报文的净荷之间在有序字节流中是顺序排列的。即报文排序模块610的排序操作并不是指使属于同一连接的所有数据报文的净荷均按照数据报文中的序列号进行排列,而是指多个数据报文的净荷在形成该连接的字节流时,对于具有相同传输方向的所有数据报文的净荷而言,序列号在后的数据报文的净荷并不会出现在序列号在前的数据报文的净荷之前。属于同一个连接的不同传输方向的多个数据报文的净荷之间在字节流中排列的先后顺序,通常会确定连接模块600获取到的各数据报文的时间相关。由此可知,报文排序模块610可以根据确定连接模块600实时获取到的数据报文实时的形成相应连接的有序字节流,不仅可以避免由于数据报文传输乱序以及数据报文重发等现象而引起的字节流乱序,还可以对网络中实时传输的数据报文进行实时在线处理。
报文排序模块610对数据报文进行排序的一个具体例子如下:
报文排序模块610根据数据报文的发送方地址信息和/或接收方地址信息从该数据报文所对应的连接信息中获取第一传输方向当前期望序列号或者第二传输方向当前期望序列号,也就是说,报文排序模块610根据数据报文的发送方地址信息和/或接收方地址信息确定数据报文的传输方向,如果数据报文的传输方向为第一传输方向,则报文排序模块610从该数据报文所对应的连接信息中获取第一传输方向当前期望序列号,而如果数据报文的传输方向为第二传输方向,则报文排序模块610从该数据报文所对应的连接信息中获取第二传输方向当前期望序列号。报文排序模块610比较数据报文中的序列号与获取的第一/第二传输方向当前期望序列号的大小;
如果数据报文中的序列号大于数据报文对应的连接信息中的第一/第二传输方向当前期望序列号,则第一排序子模块611确定该数据报文为乱序数据报文,缓存该数据报文,如第一排序子模块611将该数据报文缓存于该数据报文对应的连接信息中。在本实施例的报文排序模块610是通过上层调用方的调用而执行相应操作的情况下,第一排序子模块611可以向上层调用方返回不能提供该数据报文的净荷的信息,如第一排序子模块611向上层调用方返回空值;
如果数据报文中的序列号小于数据报文对应的连接信息中的第一/第二传输方向当前期望序列号,则第二排序子模块612确定该数据报文为重传数据报文,第二排序子模块612可以采用丢弃等方式处理该数据报文。在本实施例的报文排序模块610是通过上层调用方的调用而执行相应操作的情况下,第二排序子模块612可以向上层调用方返回不能提供该数据报文的净荷的信息,如第二排序子模块612向上层调用方返回空值;
如果数据报文中的序列号等于数据报文对应的连接信息中的第一/第二传输方向当前期望序列号,则第三排序子模块613确定该数据报文为顺序排列的数据报文,第三排序子模块613获取该数据报文中的净荷,并根据该数据报文的净荷长度更新该数据报文对应的连接信息中的第一/第二传输方向当前期望序列号,如第三排序子模块613将该数据报文对应的连接信息中的第一/第二传输方向的当前期望序列号更新为其与数据报文中的净荷长度之和。第三排序子模块613判断更新后的第一/第二传输方向的当前期望序列号所对应的数据报文是否被缓存,如果被缓存,则第三排序子模块613从缓存中读取出具有更新后的第一/第二传输方向的当前期望序列号的数据报文,第三排序子模块613根据从缓存中读取出的数据报文的净荷长度更新数据报文对应的连接信息中的第一/第二传输方向当前期望序列号,如第三排序子模块613将数据报文对应的连接信息中的第一/第二传输方向的当前期望序列号更新为其与读取出的数据报文中的净荷长度之和,第三排序子模块613从读取出的该数据报文中获取净荷,将获取到的净荷进行组合,并再次判断更新后的第一/第二传输方向的当前期望序列号所对应的数据报文是否被缓存,直到确定出没有被缓存,则第三排序子模块613输出最终获取到的净荷,如输出组合后的净荷或者输出一个数据报文中的净荷。在本实施例的报文排序模块610是通过上层调用方的调用而执行相应操作的情况下,第三排序子模块613可以向上层调用方返回最终获取到的净荷。
需要特别说明的是,第三排序子模块613在从相应的连接信息中读取出缓存的相应数据报文时,应从相应的连接信息中删除该缓存的数据报文。
解码模块620主要用于对报文排序模块610排序处理后的数据报文的净荷进行解码,以获得请求或者响应。该解码模块620可以包括:区分子模块621以及调用子模块622(如图10所示);其中的区分子模块621主要用于根据数据报文的发送方地址信息和/或接收方地址信息将排序处理后的数据报文的净荷区分为第一传输方向净荷或第二传输方向净荷;调用子模块622主要用于针对不同传输方向的净荷分别调用相应协议的解码器,并根据解码器输出的解码结果获得对象,且该对象为分布于一个或者多个净荷中的一个完整的请求/响应。
作为示例,在通常情况下,解码模块620可以根据数据报文的发送方地址信息和/或接收方地址信息来确定数据报文中的净荷所采用的协议,如解码模块620可以根据数据报文的接收方端口号和/或者发送方端口号确定出该数据报文中的净荷所采用的协议。解码模块620在确定出数据报文的净荷所采用的协议后,可以通过调用相应协议的解码器对数据报文的净荷进行解码处理。本实施例中的解码器可以采用现有的相应协议的解码器,且解码模块620通过根据发送方地址信息和/或接收方地址信息(如发送方端口号和/或接收方端口号)来调用相应的解码器对数据报文的净荷进行解码,可以使本实施例的装置具有较好的可扩展性。
解码模块620对排序处理后的数据报文的净荷进行解码的一个具体例子如下:
解码模块620接收针对属于一个连接的数据报文进行排序处理后所形成的有序字节流。区分子模块621根据字节流中的净荷所在的数据报文的发送方地址信息(如发送方IP地址和端口号)和/或接收方地址信息(如接收方IP地址和端口号)判断净荷是流入净荷,还是流出净荷,即判断净荷所在的数据报文的传输方向是第一传输方向,还是第二传输方向;如果区分子模块621判断出净荷是流入净荷,则调用子模块622针对流入净荷调用相应协议的解码器,且调用子模块622调用的解码器是其根据该流入净荷所在数据报文的发送方地址信息(如发送方端口号)和/或接收方地址信息(如接收方端口号)确定出的,如果区分子模块621判断出净荷是流出净荷,则调用子模块622针对流出净荷调用相应协议的解码器,且调用子模块622调用的解码器是其根据该流出净荷所在数据报文的发送方地址信息(如发送方端口号)和/或接收方地址信息(如接收方端口号)确定出的;本实施例的装置可以将一个解码器输出的信息作为一个对象,后续应由配对模块630针对该对象进行请求响应配对操作。
配对模块630主要用于对属于同一连接且传输方向相反的解码后的净荷进行请求响应配对。该配对模块630可以包括:第一配对子模块631、第二配对子模块632、第一判断子模块633以及第二判断子模块634(如图11所示);其中的第一配对子模块631主要用于在对象是请求对象,且对象对应的协议属于有序协议的情况下,将该对象放入其对应的连接的先进先出队列中;而在对象是响应对象,且对象对应的协议属于有序协议的情况下,从该对象对应的连接的先进先出队列中读取出一个对象,并将两个对象作为一个请求响应对;其中的第二配对子模块632主要用于在对象是请求对象,且该对象对应的协议属于无序协议的情况下,在该对象对应的连接的存储区域中存储对象;而在对象是响应对象,且该对象对应的协议属于无序协议的情况下,从该对象对应的连接的存储区域中查找具有与该对象的响应标识相匹配的请求标识的对象,并将相匹配的两个对象作为一个请求响应对;其中的第一判断子模块633主要用于根据对象中承载的信息确定对象是请求对象还是响应对象;其中的第二判断子模块634主要用于根据对象对应的连接的端口信息确定对象对应的协议属于无序协议还是有序协议。
作为示例,通过解码模块620的解码操作,本实施例的装置先后获得的多个对象可以形成一个对象流,且该对象流中既包含有流入净荷所形成的对象(可以称为流入对象)又包含有流程净荷所形成的对象(可以称为流出对象),对象在对象流中的排列位置通常取决于相应的净荷在解码模块620中进行解码并形成一个对象的时间(如解码器对净荷进行解码并输出一个对象的时间)。由此可知,本实施例的数据报文处理装置可以是一个实时的数据报文处理装置,即在实时的从网络中抓取到一个数据报文后,报文排序模块610即刻开始对该数据报文进行排序处理,且解码模块620针对排序处理后的数据报文的净荷立时进行解码处理,净荷解码处理后形成的对象汇聚为对象流,以由配对模块630进行请求响应配对处理。
作为示例,本实施例的配对模块630进行请求响应配对的一个具体例子如下:
配对模块630接收到形成对象流的对象。第二判断子模块634判断配对模块630接收到的对象所对应的协议是有序协议还是无序协议,第二判断子模块634可以根据接到的对象所对应的端口信息(如数据报文的发送方地址信息和/或者接收方地址信息中的端口信息)确定该对象所对应的协议是无序协议,还是有序协议。如果第二判断子模块634判断出是有序协议,则触发第一判断子模块633判断该对象是请求对象,还是响应对象,如果第一判断子模块633确定出是请求对象,则第一判断子模块633触发第一配对子模块631将该请求对象存储在先进先出队列(FIFO)中,且该先进先出队列对应该请求对象所属的连接,即本实施例中的不同的连接对应不同的先进先出队列,而如果第一判断子模块633确定出是响应对象,则第一判断子模块633触发第一配对子模块631从该响应对象所对应的连接的先进先出队列中读取出一个请求对象,并将该响应对象与读取出的请求对象作为一个请求响应对,如第一配对子模块631建立该响应对象与读取出的请求对象之间的映射关系等;如果第二判断子模块634判断出是无序协议,则触发第一判断子模块633判断该对象是请求对象,还是响应对象,如果是请求对象,则第一判断子模块633触发第二配对子模块632将该请求对象存储在其所属连接所对应的存储区域中,且该请求对象中所包含的请求标识可以作为该请求对象的索引值;如第二配对子模块632将该请求对象以MAP的形式存储,而如果第一判断子模块633确定出是响应对象,则第一判断子模块633触发第二配对子模块632利用该响应对象中的响应标识在响应对象所属连接所对应的存储区域中进行查找,以从相应存储区域中获取具有与该响应对象的响应标识相匹配的请求标识的请求对象,并将标识相匹配的请求对象和响应对象作为一个请求响应对,如第二配对子模块632建立该响应对象与读取出的请求对象之间的映射关系等。
需要特别说明的是,在上述描述中,是由第二判断子模块634判断对象对应的协议是有序协议还是无序协议,然后再由第一判断子模块633判断对象是请求对象还是响应对象进行说明的,然而,在实际应用中,也可以先由第一判断子模块633判断对象是请求对象还是响应对象,然后,再由第二判断子模块634判断对象对应的协议是有序协议还是无序协议;还可以并行执行两个判断操作。另外,本实施例也可以采用除了MAP之外的其他存储方式来存储请求对象。
需要注意的是,本申请的一部分可以被应用为计算机程序产品,例如计算机程序指令,当其被智能电子设备(如计算机或者服务器等)执行时,通过该智能电子设备的操作可以调用或者提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或者其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的智能电子设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本申请并不局限于上述示范性实施例的细节,而且在不背离本申请的精神或者基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将本申请的实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或者装置或者模块也可以由一个单元或者装置或者模块通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
Claims (11)
1.一种数据报文处理方法,其中,所述方法包括以下步骤:
针对待处理的数据报文,根据所述数据报文所属的连接、数据报文中的序列号以及所述数据报文的传输方向对数据报文进行排序,其中,所述数据报文包括:基于传输控制协议TCP的数据报文;
对排序处理后的数据报文的净荷进行解码,以获得请求对象或者响应对象;
对属于同一连接且传输方向相反的解码后的请求和与之相匹配的响应进行请求响应配对,其中还包括:
在所述对象是请求对象,且所述对象对应的协议属于有序协议的情况下,将所述对象放入其对应的连接的先进先出队列中;
在所述对象是响应对象,且所述对象对应的协议属于有序协议的情况下,从所述对象对应的连接的先进先出队列中读取出一个对象,并将两个对象作为一个请求响应对;或者
在所述对象是请求对象,且所述对象对应的协议属于无序协议的情况下,在所述对象对应的连接的存储区域中存储所述对象;
在所述对象是响应对象,且所述对象对应的协议属于无序协议的情况下,从所述对象对应的连接的存储区域中查找具有与该对象的响应标识相匹配的请求标识的对象,并将相匹配的两个对象作为一个请求响应对。
2.根据权利要求1所述的方法,其中,所述对排序处理后的数据报文的净荷进行解码的步骤包括:
利用根据排序处理后的数据报文的发送方地址信息和/或接收方地址信息确定出的所述数据报文的净荷所采用的协议调用相应的解码器,以由被调用的解码器对排序处理后的数据报文的净荷进行解码。
3.根据权利要求2所述的方法,其中,所述对排序处理后的数据报文的净荷进行解码的步骤包括:
根据数据报文的发送方地址信息和/或接收方地址信息将排序处理后的数据报文的净荷区分为第一传输方向净荷或第二传输方向净荷;
针对不同传输方向的净荷分别调用相应协议的解码器,并根据解码器输出的解码结果获得对象,且该对象为分布于一个或者多个净荷中的一个完整的请求/响应。
4.根据权利要求3所述的方法,其中,所述根据解码器输出的解码结果获得对象的步骤包括:
所述解码器对接收到的净荷进行解码;
所述解码器在根据接收到的净荷未能解析获得一个对象时,等待下一个净荷,直到解码器根据接收到的净荷解析获得一个对象;
解码器输出其获得的对象。
5.根据权利要求1所述的方法,其中,所述对属于同一连接且传输方向相反的解码后的请求和与之相匹配的响应进行请求响应配对的步骤还包括:
根据对象中承载的信息确定对象是请求对象还是响应对象;
根据对象对应的连接的端口信息确定对象对应的协议属于无序协议还是有序协议。
6.根据权利要求1所述的方法,其中,所述方法还包括:确定待处理的数据报文所属的连接;
且所述确定待处理的数据报文所属的连接的步骤包括:在连接信息集合中查找与所述数据报文的发送方地址信息和接收方地址信息相匹配的连接信息;
如果查找到相匹配的连接信息,则根据相匹配的连接信息确定所述数据报文所属的连接;
如果未查找到相匹配的连接信息,则根据所述数据报文的发送方地址信息和接收方地址信息确定所述数据报文所属的连接,并在连接信息集合中添加基于所述数据报文的发送方地址信息和接收方地址信息的连接信息。
7.根据权利要求6所述的方法,其中,所述连接信息包括:连接两端的地址信息、第一传输方向当前期望序列号以及第二传输方向当前期望序列号;
且所述确定待处理的数据报文所属的连接的步骤还包括:
在查找到相匹配的连接信息,且该连接信息中的与所述数据报文的传输方向相对应的第一/第二传输方向当前期望序列号为初始值的情况下,将该初始值设置为数据报文中的序列号和净荷长度之和;和/或
将所述添加的连接信息中的与所述数据报文的传输方向相对应的第一/第二传输方向当前期望序列号设置为数据报文中的序列号和净荷长度之和。
8.根据权利要求7所述的方法,其中,所述根据所述数据报文所属的连接、数据报文中的序列号以及所述数据报文的传输方向对数据报文进行排序的步骤包括:
基于数据报文的传输方向,在所述数据报文中的序列号大于所述数据报文对应的连接信息中的第一/第二传输方向当前期望序列号的情况下,确定所述数据报文为乱序数据报文并缓存;
基于数据报文的传输方向,在所述数据报文中的序列号小于所述数据报文对应的连接信息中的第一/第二传输方向当前期望序列号的情况下,确定所述数据报文为重传数据报文;
基于数据报文的传输方向,在所述数据报文中的序列号等于所述数据报文对应的连接信息中的第一/第二传输方向当前期望序列号的情况下,确定所述数据报文为正序数据报文,根据所述数据报文的净荷长度更新所述数据报文对应的连接信息中的第一/第二传输方向当前期望序列号,并在确定出缓存的数据报文的序列号等于第一/第二传输方向当前期望序列号的情况下,从缓存中读取数据报文,将读取出的数据报文作为正序数据报文,并根据读取出的数据报文的净荷长度更新相应连接信息中的第一/第二传输方向当前期望序列号。
9.根据权利要求7所述的方法,其中,所述连接信息还包括:第一传输方向连接关闭信息和第二传输方向连接关闭信息,且所述方法还包括:
根据数据报文的传输方向以及数据报文中的关闭信息设置相应连接信息中的第一/第二传输方向连接关闭信息;
在连接信息中的第一传输方向连接关闭信息和第二传输方向连接关闭信息均被设置为关闭的情况下,针对所述连接信息进行资源释放处理。
10.一种数据报文处理装置,其中,所述装置包括:
报文排序模块,用于针对待处理的数据报文,根据待处理的数据报文所属的连接、数据报文中的序列号以及所述数据报文的传输方向对数据报文进行排序,其中,所述数据报文包括:基于传输控制协议TCP的数据报文;
解码模块,用于对排序处理后的数据报文的净荷进行解码,以获得请求对象或者响应对象;
配对模块,用于对属于同一连接且传输方向相反的解码后的请求和与之相匹配的响应进行请求响应配对,其还用于:
在所述对象是请求对象,且所述对象对应的协议属于有序协议的情况下,将所述对象放入其对应的连接的先进先出队列中;
在所述对象是响应对象,且所述对象对应的协议属于有序协议的情况下,从所述对象对应的连接的先进先出队列中读取出一个对象,并将两个对象作为一个请求响应对;或者
在所述对象是请求对象,且所述对象对应的协议属于无序协议的情况下,在所述对象对应的连接的存储区域中存储所述对象;
在所述对象是响应对象,且所述对象对应的协议属于无序协议的情况下,从所述对象对应的连接的存储区域中查找具有与该对象的响应标识相匹配的请求标识的对象,并将相匹配的两个对象作为一个请求响应对。
11.根据权利要求10所述的装置,其中,所述解码模块具体用于:
利用根据排序处理后的数据报文的发送方地址信息和/或接收方地址信息确定出的所述数据报文的净荷所采用的协议调用相应的解码器,以由被调用的解码器对排序处理后的数据报文的净荷进行解码。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610526263.5A CN107579949B (zh) | 2016-07-05 | 2016-07-05 | 数据报文处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610526263.5A CN107579949B (zh) | 2016-07-05 | 2016-07-05 | 数据报文处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107579949A CN107579949A (zh) | 2018-01-12 |
CN107579949B true CN107579949B (zh) | 2021-05-28 |
Family
ID=61049060
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610526263.5A Active CN107579949B (zh) | 2016-07-05 | 2016-07-05 | 数据报文处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107579949B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110167073B (zh) * | 2018-02-13 | 2020-12-22 | 华为技术有限公司 | 传输数据的方法、设备和无线网络系统 |
CN108804240B (zh) * | 2018-04-25 | 2021-11-19 | 天津卓盛云科技有限公司 | 一种队列数据的分发和处理算法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6108753A (en) * | 1998-03-31 | 2000-08-22 | International Business Machines Corporation | Cache error retry technique |
CN102823196A (zh) * | 2010-03-26 | 2012-12-12 | 社会传播公司 | 管理网络节点之间的网络通信以及流传输协议 |
CN104202206A (zh) * | 2014-07-25 | 2014-12-10 | 汉柏科技有限公司 | 报文处理装置及方法 |
CN104462532A (zh) * | 2014-12-23 | 2015-03-25 | 北京奇虎科技有限公司 | 网页正文提取的方法和装置 |
CN104904160A (zh) * | 2012-11-09 | 2015-09-09 | 思杰系统有限公司 | 用于数据流的应用流的系统和方法 |
CN105488070A (zh) * | 2014-09-19 | 2016-04-13 | 北京奇虎科技有限公司 | 一种数据处理方法和装置,及一种电子设备 |
-
2016
- 2016-07-05 CN CN201610526263.5A patent/CN107579949B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6108753A (en) * | 1998-03-31 | 2000-08-22 | International Business Machines Corporation | Cache error retry technique |
CN102823196A (zh) * | 2010-03-26 | 2012-12-12 | 社会传播公司 | 管理网络节点之间的网络通信以及流传输协议 |
CN104904160A (zh) * | 2012-11-09 | 2015-09-09 | 思杰系统有限公司 | 用于数据流的应用流的系统和方法 |
CN104202206A (zh) * | 2014-07-25 | 2014-12-10 | 汉柏科技有限公司 | 报文处理装置及方法 |
CN105488070A (zh) * | 2014-09-19 | 2016-04-13 | 北京奇虎科技有限公司 | 一种数据处理方法和装置,及一种电子设备 |
CN104462532A (zh) * | 2014-12-23 | 2015-03-25 | 北京奇虎科技有限公司 | 网页正文提取的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN107579949A (zh) | 2018-01-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102104541B (zh) | 报头处理引擎 | |
US9015822B2 (en) | Automatic invocation of DTN bundle protocol | |
CN102377640B (zh) | 一种报文处理装置和报文处理方法、及预处理器 | |
US10284460B1 (en) | Network packet tracing | |
CN108229159B (zh) | 一种恶意代码检测方法及系统 | |
CN113364804B (zh) | 一种流量数据的处理方法和装置 | |
CN109587082B (zh) | 一种基于Linux操作系统的报文异步转发系统及方法 | |
CN112134929B (zh) | 一种会话报文分析方法、装置及存储介质 | |
CN107579949B (zh) | 数据报文处理方法及装置 | |
CN109889521A (zh) | 存储器、通信通道复用实现方法、装置和设备 | |
JP5962117B2 (ja) | 複数の画像圧縮方式が存在する環境における映像選択方法 | |
US20180006937A1 (en) | Packet forwarding in information centric networking networks | |
CN105763375A (zh) | 一种数据包发送方法、接收方法及微波站 | |
US9942135B2 (en) | Network traffic classification | |
US20170005891A1 (en) | Intelligent routing in information centric networking | |
JP5674179B1 (ja) | 効率的なネットワークアドレス変換およびアプリケーションレベルゲートウェイ処理のための装置および方法 | |
CN116264520A (zh) | 使用数据处理单元的人工智能支持的网络遥测 | |
CN109995589B (zh) | 日志采集方法及系统 | |
US9015309B2 (en) | Networked probe system | |
CN114928581B (zh) | 基于autosar架构的can报文转发方法、装置、设备及存储介质 | |
CN114362999B (zh) | 数据传输方法、系统、电子设备及存储介质 | |
CN114827055B (zh) | 数据镜像的方法、装置、电子设备及交换机集群 | |
JP2017139761A (ja) | 情報指向ネットワーキング(icn)ネットワークにおけるルーティング・プロトコル | |
CN117336262A (zh) | 一种单向报文传输方法、装置、存储介质及设备 | |
CN116708327A (zh) | 一种自发包报文转发方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |