一种报文转发的方法及装置制造方法

文档序号:7774484阅读:158来源:国知局
一种报文转发的方法及装置制造方法
【专利摘要】本发明涉及互联网【技术领域】,提供了报文转发的方法和装置,其中方法包括:接收网络层发送的报文,判断该报文是否为报文流的首包;在该报文为报文流的首包时,向应用层转发该报文;在该报文不是报文流的首包时,判断该报文是否为报文流中消息的首包;在该报文是报文流中消息的首包时,向应用层转发该报文;在该报文不是报文流中消息的首包时,向网络层转发该报文。使用本发明,可以判断报文流中每一个报文是否为报文流中消息的首包,若是消息的首包,则提交应用层进行解析;若不是消息的首包,则直接转发到网络中。将大量不需要解析的报文直接转发到网络中不仅可以提高转发报文的效率,还能够减轻应用层解析报文的负担。
【专利说明】一种报文转发的方法及装置
【技术领域】
[0001]本发明涉及互联网【技术领域】,具体涉及一种报文转发的方法及装置。
【背景技术】
[0002]随着互联网的不断发展,网络流量的精细化管理得到越来越多的应用,常见的有 报文识别、流量控制、数据统计等。当运行商想要了解业务的使用情况、热点应用情况以及 用户分布情况等信息以便展开针对性的增值服务时,就需要对报文进行数据解析,从而获 得分组网络中的详细数据。但是目前情况下,在做数据解析时,通常是应用层对包含有首行 和头域的报文进行解析,但是应用层在处理报文的过程中,会遇到很多不包含首行和头域 的报文,从而降低应用层解析报文和转发报文的效率。
[0003]面对这一问题,剔除报文流中不需要解析的报文显得尤为重要。现有技术中剔除 报文流中不需要解析的报文的一种方法具体为:传输层将报文流中的报文全部传输到应用 层,当应用层收到不需要解析的报文时,根据报文内部记录的状态,执行跳包动作,将该报 文转发到网络,然后进行下一个报文的解析。
[0004]从上面方案可以看出:由于应用层需要对报文流中每个报文进行判断和分析,不 仅降低了应用层的解析效率,还降低了报文转发的效率。

【发明内容】

[0005]本发明实施例提供了一种报文转发的方法及装置,不仅可以提高转发报文的效 率,还可以减轻应用层解析报文的负担。
[0006]本发明实施例的第一方面公开了报文转发的方法和装置,所述方法包括:
[0007]接收网络层发送的报文,判断所述报文是否为报文流的首包;在所述报文是报文 流的首包时,向应用层转发所述报文;在所述报文不是报文流的首包时,判断所述报文是否 为报文流中消息的首包;在所述报文是报文流中消息的首包时,向应用层转发所述报文; 在所述报文不是报文流中消息的首包时,向网络层转发所述报文。
[0008]结合第一方面,在第一方面的第一种实现方式中,所述判断所述报文是否为报文 流中消息的首包包括:
[0009]获取所述报文承载的第一消息体长度;获取存储的所述报文所属消息的第二消息 体总长度;获取存储的所述报文所属消息已传输部分的第三消息体总长度;在所述第三消 息体总长度与所述第一消息体长度之和大于所述第二消息体总长度时,确定所述报文为报 文流中消息的首包;在所述第三消息体总长度与所述第一消息体长度之和小于或等于所述 第二消息体总长度时,确定所述报文不是报文流中消息的首包。
[0010]结合第一方面的第一种实现方式,在第一方面的第二种实现方式中,在所述报文 是报文流中消息的首包时,在向应用层转发所述报文后,还包括:
[0011]接收应用层发送的所述报文中的消息头的长度,用所述第一消息体长度加上所述 第三消息体总长度,再减去所述第二消息体总长度,再减去所述报文中消息头的长度得到第五消息体总长度;
[0012]将所述第三消息体总长度更新为所述第五消息体总长度。
[0013]结合第一方面的第一种实现方式或第一方面的第二种实现方式,在第一方面的第 三种实现方式中,所述在向应用层转发所述报文后,还包括:
[0014]接收应用层发送的第六消息体总长度,并用所述第六消息体总长度更新所述第二 消息体总长度,所述第六消息体总长度表示的是所述报文所属消息的消息体总长度。
[0015]结合第一方面的第一种实现方式或第一方面的第二种实现方式或第一方面的第 三种实现方式,在第一方面的第四种实现方式中,在所述第三消息体总长度与所述第一消 息体长度之和小于或等于所述第二消息体总长度时,所述方法还包括:
[0016]将存储的第三消息体总长度更新为所述第三消息体总长度与所述第一消息体长 度之和。
[0017]结合第一方面的第一种实现方式或者第一方面第二种实现方式或者第一方面第 三种实现方式或第一方面的第四种实现方式,在第一方面的第五种实现方式中,所述获取 所述报文承载的第一消息体长度包括:
[0018]接收网络层发送的所述报文的总长度和所述报文的网络层头长度;
[0019]获取所述报文的传输层头长度;
[0020]用所述报文的总长度减去所述报文的网络层头长度,再减去所述报文的传输层头 长度得到所述报文承载的第一消息体长度。
[0021]结合第一方面的第一种实现方式或者第一方面第二种实现方式或者第一方面第 三种实现方式或第一方面的第四种实现方式,在第一方面的第六种实现方式中,所述获取 所述报文承载的第一消息体长度包括:
[0022]获取所述报文的总长度;
[0023]获取所述报文的传输层头长度;
[0024]用所述报文的总长度减去减去所述报文的传输层头长度得到所述报文承载的第
一消息体长度。
[0025]结合第一方面或者第一方面的第一种实现方式或者第一方面第二种实现方式或 者第一方面第三种实现方式或第一方面的第四种实现方式或第一方面的第五种实现方式 或第一方面的第六种实现方式,在第一方面的第七种实现方式中,所述判断所述报文是否 为报文流的首包包括:
[0026]判断所述报文的五元组是否已被存储,若所述报文的五元组没有被存储,则所述 报文为报文流的首包。
[0027]结合第一方面的第七种实现方式,在第一方面的第八种实现方式中,在所述报文 为报文流的首包时,还包括:
[0028]将所述报文的五元组进行存储。
[0029]本发明实施例的第二方面公开了一种报文转发的装置,所述装置包括:
[0030]接收单元,用于接收网络层发送的报文;判断单元,用于判断所述接收单元接收到 的报文是否为报文流的首包;在判断所述报文不是报文流的首包时,判断所述报文是否为 报文流中消息的首包;转发单元,在所述判断单元判断所述报文为报文流首包时,向应用层 转发所述报文;在所述判断单元判断所述报文为报文流中消息的首包时,向应用层转发所述报文;在所述判断单元判断所述报文不是报文流中消息的首包时,向网络层转发所述报文。
[0031]结合第二方面,在第二方面的第一种实现方式中,还包括获取单元,
[0032]所述获取单元用于获取所述报文承载的第一消息体长度;获取存储的所述报文所 属消息的第二消息体总长度;获取存储的所述报文所属消息已传输部分的第三消息体总长 度;
[0033]所述判断单元具体用于:
[0034]在所述获取单元获取的第一消息体长度与所述获取单元获取的第三消息体总长 度之和大于所述获取单元获取的第二消息体总长度时,确定所述报文是报文流中消息的首 包;
[0035]在所述获取单元获取的第一消息体长度与获取单元获取的第三消息体总长度之 和小于或等于获取单元获取的第二消息体总长度时,确定所述报文不是报文流中消息的首 包。
[0036]结合第二方面的第一种实现方,在第二方面的第二种实现方式中,还包括计算单 元和第一更新单元,
[0037]在所述判断单元确定所述报文是报文流中消息的首包时,在所述转发单元向应用 层转发所述报文后,
[0038]所述接收单元还用于接收应用层发送的所述报文中的消息头的长度;
[0039]所述计算单元用于用所述获取单元获取的第一消息体总长度加上所述获取单元 获取的第三消息体长度,再减去所述获取单元获取的第二消息体总长度,再减去所述接收 单元接收到的报文中消息头的长度得到第五消息体总长度;
[0040]所述第一更新单元用于将所述第三消息体总长度更新为用所述计算单元计算得 到的所述第五消息体总长度。
[0041]结合第二方面的第一种实现方式或第二方面的第二种实现方式,在第二方面的第 三种实现方式中,还包括第二更新单元;
[0042]所述接收单元,还用于在所述转发单元向应用层转发所述报文后,接收应用层发 送的第六消息体总长度,所述第六消息体总长度表示的是所述报文所属消息的消息体总长 度;
[0043]所述第二更新单元用于将所述第二消息体总长度更新为所述接收单元接收到的 第六消息体总长度。
[0044]结合第二方面的第一种实现方式或第二方面的第二中实现方式或第二方面的第 三种实现方式,在第二方面的第四种实现方式中,还包括第三更新单元,在所述判断单元判 断获取单元获取的所述第一消息体长度与获取单元获取的所述的第三消息体总长度之和 小于或等于获取单元获取的所述第二消息体总长度时,
[0045]所述第三更新单元用于将所述第三消息体总长度更新为所述第三消息体总长度 与所述第一消息体长度之和。
[0046]结合第二方面的第一种实现方式或第二方面的第二中实现方式或第二方面的第 三种实现方式或第二方面的第四种实现方式,在第二方面的第五种实现方式中,
[0047]所述接收单元还用于接收网络层发送的所述报文的总长度和所述报文的网络层头长度;
[0048]所述获取单元还用于:获取所述报文的传输层头长度;用接收单元接收到的所述 报文的总长度减去所述报文的网络层头长度再减去所述报文的传输层头长度得到所述报 文承载的第一消息体长度。
[0049]结合第二方面的第一种实现方式或第二方面的第二中实现方式或第二方面的第 三种实现方式或第二方面的第四种实现方式,在第二方面的第六种实现方式中,所述获取 单元还用于:
[0050]获取所述报文的总长度;获取所述报文的传输层头长度;用所述报文的总长度减 去减去所述报文的传输层头长度得到所述报文承载的第一消息体长度。
[0051]结合第二方面或第二方面的第一种实现方式或第二方面的第二中实现方式或第 二方面的第三种实现方式或第二方面的第四种实现方式或第二方面的第五种实现方式,在 第二方面的第七种实现方式中,所述判断单元判断所述报文是否为报文流的首包包括:
[0052]所述判断单元判断所述报文的五元组是否已被存储,若所述报文的五元组没有被 存储,则所述报文为报文流的首包。
[0053]结合第二方面的第七种实现方式,在第二方面的第八种实现方式中,还包括存储 单元,在所述报文为报文流的首包时,
[0054]所述存储单元将所述报文的五元组进行存储。
[0055]从本发明实施例提供的以上技术方案可以看出,使用本发明实施例提供的报文转 发的方法及装置,可以判断报文流中每一个报文是否为报文流中消息的首包,若是消息的 首包,则提交应用层进行解析;若不是消息的首包,则直接转发到网络中,由于首包较少,非 首包的报文较多,将大量不需要解析的报文直接转发到网络中不仅可以提高转发报文的效 率,还能够减轻应用层解析报文的负担。
【专利附图】

【附图说明】
[0056]为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使 用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于 本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其 他的附图。
[0057]图1为本发明一个实施例提供的加速应用层解析的方法流程图;
[0058]图2为本发明另一个实施例提供的加速应用层解析的方法流程图;
[0059]图3为本发明另一个实施例提供的加速应用层解析的方法流程图;
[0060]图4为本发明一个实施例提供的加速应用层解析的装置结构图;
[0061]图5为本发明另一个实施例提供的加速应用层解析的装置结构图;
[0062]图6为本发明另一个实施例提供的加速应用层解析的装置结构图;
[0063]图7为本发明另一个实施例提供的加速应用层解析的装置结构图;
[0064]图8为本发明另一个实施例提供的加速应用层解析的装置结构图;
[0065]图9为本发明另一个实施例提供的加速应用层解析的装置结构图。
【具体实施方式】[0066]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于 本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他 实施例,都属于本发明保护的范围。
[0067]下面根据图1,描述本发明实施例的一种报文转发的方法,该方法描述的是在传输 层判断报文流中的每一个报文是向应用层转发还是向网络中转发,该方法具体包括:
[0068]101、接收网络层发送的报文,判断该报文是否是报文流的首包。
[0069]接收网络层发送的报文,判断该报文的五元组是否已被存储,若该报文的五元组 没有被存储,则该报文为报文流的首包;若该报文的五元组已被存储,则该报文不是报文流 的首包。其中,报文的五元组包括源网络协议(IP,Internet Protocol)地址、源端口、目的 IP地址、目的端口和传输层协议号。
[0070]其中,一条报文流至少包括一条消息,一条消息可以由至少一个报文承载。报文流 的首包既是报文流的第一个报文,也是一条消息的第一条报文。
[0071]102、在该报文是报文流的首包时,向应用层转发该报文。
[0072]在该报文为报文流的首包时,由于首包中包含该报文所属消息的消息头,需要向 应用层转发该报文,由应用层对报文所属消息的消息头进行解析,以便获得所需要的信息, 常见的信息如用户分布情况、热点应用情况以及业务的使用情况等。其中,消息的消息头可 以包括首行和头域,也可以包括首行,也可以包括头域。
[0073]在该报文为报文流的首包时,需要将该报文的五元组进行存储。在接收到报文流 的后续报文时,可以根据存储的该报文的五元组,判断后续报文不是报文流的首包。
[0074]103、在该报文不是报文流的首包时,判断该报文是否是报文流中消息的首包。
[0075]在该报文不是报文流的首包时,需要对该报文进行进一步判断,判断该报文是否 为报文流中消息的首包。对该报文进行进一步判断,从而确定该报文是否为报文流中消息 的首包的具体方法为:获取该报文承载的第一消息体长度;获取存储的该消息的第二消息 体总长度,该消息为已传输部分内容至应用层的消息;获取存储的该报文所属消息的已传 输部分内容至应用层的第三消息体总长度;在该第三消息体总长度与该第一消息体长度之 和大于该第二消息体总长度时,确定该报文为报文流中消息的首包;在该第三消息体总长 度与该第一消息体长度之和小于或等于该第二消息体总长度时,确定该报文不是报文流中 消息的首包。
[0076]获取该报文承载的第一消息体长度。其中,要获取网络层发送的该报文的总长度 和该报文的网络层头长度;要获取该报文的传输层头长度;用该报文的总长度减去该报文 的网络层头长度,再减去该报文的传输层头长度得到该报文承载的第一消息体长度。
[0077]获取该报文承载的第一消息体长度。其中,获取该报文在传输层的总长度以及该 报文传输层头长度,用该报文的总长度减去该报文的传输层头长度得到该报文承载的第一 消息体长度。
[0078]由于一条消息至少由一条报文承载,而且报文流中的消息是连续的,那么一条报 文中可能包含一条消息的内容,可能包含两个消息的内容。
[0079]获取存储的该消息的第二消息体总长度,该消息为已传输部分内容至应用层的消 息。其中,第二消息体总长度是指该报文所属消息的总长度,如果该消息由多条报文承载,那么多条报文承载的消息长度之和就是该消息的总长度。其中,如果该报文承载了两条消 息的内容,那么获取存储的该消息的第二消息体总长度中的该消息是指已有部分内容传输 至应用层,并且总长度已经被存储的消息。
[0080]获取存储的报文流已传输至应用层的该报文所属消息的第三消息体总长度。其 中,由于一条消息需要分成若干条报文进行传输,在该报文之前,属于该消息的其他报文已 经传输一部分消息内容至应用层,这部分消息内容的长度就是第三消息体总长度。
[0081]104、在该报文是报文流中消息的首包时,向应用层转发该报文。
[0082]在该报文是报文流中消息的首包时,由于首包中包含该报文所属消息的消息头, 需要向应用层转发该报文,由应用层对报文所属消息的消息头进行解析,以便获得所需要 的信息,常见的信息如用户分布情况、热点应用情况以及业务的使用情况等。
[0083]105、在该报文不是报文流中消息的首包时,向网络层转发该报文。
[0084]在该报文不是报文流中消息的首包时,该报文不包含该报文所属消息的消息头, 因此不需要对该报文进行解析,可以将该报文向网络层转发,从而提高转发效率,减少应用 层的解析负担。
[0085]从上可知,使用本发明实施例提供的报文转发的方法,可以判断报文流中每一个 报文是否为报文流中消息的首包,若是消息的首包,则提交应用层进行解析;若不是消息的 首包,则直接转发到网络中,由于首包较少,非首包的报文较多,将大量不需要解析的报文 直接转发到网络中不仅可以提高转发报文的效率,还能够减轻应用层解析报文的负担。
[0086]如图2描述本发明实施例的另一种报文转发的方法。
[0087]201、接收网络层发送的报文,判断该报文是否是报文流的首包。
[0088]接收网络层发送的报文,判断该报文的五元组是否已被存储,若该报文的五元组 没有被存储,则该报文为报文流的首包;若该报文的五元组已被存储,则该报文不是报文流 的首包。其中,报文的五元组包括源IP地址、源端口、目的IP地址、目的端口和传输层协议 号。
[0089]其中,一条报文流至少包括一条消息,一条消息可以由至少一个报文承载。报文流 的首包既是报文流的第一个报文,也是一条消息的第一条报文。
[0090]202、在该报文是报文流的首包时,向应用层转发该报文,并存储该报文的五元组。
[0091]在该报文为报文流的首包时,由于首包中包含该报文所属消息的消息头,需要向 应用层转发该报文,由应用层对报文所属消息的消息头进行解析,以便获得所需要的信息, 常见的信息如用户分布情况、热点应用情况以及业务的使用情况等。其中,消息的消息头可 以包括首行和头域,也可以包括首行,也可以包括头域。
[0092]在该报文为报文流的首包时,需要将该报文的五元组进行存储。在接收到报文流 的后续报文时,可以根据存储的该报文的五元组,判断后续报文不是报文流的首包。
[0093]203、在该报文不是报文流的首包时,判断该报文是否是报文流中消息的首包,若 该报文不是报文流中消息的首包,转向204,若该报文是报文流中消息的首包,转向205。
[0094]在该报文不是报文流的首包时,需要对该报文进行进一步判断,判断该报文是否 为报文流中消息的首包。对该报文进行进一步的判断,从而确定该报文是否为报文流中消 息的首包的具体方法为:获取该报文承载的第一消息体长度;获取存储的该消息的第二消 息体总长度;获取存储的该报文所属消息已传输部分的第三消息体总长度;在该第三消息体总长度与该第一消息体长度之和大于该第二消息体总长度时,该报文为报文流中消息的 首包;在该第三消息体总长度与该第一消息体长度之和小于或等于该第二消息体总长度 时,该报文不是报文流中消息的首包。
[0095]获取该报文承载的第一消息体长度。其中,要获取网络层发送的该报文的总长度 和该报文的网络层头长度;要获取该报文的传输层头长度;用该报文的总长度减去该报文 的网络层头长度再减去该报文的传输层头长度得到该报文承载的第一消息体长度。
[0096]获取该报文承载的第一消息体长度。其中,获取该报文在传输层的总长度以及该 报文传输层头长度,用该报文的总长度减去该报文的传输层头长度得到该报文承载的第一 消息体长度。
[0097]由于一条消息至少由一条报文承载,而且报文流中的消息是连续的,那么一条报 文中可能包含一条消息的内容,可能包含两个消息的内容。
[0098]获取存储的该消息的第二消息体总长度,该消息为已传输部分内容至应用层的消 息。其中,第二消息体总长度是指该报文所属消息的总长度,如果该消息由多条报文承载, 那么多条报文承载的消息长度之和就是该消息的总长度。其中,如果该报文承载了两条消 息的内容,那么获取存储的该消息的第二消息体总长度中的该消息是指已有部分内容传输 至应用层,并且总长度已经被存储的消息。
[0099]获取存储的报文流已传输至应用层的该报文所属消息的第三消息体总长度。其 中,由于一条消息需要分成若干条报文进行传输,在该报文之前,属于该消息的其他报文已 经传输一部分消息内容至应用层,这部分消息内容的长度就是第三消息体总长度。
[0100]204、在该报文不是报文流中消息的首包时,向网络层转发该报文。
[0101]在该报文不是报文流中消息的首包时,该报文中没有包含消息的首行和头域,因 此不需要解析,可以直接向网络层转发。
[0102]205、在该报文是报文流中消息的首包时,向应用层转发该报文,转入206。
[0103]在该报文是报文流中消息的首包时,由于首包中包含该报文所属消息的消息头, 需要向应用层转发该报文,由应用层对报文所属消息的消息头进行解析,以便获得所需要 的信息,常见的信息如用户分布情况、热点应用情况以及业务的使用情况等。
[0104]由于该报文为报文流的首包,需要将该报文的五元组进行存储,为判断后续报文 是否为报文流首包提供依据。
[0105]206、接收应用层发送的该报文中消息头的长度,用该第一消息体长度加上该第三 消息体总长度减去该第二消息体总长度,再减去该报文中消息头的长度得到第五消息体总 长度。
[0106]用该第一消息体长度加上该第三消息体总长度减去该第二消息体总长度得到的 是该报文承载的其他消息的消息长度,再该其他消息的消息头的长度,得到该报文承载的 第五消息体总长度。
[0107]207、将该第三消息体总长度更新为该第五消息体总长度。
[0108]由于该报文包含了其他消息的内容,表明一个消息结束,另一个消息开始。该报文 承载了两个消息的内容,因此,需要将已传输的消息体长度进行更新,用该报文承载第五消 息体总长度更新存储的已传输的第三消息体总长度,为该其他消息的后续报文的判断提供 依据。[0109]208、接收应用层发送的第六消息体总长度,并用该第六消息体总长度更新该第二 消息体总长度,该第六消息体总长度表示的是该报文所属消息的消息体总长度。
[0110]接收应用层发送的第六消息体总长度,用该第六消息体总长度更新该第二消息体 总长度。其中,该第六消息体总长度是由应用层通过解析该报文的消息内容长度字段获得, 该报文中包含两条消息的内容,通过解析该报中包含的消息内容长度字段,获得的是其中 一条消息的内容。其中,用该第六消息体总长度更新该第二消息体总长度包括用该第六消 息体总长度替换或者覆盖第二消息体总长度,使得下次获取第二消息体总长度时,获取的 是已经更新过的第二消息体总长度。
[0111]从上可知,使用本发明实施例提供的报文转发的方法,可以判断报文流中每一个 报文是否为报文流中消息的首包,若是消息的首包,则提交应用层进行解析;若不是消息的 首包,则直接转发到网络中,由于首包较少,非首包的报文较多,将大量不需要解析的报文 直接转发到网络中不仅可以提高转发报文的效率,还能够减轻应用层解析报文的负担。
[0112]如图3描述本发明实施例的另一种报文转发的方法。
[0113]301、接收网络层发送的报文,判断该报文是否是报文流的首包。
[0114]接收网络层发送的报文,判断该报文的五元组是否已被存储,若该报文的五元组 没有被存储,则该报文为报文流的首包;若该报文的五元组已被存储,则该报文不是报文流 的首包。其中,报文的五元组包括源IP地址、源端口、目的IP地址、目的端口和传输层协议 号。
[0115]其中,一条报文流至少包括一条消息,一条消息可以由至少一个报文承载。报文流 的首包既是报文流的第一个报文,也是一条消息的第一条报文。
[0116]302、在该报文是报文流的首包时,向应用层转发该报文,并存储该报文的五元组。
[0117]在该报文为报文流的首包时,由于首包中包含该报文所属消息的消息头,需要向 应用层转发该报文,由应用层对报文所属消息的消息头进行解析,以便获得所需要的信息, 常见的信息如用户分布情况、热点应用情况以及业务的使用情况等。其中,消息的消息头可 以包括首行和头域,也可以包括首行,也可以包括头域。
[0118]在该报文为报文流的首包时,需要将该报文的五元组进行存储。在接收到报文流 的后续报文时,可以根据存储的该报文的五元组,判断后续报文不是报文流的首包。
[0119]303、在该报文不是报文流的首包时,判断该报文是否是报文流中消息的首包,若 该报文不是报文流中消息的首包,转向304,若该报文是报文流中消息的首包,转向305。
[0120]在该报文不是报文流的首包时,需要对该报文进行进一步判断,判断该报文是否 为报文流中消息的首包。对该报文进行进一步的判断,从而确定该报文是否为报文流中消 息的首包的具体方法为:获取该报文承载的第一消息体长度;获取存储的该消息的第二消 息体总长度;获取存储的该报文所属消息已传输部分的第三消息体总长度;在该第三消息 体总长度与该第一消息体长度之和大于该第二消息体总长度时,该报文为报文流中消息的 首包;在该第三消息体总长度与该第一消息体长度之和小于或等于该第二消息体总长度 时,该报文不是报文流中消息的首包。
[0121]获取该报文承载的第一消息体长度。其中,要获取网络层发送的该报文的总长度 和该报文的网络层头长度;要获取该报文的传输层头长度;用该报文的总长度减去该报文 的网络层头长度再减去该报文的传输层头长度得到该报文承载的第一消息体长度。[0122]获取该报文承载的第一消息体长度。其中,获取该报文在传输层的总长度以及该 报文传输层头长度,用该报文的总长度减去该报文的传输层头长度得到该报文承载的第一 消息体长度。
[0123]由于一条消息至少由一条报文承载,而且报文流中的消息是连续的,那么一条报 文中可能包含一条消息的内容,可能包含两个消息的内容。
[0124]获取存储的该消息的第二消息体总长度,该消息为已传输部分内容至应用层的消 息。其中,第二消息体总长度是指该报文所属消息的总长度,如果该消息由多条报文承载, 那么多条报文承载的消息长度之和就是该消息的总长度。其中,如果该报文承载了两条消 息的内容,那么获取存储的该消息的第二消息体总长度中的该消息是指已有部分内容传输 至应用层,并且总长度已经被存储的消息。
[0125]获取存储的报文流已传输至应用层的该报文所属消息的第三消息体总长度。其 中,由于一条消息需要分成若干条报文进行传输,在该报文之前,属于该消息的其他报文已 经传输一部分消息内容至应用层,这部分消息内容的长度就是第三消息体总长度。
[0126]304、在该报文不是报文流中消息的首包时,向网络层转发该报文,转入309。
[0127]在该报文不是报文流中消息的首包时,该报文中没有包含消息的首行和头域,因 此不需要解析,可以直接向网络层转发。
[0128]305、在该报文是报文流中消息的首包时,向应用层转发该报文转入306。
[0129]在该报文是报文流中消息的首包时,由于首包中包含该报文所属消息的消息头, 需要向应用层转发该报文,由应用层对报文所属消息的消息头进行解析,以便获得所需要 的信息,常见的信息如用户分布情况、热点应用情况以及业务的使用情况等。
[0130]由于该报文为报文流的首包,需要将该报文的五元组进行存储,为判断后续报文 是否为报文流首包提供依据。
[0131]306、接收应用层发送的该报文中消息头的长度,用该第一消息体长度加上该第三 消息体总长度减去该第二消息体总长度,再减去该报文中消息头的长度得到第五消息体总 长度。
[0132]用该第一消息体长度加上该第三消息体总长度减去该第二消息体总长度得到的 是该报文承载的其他消息的消息长度,再该其他消息的消息头的长度,得到该报文承载的 第五消息体总长度。
[0133]307、将该第三消息体总长度更新为该第五消息体总长度。
[0134]由于该报文包含了其他消息的内容,表明一个消息结束,另一个消息开始。该报文 承载了两个消息的内容,因此,需要将已传输的消息体长度进行更新,用该报文承载第五消 息体总长度更新存储的已传输的第三消息体总长度,为该其他消息的后续报文的判断提供 依据。
[0135]308、接收应用层发送的第六消息体总长度,并用该第六消息体总长度更新该第二 消息体总长度,该第六消息体总长度表示的是该报文所属消息的消息体总长度。
[0136]接收应用层发送的第六消息体总长度,用该第六消息体总长度更新该第二消息体 总长度。其中,该第六消息体总长度是由应用层通过解析该报文的消息内容长度字段获得, 该报文中包含两条消息的内容,通过解析该报中包含的消息内容长度字段,获得的是其中 一条消息的内容。其中,用该第六消息体总长度更新该第二消息体总长度包括用该第六消息体总长度替换或者覆盖第二消息体总长度,使得下次获取第二消息体总长度时,获取的 是已经更新过的第二消息体总长度。
[0137]309、将该第三消息体总长度更新为该第三消息体总长度与该第一消息体长度之 和。
[0138]由于该报文承载的消息内容完全属于一条消息,并且该报文承载的内容属于已发 送的该报所属消息的内容,因此需要将存储的第三消息体总长度进行更新。将该报文承载 的消息体长度与存储的已传输的该报文所属消息的消息体总长度相加,并用该相加之和更 新存储的报文流已传输部分内容至应用层的该报文所属消息的消息体总长度,为该报文所 属消息的后续报文提供判断依据。
[0139]从上可知,使用本发明实施例提供的报文转发的方法及装置,可以判断报文流中 每一个报文是否为报文流中消息的首包,若是消息的首包,则提交应用层进行解析;若不是 消息的首包,则直接转发到网络中,由于首包较少,非首包的报文较多,将大量不需要解析 的报文直接转发到网络中不仅可以提高转发报文的效率,还能够减轻应用层解析报文的负 担。
[0140]下面根据图4描述本发明实施例的一种报文转发的装置40。如图4所示,装置40 包括:
[0141]接收单元401,判断单元402,转发单元403。
[0142]接收单元401,用于接收网络层发送的报文。
[0143]接收单元401用于接收网络层发送的报文。
[0144]其中,一条报文流至少包括一条消息,一条消息可以由至少一个报文承载。报文流 的首包既是报文流的第一个报文,也是一条消息的第一条报文。
[0145]判断单元402,用于判断该接收单元401接收到的报文是否为报文流的首包;在该 报文不是报文流的首包时,判断该报文是否为报文流中消息的首包。
[0146]判断单元402判断该报文的五元组是否已被存储,若该报文的五元组没有被存 储,则该报文为报文流的首包;若该报文的五元组已被存储,则该报文不是报文流的首包。 其中,报文的五元组包括源IP地址、源端口、目的IP地址、目的端口和传输层协议号。
[0147]在判断单元402判定该报文不是报文流的首包时,需要对该报文进行进一步判 断,判断该报文是否为报文流中消息的首包。
[0148]判断单元402对该报文进行进一步的判断,从而确定该报文是否为报文流中消息 的首包的具体方法为:获取该报文承载的第一消息体长度;获取存储的该消息的第二消息 体总长度;获取存储的该报文所属消息已传输部分的第三消息体总长度;在该第三消息体 总长度与该第一消息体长度之和大于该第二消息体总长度时,确定该报文为报文流中消息 的首包;在该第三消息体总长度与该第一消息体长度之和小于或等于该第二消息体总长度 时,确定该报文不是报文流中消息的首包。
[0149]转发单元403,在判断单元402判断该报文为报文流的首包时,向应用层转发该报 文;在判断单元402判断该报文为报文流中消息的首包时,向应用层转发该报文,在判断单 元402判断该报文不是报文流中消息的首包时,向网络中转发该报文。
[0150]在判断单元402判断该报文为报文流的首包或者报文流中消息的首包时,由于该 报文包含了该报文所属消息的消息头,需要应用层对该消息的消息头进行解析,因此转发单元403向应用层转发该报文。其中,消息的消息头可以包括首行和头域,也可以包括首 行,也可以包括头域。
[0151]在判断单元403判断该报文不是报文流中消息的首包时,该报文不包含该报文所 属消息的消息头,因此不需要对该报文进行解析,转发单元403将该报文向网络层转发,从 而提高转发效率,减少应用层的解析负担。
[0152]从上可知,使用本发明实施例提供的报文转发的装置,可以判断报文流中每一个 报文是否为报文流中消息的首包,若是消息的首包,则提交应用层进行解析;若不是消息的 首包,则直接转发到网络中,由于首包较少,非首包的报文较多,将大量不需要解析的报文 直接转发到网络中不仅可以提高转发报文的效率,还能够减轻应用层解析报文的负担。
[0153]下面根据图5描述本发明实施例的另一种报文转发的装置50。如图5所示,装置 50包括:
[0154]接收单元501,判断单元502,存储单元503,获取单元504,转发单元505,计算单元 506,第一更新单元507,第二更新单元508。
[0155]接收单元501,用于接收网络层发送的报文。
[0156]判断单元502,用于判断该接收单元501接收到的报文是否是为报文流的首包;在 该报文不是报文流的首包时,判断该报文是否为报文流中消息的首包。
[0157]判断单元502判断该报文的五元组是否已被存储,若该报文的五元组没有被存 储,则该报文为报文流的首包;若该报文的五元组已被存储,则该报文不是报文流的首包。 其中,报文的五元组包括源IP地址、源端口、目的IP地址、目的端口和传输层协议号。
[0158]其中,一条报文流至少包括一条消息,一条消息可以由至少一个报文承载。报文流 的首包既是报文流的第一个报文,也是一条消息的第一条报文。
[0159]在判断单元502判定该报文不是报文流的首包时,需要对该报文进行进一步判 断,判断该报文是否为报文流中消息的首包。
[0160]存储单元503,在判断单元502判断该报文是报文流的首包时,将该报文的五元组 进行存储。
[0161]获取单元504,在判断单元502判断该报文是否为报文流中消息的首包时,获取该 报文承载的第一消息体长度;获取存储的该消息的第二消息体总长度;获取存储的该报文 所属消息的已传输部分内容至应用层的第三消息体总长度。
[0162]获取单元504获取该报文承载的第一消息体长度。其中,接收单元501还用于接 收网络层发送的所述报文的总长度和所述报文的网络层头长度;获取单元504获取所述报 文的传输层头长度,并用接收单元501接收到的该报文的总长度减去该报文的网络层头长 度再减去该报文的传输层头长度得到该报文承载的第一消息体长度。
[0163]获取单元504获取该报文承载的第一消息体长度。其中,要获取已经发送到传输 层的该报文的总长度以及该报文传输层头长度,用该报文的总长度减去该报文的传输层头 长度得到该报文承载的第一消息体长度。
[0164]由于一条消息至少由一条报文承载,而且报文流中的消息是连续的,那么一条报 文中可能包含一条消息的内容,也可能包含两个消息的内容。
[0165]获取单元504获取存储的该消息的第二消息体总长度。其中,第二消息体总长度 是指该报文所属消息的总长度,如果该消息由多条报文承载,那么多条报文承载的消息长度之和就是该消息的总长度。其中,如果该报文承载了两条消息的内容,那么获取存储的该 消息的第二消息体总长度中的该消息是指已有部分内容传输至应用层,并且总长度已经被 存储的消息。
[0166]获取单元504获取存储的报文流已传输的该报文所属消息的第三消息体总长度。 其中,由于一条消息需要分成若干条报文进行传输,在该报文之前,属于该消息的其他报文 已经传输一部分消息内容至应用层,这部分消息内容的长度就是第三消息体总长度。
[0167]判断单元502判断该报文是否是报文流中消息的首包具体包括:判断单元502判 断获取单元504获取的第一消息体长度与获取单元504获取的第三消息体总长度之和是否 大于获取单元504获取的第二消息体总长度。
[0168]在判断单元502判断获取单元504获取的第一消息体长度与获取单元503获取的 第三消息体总长度之和大于获取单元504获取的第二消息体总长度时,确定该报文为报文 流中消息的首包。
[0169]转发单元505,在判断单元502判断该报文为报文流的首包时,向应用层转发该报 文;在判断单元502判断该报文为报文流中消息的首包时,向应用程转发该报文,在判断单 元502判断该报文不是报文流中消息的首包时,向网络中转发该报文。
[0170]在该判断单元502判断该报文为报文流的首包或者报文流中消息的首包时,由于 首包中包含该报文所属消息的消息头,转发单元505向应用层转发该报文,由应用层对该 报文所述消息的消息头进行解析,以便获得所需要的信息,常见的信息如户分布情况、热点 应用情况以及业务的使用情况等。其中,消息的消息头可以包括首行和头域,也可以包括首 行,也可以包括头域。
[0171]在判断单元502判断该报文不是报文流中消息的首包时,该报文不包含消息的消 息头,因此不需要对该报文进行解析,转发单元505将该报文向网络层转发,从而提高转发 效率,减少应用层的解析负担。
[0172]该接受单元501还用于接收应用层发送的该报文中消息头的长度。
[0173]计算单元506,用于用该获取单元504获取的第一消息体总长度加上该获取单元 获取的第三消息体长度,减去该获取单元获取的第二消息体总长度,在减去接收单元501 接收到的该报文中消息头的长度得到第五消息体总长度。
[0174]计算单元506用获取单元504第一消息体总长度加上该第三消息体长度减去该第 二消息体总长度获得的是该报文承载的其他消息的消息长度,再用该报文承载的其他消息 的消息长度减去该接收单元501接收到的该报文中消息头的长度得到第五消息体总长度。
[0175]第一更新单元507,将该第三消息体总长度更新为计算单元506计算得到第五消 息体长度。
[0176]由于该报文包含了其他消息的内容,表明一个消息结束,另一个消息开始。该报文 承载了两个消息的内容,因此,需要将已传输的消息体长度进行更新,用该报文承载第五消 息体总长度更新存储的已传输的第三消息体总长度,为该其他消息的后续报文的判断提供 依据。
[0177]接收单元501,还用于接收第六消息体长度,该第六消息体总长度表示的是该报文 所属消息的消息体总长度,该消息是指尚未全部传输至应用层的消息。
[0178]转发单元505向应用层转发该报文,应用层接收到该报文后,对该报文进行解析。由于该报文包含两条消息的内容,应用层对该报文承载的消息进行解析,获得第六消息体 总长度。
[0179]第二更新单元508,用接收单元501接收到的第六消息体总长度更新该第二消息 体总长度。
[0180]用该第六消息体总长度更新该第二消息体总长度包括用该第六消息体总长度替 换或者覆盖第二消息体总长度,使得下次获取第二消息体总长度时,获取的是已经更新过 的第二消息体总长度。其中,该第六消息体总长度是由应用层通过解析该报文的消息内容 长度字段获得,该第六消息体总长度表示的是该报文所属消息的消息体总长度,该消息是 指尚未全部传输至应用层的消息。由于该报文为其他消息的首包,该第六消息体总长度为 该其他消息的总长度。
[0181]从上可知,使用本发明实施例提供的报文转发的装置,可以判断报文流中每一个 报文是否为报文流中消息的首包,若是消息的首包,则提交应用层进行解析;若不是消息的 首包,则直接转发到网络中,由于首包较少,非首包的报文较多,将大量不需要解析的报文 直接转发到网络中不仅可以提高转发报文的效率,还能够减轻应用层解析报文的负担。
[0182]下面根据图6描述本发明实施例的一种报文转发的装置60。如图6所示,装置60 包括:
[0183]接收单元601,判断单元602,存储单元603,获取单元604,转发单元605,第三更新 单元606,计算单元607,第一更新单元608,第二更新单元609。
[0184]接收单元601,用于接收网络层发送的报文。
[0185]判断单元602,用于判断该接收单元601接收到的报文是否是为报文流的首包;在 该报文不是报文流的首包时,判断该报文是否为报文流中消息的首包。
[0186]判断单元602判断该报文的五元组是否已被存储,若该报文的五元组没有被存 储,则该报文为报文流的首包;若该报文的五元组已被存储,则该报文不是报文流的首包。 其中,报文的五元组包括源IP地址、源端口、目的IP地址、目的端口和传输层协议号。
[0187]其中,一条报文流至少包括一条消息,一条消息可以由至少一个报文承载。报文流 的首包既是报文流的第一个报文,也是一条消息的第一条报文。
[0188]在判断单元602判定该报文不是报文流的首包时,需要对该报文进行进一步判 断,判断该报文是否为报文流中消息的首包。
[0189]存储单元603,在判断单元602判断该报文是报文流的首包时,将该报文的五元组 进行存储。
[0190]获取单元604,在判断单元602判断该报文是否为报文流中消息的首包时,获取该 报文承载的第一消息体长度;获取存储的该消息的第二消息体总长度;获取存储的该报文 所属消息的已传输部分内容至应用层的第三消息体总长度。
[0191]获取单元604获取该报文承载的第一消息体长度。其中,接收单元601还用于接 收网络层发送的所述报文的总长度和所述报文的网络层头长度;获取单元604获取所述报 文的传输层头长度,并用接收单元601接收到的该报文的总长度减去该报文的网络层头长 度再减去该报文的传输层头长度得到该报文承载的第一消息体长度。
[0192]获取单元604获取该报文承载的第一消息体长度。其中,要获取已经发送到传输 层的该报文的总长度以及该报文传输层头长度,用该报文的总长度减去该报文的传输层头长度得到该报文承载的第一消息体长度。
[0193]由于一条消息至少由一条报文承载,而且报文流中的消息是连续的,那么一条报 文中可能包含一条消息的内容,也可能包含两个消息的内容。
[0194]获取单元604获取存储的该消息的第二消息体总长度。其中,第二消息体总长度 是指该报文所属消息的总长度,如果该消息由多条报文承载,那么多条报文承载的消息长 度之和就是该消息的总长度。其中,如果该报文承载了两条消息的内容,那么获取存储的该 消息的第二消息体总长度中的该消息是指已有部分内容传输至应用层,并且总长度已经被 存储的消息。
[0195]获取单元604获取存储的报文流已传输的该报文所属消息的第三消息体总长度。 其中,由于一条消息需要分成若干条报文进行传输,在该报文之前,属于该消息的其他报文 已经传输一部分消息内容至应用层,这部分消息内容的长度就是第三消息体总长度。
[0196]判断单元602判断该报文是否是报文流中消息的首包具体包括:判断单元602判 断获取单元604获取的第一消息体长度与获取单元504获取的第三消息体总长度之和是否 大于获取单元504获取的第二消息体总长度。
[0197]在判断单元602判断获取单元604获取的第一消息体长度与获取单元603获取的 第三消息体总长度之和大于获取单元604获取的第二消息体总长度时,确定该报文为报文 流中消息的首包。
[0198]转发单元605,在判断单元602判断该报文为报文流的首包时,向应用层转发该报 文;在判断单元602判断该报文为报文流中消息的首包时,向应用程转发该报文,在判断单 元602判断该报文不是报文流中消息的首包时,向网络中转发该报文。
[0199]在该判断单元602判断该报文为报文流的首包或者报文流中消息的首包时,由于 首包中包含该报文所属消息的消息头,转发单元605向应用层转发该报文,由应用层对该 报文所述消息的消息头进行解析,以便获得所需要的信息,常见的信息如户分布情况、热点 应用情况以及业务的使用情况等。其中,消息的消息头可以包括首行和头域,也可以包括首 行,也可以包括头域。
[0200]在判断单元602判断该报文不是报文流中消息的首包时,该报文不包含消息的消 息头,因此不需要对该报文进行解析,转发单元605将该报文向网络层转发,从而提高转发 效率,减少应用层的解析负担。
[0201]第三更新单元606,在判断单元602判断该报文不是报文流中消息的首包时,将该 第三消息体总长度更新为该第三消息体总长度与该第一消息体长度之和。
[0202]由于该报文承载的消息内容完全属于一条消息,因此该报文承载的内容属于已发 送的该报所属消息的内容,因此需要将存储的第三消息体总长度进行更新。第三更新单元 606将该报文承载的消息体长度与存储的已传输的该报文所属消息的消息体总长度相加, 并用该相加之和更新存储的报文流已传输的该报文所属消息的消息体总长度,为判断后续 报文是否为报文流首包或者报文流中消息的首包提供依据。
[0203]该接受单元601还用于接收应用层发送的该报文中消息头的长度。
[0204]计算单元607,用于用该获取单元604获取的第一消息体总长度加上该获取单元 获取的第三消息体长度,减去该获取单元获取的第二消息体总长度,在减去接收单元601 接收到的该报文中消息头的长度得到第五消息体总长度。[0205]计算单元607用获取单元604第一消息体总长度加上该第三消息体长度减去该第 二消息体总长度获得的是该报文承载的其他消息的消息长度,再用该报文承载的其他消息 的消息长度减去该接收单元601接收到的该报文中消息头的长度得到第五消息体总长度。
[0206]第一更新单元608,将该第三消息体总长度更新为计算单元607计算得到第五消 息体长度。
[0207]由于该报文包含了其他消息的内容,表明一个消息结束,另一个消息开始。该报文 承载了两个消息的内容,因此,需要将已传输的消息体长度进行更新,用该报文承载第五消 息体总长度更新存储的已传输的第三消息体总长度,为该其他消息的后续报文的判断提供 依据。
[0208]接收单元601,还用于接收第六消息体长度,该第六消息体总长度表示的是该报文 所属消息的消息体总长度,该消息是指尚未全部传输至应用层的消息。
[0209]转发单元605向应用层转发该报文,应用层接收到该报文后,对该报文进行解析。 由于该报文包含两条消息的内容,应用层对该报文承载的消息进行解析,获得第六消息体 总长度。
[0210]第二更新单元609,用接收单元601接收到的第六消息体总长度更新该第二消息 体总长度。
[0211]用该第六消息体总长度更新该第二消息体总长度包括用该第六消息体总长度替 换或者覆盖第二消息体总长度,使得下次获取第二消息体总长度时,获取的是已经更新过 的第二消息体总长度。其中,该第六消息体总长度是由应用层通过解析该报文的消息内容 长度字段获得,该第六消息体总长度表示的是该报文所属消息的消息体总长度,该消息是 指尚未全部传输至应用层的消息。由于该报文为其他消息的首包,该第六消息体总长度为 该其他消息的总长度。
[0212]从上可知,使用本发明实施例提供的报文转发的装置,可以判断报文流中每一个 报文是否为报文流中消息的首包,若是消息的首包,则提交应用层进行解析;若不是消息的 首包,则直接转发到网络中,由于首包较少,非首包的报文较多,将大量不需要解析的报文 直接转发到网络中不仅可以提高转发报文的效率,还能够减轻应用层解析报文的负担。
[0213]图7描述了本发明另一个实施例提供的报文转发设备的结构,包括至少一个处理 器701 (例如CPU),存储器702,至少一个网络接口 703,和至少一个通信总线704,用于实现 这些装置之间的连接通信。处理器701用于执行存储器702中存储的可执行模块,例如计 算机程序。存储器702可能包含高速随机存取存储器(RAM:Random Access Memory),也可 能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少 一个网络接口 703 (可以是有线或者无线)实现该网络设备与至少一个其他网元之间的通 信连接,可以使用互联网,广域网、本地网、城域网等。
[0214]在一些实施方式中,存储器702存储了程序7021,程序7021可以被处理器701执 行,这个程序包括:接收网络层发送的报文,判断该报文是否为报文流的首包;在该报文为 报文流的首包时,向应用层转发该报文;在该报文不是报文流的首包时,判断该报文是否为 报文流中消息的首包;在该报文是报文流中消息的首包时,向应用层转发该报文;在该报 文不是报文流中消息的首包时,向网络层转发该报文。具体的实施步骤与图1所示的实施 例相同,此处不再赘述。[0215]从上可知,使用本发明实施例提供的报文转发的装置,可以判断报文流中每一个 报文是否为报文流中消息的首包,若是消息的首包,则提交应用层进行解析;若不是消息的 首包,则直接转发到网络中,由于首包较少,非首包的报文较多,将大量不需要解析的报文 直接转发到网络中不仅可以提高转发报文的效率,还能够减轻应用层解析报文的负担。
[0216]图8描述了本发明另一个实施例提供的报文转发设备的结构,包括至少一个处理 器801 (例如CPU),存储器802,至少一个网络接口 803,和至少一个通信总线804,用于实现 这些装置之间的连接通信。处理器801用于执行存储器802中存储的可执行模块,例如计 算机程序。存储器802可能包含高速随机存取存储器(RAM:Random Access Memory),也可 能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少 一个网络接口 803 (可以是有线或者无线)实现该网络设备与至少一个其他网元之间的通 信连接,可以使用互联网,广域网、本地网、城域网等。
[0217]在一些实施方式中,存储器802存储了程序8021,程序8021可以被处理器801执 行,这个程序包括:接收网络层发送的报文,判断该报文是否为报文流的首包;在该报文为 报文流的首包时,向应用层转发该报文,并存储该报文的五元组;在该报文不是报文流的首 包时,判断该报文是否为报文流中消息的首包;在该报文是报文流中消息的首包时,向应用 层转发该报文;接收应用层发送的该报文中消息头的长度,用该第一消息体总长度加上该 第三消息体长度减去该第二消息体总长度,再减去该报文中的消息头的长度得到第五消息 体总长度;将该第三消息体总长度更新为第五消息体总长度;接收应用层发送的第六消息 体总长度,并用该第六消息体总长度更新该第二消息体总长度,该第六消息体总长度表示 的是该报文所属消息的消息体总长度。具体的实施步骤与图2所示的实施例相同,此处不 再赘述。
[0218]从上可知,使用本发明实施例提供的报文转发的装置,可以判断报文流中每一个 报文是否为报文流中消息的首包,若是消息的首包,则提交应用层进行解析;若不是消息的 首包,则直接转发到网络中,由于首包较少,非首包的报文较多,将大量不需要解析的报文 直接转发到网络中不仅可以提高转发报文的效率,还能够减轻应用层解析报文的负担。
[0219]图9描述了本发明另一个实施例提供的报文转发设备的结构,包括至少一个处理 器901 (例如CPU),存储器902,至少一个网络接口 903,和至少一个通信总线904,用于实现 这些装置之间的连接通信。处理器901用于执行存储器902中存储的可执行模块,例如计 算机程序。存储器902可能包含高速随机存取存储器(RAM:Random Access Memory),也可 能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少 一个网络接口 903 (可以是有线或者无线)实现该网络设备与至少一个其他网元之间的通 信连接,可以使用互联网,广域网、本地网、城域网等。
[0220]在一些实施方式中,存储器902存储了程序9021,程序9021可以被处理器901执 行,这个程序包括:接收网络层发送的报文,判断该报文是否为报文流的首包;在该报文为 报文流的首包时,向应用层转发该报文,并存储该报文的五元组;在该报文不是报文流的首 包时,判断该报文是否为报文流中消息的首包;在报文不是报文流中消息的首包时,向网络 层转发,并将该第三消息体总长度更新为该第三消息体总长度与该第一消息体长度之和; 在该报文是报文流中消息的首包时,向应用层转发该报文;接收应用层发送的该报文中消 息头的长度,用该第一消息体总长度加上该第三消息体长度减去该第二消息体总长度,再减去该报文中的消息头的长度得到第五消息体总长度;将该第三消息体总长度更新为第五 消息体总长度;接收应用层发送的第六消息体总长度,并用该第六消息体总长度更新该第 二消息体总长度,该第六消息体总长度表示的是该报文所属消息的消息体总长度。具体的 实施步骤与图3所示的实施例相同,此处不再赘述。
[0221]从上可知,使用本发明实施例提供的报文转发的装置,可以判断报文流中每一个 报文是否为报文流中消息的首包,若是消息的首包,则提交应用层进行解析;若不是消息的 首包,则直接转发到网络中,由于首包较少,非首包的报文较多,将大量不需要解析的报文 直接转发到网络中不仅可以提高转发报文的效率,还能够减轻应用层解析报文的负担。
[0222]需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列 的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为 依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知 悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明 所必须的。
[0223]上述装置和系统内的各模块之间的信息交互、执行过程等内容,由于与本发明方 法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
[0224]本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以 通过计算机程序来指令相关的硬件来完成,上述的程序可存储于一计算机可读取存储介 质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,上述的存储介质可 为磁碟、光盘、只读存储记忆体(ROM =Read-Only Memory)或随机存储记忆体(RAM =Random Access Memory)等。
[0225]本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说 明只是用于帮助理解本发明的方法及其思想;同时,对于本领域的一般技术人员,依据本发 明的思想,在【具体实施方式】及应用范围上均会有改变之处,综上所述,本说明书内容不应理 解为对本发明的限制。
【权利要求】
1.一种报文转发的方法,其特征在于,所述方法包括:接收网络层发送的报文,判断所述报文是否是报文流的首包;在所述报文是报文流的首包时,向应用层转发所述报文;在所述报文不是报文流的首包时,判断所述报文是否是报文流中消息的首包;在所述报文是报文流中消息的首包时,向应用层转发所述报文;在所述报文不是报文流中消息的首包时,向网络层转发所述报文。
2.如权利要求1所述的报文转发的方法,其特征在于,所述判断所述报文是否为报文流中消息的首包包括:获取所述报文承载的第一消息体长度;获取存储的所述报文所属消息的第二消息体总长度;获取存储的所述报文所属消息已传输部分的第三消息体总长度;在所述第三消息体总长度与所述第一消息体长度之和大于所述第二消息体总长度时, 确定所述报文为报文流中消息的首包;在所述第三消息体总长度与所述第一消息体长度之和小于或等于所述第二消息体总长度时,确定所述报文不是报文流中消息的首包。
3.如权利要求2所述的报文转发的方法,其特征在于,在所述报文是报文流中消息的首包时,在向应用层转发所述报文后,所述方法还包括:接收应用层发送的所述报文中的消息头的长度,用所述第一消息体长度加上所述第三消息体总长度,再减去所述第二消息体总长度,再减去所述报文中消息头的长度得到第五消息体总长度;将所述第三消息体总长度更新为所述第五消息体总长度。
4.如权利要求2或3所述的报文转发的方法,其特征在于,所述在向应用层转发所述报文后,还包括:接收应用层发送的第六消息体总长度,并用所述第六消息体总长度更新所述第二消息体总长度,所述第六消息体总长度表示的是所述报文所属消息的消息体总长度。
5.如权利要求2所述的报文转发的方法,其特征在于,在所述第三消息体总长度与所述第一消息体长度之和小于或等于所述第二消息体总长度时,所述方法还包括:将所述第三消息体总长度更新为所述第三消息体总长度与所述第一消息体长度之和。
6.如权利要求2至5任一所述的报文转发的方法,其特征在于,所述获取所述报文承载的第一消息体长度包括:接收网络层发送的所述报文的总长度和所述报文的网络层头长度;获取所述报文的 传输层头长度;用所述报文的总长度减去所述报文的网络层头长度,再减去所述报文的传输层头长度得到所述报文承载的第一消息体长度。
7.如权利要求2至5任一所述的报文转发的方法,其特征在于,所述获取所述报文承载的第一消息体长度包括:获取所述报文的总长度;获取所述报文的传输层头长度;用所述报文的总长度减去减去所述报文的传输层头长度得到所述报文承载的第一消息体长度。
8.如权利要求1至7任一所述的报文转发的方法,其特征在于,所述判断所述报文是否为报文流的首包包括:判断所述报文的五元组是否已被存储,若所述报文的五元组没有被存储,则所述报文为报文流的首包。
9.如权利要求8所述的报文转发的方法,其特征在于,在所述报文为报文流的首包时, 还包括:将所述报文的五元组进行存储。
10.一种报文转发的装置,其特征在于,所述装置包括:接收单元,用于接收网络层发送的报文;判断单元,用于判断所述接收单元接收到的报文是否为报文流的首包;在判断所述报文不是报文流的首包时,判断所述报文是否为报文流中消息的首包;转发单元,在所述判断单元判断所述报文为报文流首包时,向应用层转发所述报文;在所述判断单元判断所述报文为报文流中消息的首包时,向应用层转发所述报文;在所述判断单元判断所述报文不是报文流中消息的首包时,向网络层转发所述报文。
11.如权利要求10所述的报文转发的装置,其特征在于,还包括获取单元,所述获取单元用于获取所述报文承载的第一消息体长度;获取存储的所述报文所属消息的第二消息体总长度;获取存储的所述报文所属消息已传输部分的第三消息体总长度; 所述判断单元具体用于:在所述获取单元获取的第一消息体长度与所述获取单元获取的第三消息体总长度之和大于所述获取单元获取的第二消息体总长度时,确定所述报文为报文流中消息的首包; 在所述获取单元获取的第一消息体长度与获取单元获取的第三消息体总长度之和小于或等于获取单元获取的第二消息体总长度时,确定所述报文不是报文流中消息的首包。
12.如权利要求11所述的报文转发的装置,其特征在于,还包括计算单元和第一更新单元,在所述判断单元确定所述报文是报文流中消息的首包时,在所述转发单元向应用层转发所述报文后,所述接收单元还用于接收应用层发送的所述报文中的消息头的长度;所述计算单元用于用所述获取单元获取的第一消息体总长度加上所述获取单元获取的第三消息体长度,再减去所述获取单元获取的第二消息体总长度,再减去所述接收单元接收到的报文中消息头的长度得到第五消息体总长度;所述第一更新单元用于将所述第三消息体总长度更新为用所述计算单元计算得到的所述第五消息体总长度。
13.如权利要求11或12所述的报文转发的装置,其特征在于,还包括第二更新单元; 所述接收单元,还用于在所述转发单元向应用层转发所述报文后,接收应用层发送的第六消息体总长度,所述第六消息体总长度表示的是所述报文所属消息的消息体总长度; 所述第二更新单元用于将所述第二消息体总长度更新为所述接收单元接收到的第六消息体总长度。
14.如权利要求11至13任一所述的报文转发的装置,其特征在于,还包括第三更新单元,在所述判断单元判断获取单元获取的所述第一消息体长度与获取单元获取的所述的第三消息体总长度之和小于或等于获取单元获取的所述第二消息体总长度时,所述第三更新单元用于将所述第三消息体总长度更新为所述第三消息体总长度与所述第一消息体长度之和。
15.如权利要求11至14任一所述的报文转发的装置,其特征在于,所述接收单元还用于接收网络层发送的所述报文的总长度和所述报文的网络层头长度;所述获取单元还用于:获取所述报文的传输层头长度;用接收单元接收到的所述报文的总长度减去所述报文的网络层头长度再减去所述报文的传输层头长度得到所述报文承载的第一消息体长度。
16.如权利要求11至14任一所述的报文转发的装置,其特征在于,所述获取单元还用于:获取所述报文的总长度;获取所述报文的传输层头长度;用所述报文的总长度减去减去所述报文的传输层头长度得到所述报文承载的第一消息体长度。
17.如权利要求10至16任一所述的报文转发的装置,其特征在于,所述判断单元判断所述报文是否为报文流的首包包括:所述判断单元判断所述报文的五元组是否已被存储,若所述报文的五元组没有被存储,则所述报文为报文流的首包。
18.如权利要求17所述的报文转发的装置,其特征在于,还包括存储单元,在所述报文为报文流的首包时,所述存储单元将所述报文的五元组进行存储。
【文档编号】H04L29/06GK103561007SQ201310511205
【公开日】2014年2月5日 申请日期:2013年10月25日 优先权日:2013年10月25日
【发明者】姜恩龙, 吴建芳, 翟春莹 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1