一种报文转发方法及装置与流程

专利查询11月前  94



1.本发明涉及网络技术领域,特别是涉及一种报文转发方法及装置。


背景技术:

2.网络设备在接收到报文之后,网络设备内的交换芯片可以对所接收到的报文进行处理,例如,增加、删除、修改报文的报文头等,并且可以查找路由表中与报文的目的地址相匹配的路由表项,确定报文的下一跳地址,再按照所查找到的下一跳地址转发报文。
3.在对报文进行处理期间,交换芯片需要暂时将报文存储于缓冲区中。网络中传输的报文较多,网络设备往往需要同步对大量的报文进行处理,因此缓冲区中需要存储大量的报文,占用缓冲区中大量的存储空间。为此需要提供一种报文转发方法,在转发报文的过程中减少报文对缓冲区的占用。


技术实现要素:

4.本发明实施例的目的在于提供一种报文转发方法及装置,以在转发报文的过程中减少报文对缓冲区的占用。具体技术方案如下:
5.第一方面,本发明实施例提供了一种报文转发方法,所述方法包括:
6.接收第一报文;
7.根据所述第一报文的报文长度,选择用于存储所述第一报文的存储结构;
8.若所选择的存储结构为第一存储结构,则将所述第一报文存储于首缓冲区中用于存储报文数据的目标空间以及所述首缓冲区中预设bd指向的缓冲区中;
9.获取指向所述首缓冲区的首bd;
10.当对所述第一报文进行转发处理时,根据所述首bd,从所述首缓冲区中目标空间内获取第一部分报文数据,并从所述首缓冲区中预设bd指向的缓冲区内获取第二部分报文数据;
11.将所获取的第一部分报文数据以及第二部分报文数据拼接为第二报文,并转发所述第二报文。
12.本发明的一个实施例中,所述方法还包括:
13.若所选择的存储结构为第二存储结构,则将所述第一报文存储于首缓冲区预设bd指向的缓冲区中,其中,在所述第二存储结构中,所述首缓冲区中包含预设bd,不包含用于存储报文数据的空间;
14.当对所述第一报文进行转发处理时,根据所述首bd,从所述首缓冲区中获取预设bd指向的缓冲区内获取报文数据;
15.将所获取的报文数据拼接为第二报文,并转发所述第二报文。
16.本发明的一个实施例中,所述首缓冲区中存在预设联合缓冲区描述符lbd,每一预设lbd内包含预设bd,所述将所述第一报文存储于首缓冲区中用于存储报文数据的目标空间以及所述首缓冲区中预设bd指向的缓冲区中,包括:
17.将所述第一报文存储于首缓冲区中的目标空间以及预设lbd中预设bd指向的缓冲区中;
18.所述根据所述首bd,从所述首缓冲区中目标空间内获取第一部分报文数据,并从所述首缓冲区中预设bd指向的缓冲区内获取第二部分报文数据,包括:
19.根据所述首bd,从所述首缓冲区中目标空间内获取第一部分报文数据,并从所述首缓冲区中预设lbd内预设bd指向的缓冲区内获取第二部分报文数据。
20.本发明的一个实施例中,所述第一报文的数据按照从前到后的顺序依次存储于所述首缓冲区中的目标空间以及各个预设bd指向的缓冲区中,所述首缓冲区中还包含位于预设bd之前的空闲bd,所述空闲bd未指向缓冲区,在为所述第一报文新增报文头的情况下,所述方法还包括:
21.申请新的缓冲区;
22.将所述首缓冲区中目标空间内记录的第一部分报文数据迁移至所申请的缓冲区中,并将新增的报文头存储至所述目标空间中;
23.将所申请的缓冲区的地址写入空闲bd中,并记录bd偏移量与bd数量,其中,所述bd偏移量为:首个非空闲bd在首缓冲区中各个bd中的次序,所述bd数量为:所述首缓冲区中非空闲bd的数量;
24.所述根据所述首bd,从所述首缓冲区中目标空间内获取第一部分报文数据,并从所述首缓冲区中预设bd指向的缓冲区内获取第二部分报文数据,包括:
25.根据所述首bd、所述bd偏移量以及所述bd数量,从所述首缓冲区中目标空间内获取第一部分报文数据,并从所述首缓冲区中非空闲bd指向的缓冲区内获取第二部分报文数据。
26.本发明的一个实施例中,所述第一报文的数据按照从前到后的顺序依次存储于所述首缓冲区中的目标空间以及各个预设bd指向的缓冲区中,在删除所述第一报文的报文头的情况下,所述方法还包括:
27.删除所述目标空间以及目标缓冲区中存储的待删除报文头的数据,其中,所述目标缓冲区为:bd指向的缓冲区中存储有待删除报文头的数据的缓冲区;
28.若所述目标缓冲区中的所有数据均被删除,则删除指向所述目标缓冲区的bd,并更新所记录的bd偏移量与bd数量;
29.所述根据所述首bd,从所述首缓冲区中目标空间内获取第一部分报文数据,并从所述首缓冲区中预设bd指向的缓冲区内获取第二部分报文数据,包括:
30.根据所述首bd、所述bd偏移量以及所述bd数量,从所述首缓冲区中目标空间内获取第一部分报文数据,并从所述首缓冲区中非空闲bd指向的缓冲区内获取第二部分报文数据。
31.第二方面,本发明实施例提供了一种报文转发装置,所述装置包括:
32.报文接收模块,用于接收第一报文;
33.存储结构选择模块,用于根据所述第一报文的报文长度,选择用于存储所述第一报文的存储结构;
34.第一报文存储模块,用于若所选择的存储结构为第一存储结构,则将所述第一报文存储于首缓冲区中用于存储报文数据的目标空间以及所述首缓冲区中预设bd指向的缓
冲区中;
35.bd获取模块,用于获取指向所述首缓冲区的首bd;
36.第一数据获取模块,用于当对所述第一报文进行转发处理时,根据所述首bd,从所述首缓冲区中目标空间内获取第一部分报文数据,并从所述首缓冲区中预设bd指向的缓冲区内获取第二部分报文数据;
37.第一报文转发模块,用于将所获取的第一部分报文数据以及第二部分报文数据拼接为第二报文,并转发所述第二报文。
38.本发明的一个实施例中,所述装置还包括:
39.第二报文存储模块,用于若所选择的存储结构为第二存储结构,则将所述第一报文存储于首缓冲区预设bd指向的缓冲区中,其中,在所述第二存储结构中,所述首缓冲区中包含预设bd,不包含用于存储报文数据的空间;
40.第二数据获取模块,用于当对所述第一报文进行转发处理时,根据所述首bd,从所述首缓冲区中获取预设bd指向的缓冲区内获取报文数据;
41.第二报文转发模块,用于将所获取的报文数据拼接为第二报文,并转发所述第二报文。
42.本发明的一个实施例中,所述首缓冲区中存在预设联合缓冲区描述符lbd,每一预设lbd内包含预设bd,所述第一报文存储模块,具体用于:
43.若所选择的存储结构为第一存储结构,则将所述第一报文存储于首缓冲区中的目标空间以及预设lbd中预设bd指向的缓冲区中;
44.所述第一数据获取模块,具体用于:
45.当对所述第一报文进行转发处理时,根据所述首bd,从所述首缓冲区中目标空间内获取第一部分报文数据,并从所述首缓冲区中预设lbd内预设bd指向的缓冲区内获取第二部分报文数据。
46.本发明的一个实施例中,所述第一报文的数据按照从前到后的顺序依次存储于所述首缓冲区中的目标空间以及各个预设bd指向的缓冲区中,所述首缓冲区中还包含位于预设bd之前的空闲bd,所述空闲bd未指向缓冲区,在为所述第一报文新增报文头的情况下,所述装置还包括:
47.缓冲区申请模块,用于申请新的缓冲区;
48.报文头存储模块,用于将所述首缓冲区中目标空间内记录的第一部分报文数据迁移至所申请的缓冲区中,并将新增的报文头存储至所述目标空间中;
49.地址写入模块,用于将所申请的缓冲区的地址写入空闲bd中,并记录bd偏移量与bd数量,其中,所述bd偏移量为:首个非空闲bd在首缓冲区中各个bd中的次序,所述bd数量为:所述首缓冲区中非空闲bd的数量;
50.所述第一数据获取模块,具体用于:
51.当对所述第一报文进行转发处理时,根据所述首bd、所述bd偏移量以及所述bd数量,从所述首缓冲区中目标空间内获取第一部分报文数据,并从所述首缓冲区中非空闲bd指向的缓冲区内获取第二部分报文数据。
52.本发明的一个实施例中,所述第一报文的数据按照从前到后的顺序依次存储于所述首缓冲区中的目标空间以及各个预设bd指向的缓冲区中,在删除所述第一报文的报文头
的情况下,所述装置还包括:
53.报文头删除模块,用于删除所述目标空间以及目标缓冲区中存储的待删除报文头的数据,其中,所述目标缓冲区为:bd指向的缓冲区中存储有待删除报文头的数据的缓冲区;
54.bd删除模块,用于若所述目标缓冲区中的所有数据均被删除,则删除指向所述目标缓冲区的bd,并更新所记录的bd偏移量与bd数量;
55.所述第一数据获取模块,具体用于:
56.当对所述第一报文进行转发处理时,根据所述首bd、所述bd偏移量以及所述bd数量,从所述首缓冲区中目标空间内获取第一部分报文数据,并从所述首缓冲区中非空闲bd指向的缓冲区内获取第二部分报文数据。
57.本发明实施例有益效果:
58.本发明实施例提供了一种报文转发方法,在接收到第一报文之后,根据第一报文的报文长度,选择用于存储第一报文的存储结构,若所选择的存储结构为第一存储结构,则将第一报文存储于首缓冲区中用于存储报文数据的目标空间以及首缓冲区中预设bd指向的缓冲区中。获取指向首缓冲区的首bd,当对第一报文进行转发处理时,根据首bd,从首缓冲区中目标空间内获取第一部分报文数据,并从首缓冲区中预设bd指向的缓冲区内获取第二部分报文数据;将所获取的第一部分报文数据以及第二部分报文数据拼接为第二报文,并转发第二报文。
59.由以上可见,第一存储结构中首缓冲区内包含指向缓冲区的预设bd以及用于存储报文数据的目标空间,若基于报文长度确定基于第一存储结构存储第一报文,则将第一报文存储于目标空间以及预设bd指向的缓冲区中。因此本发明实施例可以根据第一报文的报文长度调整报文的存储结构,若选择第一存储结构,则首缓冲区中不仅记录有预设bd,第一报文的第一部分报文数据同样可以存储于首缓冲区内,首缓冲区的存储空间可以得到充分利用。与首缓冲区中不存储报文的数据相比,应用本发明实施例转发报文能够减少报文对缓冲区的占用。
附图说明
60.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
61.图1为本发明实施例提供的第一种报文转发方法的流程示意图;
62.图2为本发明实施例提供的第一种存储结构示意图;
63.图3a为本发明实施例提供的第二种报文转发方法的流程示意图;
64.图3b为本发明实施例提供的第二种存储结构示意图;
65.图4a为本发明实施例提供的第三种报文转发方法的流程示意图;
66.图4b为本发明实施例提供的第三种存储结构示意图;
67.图5为本发明实施例提供的第三种报文转发方法的流程示意图;
68.图6为本发明实施例提供的第四种报文转发方法的流程示意图;
69.图7为本发明实施例提供的一种报文转发装置的结构示意图。
具体实施方式
70.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员基于本技术所获得的所有其他实施例,都属于本发明保护的范围。
71.由于现有技术在转发报文的过程中会占用缓冲区中大量的存储空间,为此本发明实施例提供一种报文转发方法及装置,以在转发报文的过程中减少报文对缓冲区的占用。
72.本发明实施例提供了一种报文转发方法,上述方法包括:
73.接收第一报文;
74.根据上述第一报文的报文长度,选择用于存储上述第一报文的存储结构;
75.若所选择的存储结构为第一存储结构,则将上述第一报文存储于首缓冲区中用于存储报文数据的目标空间以及上述首缓冲区中预设bd指向的缓冲区中;
76.获取指向上述首缓冲区的首bd;
77.当对上述第一报文进行转发处理时,根据上述首bd,从上述首缓冲区中目标空间内获取第一部分报文数据,并从上述首缓冲区中预设bd指向的缓冲区内获取第二部分报文数据;
78.将所获取的第一部分报文数据以及第二部分报文数据拼接为第二报文,并转发上述第二报文。
79.由以上可见,第一存储结构中首缓冲区内包含指向缓冲区的预设bd以及用于存储报文数据的目标空间,若基于报文长度确定基于第一存储结构存储第一报文,则将第一报文存储于目标空间以及预设bd指向的缓冲区中。因此本发明实施例可以根据第一报文的报文长度调整报文的存储结构,若选择第一存储结构,则首缓冲区中不仅记录有预设bd,第一报文的第一部分报文数据同样可以存储于首缓冲区内,首缓冲区的存储空间可以得到充分利用。与首缓冲区中不存储报文的数据相比,应用本发明实施例转发报文能够减少报文对缓冲区的占用。
80.参见图1,为本发明实施例提供的第一种报文转发方法的流程示意图,上述方法包括以下步骤s101-s106。
81.具体的,本发明实施例的执行主体可以为网络设备中安装的网络芯片,上述网络芯片中设置有cpu,能够执行本方案实施例的处理过程,上述网络芯片中还设置有缓冲区,其中包含缓冲区,能够存储本实施例中的bd以及第一报文的数据。
82.s101:接收第一报文。
83.s102:根据上述第一报文的报文长度,选择用于存储上述第一报文的存储结构。
84.具体的,上述存储结构可以为第一存储结构,第一存储结构中首缓冲区中包含预设bd(buffer descriptor,缓冲区描述符),并且在存储预设bd的空间之外还存在剩余的目标空间,报文的数据能够存储于首缓冲区的目标空间以及预设bd指向的存储空间内。上述首缓冲区中可以预设有一个或多个bd,每一bd均占用首缓冲区的一部分存储空间。
85.其中,本实施例中将存储有bd的缓冲区称为首缓冲区,除了所存储的数据之外,首缓冲区与其他缓冲区并无区别。每一bd中记录有所指向的一个缓冲区的地址,另外,每一bd中还可以记录有所指向的缓冲区的编号等其他信息。各个bd指向的缓冲区在网络芯片的存
储空间中可以相邻也可以不相邻。
86.参见图2,为本发明实施例提供的第一种存储结构示意图。
87.由图可见,首缓冲区中包含bd0-bd5共6个预设bd,首缓冲区中除预设bd之外的部分为目标空间,每一预设bd指向一个缓冲区buffer,bd0-bd5分别指向buffer0-buffer5。
88.本发明的一个实施例中,可以基于每一预设bd的第一数据量以及预设bd的数量,计算预设bd合计占用首缓冲区的第二数据量,再计算缓冲区的存储空间的大小与第二数据量之间的差值,得到目标空间的大小。另外,由于每一预设bd指向一个缓冲区,因此可以基于预设bd的数量以及缓冲区的存储空间的大小,计算预设bd指向的各个缓冲区合计的存储空间大小,计算目标空间的大小以及各个预设指向的缓冲区合计的存储空间大小之和,作为计算结果,上述计算结果即为首缓冲区的目标空间与以及各个预设bd指向的缓冲区合计能够用于存储报文的存储空间的大小,也就是基于第一存储结构最多能够存储的报文的报文长度。若第一报文的报文长度小于等于上述计算结果,则表示基于上述首缓冲区的目标空间以及各预设bd指向的缓冲区能够完全存储上述第一报文,则可以选择第一存储结构进行报文存储,否则可以选择其他存储结构。
89.例如,若每一缓冲区的存储空间大小为256bytes,每一预设bd的第一数据量为4bytes,且首缓冲区中预设有6个bd,则预设bd合计占用首缓冲区的第二数据量为24bytes,目标空间的大小为232bytes,6个预设bd指向的缓冲区合计的存储空间大小为6
×
256=1536bytes,则目标空间的大小以及各个缓冲区合计的存储空间大小之和为1768bytes,若上述第一报文的报文长度小于等于1768bytes,则可以选择第一存储结构。
90.其中,每一缓冲区的存储空间大小、首缓冲区中预设bd的数量均是可设置的。
91.本发明的一个实施例中,可以基于应用场景设置预设bd的数量,具体的,可以统计网络芯片历史接收到的历史报文的报文长度,确定历史报文的报文长度的平均值、中位数值等,作为统计结果。也可以统计不同报文长度对应的历史报文的数量,并选择基准长度,若报文长度小于等于基准长度的历史报文占所有历史报文的比例达到预设比例,则将该基准长度作为统计结果。将统计结果除以每一缓冲区的存储空间大小,得到计算结果,将计算结果向上或向下取整,作为预设bd的数量。
92.例如,历史报文的数据量的中位数值为896bytes,每一缓冲区的存储空间的大小为256bytes,则计算结果为3.5,向上取整结果为4,则可以在首缓冲区中设置4个预设bd。另外,上述预设比例可以为80%,若数据量小于等于1152bytes的历史报文占所有历史报文的比例达到80%,则可以将1152bytes作为统计结果,若每一缓冲区的存储空间的大小为256bytes,则计算结果为4.5,向上取整结果为5,则可以在首缓冲区中设置5个预设bd。
93.具体的,若选择第一存储结构存储第一报文,则说明上述第一报文的报文长度较短,可以将上述第一报文称为普通报文,并继续执行步骤s103。
94.若基于第一存储结构难以存储上述报文,则说明上述第一报文的报文长度较长,可以将报文长度的报文称为超长报文,可以选择其他存储结构存储上述第一报文,具体的可以参见后续实施例,在此暂不详述。
95.s103:若所选择的存储结构为第一存储结构,则将上述第一报文存储于首缓冲区中用于存储报文数据的目标空间以及上述首缓冲区中预设bd指向的缓冲区中。
96.具体的,可以按照第一报文中数据由前到后的顺序,优先将位于第一报文前端的
数据存储于首缓冲区的目标空间中,对于存储于目标空间中的数据之外的其他数据,同样可以按照从前到后的顺序依次将其他数据存储于按顺序排列的各预设bd依次指向的各个缓冲区中,也就是第一报文的报文头的数据优先存储于首缓冲区的目标空间中。
97.其中,上述预设bd的排列顺序可以是预设bd在首缓冲区中从前到后的存储顺序,也可以是预先规定的其他顺序。
98.则以图2所示的存储结构为例,第一报文中的数据可以按照由前到后的顺序依次存储于目标空间、bd0指向的buffer0、bd1指向的buffer1、bd2指向的buffer2中,以此类推,直至第一报文存储完成。
99.s104:获取指向上述首缓冲区的首bd。
100.具体的,在完成报文存储之后,可以生成记录有首缓冲区的地址、指向首缓冲区的首bd,并将首缓冲区指向的首bd封装进fd(frame descriptor,报文描述符)中,发送给报文转发单元,以供后续转发第一报文时使用。其中,报文转发单元为网络芯片运行的软件单元。
101.s105:当对上述第一报文进行转发处理时,根据上述首bd,从上述首缓冲区中目标空间内获取第一部分报文数据,并从上述首缓冲区中预设bd指向的缓冲区内获取第二部分报文数据。
102.具体的,在对上述第一报文进行转发处理时,可以基于网络芯片中记录的路由表,通过第一报文的目的地址查找上述第一报文的下一跳地址,并基于下一跳地址转发第一报文,其中,可以通过现有技术的方式查找下一跳地址,本发明实施例对此不再赘述。
103.另外,可以根据fd中记录的首bd中记录的地址访问首缓冲区,从而从首缓冲区中获取预设bd以及目标空间中存储的第一报文的第一部分数据。每访问一次首缓冲区,可以从首缓冲区中获取一个预设bd。每获取一个预设bd便可以基于所获取的预设bd中记录的地址访问一个缓冲区,并从缓冲区中获取第一报文的第二部分报文数据。
104.本发明的一个实施例中,可以按照各个预设bd在首缓冲区中由前到后的顺序依次从首缓冲区中获取各个预设bd。
105.再者,在存储第一报文时,可以将第一报文中的数据按照从前到后的顺序依次存储于按顺序排列的各预设bd分别指向的各个缓冲区中,预设bd的排列顺序可以为在首缓冲区中从前到后的顺序。由于按照设备的数据读取规律,从首缓冲区中获取预设bd往往是遵循由前到后的顺序,所以存储顺序位于前端的预设bd会优先被获取,进而使得位于前端的预设bd指向的缓冲区中的数据也会被优先获取,也就使得在第一报文中位于前端的数据会被优先获取。从缓冲区中获取数据的顺序与数据在报文中实际的排列顺序相同。
106.s106:将所获取的第一部分报文数据以及第二部分报文数据拼接为第二报文,并转发上述第二报文。
107.具体的,若在转发第一报文的过程中,网络芯片未对第一报文进行任何处理,则上述第二报文与所接收到的第一报文相同,否则,第二报文是对第一报文进行处理后获得的另一个报文。
108.本发明的一个实施例中,可以按照数据在报文中的排列顺序将所获取的第一部分数据与第二部分数据组合得到第二报文。
109.由以上可见,第一存储结构中首缓冲区内包含指向缓冲区的预设bd以及用于存储
报文数据的目标空间,若基于报文长度确定基于第一存储结构存储第一报文,则将第一报文存储于目标空间以及预设bd指向的缓冲区中。因此本发明实施例可以根据第一报文的报文长度调整报文的存储结构,若选择第一存储结构,则首缓冲区中不仅记录有预设bd,第一报文的第一部分报文数据同样可以存储于首缓冲区内,首缓冲区的存储空间可以得到充分利用。与首缓冲区中不存储报文的数据相比,应用本发明实施例转发报文能够减少报文对缓冲区的占用。
110.例如,上述缓冲区的存储空间大小为256bytes,预设bd的数量为6个,每一bd的第一数据量为4bytes,则首缓冲区中目标空间的大小为232bytes。若第一报文的报文长度为400bytes,则基于第一存储结构,通过首缓冲区中的目标空间以及一个预设bd指向的缓冲区便能够存储上述第一报文,存储第一报文共需要两个缓冲区。若采用现有技术中的方案,首缓冲区中不存储报文的数据,则现有技术中除首缓冲之外,需要2个bd指向的缓冲区才能够存储上述第一报文,共需要三个缓冲区才能够存储上述第一报文。由此可见通过本发明实施例提供的方案可以减少报文对缓冲区的占用。
111.参见图3a,为本发明实施例提供的第二种报文转发方法的流程示意图,与前述图1所示的实施例相比,上述方法还包括以下步骤s107-s109。若通过步骤s102未选择第一存储结构存储第一报文,则可以选择第二存储结构,执行以下步骤s107。
112.s107:若所选择的存储结构为第二存储结构,则将上述第一报文存储于首缓冲区预设bd指向的缓冲区中。
113.其中,在上述第二存储结构中,上述首缓冲区中包含预设bd,不包含用于存储报文数据的空间。
114.具体的,与第一存储结构相比,第二存储结构中首缓冲区内仅包含预设bd,不包含用于存储报文数据的空间,因此与第一存储结构相比,第二存储结构中首缓冲区内能够包含较多的预设bd,每一预设bd指向一个缓冲区,使得第二存储空间中能够存储报文的缓冲区较多。因此若第一报文的长度较长为超长报文,则可以使用上述第二存储结构存储第一报文。
115.参见图3b,为本发明实施例提供的第二种存储结构示意图。
116.由图可见,首缓冲区中包含bd0-bd44共45个预设bd,不存在其他空间,每一预设bd指向一个缓冲区,bd0-bd44分别指向buffer0-buffer44。
117.具体的,可以按照第一报文中数据由前到后的顺序,将数据存储于按顺序排列的各预设bd依次指向的各个缓冲区中,也就是第一报文的报文头的数据优先在排列顺序位于前端的预设bd指向的缓冲区中。
118.其中,上述预设bd的排列顺序可以是预设bd在首缓冲区中从前到后的存储顺序,也可以是预先规定的其他顺序。
119.则以图3a所示的存储结构为例,第一报文中的数据可以按照由前到后的顺序依次存储于bd0指向的buffer0、bd1指向的buffer1、bd2指向的buffer2中,以此类推,直至第一报文存储完成。
120.在执行步骤s107之后可以继续执行步骤s104。若以第二存储结构存储报文,则需要对第一报文进行转发处理时,在步骤s104之后,可以继续执行步骤s108-s109。
121.s108:当对上述第一报文进行转发处理时,根据上述首bd,从上述首缓冲区中获取
预设bd指向的缓冲区内获取报文数据。
122.具体的,可以根据fd中记录的首bd中记录的地址访问首缓冲区,从而从首缓冲区中获取预设bd。每访问一次首缓冲区,可以从首缓冲区中获取一个预设bd。每获取一个预设bd便可以基于所获取的预设bd中记录的地址访问一个缓冲区,并从缓冲区中获取第一报文的报文数据。
123.本发明的一个实施例中,可以按照各个预设bd在首缓冲区中由前到后的顺序依次从首缓冲区中获取各个预设bd。
124.s109:将所获取的报文数据拼接为第二报文,并转发上述第二报文。
125.具体的,将报文数据拼接为第二报文以及转发第二报文的方式可以参见前文步骤s106,在此不再赘述。
126.由以上可见,若第一报文的报文长度较长,则基于选择第一存储结构难以存储报文,因此可以选择第二存储结构存储第一报文。第二存储结构中首缓冲区完全用于存储预设bd,预设bd的数量较多,也就是预设bd指向的缓冲区较多,能够存储报文长度较长的第一报文。并且现有技术中需要基于第一报文的报文长度计算存储上述第一报文所需的缓冲区的数量,再在首缓冲区中添加分别指向各个所需的缓冲区的bd。第二存储结构中首缓冲区中包含有预设bd,可以直接将第一报文的报文数据存储于预设bd指向的缓冲区中,简化了在首缓冲区中申请并添加bd的过程,提高了存储报文的效率。
127.参见图4a,为本发明实施例提供的第三种报文转发方法的流程示意图,与前述图1所示的实施例相比,上述首缓冲区中存在预设lbd(linked buffer descriptor,联合缓冲区描述符),每一预设lbd内包含预设bd。
128.具体的,每一预设lbd占用首缓冲区中的一部分存储空间,除所包含的预设bd之外,还记录有自身包含的bd的数量、每一bd的数据量等信息,因此预设lbd的第三数据量大于所包含的预设bd的第一数据量之和。
129.参见图4b,为本发明实施例提供的第三种存储结构示意图。
130.由图可见,首缓冲区中包含lbd0-lbd1共2个预设lbd,每一预设lbd中包含3个预设bd,lbd0中包含bd0-bd2,lbd1中包含bd3-bd5,首缓冲区中除lbd之外的部分为目标空间,每一预设bd指向一个buffer,bd0-bd5分别指向buffer0-buffer5。
131.具体的,图4a所示的存储结构为预设bd包含于预设lbd的情况下,基于第一存储结构存储报文时缓冲区内数据的存储情况。
132.另外,本发明的一个实施例中,若预设bd包含于预设lbd中,则可以基于每一预设lbd的第三数据量以及预设lbd的数量,计算预设lbd合计占用首缓冲区的第四数据量,再基于缓冲区的存储空间的大小,计算目标空间的大小。另外,基于预设lbd的数量以及每一预设lbd中包含的预设bd的数量可以计算预设bd的总数量,每一预设bd指向一个缓冲区,因此可以基于预设bd的总数量以及缓冲区的存储空间的大小,计算预设bd指向的各个缓冲区合计的存储空间大小,计算目标空间的大小以及各个缓冲区合计的存储空间大小之和,作为计算结果,上述计算结果即为首缓冲区与以及各个预设lbd中包含的预设bd指向的缓冲区合计能够用于存储报文的存储空间的大小。若第一报文的报文长度小于等于上述计算结果,则表示基于上述首缓冲区以及预设lbd中包含的各预设bd指向的缓冲区能够完全存储上述第一报文,可以采用第一存储结构存储第一报文。
133.例如,若每一缓冲区的存储空间大小为256bytes,每一预设lbd的第三数据量为16bytes,预设lbd的数量为2,则预设lbd合计占用首缓冲区的第四数据量为32bytes,目标空间的大小为224bytes。若每一预设lbd中包含3个预设bd,则首缓冲区中包含6个预设bd,6个预设bd指向的缓冲区合计的存储空间大小为6
×
256=1536bytes,则目标空间的大小以及各个缓冲区合计的存储空间大小之和为1760bytes,若上述第一报文的报文小于等于1760bytes,则基于上述首缓冲区中的目标空间以及预设lbd中包含的各预设bd指向的缓冲区能够完全存储上述第一报文,可以选择第一存储结构存储第一报文,否则可以选择第二存储结构存储报文。
134.若基于第二存储结构存储数据,则首缓冲区中的预设bd同样可以包含于预设lbd中,首缓冲区中可以全部存储预设lbd,第一存储结构相比,预设lbd的数量较多,首缓冲区中不存在上述目标空间。同样可以将第一报文的数据存储于预设bd指向的存储空间中,与前述步骤s107相似,在此不再赘述。
135.另外,与前述图1所示的实施例相比,步骤s103可以通过以下步骤s103a实现。
136.s103a:若所选择的存储结构为第一存储结构,则将上述第一报文存储于首缓冲区中的目标空间以及预设lbd中预设bd指向的缓冲区中。
137.具体的,步骤s103a与前述步骤s103相似,区别仅为步骤s103a中预设bd包含于预设lbd中,在此暂不详述。
138.另外,与前述图1所示的实施例相比,上述步骤s105可以通过以下步骤s105a实现。
139.s105a:当对上述第一报文进行转发处理时,根据上述首bd,从上述首缓冲区中目标空间内获取第一部分报文数据,并从上述首缓冲区中预设lbd内预设bd指向的缓冲区内获取第二部分报文数据。
140.具体的,基于首bd访问首缓冲区,并从首缓冲区中获取预设lbd以及目标空间中的第一部分报文数据,每访问一次首缓冲区可以获取一个预设lbd,并从所获取的预设lbd中获取预设bd,每一预设lbd中可以包含多个预设bd,则每访问一次首缓冲区可以获取多个预设bd。每获取到预设bd,便可以访问预设bd指向的缓冲区,并从缓冲区中获取第二部分报文数据。
141.本发明的一个实施例中,可以按照各个预设lbd在首缓冲区中由前到后的顺序依次获取各个预设lbd,并按照各个预设bd在预设lbd中由前到后的顺序依次获取各个预设bd,每获取一个预设bd便可以从所获取的预设bd指向的缓冲区中获取报文的第二部分报文数据。
142.由以上可见,本发明实施例将预设bd包含于预设lbd内存储于首缓冲区中,因此在需要基于预设bd中记录的地址从缓冲区内获取报文的第二部分报文数据时,可以先从首缓冲区中依次提取各个预设lbd,再从预设lbd中提取预设bd。每访问一次首缓冲区可以提取一个预设lbd,每一预设lbd中可以包含多个预设bd,因此每访问一次首缓冲区可以获得多个预设bd。与直接将预设bd存储于首缓冲区中相比,采用本发明实施例提供的方案可以减少获取预设bd时访问首缓冲区的次数,从而可以提高转发报文的效率。
143.本发明的另一个实施例中,若采用第二存储结构存储第一报文,并且预设bd包含于预设lbd中,则可以基于首bd访问首缓冲区获取各个预设lbd,再从预设lbd中获取预设bd,再访问预设bd指向的缓冲区获取报文数据。
144.参见图5,为本发明实施例提供的第三种报文转发方法的流程示意图,上述第一报文的数据按照从前到后的顺序依次存储于上述首缓冲区中的目标空间以及各个预设bd指向的缓冲区中,所述首缓冲区中还包含位于预设bd之前的空闲bd,上述空闲bd未指向缓冲区,也就是空闲bd未记录有任何信息。与前述图1所示的实施例相比,在为上述报文新增的报文头的情况下,上述方法还包括以下步骤s110-s112。
145.s110:申请新的缓冲区。
146.具体的,由于需要在报文中新增报文头,新增报文头之后第一报文的报文长度变大,可以申请新的缓冲区存储报文长度增长之后的报文的数据。
147.本发明的一个实施例中,可以计算新增报文头的长度与每一缓冲区的存储空间的大小之间的比值,向上取整,作为需要申请的缓冲区的数量。
148.在大多数情况下新增报文头的数据量较小,因此在大多数情况下仅需要申请一个新的缓冲区。
149.s111:将上述首缓冲区中目标空间内记录的第一部分报文数据迁移至所申请的缓冲区中,并将新增的报文头存储至上述目标空间中。
150.具体的,基于第一存储结构存储第一报文时,目标空间中存储有第一报文的第一部分报文数据,则第一报文中的数据按照从前到后的顺序依次存储于目标空间以及各预设bd指向的缓冲区中,因此按照顺序位于第一报文首部的第一报文新增的报文头应该存储于目标空间中,因此需要将原本存储于目标空间中的数据迁移至所申请的缓冲区中,并将新增的报文头存储在上述目标空间内。
151.其中,由于目标空间为首缓冲区中的一部分存储空间,目标空间中存储的数据的数据量小于缓冲区的存储空间的大小,因此新申请的缓冲区能够存储由目标空间迁移的数据。
152.s112:将所申请的缓冲区的地址写入空闲bd中,记录bd偏移量与bd数量。
153.其中,上述bd偏移量为:首个非空闲bd在首缓冲区中各个bd中的次序,上述bd数量为:上述首缓冲区中非空闲bd的数量。
154.具体的,若存在多个空闲bd,则可以将所申请的缓冲区的地址写入与非空闲bd相邻的空闲bd中,写入地址后的空闲bd变为非空闲bd。
155.另外,与前述图1所示的实施例相比,上述步骤s105可以通过以下步骤s105b实现。
156.s105b:当对上述第一报文进行转发处理时,根据上述首bd、上述bd偏移量以及上述bd数量,从上述首缓冲区中目标空间内获取第一部分报文数据,并从上述首缓冲区中非空闲bd指向的缓冲区内获取第二部分报文数据。
157.具体的,基于bd偏移量可以确定首个非空闲bd在首缓冲区中的次序,根据bd数量以及bd偏移量可以确定最后一个非空闲bd在首缓冲区中的次序,因此基于bd偏移量与bd数量便可以确定非空闲bd在首缓冲区中的位置,从而可以基于首bd以及所确定的非空闲bd在首缓冲区中的位置,访问首缓冲区获取首缓冲区中的非空闲bd。
158.由以上可见,本实施例中首缓冲区内在预设bd前存在空闲bd,因此在新增报文头时所申请的缓冲区的地址可以直接写入空闲bd中,写入地址的空闲bd指向新的缓冲区。因此不需要再生成新的指向所申请的缓冲区的bd并在首缓冲区中插入到预设bd之前,也就不需要移动首缓冲区中原本包含的预设bd的存储位置,从而可以节省频繁在首缓冲区中读取
与写入数据所需要的计算资源,提高为第一报文插入报文头的效率。
159.此外,若各个预设bd包含于预设lbd中,则上述空闲bd同样可以包含于lbd中,上述首缓冲区中可以包含一个或多个所包含的全部或部分bd是空闲bd的lbd,若存在多个包含空闲bd的lbd,则上述lbd位于首缓冲区中各个lbd的首位,且彼此相邻。若lbd中存在部分空闲bd,则空闲bd在自身所在的lbd中位于首位,且彼此相邻。
160.再者,若基于第二存储结构存储报文,首缓冲区的预设bd前同样可以存在空闲bd,则上述首缓冲区中未存储有第一报文的数据,本发明实施例可以直接申请新的缓冲区,将新增报文头的数据写入新的缓冲区中,再将新的缓冲区的地址存储于空闲bd内,完成为第一报文新增报文头的过程。
161.参见图6,为本发明实施例提供的第四种报文转发方法的流程示意图,上述第一报文的数据按照从前到后的顺序依次存储于上述首缓冲区中的目标空间以及各个预设bd指向的缓冲区中,在删除上述第一报文的报文头的情况下,上述方法还包括以下步骤s113-s114。
162.s113:删除上述目标空间以及目标缓冲区中存储的待删除报文头的数据。
163.其中,上述目标缓冲区为:bd指向的缓冲区中存储有待删除报文头的数据的缓冲区。
164.具体的,由于第一报文的数据按照从前到后的顺序依次存储于上述目标空间以及各个bd指向的缓冲区中,因此第一报文的待删除报文头优先存储于目标空间中,待删除报文头的长度可能小于等于目标空间的大小,则待删除报文头的所有数据均存储于目标空间内,也就不存在目标缓冲区。若待删除报文头的数据量大于目标空间的大小,则待删除报文头的部分数据存储于目标空间内,待删除报文头的另一部分数据存储于目标缓冲区内。
165.本发明的一个实施例中,可以先基于首bd从首缓冲区中的目标空间内查找待删除报文头的数据,若目标空间中存储有待删除报文头的全部数据,则不需要继续从目标缓存区中查找数据,可以直接删除待删除报文头的数据。若目标空间中未存储有待删除报文头的全部数据,则继续从目标缓存区中查找数据,并删除目标空间和目标缓存区中存储的待删除报文头的数据。
166.s114:若上述目标缓冲区中的所有数据均被删除,则删除指向上述目标缓冲区的bd,并更新所记录的bd偏移量与bd数量。
167.具体的,若上述目标缓冲区中所有数据均被删除,则不需要再记录目标缓冲区的地址,因此可以删除目标缓冲区对应的bd。
168.再者,与前述图1所示的实施例相比,上述步骤s105可以通过以下步骤s105c实现。
169.s105c:当对上述第一报文进行转发处理时,根据上述首bd、上述bd偏移量以及上述bd数量,从上述首缓冲区中目标空间内获取第一部分报文数据,并从上述首缓冲区中非空闲bd指向的缓冲区内获取第二部分报文数据。
170.具体的,上述步骤s105c与前述步骤s105b相似,在此不再赘述。
171.由以上可见,在需要删除第一报文的报文头的情况下,由于待删除报文头优先存储于目标空间中,因此在待删除报文头的长度较短的情况下,通过访问首缓冲区的目标空间便可以完成报文头的删除。并且,若待删除报文头的长度较长,除了目标空间之外,目标缓冲区中也存储有待删除报文头的数据,若删除报文头的数据之后目标缓冲区中不再包含
数据,则可以删除指向目标缓冲区的bd中记录的地址,上述bd变为空闲bd。变为空闲bd之后,本实施例中剩余的非空闲bd并不需要从首缓冲区的首部开始存储,也就不需要移动剩余的非空闲bd在首缓冲区的位置。仅需要记录bd偏移量与bd数量便可以确定剩余的非空闲bd在首缓冲区中的位置,从而可以减少移动剩余的非空闲bd而频繁访问首缓冲区,可以提高删除第一报文的报文头的效率。
172.此外,若基于第二存储结构存储报文,则上述首缓冲区中并未存储有报文的数据,本发明实施例可以直接从目标缓冲区中删除待删除报文头,若目标缓冲区中不再包含数据,则可以删除指向目标缓冲区的bd中记录的地址,完成为第一报文删除报文头的过程。
173.与前述报文转发方法相对应,本发明实施例还提供了一种报文转发装置。
174.参见图7,为本发明实施例提供的一种报文转发装置的结构示意图,所述装置包括:
175.报文接收模块701,用于接收第一报文;
176.存储结构选择模块702,用于根据所述第一报文的报文长度,选择用于存储所述第一报文的存储结构;
177.第一报文存储模块703,用于若所选择的存储结构为第一存储结构,则将所述第一报文存储于首缓冲区中用于存储报文数据的目标空间以及所述首缓冲区中预设bd指向的缓冲区中;
178.bd获取模块704,用于获取指向所述首缓冲区的首bd;
179.第一数据获取模块705,用于当对所述第一报文进行转发处理时,根据所述首bd,从所述首缓冲区中目标空间内获取第一部分报文数据,并从所述首缓冲区中预设bd指向的缓冲区内获取第二部分报文数据;
180.第一报文转发模块706,用于将所获取的第一部分报文数据以及第二部分报文数据拼接为第二报文,并转发所述第二报文。
181.由以上可见,第一存储结构中首缓冲区内包含指向缓冲区的预设bd以及用于存储报文数据的目标空间,若基于报文长度确定基于第一存储结构存储第一报文,则将第一报文存储于目标空间以及预设bd指向的缓冲区中。因此本发明实施例可以根据第一报文的报文长度调整报文的存储结构,若选择第一存储结构,则首缓冲区中不仅记录有预设bd,第一报文的第一部分报文数据同样可以存储于首缓冲区内,首缓冲区的存储空间可以得到充分利用。与首缓冲区中不存储报文的数据相比,应用本发明实施例转发报文能够减少报文对缓冲区的占用。
182.本发明的一个实施例中,所述装置还包括:
183.第二报文存储模块,用于若所选择的存储结构为第二存储结构,则将所述第一报文存储于首缓冲区预设bd指向的缓冲区中,其中,在所述第二存储结构中,所述首缓冲区中包含预设bd,不包含用于存储报文数据的空间;
184.第二数据获取模块,用于当对所述第一报文进行转发处理时,根据所述首bd,从所述首缓冲区中获取预设bd指向的缓冲区内获取报文数据;
185.第二报文转发模块,用于将所获取的报文数据拼接为第二报文,并转发所述第二报文。
186.由以上可见,若第一报文的报文长度较长,则基于选择第一存储结构难以存储报
文,因此可以选择第二存储结构存储第一报文。第二存储结构中首缓冲区完全用于存储预设bd,预设bd的数量较多,也就是预设bd指向的缓冲区较多,能够存储报文长度较长的第一报文。并且现有技术中需要基于第一报文的报文长度计算存储上述第一报文所需的缓冲区的数量,再在首缓冲区中添加分别指向各个所需的缓冲区的bd。第二存储结构中首缓冲区中包含有预设bd,可以直接将第一报文的报文数据存储于预设bd指向的缓冲区中,简化了在首缓冲区中申请并添加bd的过程,提高了存储报文的效率。
187.本发明的一个实施例中,所述首缓冲区中存在预设联合缓冲区描述符lbd,每一预设lbd内包含预设bd,所述第一报文存储模块703,具体用于:
188.若所选择的存储结构为第一存储结构,则将所述第一报文存储于首缓冲区中的目标空间以及预设lbd中预设bd指向的缓冲区中;
189.所述第一数据获取模块705,具体用于:
190.当对所述第一报文进行转发处理时,根据所述首bd,从所述首缓冲区中目标空间内获取第一部分报文数据,并从所述首缓冲区中预设lbd内预设bd指向的缓冲区内获取第二部分报文数据。
191.由以上可见,本发明实施例将预设bd包含于预设lbd内存储于首缓冲区中,因此在需要基于预设bd中记录的地址从缓冲区内获取报文的第二部分报文数据时,可以先从首缓冲区中依次提取各个预设lbd,再从预设lbd中提取预设bd。每访问一次首缓冲区可以提取一个预设lbd,每一预设lbd中可以包含多个预设bd,因此每访问一次首缓冲区可以获得多个预设bd。与直接将预设bd存储于首缓冲区中相比,采用本发明实施例提供的方案可以减少获取预设bd时访问首缓冲区的次数,从而可以提高转发报文的效率。
192.本发明的一个实施例中,所述第一报文的数据按照从前到后的顺序依次存储于所述首缓冲区中的目标空间以及各个预设bd指向的缓冲区中,所述首缓冲区中还包含位于预设bd之前的空闲bd,所述空闲bd未指向缓冲区,在为所述第一报文新增报文头的情况下,所述装置还包括:
193.缓冲区申请模块,用于申请新的缓冲区;
194.报文头存储模块,用于将所述首缓冲区中目标空间内记录的第一部分报文数据迁移至所申请的缓冲区中,并将新增的报文头存储至所述目标空间中;
195.地址写入模块,用于将所申请的缓冲区的地址写入空闲bd中,并记录bd偏移量与bd数量,其中,所述bd偏移量为:首个非空闲bd在首缓冲区中各个bd中的次序,所述bd数量为:所述首缓冲区中非空闲bd的数量;
196.所述第一数据获取模块705,具体用于:
197.当对所述第一报文进行转发处理时,根据所述首bd、所述bd偏移量以及所述bd数量,从所述首缓冲区中目标空间内获取第一部分报文数据,并从所述首缓冲区中非空闲bd指向的缓冲区内获取第二部分报文数据。
198.由以上可见,本实施例中首缓冲区内在预设bd前存在空闲bd,因此在新增报文头时所申请的缓冲区的地址可以直接写入空闲bd中,写入地址的空闲bd指向新的缓冲区。因此不需要再生成新的指向所申请的缓冲区的bd并在首缓冲区中插入到预设bd之前,也就不需要移动首缓冲区中原本包含的预设bd的存储位置,从而可以节省频繁在首缓冲区中读取与写入数据所需要的计算资源,提高为第一报文插入报文头的效率。
199.本发明的一个实施例中,所述第一报文的数据按照从前到后的顺序依次存储于所述首缓冲区中的目标空间以及各个预设bd指向的缓冲区中,在删除所述第一报文的报文头的情况下,所述装置还包括:
200.报文头删除模块,用于删除所述目标空间以及目标缓冲区中存储的待删除报文头的数据,其中,所述目标缓冲区为:bd指向的缓冲区中存储有待删除报文头的数据的缓冲区;
201.bd删除模块,用于若所述目标缓冲区中的所有数据均被删除,则删除指向所述目标缓冲区的bd,并更新所记录的bd偏移量与bd数量;
202.所述第一数据获取模块705,具体用于:
203.当对所述第一报文进行转发处理时,根据所述首bd、所述bd偏移量以及所述bd数量,从所述首缓冲区中目标空间内获取第一部分报文数据,并从所述首缓冲区中非空闲bd指向的缓冲区内获取第二部分报文数据。
204.由以上可见,在需要删除第一报文的报文头的情况下,由于待删除报文头优先存储于目标空间中,因此在待删除报文头的长度较短的情况下,通过访问首缓冲区的目标空间便可以完成报文头的删除。并且,若待删除报文头的长度较长,除了目标空间之外,目标缓冲区中也存储有待删除报文头的数据,若删除报文头的数据之后目标缓冲区中不再包含数据,则可以删除指向目标缓冲区的bd中记录的地址,上述bd变为空闲bd。变为空闲bd之后,本实施例中剩余的非空闲bd并不需要从首缓冲区的首部开始存储,也就不需要移动剩余的非空闲bd在首缓冲区的位置。仅需要记录bd偏移量与bd数量便可以确定剩余的非空闲bd在首缓冲区中的位置,从而可以减少移动剩余的非空闲bd而频繁访问首缓冲区,可以提高删除第一报文的报文头的效率。
205.在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solid state disk(ssd))等。
206.需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在
包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
207.本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
208.以上所述仅为本发明的较佳实施例,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

技术特征:
1.一种报文转发方法,其特征在于,所述方法包括:接收第一报文;根据所述第一报文的报文长度,选择用于存储所述第一报文的存储结构;若所选择的存储结构为第一存储结构,则将所述第一报文存储于首缓冲区中用于存储报文数据的目标空间以及所述首缓冲区中预设bd指向的缓冲区中;获取指向所述首缓冲区的首bd;当对所述第一报文进行转发处理时,根据所述首bd,从所述首缓冲区中目标空间内获取第一部分报文数据,并从所述首缓冲区中预设bd指向的缓冲区内获取第二部分报文数据;将所获取的第一部分报文数据以及第二部分报文数据拼接为第二报文,并转发所述第二报文。2.根据权利要求1所述的方法,其特征在于,所述方法还包括:若所选择的存储结构为第二存储结构,则将所述第一报文存储于首缓冲区预设bd指向的缓冲区中,其中,在所述第二存储结构中,所述首缓冲区中包含预设bd,不包含用于存储报文数据的空间;当对所述第一报文进行转发处理时,根据所述首bd,从所述首缓冲区中获取预设bd指向的缓冲区内获取报文数据;将所获取的报文数据拼接为第二报文,并转发所述第二报文。3.根据权利要求1所述的方法,其特征在于,所述首缓冲区中存在预设联合缓冲区描述符lbd,每一预设lbd内包含预设bd,所述将所述第一报文存储于首缓冲区中用于存储报文数据的目标空间以及所述首缓冲区中预设bd指向的缓冲区中,包括:将所述第一报文存储于首缓冲区中的目标空间以及预设lbd中预设bd指向的缓冲区中;所述根据所述首bd,从所述首缓冲区中目标空间内获取第一部分报文数据,并从所述首缓冲区中预设bd指向的缓冲区内获取第二部分报文数据,包括:根据所述首bd,从所述首缓冲区中目标空间内获取第一部分报文数据,并从所述首缓冲区中预设lbd内预设bd指向的缓冲区内获取第二部分报文数据。4.根据权利要求1所述的方法,其特征在于,所述第一报文的数据按照从前到后的顺序依次存储于所述首缓冲区中的目标空间以及各个预设bd指向的缓冲区中,所述首缓冲区中还包含位于预设bd之前的空闲bd,所述空闲bd未指向缓冲区,在为所述第一报文新增报文头的情况下,所述方法还包括:申请新的缓冲区;将所述首缓冲区中目标空间内记录的第一部分报文数据迁移至所申请的缓冲区中,并将新增的报文头存储至所述目标空间中;将所申请的缓冲区的地址写入空闲bd中,并记录bd偏移量与bd数量,其中,所述bd偏移量为:首个非空闲bd在首缓冲区中各个bd中的次序,所述bd数量为:所述首缓冲区中非空闲bd的数量;所述根据所述首bd,从所述首缓冲区中目标空间内获取第一部分报文数据,并从所述首缓冲区中预设bd指向的缓冲区内获取第二部分报文数据,包括:
根据所述首bd、所述bd偏移量以及所述bd数量,从所述首缓冲区中目标空间内获取第一部分报文数据,并从所述首缓冲区中非空闲bd指向的缓冲区内获取第二部分报文数据。5.根据权利要求1所述的方法,其特征在于,所述第一报文的数据按照从前到后的顺序依次存储于所述首缓冲区中的目标空间以及各个预设bd指向的缓冲区中,在删除所述第一报文的报文头的情况下,所述方法还包括:删除所述目标空间以及目标缓冲区中存储的待删除报文头的数据,其中,所述目标缓冲区为:bd指向的缓冲区中存储有待删除报文头的数据的缓冲区;若所述目标缓冲区中的所有数据均被删除,则删除指向所述目标缓冲区的bd,并更新所记录的bd偏移量与bd数量;所述根据所述首bd,从所述首缓冲区中目标空间内获取第一部分报文数据,并从所述首缓冲区中预设bd指向的缓冲区内获取第二部分报文数据,包括:根据所述首bd、所述bd偏移量以及所述bd数量,从所述首缓冲区中目标空间内获取第一部分报文数据,并从所述首缓冲区中非空闲bd指向的缓冲区内获取第二部分报文数据。6.一种报文转发装置,其特征在于,所述装置包括:报文接收模块,用于接收第一报文;存储结构选择模块,用于根据所述第一报文的报文长度,选择用于存储所述第一报文的存储结构;第一报文存储模块,用于若所选择的存储结构为第一存储结构,则将所述第一报文存储于首缓冲区中用于存储报文数据的目标空间以及所述首缓冲区中预设bd指向的缓冲区中;bd获取模块,用于获取指向所述首缓冲区的首bd;第一数据获取模块,用于当对所述第一报文进行转发处理时,根据所述首bd,从所述首缓冲区中目标空间内获取第一部分报文数据,并从所述首缓冲区中预设bd指向的缓冲区内获取第二部分报文数据;第一报文转发模块,用于将所获取的第一部分报文数据以及第二部分报文数据拼接为第二报文,并转发所述第二报文。7.根据权利要求6所述的装置,其特征在于,所述装置还包括:第二报文存储模块,用于若所选择的存储结构为第二存储结构,则将所述第一报文存储于首缓冲区预设bd指向的缓冲区中,其中,在所述第二存储结构中,所述首缓冲区中包含预设bd,不包含用于存储报文数据的空间;第二数据获取模块,用于当对所述第一报文进行转发处理时,根据所述首bd,从所述首缓冲区中获取预设bd指向的缓冲区内获取报文数据;第二报文转发模块,用于将所获取的报文数据拼接为第二报文,并转发所述第二报文。8.根据权利要求6所述的装置,其特征在于,所述首缓冲区中存在预设联合缓冲区描述符lbd,每一预设lbd内包含预设bd,所述第一报文存储模块,具体用于:若所选择的存储结构为第一存储结构,则将所述第一报文存储于首缓冲区中的目标空间以及预设lbd中预设bd指向的缓冲区中;所述第一数据获取模块,具体用于:当对所述第一报文进行转发处理时,根据所述首bd,从所述首缓冲区中目标空间内获
取第一部分报文数据,并从所述首缓冲区中预设lbd内预设bd指向的缓冲区内获取第二部分报文数据。9.根据权利要求6所述的装置,其特征在于,所述第一报文的数据按照从前到后的顺序依次存储于所述首缓冲区中的目标空间以及各个预设bd指向的缓冲区中,所述首缓冲区中还包含位于预设bd之前的空闲bd,所述空闲bd未指向缓冲区,在为所述第一报文新增报文头的情况下,所述装置还包括:缓冲区申请模块,用于申请新的缓冲区;报文头存储模块,用于将所述首缓冲区中目标空间内记录的第一部分报文数据迁移至所申请的缓冲区中,并将新增的报文头存储至所述目标空间中;地址写入模块,用于将所申请的缓冲区的地址写入空闲bd中,并记录bd偏移量与bd数量,其中,所述bd偏移量为:首个非空闲bd在首缓冲区中各个bd中的次序,所述bd数量为:所述首缓冲区中非空闲bd的数量;所述第一数据获取模块,具体用于:当对所述第一报文进行转发处理时,根据所述首bd、所述bd偏移量以及所述bd数量,从所述首缓冲区中目标空间内获取第一部分报文数据,并从所述首缓冲区中非空闲bd指向的缓冲区内获取第二部分报文数据。10.根据权利要求6所述的装置,其特征在于,所述第一报文的数据按照从前到后的顺序依次存储于所述首缓冲区中的目标空间以及各个预设bd指向的缓冲区中,在删除所述第一报文的报文头的情况下,所述装置还包括:报文头删除模块,用于删除所述目标空间以及目标缓冲区中存储的待删除报文头的数据,其中,所述目标缓冲区为:bd指向的缓冲区中存储有待删除报文头的数据的缓冲区;bd删除模块,用于若所述目标缓冲区中的所有数据均被删除,则删除指向所述目标缓冲区的bd,并更新所记录的bd偏移量与bd数量;所述第一数据获取模块,具体用于:当对所述第一报文进行转发处理时,根据所述首bd、所述bd偏移量以及所述bd数量,从所述首缓冲区中目标空间内获取第一部分报文数据,并从所述首缓冲区中非空闲bd指向的缓冲区内获取第二部分报文数据。

技术总结
本发明实施例提供了一种报文转发方法及装置,涉及网络技术领域,上述方法包括:接收第一报文;根据第一报文的报文长度,选择用于存储第一报文的存储结构;若所选择的存储结构为第一存储结构,则将第一报文存储于首缓冲区中用于存储报文数据的目标空间以及首缓冲区中预设BD指向的缓冲区中;获取指向首缓冲区的首BD;当对第一报文进行转发处理时,根据首BD,从首缓冲区中目标空间内获取第一部分报文数据,并从首缓冲区中预设BD指向的缓冲区内获取第二部分报文数据;将所获取的第一部分报文数据以及第二部分报文数据拼接为第二报文,并转发第二报文。应用本发明实施例提供的方案可以在转发报文的过程中减少报文对缓冲区的占用。转发报文的过程中减少报文对缓冲区的占用。转发报文的过程中减少报文对缓冲区的占用。


技术研发人员:黄敏
受保护的技术使用者:新华三半导体技术有限公司
技术研发日:2021.11.30
技术公布日:2022/3/8

最新回复(0)