CN103561007B - 一种报文转发的方法及装置 - Google Patents
一种报文转发的方法及装置 Download PDFInfo
- Publication number
- CN103561007B CN103561007B CN201310511205.1A CN201310511205A CN103561007B CN 103561007 B CN103561007 B CN 103561007B CN 201310511205 A CN201310511205 A CN 201310511205A CN 103561007 B CN103561007 B CN 103561007B
- Authority
- CN
- China
- Prior art keywords
- message
- total length
- length
- packet
- flow
- 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
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明涉及互联网技术领域,提供了报文转发的方法和装置,其中方法包括:接收网络层发送的报文,判断该报文是否为报文流的首包;在该报文为报文流的首包时,向应用层转发该报文;在该报文不是报文流的首包时,判断该报文是否为报文流中消息的首包;在该报文是报文流中消息的首包时,向应用层转发该报文;在该报文不是报文流中消息的首包时,向网络层转发该报文。使用本发明,可以判断报文流中每一个报文是否为报文流中消息的首包,若是消息的首包,则提交应用层进行解析;若不是消息的首包,则直接转发到网络中。将大量不需要解析的报文直接转发到网络中不仅可以提高转发报文的效率,还能够减轻应用层解析报文的负担。
Description
技术领域
本发明涉及互联网技术领域,具体涉及一种报文转发的方法及装置。
背景技术
随着互联网的不断发展,网络流量的精细化管理得到越来越多的应用,常见的有报文识别、流量控制、数据统计等。当运行商想要了解业务的使用情况、热点应用情况以及用户分布情况等信息以便展开针对性的增值服务时,就需要对报文进行数据解析,从而获得分组网络中的详细数据。但是目前情况下,在做数据解析时,通常是应用层对包含有首行和头域的报文进行解析,但是应用层在处理报文的过程中,会遇到很多不包含首行和头域的报文,从而降低应用层解析报文和转发报文的效率。
面对这一问题,剔除报文流中不需要解析的报文显得尤为重要。现有技术中剔除报文流中不需要解析的报文的一种方法具体为:传输层将报文流中的报文全部传输到应用层,当应用层收到不需要解析的报文时,根据报文内部记录的状态,执行跳包动作,将该报文转发到网络,然后进行下一个报文的解析。
从上面方案可以看出:由于应用层需要对报文流中每个报文进行判断和分析,不仅降低了应用层的解析效率,还降低了报文转发的效率。
发明内容
本发明实施例提供了一种报文转发的方法及装置,不仅可以提高转发报文的效率,还可以减轻应用层解析报文的负担。
本发明实施例的第一方面公开了报文转发的方法和装置,所述方法包括:
接收网络层发送的报文,判断所述报文是否为报文流的首包;在所述报文是报文流的首包时,向应用层转发所述报文;在所述报文不是报文流的首包时,判断所述报文是否为报文流中消息的首包;在所述报文是报文流中消息的首包时,向应用层转发所述报文;在所述报文不是报文流中消息的首包时,向网络层转发所述报文。
结合第一方面,在第一方面的第一种实现方式中,所述判断所述报文是否为报文流中消息的首包包括:
获取所述报文承载的第一消息体长度;获取存储的所述报文所属消息的第二消息体总长度;获取存储的所述报文所属消息已传输部分的第三消息体总长度;在所述第三消息体总长度与所述第一消息体长度之和大于所述第二消息体总长度时,确定所述报文为报文流中消息的首包;在所述第三消息体总长度与所述第一消息体长度之和小于或等于所述第二消息体总长度时,确定所述报文不是报文流中消息的首包。
结合第一方面的第一种实现方式,在第一方面的第二种实现方式中,在所述报文是报文流中消息的首包时,在向应用层转发所述报文后,还包括:
接收应用层发送的所述报文中的消息头的长度,用所述第一消息体长度加上所述第三消息体总长度,再减去所述第二消息体总长度,再减去所述报文中消息头的长度得到第五消息体总长度;
将所述第三消息体总长度更新为所述第五消息体总长度。
结合第一方面的第一种实现方式或第一方面的第二种实现方式,在第一方面的第三种实现方式中,所述在向应用层转发所述报文后,还包括:
接收应用层发送的第六消息体总长度,并用所述第六消息体总长度更新所述第二消息体总长度,所述第六消息体总长度表示的是所述报文所属消息的消息体总长度。
结合第一方面的第一种实现方式或第一方面的第二种实现方式或第一方面的第三种实现方式,在第一方面的第四种实现方式中,在所述第三消息体总长度与所述第一消息体长度之和小于或等于所述第二消息体总长度时,所述方法还包括:
将存储的第三消息体总长度更新为所述第三消息体总长度与所述第一消息体长度之和。
结合第一方面的第一种实现方式或者第一方面第二种实现方式或者第一方面第三种实现方式或第一方面的第四种实现方式,在第一方面的第五种实现方式中,所述获取所述报文承载的第一消息体长度包括:
接收网络层发送的所述报文的总长度和所述报文的网络层头长度;
获取所述报文的传输层头长度;
用所述报文的总长度减去所述报文的网络层头长度,再减去所述报文的传输层头长度得到所述报文承载的第一消息体长度。
结合第一方面的第一种实现方式或者第一方面第二种实现方式或者第一方面第三种实现方式或第一方面的第四种实现方式,在第一方面的第六种实现方式中,所述获取所述报文承载的第一消息体长度包括:
获取所述报文的总长度;
获取所述报文的传输层头长度;
用所述报文的总长度减去减去所述报文的传输层头长度得到所述报文承载的第一消息体长度。
结合第一方面或者第一方面的第一种实现方式或者第一方面第二种实现方式或者第一方面第三种实现方式或第一方面的第四种实现方式或第一方面的第五种实现方式或第一方面的第六种实现方式,在第一方面的第七种实现方式中,所述判断所述报文是否为报文流的首包包括:
判断所述报文的五元组是否已被存储,若所述报文的五元组没有被存储,则所述报文为报文流的首包。
结合第一方面的第七种实现方式,在第一方面的第八种实现方式中,在所述报文为报文流的首包时,还包括:
将所述报文的五元组进行存储。
本发明实施例的第二方面公开了一种报文转发的装置,所述装置包括:
接收单元,用于接收网络层发送的报文;判断单元,用于判断所述接收单元接收到的报文是否为报文流的首包;在判断所述报文不是报文流的首包时,判断所述报文是否为报文流中消息的首包;转发单元,在所述判断单元判断所述报文为报文流首包时,向应用层转发所述报文;在所述判断单元判断所述报文为报文流中消息的首包时,向应用层转发所述报文;在所述判断单元判断所述报文不是报文流中消息的首包时,向网络层转发所述报文。
结合第二方面,在第二方面的第一种实现方式中,还包括获取单元,
所述获取单元用于获取所述报文承载的第一消息体长度;获取存储的所述报文所属消息的第二消息体总长度;获取存储的所述报文所属消息已传输部分的第三消息体总长度;
所述判断单元具体用于:
在所述获取单元获取的第一消息体长度与所述获取单元获取的第三消息体总长度之和大于所述获取单元获取的第二消息体总长度时,确定所述报文是报文流中消息的首包;
在所述获取单元获取的第一消息体长度与获取单元获取的第三消息体总长度之和小于或等于获取单元获取的第二消息体总长度时,确定所述报文不是报文流中消息的首包。
结合第二方面的第一种实现方,在第二方面的第二种实现方式中,还包括计算单元和第一更新单元,
在所述判断单元确定所述报文是报文流中消息的首包时,在所述转发单元向应用层转发所述报文后,
所述接收单元还用于接收应用层发送的所述报文中的消息头的长度;
所述计算单元用于用所述获取单元获取的第一消息体总长度加上所述获取单元获取的第三消息体长度,再减去所述获取单元获取的第二消息体总长度,再减去所述接收单元接收到的报文中消息头的长度得到第五消息体总长度;
所述第一更新单元用于将所述第三消息体总长度更新为用所述计算单元计算得到的所述第五消息体总长度。
结合第二方面的第一种实现方式或第二方面的第二种实现方式,在第二方面的第三种实现方式中,还包括第二更新单元;
所述接收单元,还用于在所述转发单元向应用层转发所述报文后,接收应用层发送的第六消息体总长度,所述第六消息体总长度表示的是所述报文所属消息的消息体总长度;
所述第二更新单元用于将所述第二消息体总长度更新为所述接收单元接收到的第六消息体总长度。
结合第二方面的第一种实现方式或第二方面的第二中实现方式或第二方面的第三种实现方式,在第二方面的第四种实现方式中,还包括第三更新单元,在所述判断单元判断获取单元获取的所述第一消息体长度与获取单元获取的所述的第三消息体总长度之和小于或等于获取单元获取的所述第二消息体总长度时,
所述第三更新单元用于将所述第三消息体总长度更新为所述第三消息体总长度与所述第一消息体长度之和。
结合第二方面的第一种实现方式或第二方面的第二中实现方式或第二方面的第三种实现方式或第二方面的第四种实现方式,在第二方面的第五种实现方式中,
所述接收单元还用于接收网络层发送的所述报文的总长度和所述报文的网络层头长度;
所述获取单元还用于:获取所述报文的传输层头长度;用接收单元接收到的所述报文的总长度减去所述报文的网络层头长度再减去所述报文的传输层头长度得到所述报文承载的第一消息体长度。
结合第二方面的第一种实现方式或第二方面的第二中实现方式或第二方面的第三种实现方式或第二方面的第四种实现方式,在第二方面的第六种实现方式中,所述获取单元还用于:
获取所述报文的总长度;获取所述报文的传输层头长度;用所述报文的总长度减去减去所述报文的传输层头长度得到所述报文承载的第一消息体长度。
结合第二方面或第二方面的第一种实现方式或第二方面的第二中实现方式或第二方面的第三种实现方式或第二方面的第四种实现方式或第二方面的第五种实现方式,在第二方面的第七种实现方式中,所述判断单元判断所述报文是否为报文流的首包包括:
所述判断单元判断所述报文的五元组是否已被存储,若所述报文的五元组没有被存储,则所述报文为报文流的首包。
结合第二方面的第七种实现方式,在第二方面的第八种实现方式中,还包括存储单元,在所述报文为报文流的首包时,
所述存储单元将所述报文的五元组进行存储。
从本发明实施例提供的以上技术方案可以看出,使用本发明实施例提供的报文转发的方法及装置,可以判断报文流中每一个报文是否为报文流中消息的首包,若是消息的首包,则提交应用层进行解析;若不是消息的首包,则直接转发到网络中,由于首包较少,非首包的报文较多,将大量不需要解析的报文直接转发到网络中不仅可以提高转发报文的效率,还能够减轻应用层解析报文的负担。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明一个实施例提供的加速应用层解析的方法流程图;
图2为本发明另一个实施例提供的加速应用层解析的方法流程图;
图3为本发明另一个实施例提供的加速应用层解析的方法流程图;
图4为本发明一个实施例提供的加速应用层解析的装置结构图;
图5为本发明另一个实施例提供的加速应用层解析的装置结构图;
图6为本发明另一个实施例提供的加速应用层解析的装置结构图;
图7为本发明另一个实施例提供的加速应用层解析的装置结构图;
图8为本发明另一个实施例提供的加速应用层解析的装置结构图;
图9为本发明另一个实施例提供的加速应用层解析的装置结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面根据图1,描述本发明实施例的一种报文转发的方法,该方法描述的是在传输层判断报文流中的每一个报文是向应用层转发还是向网络中转发,该方法具体包括:
101、接收网络层发送的报文,判断该报文是否是报文流的首包。
接收网络层发送的报文,判断该报文的五元组是否已被存储,若该报文的五元组没有被存储,则该报文为报文流的首包;若该报文的五元组已被存储,则该报文不是报文流的首包。其中,报文的五元组包括源网络协议(IP,Internet Protocol)地址、源端口、目的IP地址、目的端口和传输层协议号。
其中,一条报文流至少包括一条消息,一条消息可以由至少一个报文承载。报文流的首包既是报文流的第一个报文,也是一条消息的第一条报文。
102、在该报文是报文流的首包时,向应用层转发该报文。
在该报文为报文流的首包时,由于首包中包含该报文所属消息的消息头,需要向应用层转发该报文,由应用层对报文所属消息的消息头进行解析,以便获得所需要的信息,常见的信息如用户分布情况、热点应用情况以及业务的使用情况等。其中,消息的消息头可以包括首行和头域,也可以包括首行,也可以包括头域。
在该报文为报文流的首包时,需要将该报文的五元组进行存储。在接收到报文流的后续报文时,可以根据存储的该报文的五元组,判断后续报文不是报文流的首包。
103、在该报文不是报文流的首包时,判断该报文是否是报文流中消息的首包。
在该报文不是报文流的首包时,需要对该报文进行进一步判断,判断该报文是否为报文流中消息的首包。对该报文进行进一步判断,从而确定该报文是否为报文流中消息的首包的具体方法为:获取该报文承载的第一消息体长度;获取存储的该消息的第二消息体总长度,该消息为已传输部分内容至应用层的消息;获取存储的该报文所属消息的已传输部分内容至应用层的第三消息体总长度;在该第三消息体总长度与该第一消息体长度之和大于该第二消息体总长度时,确定该报文为报文流中消息的首包;在该第三消息体总长度与该第一消息体长度之和小于或等于该第二消息体总长度时,确定该报文不是报文流中消息的首包。
获取该报文承载的第一消息体长度。其中,要获取网络层发送的该报文的总长度和该报文的网络层头长度;要获取该报文的传输层头长度;用该报文的总长度减去该报文的网络层头长度,再减去该报文的传输层头长度得到该报文承载的第一消息体长度。
获取该报文承载的第一消息体长度。其中,获取该报文在传输层的总长度以及该报文传输层头长度,用该报文的总长度减去该报文的传输层头长度得到该报文承载的第一消息体长度。
由于一条消息至少由一条报文承载,而且报文流中的消息是连续的,那么一条报文中可能包含一条消息的内容,可能包含两个消息的内容。
获取存储的该消息的第二消息体总长度,该消息为已传输部分内容至应用层的消息。其中,第二消息体总长度是指该报文所属消息的总长度,如果该消息由多条报文承载,那么多条报文承载的消息长度之和就是该消息的总长度。其中,如果该报文承载了两条消息的内容,那么获取存储的该消息的第二消息体总长度中的该消息是指已有部分内容传输至应用层,并且总长度已经被存储的消息。
获取存储的报文流已传输至应用层的该报文所属消息的第三消息体总长度。其中,由于一条消息需要分成若干条报文进行传输,在该报文之前,属于该消息的其他报文已经传输一部分消息内容至应用层,这部分消息内容的长度就是第三消息体总长度。
104、在该报文是报文流中消息的首包时,向应用层转发该报文。
在该报文是报文流中消息的首包时,由于首包中包含该报文所属消息的消息头,需要向应用层转发该报文,由应用层对报文所属消息的消息头进行解析,以便获得所需要的信息,常见的信息如用户分布情况、热点应用情况以及业务的使用情况等。
105、在该报文不是报文流中消息的首包时,向网络层转发该报文。
在该报文不是报文流中消息的首包时,该报文不包含该报文所属消息的消息头,因此不需要对该报文进行解析,可以将该报文向网络层转发,从而提高转发效率,减少应用层的解析负担。
从上可知,使用本发明实施例提供的报文转发的方法,可以判断报文流中每一个报文是否为报文流中消息的首包,若是消息的首包,则提交应用层进行解析;若不是消息的首包,则直接转发到网络中,由于首包较少,非首包的报文较多,将大量不需要解析的报文直接转发到网络中不仅可以提高转发报文的效率,还能够减轻应用层解析报文的负担。
如图2描述本发明实施例的另一种报文转发的方法。
201、接收网络层发送的报文,判断该报文是否是报文流的首包。
接收网络层发送的报文,判断该报文的五元组是否已被存储,若该报文的五元组没有被存储,则该报文为报文流的首包;若该报文的五元组已被存储,则该报文不是报文流的首包。其中,报文的五元组包括源IP地址、源端口、目的IP地址、目的端口和传输层协议号。
其中,一条报文流至少包括一条消息,一条消息可以由至少一个报文承载。报文流的首包既是报文流的第一个报文,也是一条消息的第一条报文。
202、在该报文是报文流的首包时,向应用层转发该报文,并存储该报文的五元组。
在该报文为报文流的首包时,由于首包中包含该报文所属消息的消息头,需要向应用层转发该报文,由应用层对报文所属消息的消息头进行解析,以便获得所需要的信息,常见的信息如用户分布情况、热点应用情况以及业务的使用情况等。其中,消息的消息头可以包括首行和头域,也可以包括首行,也可以包括头域。
在该报文为报文流的首包时,需要将该报文的五元组进行存储。在接收到报文流的后续报文时,可以根据存储的该报文的五元组,判断后续报文不是报文流的首包。
203、在该报文不是报文流的首包时,判断该报文是否是报文流中消息的首包,若该报文不是报文流中消息的首包,转向204,若该报文是报文流中消息的首包,转向205。
在该报文不是报文流的首包时,需要对该报文进行进一步判断,判断该报文是否为报文流中消息的首包。对该报文进行进一步的判断,从而确定该报文是否为报文流中消息的首包的具体方法为:获取该报文承载的第一消息体长度;获取存储的该消息的第二消息体总长度;获取存储的该报文所属消息已传输部分的第三消息体总长度;在该第三消息体总长度与该第一消息体长度之和大于该第二消息体总长度时,该报文为报文流中消息的首包;在该第三消息体总长度与该第一消息体长度之和小于或等于该第二消息体总长度时,该报文不是报文流中消息的首包。
获取该报文承载的第一消息体长度。其中,要获取网络层发送的该报文的总长度和该报文的网络层头长度;要获取该报文的传输层头长度;用该报文的总长度减去该报文的网络层头长度再减去该报文的传输层头长度得到该报文承载的第一消息体长度。
获取该报文承载的第一消息体长度。其中,获取该报文在传输层的总长度以及该报文传输层头长度,用该报文的总长度减去该报文的传输层头长度得到该报文承载的第一消息体长度。
由于一条消息至少由一条报文承载,而且报文流中的消息是连续的,那么一条报文中可能包含一条消息的内容,可能包含两个消息的内容。
获取存储的该消息的第二消息体总长度,该消息为已传输部分内容至应用层的消息。其中,第二消息体总长度是指该报文所属消息的总长度,如果该消息由多条报文承载,那么多条报文承载的消息长度之和就是该消息的总长度。其中,如果该报文承载了两条消息的内容,那么获取存储的该消息的第二消息体总长度中的该消息是指已有部分内容传输至应用层,并且总长度已经被存储的消息。
获取存储的报文流已传输至应用层的该报文所属消息的第三消息体总长度。其中,由于一条消息需要分成若干条报文进行传输,在该报文之前,属于该消息的其他报文已经传输一部分消息内容至应用层,这部分消息内容的长度就是第三消息体总长度。
204、在该报文不是报文流中消息的首包时,向网络层转发该报文。
在该报文不是报文流中消息的首包时,该报文中没有包含消息的首行和头域,因此不需要解析,可以直接向网络层转发。
205、在该报文是报文流中消息的首包时,向应用层转发该报文,转入206。
在该报文是报文流中消息的首包时,由于首包中包含该报文所属消息的消息头,需要向应用层转发该报文,由应用层对报文所属消息的消息头进行解析,以便获得所需要的信息,常见的信息如用户分布情况、热点应用情况以及业务的使用情况等。
由于该报文为报文流的首包,需要将该报文的五元组进行存储,为判断后续报文是否为报文流首包提供依据。
206、接收应用层发送的该报文中消息头的长度,用该第一消息体长度加上该第三消息体总长度减去该第二消息体总长度,再减去该报文中消息头的长度得到第五消息体总长度。
用该第一消息体长度加上该第三消息体总长度减去该第二消息体总长度得到的是该报文承载的其他消息的消息长度,再该其他消息的消息头的长度,得到该报文承载的第五消息体总长度。
207、将该第三消息体总长度更新为该第五消息体总长度。
由于该报文包含了其他消息的内容,表明一个消息结束,另一个消息开始。该报文承载了两个消息的内容,因此,需要将已传输的消息体长度进行更新,用该报文承载第五消息体总长度更新存储的已传输的第三消息体总长度,为该其他消息的后续报文的判断提供依据。
208、接收应用层发送的第六消息体总长度,并用该第六消息体总长度更新该第二消息体总长度,该第六消息体总长度表示的是该报文所属消息的消息体总长度。
接收应用层发送的第六消息体总长度,用该第六消息体总长度更新该第二消息体总长度。其中,该第六消息体总长度是由应用层通过解析该报文的消息内容长度字段获得,该报文中包含两条消息的内容,通过解析该报中包含的消息内容长度字段,获得的是其中一条消息的内容。其中,用该第六消息体总长度更新该第二消息体总长度包括用该第六消息体总长度替换或者覆盖第二消息体总长度,使得下次获取第二消息体总长度时,获取的是已经更新过的第二消息体总长度。
从上可知,使用本发明实施例提供的报文转发的方法,可以判断报文流中每一个报文是否为报文流中消息的首包,若是消息的首包,则提交应用层进行解析;若不是消息的首包,则直接转发到网络中,由于首包较少,非首包的报文较多,将大量不需要解析的报文直接转发到网络中不仅可以提高转发报文的效率,还能够减轻应用层解析报文的负担。
如图3描述本发明实施例的另一种报文转发的方法。
301、接收网络层发送的报文,判断该报文是否是报文流的首包。
接收网络层发送的报文,判断该报文的五元组是否已被存储,若该报文的五元组没有被存储,则该报文为报文流的首包;若该报文的五元组已被存储,则该报文不是报文流的首包。其中,报文的五元组包括源IP地址、源端口、目的IP地址、目的端口和传输层协议号。
其中,一条报文流至少包括一条消息,一条消息可以由至少一个报文承载。报文流的首包既是报文流的第一个报文,也是一条消息的第一条报文。
302、在该报文是报文流的首包时,向应用层转发该报文,并存储该报文的五元组。
在该报文为报文流的首包时,由于首包中包含该报文所属消息的消息头,需要向应用层转发该报文,由应用层对报文所属消息的消息头进行解析,以便获得所需要的信息,常见的信息如用户分布情况、热点应用情况以及业务的使用情况等。其中,消息的消息头可以包括首行和头域,也可以包括首行,也可以包括头域。
在该报文为报文流的首包时,需要将该报文的五元组进行存储。在接收到报文流的后续报文时,可以根据存储的该报文的五元组,判断后续报文不是报文流的首包。
303、在该报文不是报文流的首包时,判断该报文是否是报文流中消息的首包,若该报文不是报文流中消息的首包,转向304,若该报文是报文流中消息的首包,转向305。
在该报文不是报文流的首包时,需要对该报文进行进一步判断,判断该报文是否为报文流中消息的首包。对该报文进行进一步的判断,从而确定该报文是否为报文流中消息的首包的具体方法为:获取该报文承载的第一消息体长度;获取存储的该消息的第二消息体总长度;获取存储的该报文所属消息已传输部分的第三消息体总长度;在该第三消息体总长度与该第一消息体长度之和大于该第二消息体总长度时,该报文为报文流中消息的首包;在该第三消息体总长度与该第一消息体长度之和小于或等于该第二消息体总长度时,该报文不是报文流中消息的首包。
获取该报文承载的第一消息体长度。其中,要获取网络层发送的该报文的总长度和该报文的网络层头长度;要获取该报文的传输层头长度;用该报文的总长度减去该报文的网络层头长度再减去该报文的传输层头长度得到该报文承载的第一消息体长度。
获取该报文承载的第一消息体长度。其中,获取该报文在传输层的总长度以及该报文传输层头长度,用该报文的总长度减去该报文的传输层头长度得到该报文承载的第一消息体长度。
由于一条消息至少由一条报文承载,而且报文流中的消息是连续的,那么一条报文中可能包含一条消息的内容,可能包含两个消息的内容。
获取存储的该消息的第二消息体总长度,该消息为已传输部分内容至应用层的消息。其中,第二消息体总长度是指该报文所属消息的总长度,如果该消息由多条报文承载,那么多条报文承载的消息长度之和就是该消息的总长度。其中,如果该报文承载了两条消息的内容,那么获取存储的该消息的第二消息体总长度中的该消息是指已有部分内容传输至应用层,并且总长度已经被存储的消息。
获取存储的报文流已传输至应用层的该报文所属消息的第三消息体总长度。其中,由于一条消息需要分成若干条报文进行传输,在该报文之前,属于该消息的其他报文已经传输一部分消息内容至应用层,这部分消息内容的长度就是第三消息体总长度。
304、在该报文不是报文流中消息的首包时,向网络层转发该报文,转入309。
在该报文不是报文流中消息的首包时,该报文中没有包含消息的首行和头域,因此不需要解析,可以直接向网络层转发。
305、在该报文是报文流中消息的首包时,向应用层转发该报文转入306。
在该报文是报文流中消息的首包时,由于首包中包含该报文所属消息的消息头,需要向应用层转发该报文,由应用层对报文所属消息的消息头进行解析,以便获得所需要的信息,常见的信息如用户分布情况、热点应用情况以及业务的使用情况等。
由于该报文为报文流的首包,需要将该报文的五元组进行存储,为判断后续报文是否为报文流首包提供依据。
306、接收应用层发送的该报文中消息头的长度,用该第一消息体长度加上该第三消息体总长度减去该第二消息体总长度,再减去该报文中消息头的长度得到第五消息体总长度。
用该第一消息体长度加上该第三消息体总长度减去该第二消息体总长度得到的是该报文承载的其他消息的消息长度,再该其他消息的消息头的长度,得到该报文承载的第五消息体总长度。
307、将该第三消息体总长度更新为该第五消息体总长度。
由于该报文包含了其他消息的内容,表明一个消息结束,另一个消息开始。该报文承载了两个消息的内容,因此,需要将已传输的消息体长度进行更新,用该报文承载第五消息体总长度更新存储的已传输的第三消息体总长度,为该其他消息的后续报文的判断提供依据。
308、接收应用层发送的第六消息体总长度,并用该第六消息体总长度更新该第二消息体总长度,该第六消息体总长度表示的是该报文所属消息的消息体总长度。
接收应用层发送的第六消息体总长度,用该第六消息体总长度更新该第二消息体总长度。其中,该第六消息体总长度是由应用层通过解析该报文的消息内容长度字段获得,该报文中包含两条消息的内容,通过解析该报中包含的消息内容长度字段,获得的是其中一条消息的内容。其中,用该第六消息体总长度更新该第二消息体总长度包括用该第六消息体总长度替换或者覆盖第二消息体总长度,使得下次获取第二消息体总长度时,获取的是已经更新过的第二消息体总长度。
309、将该第三消息体总长度更新为该第三消息体总长度与该第一消息体长度之和。
由于该报文承载的消息内容完全属于一条消息,并且该报文承载的内容属于已发送的该报所属消息的内容,因此需要将存储的第三消息体总长度进行更新。将该报文承载的消息体长度与存储的已传输的该报文所属消息的消息体总长度相加,并用该相加之和更新存储的报文流已传输部分内容至应用层的该报文所属消息的消息体总长度,为该报文所属消息的后续报文提供判断依据。
从上可知,使用本发明实施例提供的报文转发的方法及装置,可以判断报文流中每一个报文是否为报文流中消息的首包,若是消息的首包,则提交应用层进行解析;若不是消息的首包,则直接转发到网络中,由于首包较少,非首包的报文较多,将大量不需要解析的报文直接转发到网络中不仅可以提高转发报文的效率,还能够减轻应用层解析报文的负担。
下面根据图4描述本发明实施例的一种报文转发的装置40。如图4所示,装置40包括:
接收单元401,判断单元402,转发单元403。
接收单元401,用于接收网络层发送的报文。
接收单元401用于接收网络层发送的报文。
其中,一条报文流至少包括一条消息,一条消息可以由至少一个报文承载。报文流的首包既是报文流的第一个报文,也是一条消息的第一条报文。
判断单元402,用于判断该接收单元401接收到的报文是否为报文流的首包;在该报文不是报文流的首包时,判断该报文是否为报文流中消息的首包。
判断单元402判断该报文的五元组是否已被存储,若该报文的五元组没有被存储,则该报文为报文流的首包;若该报文的五元组已被存储,则该报文不是报文流的首包。其中,报文的五元组包括源IP地址、源端口、目的IP地址、目的端口和传输层协议号。
在判断单元402判定该报文不是报文流的首包时,需要对该报文进行进一步判断,判断该报文是否为报文流中消息的首包。
判断单元402对该报文进行进一步的判断,从而确定该报文是否为报文流中消息的首包的具体方法为:获取该报文承载的第一消息体长度;获取存储的该消息的第二消息体总长度;获取存储的该报文所属消息已传输部分的第三消息体总长度;在该第三消息体总长度与该第一消息体长度之和大于该第二消息体总长度时,确定该报文为报文流中消息的首包;在该第三消息体总长度与该第一消息体长度之和小于或等于该第二消息体总长度时,确定该报文不是报文流中消息的首包。
转发单元403,在判断单元402判断该报文为报文流的首包时,向应用层转发该报文;在判断单元402判断该报文为报文流中消息的首包时,向应用层转发该报文,在判断单元402判断该报文不是报文流中消息的首包时,向网络中转发该报文。
在判断单元402判断该报文为报文流的首包或者报文流中消息的首包时,由于该报文包含了该报文所属消息的消息头,需要应用层对该消息的消息头进行解析,因此转发单元403向应用层转发该报文。其中,消息的消息头可以包括首行和头域,也可以包括首行,也可以包括头域。
在判断单元403判断该报文不是报文流中消息的首包时,该报文不包含该报文所属消息的消息头,因此不需要对该报文进行解析,转发单元403将该报文向网络层转发,从而提高转发效率,减少应用层的解析负担。
从上可知,使用本发明实施例提供的报文转发的装置,可以判断报文流中每一个报文是否为报文流中消息的首包,若是消息的首包,则提交应用层进行解析;若不是消息的首包,则直接转发到网络中,由于首包较少,非首包的报文较多,将大量不需要解析的报文直接转发到网络中不仅可以提高转发报文的效率,还能够减轻应用层解析报文的负担。
下面根据图5描述本发明实施例的另一种报文转发的装置50。如图5所示,装置50包括:
接收单元501,判断单元502,存储单元503,获取单元504,转发单元505,计算单元506,第一更新单元507,第二更新单元508。
接收单元501,用于接收网络层发送的报文。
判断单元502,用于判断该接收单元501接收到的报文是否是为报文流的首包;在该报文不是报文流的首包时,判断该报文是否为报文流中消息的首包。
判断单元502判断该报文的五元组是否已被存储,若该报文的五元组没有被存储,则该报文为报文流的首包;若该报文的五元组已被存储,则该报文不是报文流的首包。其中,报文的五元组包括源IP地址、源端口、目的IP地址、目的端口和传输层协议号。
其中,一条报文流至少包括一条消息,一条消息可以由至少一个报文承载。报文流的首包既是报文流的第一个报文,也是一条消息的第一条报文。
在判断单元502判定该报文不是报文流的首包时,需要对该报文进行进一步判断,判断该报文是否为报文流中消息的首包。
存储单元503,在判断单元502判断该报文是报文流的首包时,将该报文的五元组进行存储。
获取单元504,在判断单元502判断该报文是否为报文流中消息的首包时,获取该报文承载的第一消息体长度;获取存储的该消息的第二消息体总长度;获取存储的该报文所属消息的已传输部分内容至应用层的第三消息体总长度。
获取单元504获取该报文承载的第一消息体长度。其中,接收单元501还用于接收网络层发送的所述报文的总长度和所述报文的网络层头长度;获取单元504获取所述报文的传输层头长度,并用接收单元501接收到的该报文的总长度减去该报文的网络层头长度再减去该报文的传输层头长度得到该报文承载的第一消息体长度。
获取单元504获取该报文承载的第一消息体长度。其中,要获取已经发送到传输层的该报文的总长度以及该报文传输层头长度,用该报文的总长度减去该报文的传输层头长度得到该报文承载的第一消息体长度。
由于一条消息至少由一条报文承载,而且报文流中的消息是连续的,那么一条报文中可能包含一条消息的内容,也可能包含两个消息的内容。
获取单元504获取存储的该消息的第二消息体总长度。其中,第二消息体总长度是指该报文所属消息的总长度,如果该消息由多条报文承载,那么多条报文承载的消息长度之和就是该消息的总长度。其中,如果该报文承载了两条消息的内容,那么获取存储的该消息的第二消息体总长度中的该消息是指已有部分内容传输至应用层,并且总长度已经被存储的消息。
获取单元504获取存储的报文流已传输的该报文所属消息的第三消息体总长度。其中,由于一条消息需要分成若干条报文进行传输,在该报文之前,属于该消息的其他报文已经传输一部分消息内容至应用层,这部分消息内容的长度就是第三消息体总长度。
判断单元502判断该报文是否是报文流中消息的首包具体包括:判断单元502判断获取单元504获取的第一消息体长度与获取单元504获取的第三消息体总长度之和是否大于获取单元504获取的第二消息体总长度。
在判断单元502判断获取单元504获取的第一消息体长度与获取单元503获取的第三消息体总长度之和大于获取单元504获取的第二消息体总长度时,确定该报文为报文流中消息的首包。
转发单元505,在判断单元502判断该报文为报文流的首包时,向应用层转发该报文;在判断单元502判断该报文为报文流中消息的首包时,向应用程转发该报文,在判断单元502判断该报文不是报文流中消息的首包时,向网络中转发该报文。
在该判断单元502判断该报文为报文流的首包或者报文流中消息的首包时,由于首包中包含该报文所属消息的消息头,转发单元505向应用层转发该报文,由应用层对该报文所述消息的消息头进行解析,以便获得所需要的信息,常见的信息如户分布情况、热点应用情况以及业务的使用情况等。其中,消息的消息头可以包括首行和头域,也可以包括首行,也可以包括头域。
在判断单元502判断该报文不是报文流中消息的首包时,该报文不包含消息的消息头,因此不需要对该报文进行解析,转发单元505将该报文向网络层转发,从而提高转发效率,减少应用层的解析负担。
该接受单元501还用于接收应用层发送的该报文中消息头的长度。
计算单元506,用于用该获取单元504获取的第一消息体总长度加上该获取单元获取的第三消息体长度,减去该获取单元获取的第二消息体总长度,在减去接收单元501接收到的该报文中消息头的长度得到第五消息体总长度。
计算单元506用获取单元504第一消息体总长度加上该第三消息体长度减去该第二消息体总长度获得的是该报文承载的其他消息的消息长度,再用该报文承载的其他消息的消息长度减去该接收单元501接收到的该报文中消息头的长度得到第五消息体总长度。
第一更新单元507,将该第三消息体总长度更新为计算单元506计算得到第五消息体长度。
由于该报文包含了其他消息的内容,表明一个消息结束,另一个消息开始。该报文承载了两个消息的内容,因此,需要将已传输的消息体长度进行更新,用该报文承载第五消息体总长度更新存储的已传输的第三消息体总长度,为该其他消息的后续报文的判断提供依据。
接收单元501,还用于接收第六消息体长度,该第六消息体总长度表示的是该报文所属消息的消息体总长度,该消息是指尚未全部传输至应用层的消息。
转发单元505向应用层转发该报文,应用层接收到该报文后,对该报文进行解析。由于该报文包含两条消息的内容,应用层对该报文承载的消息进行解析,获得第六消息体总长度。
第二更新单元508,用接收单元501接收到的第六消息体总长度更新该第二消息体总长度。
用该第六消息体总长度更新该第二消息体总长度包括用该第六消息体总长度替换或者覆盖第二消息体总长度,使得下次获取第二消息体总长度时,获取的是已经更新过的第二消息体总长度。其中,该第六消息体总长度是由应用层通过解析该报文的消息内容长度字段获得,该第六消息体总长度表示的是该报文所属消息的消息体总长度,该消息是指尚未全部传输至应用层的消息。由于该报文为其他消息的首包,该第六消息体总长度为该其他消息的总长度。
从上可知,使用本发明实施例提供的报文转发的装置,可以判断报文流中每一个报文是否为报文流中消息的首包,若是消息的首包,则提交应用层进行解析;若不是消息的首包,则直接转发到网络中,由于首包较少,非首包的报文较多,将大量不需要解析的报文直接转发到网络中不仅可以提高转发报文的效率,还能够减轻应用层解析报文的负担。
下面根据图6描述本发明实施例的一种报文转发的装置60。如图6所示,装置60包括:
接收单元601,判断单元602,存储单元603,获取单元604,转发单元605,第三更新单元606,计算单元607,第一更新单元608,第二更新单元609。
接收单元601,用于接收网络层发送的报文。
判断单元602,用于判断该接收单元601接收到的报文是否是为报文流的首包;在该报文不是报文流的首包时,判断该报文是否为报文流中消息的首包。
判断单元602判断该报文的五元组是否已被存储,若该报文的五元组没有被存储,则该报文为报文流的首包;若该报文的五元组已被存储,则该报文不是报文流的首包。其中,报文的五元组包括源IP地址、源端口、目的IP地址、目的端口和传输层协议号。
其中,一条报文流至少包括一条消息,一条消息可以由至少一个报文承载。报文流的首包既是报文流的第一个报文,也是一条消息的第一条报文。
在判断单元602判定该报文不是报文流的首包时,需要对该报文进行进一步判断,判断该报文是否为报文流中消息的首包。
存储单元603,在判断单元602判断该报文是报文流的首包时,将该报文的五元组进行存储。
获取单元604,在判断单元602判断该报文是否为报文流中消息的首包时,获取该报文承载的第一消息体长度;获取存储的该消息的第二消息体总长度;获取存储的该报文所属消息的已传输部分内容至应用层的第三消息体总长度。
获取单元604获取该报文承载的第一消息体长度。其中,接收单元601还用于接收网络层发送的所述报文的总长度和所述报文的网络层头长度;获取单元604获取所述报文的传输层头长度,并用接收单元601接收到的该报文的总长度减去该报文的网络层头长度再减去该报文的传输层头长度得到该报文承载的第一消息体长度。
获取单元604获取该报文承载的第一消息体长度。其中,要获取已经发送到传输层的该报文的总长度以及该报文传输层头长度,用该报文的总长度减去该报文的传输层头长度得到该报文承载的第一消息体长度。
由于一条消息至少由一条报文承载,而且报文流中的消息是连续的,那么一条报文中可能包含一条消息的内容,也可能包含两个消息的内容。
获取单元604获取存储的该消息的第二消息体总长度。其中,第二消息体总长度是指该报文所属消息的总长度,如果该消息由多条报文承载,那么多条报文承载的消息长度之和就是该消息的总长度。其中,如果该报文承载了两条消息的内容,那么获取存储的该消息的第二消息体总长度中的该消息是指已有部分内容传输至应用层,并且总长度已经被存储的消息。
获取单元604获取存储的报文流已传输的该报文所属消息的第三消息体总长度。其中,由于一条消息需要分成若干条报文进行传输,在该报文之前,属于该消息的其他报文已经传输一部分消息内容至应用层,这部分消息内容的长度就是第三消息体总长度。
判断单元602判断该报文是否是报文流中消息的首包具体包括:判断单元602判断获取单元604获取的第一消息体长度与获取单元504获取的第三消息体总长度之和是否大于获取单元504获取的第二消息体总长度。
在判断单元602判断获取单元604获取的第一消息体长度与获取单元603获取的第三消息体总长度之和大于获取单元604获取的第二消息体总长度时,确定该报文为报文流中消息的首包。
转发单元605,在判断单元602判断该报文为报文流的首包时,向应用层转发该报文;在判断单元602判断该报文为报文流中消息的首包时,向应用程转发该报文,在判断单元602判断该报文不是报文流中消息的首包时,向网络中转发该报文。
在该判断单元602判断该报文为报文流的首包或者报文流中消息的首包时,由于首包中包含该报文所属消息的消息头,转发单元605向应用层转发该报文,由应用层对该报文所述消息的消息头进行解析,以便获得所需要的信息,常见的信息如户分布情况、热点应用情况以及业务的使用情况等。其中,消息的消息头可以包括首行和头域,也可以包括首行,也可以包括头域。
在判断单元602判断该报文不是报文流中消息的首包时,该报文不包含消息的消息头,因此不需要对该报文进行解析,转发单元605将该报文向网络层转发,从而提高转发效率,减少应用层的解析负担。
第三更新单元606,在判断单元602判断该报文不是报文流中消息的首包时,将该第三消息体总长度更新为该第三消息体总长度与该第一消息体长度之和。
由于该报文承载的消息内容完全属于一条消息,因此该报文承载的内容属于已发送的该报所属消息的内容,因此需要将存储的第三消息体总长度进行更新。第三更新单元606将该报文承载的消息体长度与存储的已传输的该报文所属消息的消息体总长度相加,并用该相加之和更新存储的报文流已传输的该报文所属消息的消息体总长度,为判断后续报文是否为报文流首包或者报文流中消息的首包提供依据。
该接受单元601还用于接收应用层发送的该报文中消息头的长度。
计算单元607,用于用该获取单元604获取的第一消息体总长度加上该获取单元获取的第三消息体长度,减去该获取单元获取的第二消息体总长度,在减去接收单元601接收到的该报文中消息头的长度得到第五消息体总长度。
计算单元607用获取单元604第一消息体总长度加上该第三消息体长度减去该第二消息体总长度获得的是该报文承载的其他消息的消息长度,再用该报文承载的其他消息的消息长度减去该接收单元601接收到的该报文中消息头的长度得到第五消息体总长度。
第一更新单元608,将该第三消息体总长度更新为计算单元607计算得到第五消息体长度。
由于该报文包含了其他消息的内容,表明一个消息结束,另一个消息开始。该报文承载了两个消息的内容,因此,需要将已传输的消息体长度进行更新,用该报文承载第五消息体总长度更新存储的已传输的第三消息体总长度,为该其他消息的后续报文的判断提供依据。
接收单元601,还用于接收第六消息体长度,该第六消息体总长度表示的是该报文所属消息的消息体总长度,该消息是指尚未全部传输至应用层的消息。
转发单元605向应用层转发该报文,应用层接收到该报文后,对该报文进行解析。由于该报文包含两条消息的内容,应用层对该报文承载的消息进行解析,获得第六消息体总长度。
第二更新单元609,用接收单元601接收到的第六消息体总长度更新该第二消息体总长度。
用该第六消息体总长度更新该第二消息体总长度包括用该第六消息体总长度替换或者覆盖第二消息体总长度,使得下次获取第二消息体总长度时,获取的是已经更新过的第二消息体总长度。其中,该第六消息体总长度是由应用层通过解析该报文的消息内容长度字段获得,该第六消息体总长度表示的是该报文所属消息的消息体总长度,该消息是指尚未全部传输至应用层的消息。由于该报文为其他消息的首包,该第六消息体总长度为该其他消息的总长度。
从上可知,使用本发明实施例提供的报文转发的装置,可以判断报文流中每一个报文是否为报文流中消息的首包,若是消息的首包,则提交应用层进行解析;若不是消息的首包,则直接转发到网络中,由于首包较少,非首包的报文较多,将大量不需要解析的报文直接转发到网络中不仅可以提高转发报文的效率,还能够减轻应用层解析报文的负担。
图7描述了本发明另一个实施例提供的报文转发设备的结构,包括至少一个处理器701(例如CPU),存储器702,至少一个网络接口703,和至少一个通信总线704,用于实现这些装置之间的连接通信。处理器701用于执行存储器702中存储的可执行模块,例如计算机程序。存储器702可能包含高速随机存取存储器(RAM:Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个网络接口703(可以是有线或者无线)实现该网络设备与至少一个其他网元之间的通信连接,可以使用互联网,广域网、本地网、城域网等。
在一些实施方式中,存储器702存储了程序7021,程序7021可以被处理器701执行,这个程序包括:接收网络层发送的报文,判断该报文是否为报文流的首包;在该报文为报文流的首包时,向应用层转发该报文;在该报文不是报文流的首包时,判断该报文是否为报文流中消息的首包;在该报文是报文流中消息的首包时,向应用层转发该报文;在该报文不是报文流中消息的首包时,向网络层转发该报文。具体的实施步骤与图1所示的实施例相同,此处不再赘述。
从上可知,使用本发明实施例提供的报文转发的装置,可以判断报文流中每一个报文是否为报文流中消息的首包,若是消息的首包,则提交应用层进行解析;若不是消息的首包,则直接转发到网络中,由于首包较少,非首包的报文较多,将大量不需要解析的报文直接转发到网络中不仅可以提高转发报文的效率,还能够减轻应用层解析报文的负担。
图8描述了本发明另一个实施例提供的报文转发设备的结构,包括至少一个处理器801(例如CPU),存储器802,至少一个网络接口803,和至少一个通信总线804,用于实现这些装置之间的连接通信。处理器801用于执行存储器802中存储的可执行模块,例如计算机程序。存储器802可能包含高速随机存取存储器(RAM:Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个网络接口803(可以是有线或者无线)实现该网络设备与至少一个其他网元之间的通信连接,可以使用互联网,广域网、本地网、城域网等。
在一些实施方式中,存储器802存储了程序8021,程序8021可以被处理器801执行,这个程序包括:接收网络层发送的报文,判断该报文是否为报文流的首包;在该报文为报文流的首包时,向应用层转发该报文,并存储该报文的五元组;在该报文不是报文流的首包时,判断该报文是否为报文流中消息的首包;在该报文是报文流中消息的首包时,向应用层转发该报文;接收应用层发送的该报文中消息头的长度,用该第一消息体总长度加上该第三消息体长度减去该第二消息体总长度,再减去该报文中的消息头的长度得到第五消息体总长度;将该第三消息体总长度更新为第五消息体总长度;接收应用层发送的第六消息体总长度,并用该第六消息体总长度更新该第二消息体总长度,该第六消息体总长度表示的是该报文所属消息的消息体总长度。具体的实施步骤与图2所示的实施例相同,此处不再赘述。
从上可知,使用本发明实施例提供的报文转发的装置,可以判断报文流中每一个报文是否为报文流中消息的首包,若是消息的首包,则提交应用层进行解析;若不是消息的首包,则直接转发到网络中,由于首包较少,非首包的报文较多,将大量不需要解析的报文直接转发到网络中不仅可以提高转发报文的效率,还能够减轻应用层解析报文的负担。
图9描述了本发明另一个实施例提供的报文转发设备的结构,包括至少一个处理器901(例如CPU),存储器902,至少一个网络接口903,和至少一个通信总线904,用于实现这些装置之间的连接通信。处理器901用于执行存储器902中存储的可执行模块,例如计算机程序。存储器902可能包含高速随机存取存储器(RAM:Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个网络接口903(可以是有线或者无线)实现该网络设备与至少一个其他网元之间的通信连接,可以使用互联网,广域网、本地网、城域网等。
在一些实施方式中,存储器902存储了程序9021,程序9021可以被处理器901执行,这个程序包括:接收网络层发送的报文,判断该报文是否为报文流的首包;在该报文为报文流的首包时,向应用层转发该报文,并存储该报文的五元组;在该报文不是报文流的首包时,判断该报文是否为报文流中消息的首包;在报文不是报文流中消息的首包时,向网络层转发,并将该第三消息体总长度更新为该第三消息体总长度与该第一消息体长度之和;在该报文是报文流中消息的首包时,向应用层转发该报文;接收应用层发送的该报文中消息头的长度,用该第一消息体总长度加上该第三消息体长度减去该第二消息体总长度,再减去该报文中的消息头的长度得到第五消息体总长度;将该第三消息体总长度更新为第五消息体总长度;接收应用层发送的第六消息体总长度,并用该第六消息体总长度更新该第二消息体总长度,该第六消息体总长度表示的是该报文所属消息的消息体总长度。具体的实施步骤与图3所示的实施例相同,此处不再赘述。
从上可知,使用本发明实施例提供的报文转发的装置,可以判断报文流中每一个报文是否为报文流中消息的首包,若是消息的首包,则提交应用层进行解析;若不是消息的首包,则直接转发到网络中,由于首包较少,非首包的报文较多,将大量不需要解析的报文直接转发到网络中不仅可以提高转发报文的效率,还能够减轻应用层解析报文的负担。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
上述装置和系统内的各模块之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,上述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,上述的存储介质可为磁碟、光盘、只读存储记忆体(ROM:Read-Only Memory)或随机存储记忆体(RAM:Random Access Memory)等。
本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (18)
1.一种报文转发的方法,其特征在于,所述方法包括:
接收网络层发送的报文,判断所述报文是否是报文流的首包;
在所述报文是报文流的首包时,向应用层转发所述报文;
在所述报文不是报文流的首包时,判断所述报文是否是报文流中消息的首包;
在所述报文是报文流中消息的首包时,向应用层转发所述报文;
在所述报文不是报文流中消息的首包时,向网络层转发所述报文。
2.如权利要求1所述的报文转发的方法,其特征在于,所述判断所述报文是否为报文流中消息的首包包括:
获取所述报文承载的第一消息体长度;
获取存储的所述报文所属消息的第二消息体总长度;
获取存储的所述报文所属消息已传输部分的第三消息体总长度;
在所述第三消息体总长度与所述第一消息体长度之和大于所述第二消息体总长度时,确定所述报文为报文流中消息的首包;
在所述第三消息体总长度与所述第一消息体长度之和小于或等于所述第二消息体总长度时,确定所述报文不是报文流中消息的首包。
3.如权利要求2所述的报文转发的方法,其特征在于,在所述报文是报文流中消息的首包时,在向应用层转发所述报文后,所述方法还包括:
接收应用层发送的所述报文中的消息头的长度,用所述第一消息体长度加上所述第三消息体总长度,再减去所述第二消息体总长度,再减去所述报文中消息头的长度得到第五消息体总长度;
将所述第三消息体总长度更新为所述第五消息体总长度。
4.如权利要求2或3所述的报文转发的方法,其特征在于,所述在向应用层转发所述报文后,还包括:
接收应用层发送的第六消息体总长度,并用所述第六消息体总长度更新所述第二消息体总长度,所述第六消息体总长度表示的是所述报文所属消息的消息体总长度。
5.如权利要求2所述的报文转发的方法,其特征在于,在所述第三消息体总长度与所述第一消息体长度之和小于或等于所述第二消息体总长度时,所述 方法还包括:
将所述第三消息体总长度更新为所述第三消息体总长度与所述第一消息体长度之和。
6.如权利要求2或3所述的报文转发的方法,其特征在于,所述获取所述报文承载的第一消息体长度包括:
接收网络层发送的所述报文的总长度和所述报文的网络层头长度;
获取所述报文的传输层头长度;
用所述报文的总长度减去所述报文的网络层头长度,再减去所述报文的传输层头长度得到所述报文承载的第一消息体长度。
7.如权利要求2或3所述的报文转发的方法,其特征在于,所述获取所述报文承载的第一消息体长度包括:
获取所述报文的总长度;
获取所述报文的传输层头长度;
用所述报文的总长度减去所述报文的传输层头长度得到所述报文承载的第一消息体长度。
8.如权利要求1至3任一所述的报文转发的方法,其特征在于,所述判断所述报文是否为报文流的首包包括:
判断所述报文的五元组是否已被存储,若所述报文的五元组没有被存储,则所述报文为报文流的首包。
9.如权利要求8所述的报文转发的方法,其特征在于,在所述报文为报文流的首包时,还包括:
将所述报文的五元组进行存储。
10.一种报文转发的装置,其特征在于,所述装置包括:
接收单元,用于接收网络层发送的报文;
判断单元,用于判断所述接收单元接收到的报文是否为报文流的首包;在判断所述报文不是报文流的首包时,判断所述报文是否为报文流中消息的首包;
转发单元,在所述判断单元判断所述报文为报文流首包时,向应用层转发所述报文;在所述判断单元判断所述报文为报文流中消息的首包时,向应用层转发所述报文;在所述判断单元判断所述报文不是报文流中消息的首包时,向 网络层转发所述报文。
11.如权利要求10所述的报文转发的装置,其特征在于,还包括获取单元,
所述获取单元用于获取所述报文承载的第一消息体长度;获取存储的所述报文所属消息的第二消息体总长度;获取存储的所述报文所属消息已传输部分的第三消息体总长度;
所述判断单元具体用于:
在所述获取单元获取的第一消息体长度与所述获取单元获取的第三消息体总长度之和大于所述获取单元获取的第二消息体总长度时,确定所述报文为报文流中消息的首包;
在所述获取单元获取的第一消息体长度与获取单元获取的第三消息体总长度之和小于或等于获取单元获取的第二消息体总长度时,确定所述报文不是报文流中消息的首包。
12.如权利要求11所述的报文转发的装置,其特征在于,还包括计算单元和第一更新单元,在所述判断单元确定所述报文是报文流中消息的首包时,在所述转发单元向应用层转发所述报文后,
所述接收单元还用于接收应用层发送的所述报文中的消息头的长度;
所述计算单元用于用所述获取单元获取的第一消息体总长度加上所述获取单元获取的第三消息体长度,再减去所述获取单元获取的第二消息体总长度,再减去所述接收单元接收到的报文中消息头的长度得到第五消息体总长度;
所述第一更新单元用于将所述第三消息体总长度更新为用所述计算单元计算得到的所述第五消息体总长度。
13.如权利要求11或12所述的报文转发的装置,其特征在于,还包括第二更新单元;
所述接收单元,还用于在所述转发单元向应用层转发所述报文后,接收应用层发送的第六消息体总长度,所述第六消息体总长度表示的是所述报文所属消息的消息体总长度;
所述第二更新单元用于将所述第二消息体总长度更新为所述接收单元接收到的第六消息体总长度。
14.如权利要求11或12所述的报文转发的装置,其特征在于,还包括第 三更新单元,在所述判断单元判断获取单元获取的所述第一消息体长度与获取单元获取的所述的第三消息体总长度之和小于或等于获取单元获取的所述第二消息体总长度时,
所述第三更新单元用于将所述第三消息体总长度更新为所述第三消息体总长度与所述第一消息体长度之和。
15.如权利要求11或12所述的报文转发的装置,其特征在于,
所述接收单元还用于接收网络层发送的所述报文的总长度和所述报文的网络层头长度;
所述获取单元还用于:获取所述报文的传输层头长度;用接收单元接收到的所述报文的总长度减去所述报文的网络层头长度再减去所述报文的传输层头长度得到所述报文承载的第一消息体长度。
16.如权利要求11或12所述的报文转发的装置,其特征在于,所述获取单元还用于:
获取所述报文的总长度;获取所述报文的传输层头长度;用所述报文的总长度减去所述报文的传输层头长度得到所述报文承载的第一消息体长度。
17.如权利要求10至12任一所述的报文转发的装置,其特征在于,所述判断单元判断所述报文是否为报文流的首包包括:
所述判断单元判断所述报文的五元组是否已被存储,若所述报文的五元组没有被存储,则所述报文为报文流的首包。
18.如权利要求17所述的报文转发的装置,其特征在于,还包括存储单元,在所述报文为报文流的首包时,
所述存储单元将所述报文的五元组进行存储。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310511205.1A CN103561007B (zh) | 2013-10-25 | 2013-10-25 | 一种报文转发的方法及装置 |
PCT/CN2014/074126 WO2015058490A1 (zh) | 2013-10-25 | 2014-03-26 | 一种报文转发的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310511205.1A CN103561007B (zh) | 2013-10-25 | 2013-10-25 | 一种报文转发的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103561007A CN103561007A (zh) | 2014-02-05 |
CN103561007B true CN103561007B (zh) | 2016-10-05 |
Family
ID=50015157
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310511205.1A Active CN103561007B (zh) | 2013-10-25 | 2013-10-25 | 一种报文转发的方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN103561007B (zh) |
WO (1) | WO2015058490A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103561007B (zh) * | 2013-10-25 | 2016-10-05 | 华为技术有限公司 | 一种报文转发的方法及装置 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6463071B1 (en) * | 1998-08-17 | 2002-10-08 | 3Com Corporation | Method and system to communicate prioritized traffic via fixed length data communication frames |
US7325070B1 (en) * | 2002-08-26 | 2008-01-29 | Network Appliance, Inc. | Sub-application layer data transfer in a network comprising a layered architecture |
CN101110772B (zh) * | 2007-08-13 | 2010-06-09 | 杭州华三通信技术有限公司 | 一种处理报文的设备和方法 |
CN102325124B (zh) * | 2011-05-23 | 2016-08-17 | 北京网康科技有限公司 | 一种支持引流功能的应用识别设备及方法 |
CN102215231A (zh) * | 2011-06-03 | 2011-10-12 | 华为软件技术有限公司 | 一种转发数据的方法及网关 |
CN103561007B (zh) * | 2013-10-25 | 2016-10-05 | 华为技术有限公司 | 一种报文转发的方法及装置 |
-
2013
- 2013-10-25 CN CN201310511205.1A patent/CN103561007B/zh active Active
-
2014
- 2014-03-26 WO PCT/CN2014/074126 patent/WO2015058490A1/zh active Application Filing
Also Published As
Publication number | Publication date |
---|---|
WO2015058490A1 (zh) | 2015-04-30 |
CN103561007A (zh) | 2014-02-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11881934B2 (en) | Systems and methods for determining a network path trace | |
CN105871602B (zh) | 一种统计流量的控制方法、装置和系统 | |
CN103905447B (zh) | 业务链路选择控制方法以及设备 | |
CN109548008A (zh) | 网络侧对远端用户设备的识别和控制方法以及设备 | |
CN105556916B (zh) | 网络流的信息统计方法和装置 | |
CN110324198A (zh) | 丢包处理方法和丢包处理装置 | |
CN106063199B (zh) | 通信系统、通信方法、中继装置以及存储有计算机可读程序的存储介质 | |
CN110138618A (zh) | 一种报文处理方法、装置及系统 | |
CN105337881A (zh) | 一种数据报文的处理方法、业务节点以及引流点 | |
CN109218200A (zh) | 一种报文处理方法及装置 | |
CN109617995A (zh) | 对租户集群vpc内部容器的管理系统、方法及电子设备 | |
CN107786450A (zh) | 一种数据报文传输方法、装置及机器可读存储介质 | |
CN106105098B (zh) | 交换机及业务请求报文的处理方法 | |
CN102035738A (zh) | 一种获取路由信息的方法及装置 | |
CN108206785A (zh) | 针对多播流量优化与路由和/或下一跳相关的信息 | |
CN105324961B (zh) | Gre隧道实现方法、接入点和网关 | |
CN108512714A (zh) | 一种报文传输方法、相关设备和系统 | |
CN105207858B (zh) | 接入装置及其执行的将用户设备接入网络的方法 | |
CN105591967B (zh) | 一种数据传输方法和装置 | |
CN103973747B (zh) | 一种获取内容的方法和装置 | |
CN104506369B (zh) | 一种丢包位置的检测方法和设备 | |
CN103561007B (zh) | 一种报文转发的方法及装置 | |
CN104219160B (zh) | 生成输入参数的方法及设备 | |
CN105812272B (zh) | 业务链的处理方法、装置与系统 | |
CN109842503A (zh) | 链路质量测试方法和系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |