您好,欢迎来到五一七教育网。
搜索
您的当前位置:首页处理TCP报文的方法、TOE组件以及网络设备[发明专利]

处理TCP报文的方法、TOE组件以及网络设备[发明专利]

来源:五一七教育网
(19)中华人民共和国国家知识产权局

(12)发明专利申请

(10)申请公布号 CN 110958213 A(43)申请公布日 2020.04.03

(21)申请号 201811134308.X(22)申请日 2018.09.27

(71)申请人 华为技术有限公司

地址 518129 广东省深圳市龙岗区坂田华

为总部办公楼(72)发明人 魏启坤 张明礼 韩艳飞 赵泓博 (51)Int.Cl.

H04L 29/06(2006.01)H04L 12/883(2013.01)H04L 12/879(2013.01)

权利要求书3页 说明书13页 附图6页

CN 110958213 A(54)发明名称

TOE组件以及网络设备处理TCP报文的方法、

(57)摘要

本申请公开了一种处理传输控制协议TCP报文的方法、TOE组件以及包括该TOE组件的网络设备,用于在处理TCP报文时减轻网络设备的CPU的负担并节省网络设备的存储资源。TCP卸载引擎TOE组件获取第一存储地址,所述第一存储地址为存储器中第一存储块的地址,所述第一存储块存储目标TCP报文,所述目标TCP报文包括报文头和TCP负荷。所述TOE组件根据所述第一存储地址从所述第一存储块获取所述报文头。所述TOE组件根据所述报文头执行TCP相关的协议处理,其中,在所述TOE组件根据所述报文头执行TCP相关的协议处理的过程中,所述TCP负荷没有被所述TOE组件读出所述第一存储块。

CN 110958213 A

权 利 要 求 书

1/3页

1.一种处理传输控制协议TCP报文的方法,其特征在于,包括:TCP卸载引擎TOE组件获取第一存储地址,所述第一存储地址为存储器中第一存储块的地址,所述第一存储块存储目标TCP报文,所述目标TCP报文包括报文头和TCP负荷;

所述TOE组件根据所述第一存储地址从所述第一存储块获取所述报文头;所述TOE组件根据所述报文头执行TCP相关的协议处理;其中,在所述TOE组件根据所述报文头执行TCP相关的协议处理的过程中,所述TCP负荷没有被所述TOE组件读出所述第一存储块。

2.根据权利要求1所述的方法,其特征在于,还包括:所述TOE组件向处理单元CPU发送第二存储地址;所述第二存储地址为所述第一存储地址,或所述第二存储地址指示第二存储块,所述第二存储块为至少一个存储块的起始块,所述至少一个存储块包括所述第一存储块。

3.根据权利要求2所述的方法,其特征在于,所述方法还包括:

所述TOE组件在获取到所述目标TCP报文所属数据流的多个TCP报文的存储地址后,根据所述多个TCP报文的存储地址生成存储链;

所述第二存储地址为所述存储链的起始块的地址。4.根据权利要求2或3所述的方法,其特征在于,还包括:所述TOE组件接收所述CPU发送的第三存储地址,所述第三存储地址指示所述CPU确定的待发送数据所在的存储块,所述待发送数据包括所述TCP负荷;

根据所述第三存储地址获取所述待发送数据,在所述待发送数据被发送成功前,所述待发送数据在所述存储器中的存储位置不变。

5.根据权利要求1所述的方法,其特征在于,还包括:

所述TOE组件接收处理单元CPU发送的第三存储地址,所述第三存储地址指示所述CPU确定的待发送数据所在的存储块;

根据所述第三存储地址获取所述待发送数据;在所述待发送数据被发送成功前,所述待发送数据在所述存储器中的存储位置不变。

6.一种传输控制协议卸载引擎TOE组件,其特征在于,包括:接口和处理器,所述处理器用于:

通过所述接口获取第一存储地址;所述第一存储地址为存储器中第一存储块的地址,所述第一存储块存储目标TCP报文,所述目标TCP报文包括报文头和TCP负荷;

根据所述第一存储地址从所述第一存储块获取所述报文头;根据所述报文头执行TCP相关的协议处理;其中,在所述处理器根据所述报文头执行TCP相关的协议处理的过程中,所述TCP负荷没有被所述TOE组件读出所述第一存储块。

7.根据权利要求6所述的TOE组件,其特征在于:

所述处理器还用于通过所述接口向处理单元CPU发送第二存储地址;所述第二存储地址为所述第一存储地址,或所述第二存储地址指示第二存储块,所述第二存储块为至少一个存储块的起始块,所述至少一个存储块包括所述第一存储块。

8.根据权利要求7所述的TOE组件,其特征在于,所述处理器还用于:

在获取到所述目标TCP报文所属数据流的多个TCP报文的存储地址后,根据所述多个

2

CN 110958213 A

权 利 要 求 书

2/3页

TCP报文的存储地址生成存储链;

所述第二存储地址为所述存储链中的起始块的地址。9.根据权利要求7或8所述的TOE组件,其特征在于,所述处理器还用于:通过所述接口接收所述CPU发送的第三存储地址,所述第三存储地址指示所述CPU确定的待发送数据所在的存储块,所述待发送数据包括所述TCP负荷;

根据所述第三存储地址获取所述待发送数据,在所述待发送数据被发送成功前,所述待发送数据在所述存储器中的存储位置不变。

10.根据权利要求6所述的TOE组件,其特征在于,所述处理器还用于:通过所述接口接收处理单元CPU发送的第三存储地址,所述第三存储地址指示所述CPU确定的待发送数据所在的存储块;

根据所述第三存储地址获取所述待发送数据;在所述待发送数据被发送成功前,所述待发送数据在所述存储器中的存储位置不变。

11.一种芯片,其特征在于,包括权利要求6-10中任意一项所述的TOE组件以及网络处理器。

12.一种网络设备,其特征在于,包括传输控制协议卸载引擎TOE组件和存储器;所述存储器用于存储传输控制协议TCP报文;所述TOE组件用于:获取第一存储地址,所述第一存储地址为所述存储器中第一存储块的地址,所述第一存储块存储目标TCP报文,所述目标TCP报文包括报文头和TCP负荷;根据所述第一存储地址从所述第一存储块获取所述报文头;根据所述报文头执行TCP相关的协议处理;其中,在所述TOE组件根据所述报文头执行TCP相关的协议处理的过程中,所述TCP负荷没有被所述TOE组件读出所述第一存储块。

13.根据权利要求12所述的网络设备,其特征在于,还包括处理单元CPU:所述TOE组件还用于向所述CPU发送第二存储地址;所述第二存储地址为所述第一存储地址,或所述第二存储地址指示第二存储块,所述第二存储块为至少一个存储块的起始块,所述至少一个存储块包括所述第一存储块;

所述CPU接收所述第二存储地址,根据所述第二存储地址确定待发送数据以及第三存储地址,所述第三存储地址指示所述待发送数据所在的存储块,所述待发送数据包括所述TCP负荷。

14.根据权利要求13所述的网络设备,其特征在于,所述TOE组件还用于在获取到所述目标TCP报文所属数据流的多个TCP报文的存储地址后,根据所述多个TCP报文的存储地址生成存储链;所述第二存储地址为所述存储链的起始块的地址。

15.根据权利要求13或14所述的网络设备,其特征在于,所述CPU运行套接字,所述TOE组件还用于向所述套接字发送所述第二存储地址;所述套接字用于接收所述第二存储地址。

16.根据权利要求15所述的网络设备,其特征在于,所述CPU还运行应用程序,所述套接字用于向所述应用程序发送所述第二存储地址,并接收所述应用程序发送的所述第三存储地址;

3

CN 110958213 A

权 利 要 求 书

3/3页

所述应用程序用于接收所述第二存储地址,根据所述第二存储地址确定所述待发送数据以及所述第三存储地址,并向所述套接字发送所述第三存储地址。

17.根据权利要求16所述的网络设备,其特征在于:

所述套接字还用于向所述TOE组件发送所述第三存储地址;所述TOE组件还用于接收所述第三存储地址,根据所述第三存储地址获取所述待发送数据;在所述待发送数据被发送成功前,所述待发送数据在所述存储器中的存储位置不变。

18.根据权利要求12所述的网络设备,其特征在于,还包括处理单元CPU;所述CPU用于向所述TOE组件发送第三存储地址,所述第三存储地址指示所述CPU确定的待发送数据所在的存储块;

所述TOE组件还用于根据所述第三存储地址获取所述待发送数据;在所述待发送数据被发送成功前,所述待发送数据在所述存储器中的存储位置不变。

4

CN 110958213 A

说 明 书

处理TCP报文的方法、TOE组件以及网络设备

1/13页

技术领域

[0001]本申请涉及计算机通信领域,尤其涉及处理传输控制协议(Transmission Control Protocol,TCP)报文的方法、TCP卸载引擎(TCP offload engine,TOE)组件以及网络设备。

背景技术

[0002]目前,TCP流量占据互联网(Internet)总流量的90%。网络设备通过软件协议栈处理 TCP报文时,需要消耗大量的处理单元(central processing unit,CPU)资源。[0003]为了提高TCP报文的处理效率,引入了TOE技术。TOE技术通过专用硬件来处理TCP/IP 协议栈,从而大幅降低CPU的处理负担。处理TCP/IP协议栈的专用硬件电路被称为TOE组件。

发明内容

[0004]本申请提供了一种处理TCP报文的方法、TOE组件、以及包括该TOE组件的芯片和网络 设备,用于提高TCP报文的处理效率。

[0005]本申请第一方面提供了一种处理TCP报文的方法。TCP卸载引擎TOE组件获取第一存储 地址,所述第一存储地址为存储器中第一存储块的地址,所述第一存储块存储目标TCP报文, 所述目标TCP报文包括报文头和TCP负荷。所述TOE组件根据所述第一存储地址从所述第一 存储块获取所述报文头。所述TOE组件根据所述报文头执行TCP相关的协议处理;其中,在 所述TOE组件根据所述报文头执行TCP相关的协议处理的过程中,所述TCP负荷没有被所述 TOE组件读出所述第一存储块。[0006]本申请中,TOE组件在根据目标TCP报文的报文头执行TCP相关的协议处理的过程中, 不需要将该TCP报文的TCP负荷读出该目标TCP报文所在的第一存储块,避免了在处理该目 标TCP报文的过程中频繁读取该目标TCP报文导致的处理效率低的问题。并且,由于在根据 目标TCP报文的报文头执行TCP相关的协议处理的过程中,不需要将该TCP报文的TCP负荷 读出该目标TCP报文所在的第一存储块,本申请可以不需要为不同的TCP进程分配单独的TCP 缓冲区,节省了存储器的存储资源。[0007]在一个实施方式中,所述TOE组件还向处理单元CPU发送第二存储地址;所述第二 存储地址为所述第一存储地址,或所述第二存储地址指示第二存储块,所述第二存储块为至 少一个存储块的起始块,所述至少一个存储块包括所述第一存储块。[0008]本实施方式中,TOE组件向CPU发送第二存储地址,以使该CPU可以根据该第二存储地 址确定待发送数据,能够避免向CPU直接发送TCP报文或TCP负荷导致的TOE组件与CPU之 间的接口资源的浪费。

[0009]在一个实施方式中,所述TOE组件在获取到所述目标TCP报文所属数据流的多个TCP报 文的存储地址后,根据所述多个TCP报文的存储地址生成存储链;所述第二存储地址为所述 存储链的起始块的地址。

5

CN 110958213 A[0010]

说 明 书

2/13页

本实施方式中,TOE组件根据多个TCP报文的存储地址生成存储链,并将存储链的

起始 块的地址发送给CPU。通过这种方式,TOE组件可以一次将多个TCP报文的存储地址发送给CPU,进一步节省了TOE组件与CPU之间的接口资源,提高了处理效率。[0011]进一步地,所述TOE组件接收所述CPU发送的第三存储地址,所述第三存储地址指示所 述CPU确定的待发送数据所在的存储块,所述待发送数据包括所述TCP负荷。所述TOE组件 根据所述第三存储地址获取所述待发送数据,在所述待发送数据被发送成功前,所述待发送 数据在所述存储器中的存储位置不变。[0012]本实施方式中,待发送数据包括目标TCP报文的TCP负荷,并且,在该待发送数据被发 送成功前,该待发送数据在所述存储器中的存储位置不变。这表明,本实施方式中,在处理 TCP报文的过程中,只需要为该TCP报文分配一个存储块。因此,本实施方式节约了存储器 的存储空间。

[0013]在另一个实施方式中,该TOE组件接收处理单元CPU发送的第三存储地址,所述第 三存储地址指示所述CPU确定的待发送数据所在的存储块。该TOE组件根据所述第三存储地 址获取所述待发送数据;在所述待发送数据被发送成功前,所述待发送数据在所述存储器中 的存储位置不变。[0014]本实施方式中,CPU发送的待发送数据并不包括目标TCP报文的TCP负荷,该待发送数 据在被发送成功前,该待发送数据在存储器中的位置不变,即不需要为该待发送数据分配额 外的发送缓冲区即可发送该待发送数据,节约了存储器的资源。[0015]本申请第二方面提供了一种传输控制协议卸载引擎TOE组件,该TOE组件包括接口和处 理器。所述处理器通过所述接口获取第一存储地址;所述第一存储地址为存储器中第一存储 块的地址,所述第一存储块存储目标TCP报文,所述目标TCP报文包括报文头和TCP负荷。 所述处理器根据所述第一存储地址从所述第一存储块获取所述报文头,并根据所述报文头执 行TCP相关的协议处理。在所述处理器根据所述报文头执行TCP相关的协议处理的过程中, 所述TCP负荷没有被所述TOE组件读出所述第一存储块。[0016]在一个实施方式中,所述处理器还用于通过所述接口向处理单元CPU发送第二存储 地址;所述第二存储地址为所述第一存储地址,或所述第二存储地址指示第二存储块,所述 第二存储块为至少一个存储块的起始块,所述至少一个存储块包括所述第一存储块。

[0017]在一个实施方式中,所述处理器还在获取到所述目标TCP报文所属数据流的多个TCP报 文的存储地址后,根据所述多个TCP报文的存储地址生成存储链;所述第二存储地址为所述 存储链中的起始块的地址。[0018]在一个实施方式中,所述处理器还通过所述接口接收所述CPU发送的第三存储地址,所 述第三存储地址指示所述CPU确定的待发送数据所在的存储块,所述待发送数据包括所述TCP 负荷。所述处理器还根据所述第三存储地址获取所述待发送数据,在所述待发送数据被发送 成功前,所述待发送数据在所述存储器中的存储位置不变。[0019]在一个实施方式中,所述处理器还通过所述接口接收处理单元CPU发送的第三存储 地址,所述第三存储地址指示所述CPU确定的待发送数据所在的存储块。所述处理器根据所 述第三存储地址获取所述待发送数据;在所述待发送数据被发送成功前,所述待发送数据在 所述存储器中的存储位置不变。

6

CN 110958213 A[0020]

说 明 书

3/13页

本申请第三方面提供了一种芯片,该芯片包括上述第二方面或第二方面的任意一

种实施 方式中的TOE组件以及网络处理器。该芯片还可以进一步包括其他组件。[0021]本申请第四方面提供了一种网络设备,该网络设备包括上述第三方面提供的芯片以及中 央处理单元CPU。

[0022]本申请第五方面提供了另一种网络设备,包括传输控制协议卸载引擎TOE组件和存储器。 所述存储器存储传输控制协议TCP报文。所述TOE组件获取第一存储地址,所述第一存储地 址为所述存储器中第一存储块的地址,所述第一存储块存储目标TCP报文,所述目标TCP报 文包括报文头和TCP负荷。所述TOE组件还根据所述第一存储地址从所述第一存储块获取所 述报文头,并根据所述报文头执行TCP相关的协议处理。在所述TOE组件根据所述报文头执 行TCP相关的协议处理的过程中,所述TCP负荷没有被所述TOE组件读出所述第一存储块。

[0023]在一个实施方式中,所述网络设备还包括处理单元CPU。所述TOE组件还向所述CPU 发送第二存储地址;所述第二存储地址为所述第一存储地址,或所述第二存储地址指示第二 存储块,所述第二存储块为至少一个存储块的起始块,所述至少一个存储块包括所述第一存 储块。所述CPU接收所述第二存储地址,根据所述第二存储地址确定待发送数据以及第三存 储地址,所述第三存储地址指示所述待发送数据所在的存储块,所述待发送数据包括所述TCP 负荷。[0024]进一步地,所述TOE组件还在获取到所述目标TCP报文所属数据流的多个TCP报文的存 储地址后,根据所述多个TCP报文的存储地址生成存储链;所述第二存储地址为所述存储链 的起始块的地址。[0025]进一步地,所述CPU运行套接字,所述TOE组件还向所述套接字发送所述第二存储地址; 所述套接字用于接收所述第二存储地址。[0026]进一步地,所述CPU还运行应用程序,所述套接字向所述应用程序发送所述第二存储地 址,并接收所述应用程序发送的所述第三存储地址。所述应用程序接收所述第二存储地址, 根据所述第二存储地址确定所述待发送数据以及所述第三存储地址,并向所述套接字发送所 述第三存储地址。[0027]进一步地,所述套接字还向所述TOE组件发送所述第三存储地址。所述TOE组件还接收 所述第三存储地址,根据所述第三存储地址获取所述待发送数据;在所述待发送数据被发送 成功前,所述待发送数据在所述存储器中的存储位置不变。[0028]在另一个实施方式中,该网络设备还包括处理单元CPU。所述CPU向所述TOE组件 发送第三存储地址,所述第三存储地址指示所述CPU确定的待发送数据所在的存储块。所述 TOE组件还根据所述第三存储地址获取所述待发送数据;在所述待发送数据被发送成功前, 所述待发送数据在所述存储器中的存储位置不变。

[0029]本申请第二到第五方面及第二到五方面的各实施方式的有益效果可以参考第一方面以及 第一方面的各实施方式的描述。附图说明

[0030]图1为本申请实施例提供的一种网络设备的结构示意图;[0031]图2为本申请实施例提供的一种处理TCP报文的过程示意图;

7

CN 110958213 A[0032]

说 明 书

4/13页

图3为本申请实施例提供的一种处理TCP报文的方法流程图;

[0033]图3A为本申请实施例提供的一种TCP报文的存储方式示意图;[0034]图4为本申请实施例提供的另一种处理TCP报文的过程示意图;[0035]图5为本申请实施例提供的mbuf的结构示意图;[0036]图6为本申请实施例提供的mbuf链的结构示意图;

[0037]图7为本申请实施例提供的一种TOE组件的结构示意图;

图8为本申请实施例提供的一种网络设备的结构示意图。

具体实施方式

[0038]本发明的说明书和权利要求书中的术语“第一”和“第二”等是用于区别不同的对象, 而不是用于描述对象的特定顺序。例如,第一存储地址和第二存储地址是用于区别不同的存 储地址,而不是用于指定不同存储地址的特定顺序。“第一”、“第二”……“第n”之间不具 有逻辑或时序上的依赖关系。[0039]为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地 详细描述。

[0040]本申请实施例提供了一种网络设备100,如图1所示,该网络设备100包括:报文处理 引擎(packet processing engine,PPE)101,缓存管理单元(buffer management unit, BMU)102,存储器103,网络处理器(network processor,NP)104,TOE组件105和CPU 106。 PPE 101,BMU 102,存储器103,NP 104,TOE组件105和CPU 106通过总线107互相通信。 CPU 106上运行有套接字和应用程序。这些组件的功能将在下文中详细介绍。其中,PPE 101, BMU 102,NP 104和TOE组件105可以集成在同一个芯片上,也可以部署在不同的芯片上。 网络设备100可以包括网关,路由器,网桥,无线接入点,交换机,防火墙等。[0041]网络设备100能够处理TCP报文。如图2所示,为本申请实施例提供的一种网络设备100 处理TCP报文的过程示意图。网络设备中,存储器103被划分为BMU存储区,TCP接收缓冲 区,用户态存储区,TCP发送缓冲区等多个存储区,以供不同的组件使用。为了更清楚地描 述TCP报文的处理过程,图2以PPE 101,BMU 102,NP 104和TOE组件105分别部署在不 同的芯片上为例。并且,为了方面描述,图2中的TOE组件105被划分为TOE接收模块105-1 和TOE发送模块105-2。在实际应用中,TOE组件105还以为被划分为更多模块或不划分模块。 图2中,传输TCP负荷或完整TCP报文的过程用带箭头的粗实线表示;传输报文头的过程用 带箭头的细实线表示;传输其他控制消息的过程用带箭头的虚线表示。[0042]如图2所示,网络设备100接收TCP报文的过程包括步骤S201-S208。[0043]在S201中,PPE 101向BMU 102申请缓存空间,BMU 102根据该申请为PPE102分配缓存 空间,该分配的缓存空间本实施例中称为BMU存储区。[0044]BMU存储区通常包括多个存储块,每个存储块具有对应的存储地址,通过该存储地址即 可查找到该存储块。[0045]在S202中,PPE 101接收TCP报文A,将该TCP报文A写入BMU存储区,并向NP 104发 送第一存储地址,以通知NP 104有新的TCP报文需要处理。第一存储地址为该TCP报文A的 存储地址。该第一存储地址指示该TCP报文A在该BMU存储区的存储块。其中,TCP报文A 为任意一个TCP报文。其中,TCP报文包括报文头和负荷,该报文头包括二层头,三层头和 TCP头。

8

CN 110958213 A[0046]

说 明 书

5/13页

在S203中,NP 104根据该第一存储地址从BMU存储区读取该TCP报文A的报文头A,

根 据该报文头A中的信息,例如五元组(源IP地址,源端口号,协议类型,目的IP地址,目 的端口号),以及NP 104存储的流表,确定该TCP报文A由TOE组件处理。该流表的每个表 项存储五元组与操作的对应关系。NP 104根据该报文头中的五元组查找该流表,即可得到对 应的操作,该操作可以是转发,发往CPU或者发往TOE组件等。当该操作是发往TOE组件时, 指示该TCP报文A由TOE组件处理。在S204中,NP 104向TOE接收模块105-1发送该第一 存储地址,TOE接收模块105-1获取该第一存储地址,根据该第一存储地址从BMU存储区中 读取该TCP报文A,并处理该TCP报文A。[0047]其中,处理该TCP报文A包括计算该TCP报文A的校验和,分离该TCP报文A的报文头A和TCP负荷A,将该TCP负荷A存放在临时缓冲区(图中未示出);根据该报文头A执行TCP 相关的协议处理,例如同步,确认,乱序重排等。[0048]在S205中,TOE接收模块105-1在处理完该TCP报文A后,将该TCP报文A的TCP负荷 A写入TCP接收缓冲区,并向CPU的套接字发送该TCP负荷A在该TCP接收缓冲区中的存储 地址,即第二存储地址。[0049]在S206中,TOE接收模块105-1触发BMU 102释放该第一存储地址对应的存储空间。[0050]在S207中,套接字获取该第二存储地址。在该应用程序调用套接字的接收数据接口时, 该套接字根据该第二存储地址从TCP接收缓冲区中读取该TCP负荷A。[0051]在S208中,套接字把TCP负荷A写入该应用程序在用户态存储区中指定的存储位置,该 指定的存储位置对应第三存储地址。[0052]进一步地,如图2所示,网络设备100发送TCP报文的过程包括步骤S209-S216。[0053]在S209中,应用程序调用套接字的发送数据接口,向套接字发送该第三存储地址。[0054]本实施例以发送TCP负荷A为例进行说明。在调用套接字的发送数据接口前,应用程序 可能处理过该TCP负荷A,也可能没有处理过该TCP负荷A。[0055]在S210中,套接字根据该第三存储地址从用户态存储区中读取该TCP负荷A,将该TCP 负荷A写入TCP发送缓冲区中,并向TOE发送模块105-2发送第四存储地址,该第四存储地 址指示该TCP负荷A在该TCP发送缓冲区中的存储位置。[0056]在S211中,TOE发送模块105-2向BMU 102申请缓存空间,得到第五存储地址对应的存 储块。

[0057]在S212中,TOE发送模块105-2根据该第四存储地址从该TCP发送缓冲区中读取该TCP 负荷A,为该TCP负荷A封装TCP头。[0058]其中,步骤S211和S212没有执行顺序的。[0059]在S213中,TOE发送模块105-2将该封装了TCP头的TCP负荷A写入BMU存储区中该第 五存储地址对应的存储块,并向NP 104发送该第五存储地址。[0060]在S214中,NP 104根据该第五存储地址从该BMU存储区获取该封装了TCP头的TCP负 荷A,为该封装了TCP头的TCP负荷A添加三层头和二层头,得到TCP报文B,并向PPE 101 发送该第五存储地址。[0061]本实施例,为封装了TCP头的负荷A添加三层头和二层头后得到的TCP报文B仍然存储 在第五存储地址对应的存储块中。[0062]在S215中,PPE 101收到NP 104发送的该第五存储地址后,根据该第五存储地址从

9

CN 110958213 A

说 明 书

6/13页

该 BMU存储区中读取该TCP报文B并发送。[0063]在S216中,PPE 101在确认该TCP报文B发送成功后,通知BMU 102释放该第五存储地 址对应的存储块。

[00]本申请图2所示的处理TCP报文的过程中,由TOE接收模块105-1以及TOE发送模块105-2 执行TCP相关的处理,CPU 106只需要处理TCP报文的负荷,降低了CPU 106的处理负担。

[0065]然而,图2所示的处理TCP报文的过程,需要在存储器103中为不同的组件划分不同的 存储区,并且,各个组件需要频繁地读写TCP负荷或完整的TCP报文,因此,图2所示的过 程存在浪费存储器资源和存储器带宽的问题。[0066]基于图1所示的网络设备,如图3所示,本申请进一步提供了另一种处理TCP报文的方 法,该处理TCP报文的方法由包括TOE组件105执行。该方法至少包括步骤S301-S303。[0067]在S301中,TOE组件105获取第一存储地址。该第一存储地址为存储器中第一存储块的 地址,该第一存储块存储目标TCP报文,该目标TCP报文包括报文头和TCP负荷。[0068]该目标TCP报文是指任意一个待处理的TCP报文,该报文头包括二层头,三层头和TCP 头,该TCP负荷为目标TCP报文的负荷。该二层头包括二层协议相关的信息,该三层头可以 包括三层协议相关的信息。该二层协议例如可以是以太网协议,生成树协议(Spanning Tree Protocol,STP),链路聚合控制协议(Link aggregation Control Protocol,LACP)等。 该三层协议例如可以是网际协议(Internet Protocol,IP),因特网组控制协议等。[0069]其中,每个存储块都有对应的存储地址,通过该存储地址可查找到该存储块。当存储块 中存储有TCP报文时,该存储块包括该TCP报文的数据描述,该TCP报文的报文头以及TCP 负荷。该数据描述记录了该TCP报文头的相对该存储块的偏移值以及该TCP报文头的长度, 通过该偏移值以及该TCP报文头的长度,可以从该存储块中获取到该TCP负荷。[0070]在一个实施方式中,TCP报文在存储器103中的一种存储方式如图3A所示。图3A中示 出了M个存储块,每个存储块存储一个TCP报文。每个存储块包括数据描述,报文头以及TCP 负荷。相应地,一个TCP报文的数据描述包括偏移值,该TCP报文的总长度,以及该TCP报 文的报文头的长度。该报文头的长度可以是报文头的总长度,也可以包括二层头长度,三层 头长度以及TCP头长度。其中,偏移值指二层头相对该存储块的起始字节的偏移大小。例如, 图3A中,该偏移值为200字节。当存储块的大小为2000字节,偏移值为200时,则从该存 储块的第201个字节开始可以读出二层头。图3A中,每个存储块的大小为2000字节,大于 TCP报文的长度,因此一个TCP报文可以存储于一个存储块中。当存储块较小,例如,128字 节时,一个TCP报文可能需要占用多个存储块。当一个TCP报文占用多个存储块时,除第一 个存储块外的其他存储块中不包括该TCP报文的报文头。[0071]在一个实施方式中,该TOE组件接收PPE 101发送的该第一存储地址。[0072]在S302中,TOE组件105根据该第一存储地址从该第一存储块获取该目标TCP报文的报 文头。

[0073]图3所示实施例中,TOE组件执行TCP协议栈的处理时不需要处理TCP报文的TCP负荷, 因此,只获取该第一TCP报文的报文头。[0074]在一个实施方式中,TOE组件根据该第一存储块中的偏移地址,报文头的长度获取该报 文头。

10

CN 110958213 A[0075]

说 明 书

7/13页

在S303中,TOE组件根据该报文头执行TCP相关的协议处理。

[0076]由于TCP相关的协议处理方式和算法为本领域技术人员所熟知,本申请不做进一步探讨。

[0077]本申请中,TOE组件在执行TCP相关的协议处理的过程中不需要将TCP报文或TCP负荷 从一个缓冲区迁移到另一个缓冲区,即在该TOE组件根据该报文头执行TCP相关的协议处理 的过程中,该目标TCP报文的TCP负荷没有被读出该第一存储块,该目标TCP报文在该存储 器中的存储位置不变。[0078]本申请实施方式中,TOE组件不需要处理TCP负荷,只需要从存储器103中获取TCP报 文的报文头,能够避免频繁从存储器中读取TCP负荷带来的存储器带宽的浪费。[0079]进一步地,如图3所示,本申请实施例还可以包括步骤S304。[0080]在S304中,TOE组件向处理单元CPU发送第二存储地址。该第二存储地址指示可被 该CPU处理的TCP负荷。[0081]在一个实施方式中,该第二存储地址为该第一存储地址。在这种情况下,可被该CPU处 理的TCP负荷即为该目标TCP报文的TCP负荷。[0082]在另一个实施方式中,该第二存储地址指示第二存储块,该第二存储块为至少一个存储 块的起始块,该至少一个存储块包括该第一存储块。在这种情况下,可被该CPU处理的TCP 负荷包括多个TCP报文的负荷,该多个TCP报文的负荷包括该目标TCP报文的TCP负荷。

[0083]由于CPU只处理TCP负荷,因此,CPU接收到第二存储地址后,即获知根据该第二存储 地址查找到的至少一个存储块中的TCP负荷可以被处理。因此该第二存储地址用于向该CPU 通知可被该CPU处理的TCP负荷。[0084]CPU 106包括套接字以及应用程序,套接字用于接收TOE组件发送的第二存储地址,并 将该第二存储地址发送给应用程序,应用程序决定是否处理通过该第二存储地址获取到的TCP 负荷。

[0085]在一个实施方式中,CPU 106中的应用程序根据该第二存储地址获取并处理该TCP负荷; 在另一个实施方式中,CPU 106中的应用程序并不需要处理该TCP负荷。[0086]在一个实施方式中,该TOE组件105在接收到该目标TCP报文所属数据流的多个TCP报 文的存储地址后,根据该多个TCP报文的存储地址生成第一存储链;处理单元该第二存 储地址即为该第一存储链的地址,该第一存储链的地址为该第一存储链的起始块的地址。进 一步地,如图3所示,本申请实施例还可以包括步骤S305。[0087]在S305中,TOE组件接收CPU发送的第三存储地址。

[0088]该第三存储地址指示CPU确定的待发送数据所在的存储块,进而指示该待发送数据,该 待发送数据可以包括CPU 106中的应用程序处理过的TCP负荷,也可以包括CPU 106中的应 用程序认为不需要处理的TCP负荷。

[00]该待发送数据可以包括一个或多个TCP报文的TCP负荷。在一个实现方式中,该待发送 数据包括S301中的该TCP负荷。在另一个实现方式中,该待发送数据也可以不包括S301中 的该TCP负荷。在一个实施方式中,该第三存储地址为该第一存储地址。在这种情况下,该 第三存储地址仅指示该第一存储块,即该待发送数据为S301中的目标TCP报文的TCP负荷。

11

CN 110958213 A[0090]

说 明 书

8/13页

在另一个实施方式中,该第三存储地址指示第三存储块,该第三存储块为至少一

个存储 块的起始块,该至少一个存储块可以包括该第一存储块,也可以不包括该第一存储块。当该 第三存储地址指示包括该第一存储块的多个存储块,且该第一存储块为该多个存储块中的起 始块时,该第三存储地址为该第一存储地址。当该第三存储地址指示包括该第一存储块的多 个存储块,且该第一存储块不是该多个存储块中的起始块时,该第三存储地址与该第一存储 地址不同。[0091]进一步地,TOE组件根据该第三存储地址确定该待发送数据,在该待发送数据被发送成 功前,该待发送数据在该存储器中的存储位置不变。[0092]在一个实施方式中,TOE组件处理该待发送数据的过程包括步骤S306-S309。[0093]在S306中,TOE组件根据该第三存储地址确定窗口数据,该窗口数据为该待发送数据的 部分或全部。[0094]本申请中,窗口数据是指TOE组件一次能够发送的数据。TOE组件确定窗口数据的过程 后续将详细描述。[0095]在S307中,TOE组件发送该窗口数据的第四存储地址;该第四存储地址指示该窗口数据 在该存储器中的存储块。[0096]在被发送成功前,该窗口数据在该存储器中的存储位置不变。以窗口数据为该目标TCP 报文的TCP负荷为例,该TCP负荷被发送成功前一直存储在该第一存储块中。[0097]在S308中,TOE组件接收TCP确认消息,该TCP确认消息指示该窗口数据发送成功。[0098]当窗口数据为待发送数据的部分数据时,该待发送数据需要经过多次才能发送完。在这 种情况下,TOE组件需要多次执行S306-S308。[0099]在S309中,TOE组件通知该存储器释放该窗口数据对应的存储器资源。[0100]在一个实施方式中,TOE组件收到指示该窗口数据发送成功的消息后,立即通知该存储 器释放该窗口数据对应的存储器资源。在另一个实施方式中,TOE组件收到该待发送数据包 括的所有窗口数据对应的TCP确认消息后,通知该存储器释放该第四存储地址对应的存储块。 本申请上述实施方式中,复用了网络设备在接收到TCP报文时存储该TCP报文的存储块,网 络设备不需要为TOE组件分配单独的接收缓冲区和发送缓冲区,并且,TOE组件在发送完CPU 确定的待发送数据后,通知存储器103释放该待发送数据占用的存储块,避免了存储器资源 的浪费。

[0101]基于图3所示的方法,如图4所示,本申请实施例进一步提供了另一种网络设备100处 理TCP报文的过程示意图,该处理过程包括步骤S401-S413。图4中,传输TCP负荷或完整 TCP报文的过程用带箭头的粗实线表示;传输报文头的过程用带箭头的细实线表示;传输其 他控制消息的过程用带箭头的虚线表示。图4的处理过程不需要在存储器103中为不同组件 分配对应的存储区。图3所示的方法和图4所示的过程可互为参考。[0102]在S401中,PPE 101向BMU 102申请缓存空间,BMU 102根据该申请从存储器103中为 PPE102分配缓存空间,该分配的缓存空间本实施例中称为BMU存储区。本实施例中,PPE 101, NP 104,TOE组件105,CPU 106共用该BMU存储区。其中,该BMU存储区又被划分为多个存 储块,每个存储块对应一个存储地址。[0103]在一个实施方式中,该多个存储块大小相同。优选地,每个存储块能够存储一个完整的 TCP报文。当然,存储块的大小可以随意设置,当存储块的大小小于TCP报文时,该TCP

12

CN 110958213 A

说 明 书

9/13页

报 文可以被存储到多个存储块中。[0104]在S402中,PPE 101接收目标TCP报文,对该目标TCP报文做TCP校验,并在TCP校验 通过后将该目标TCP报文写入BMU存储区中的第一存储块,将该第一存储块的第一存储地址 发送给NP 104。该目标TCP报文包括TCP头和TCP负荷。

[0105]通过该第一存储地址可以查找到该第一存储块。该第一存储块包括数据描述,该目标TCP 报文的报文头和TCP负荷。该数据描述包括偏移值,该目标TCP报文的长度,该报文头的长 度,该偏移值为该目标TCP报文的报文头在该第一存储块中的偏移大小,例如图3A中,该偏 移值为200字节。[0106]在一个实施方式中,PPE 101采用mbuf结构将该目标TCP报文写入BMU存储区,这种情 况下,一个存储块中存储一个mbuf结构。如图5所示,为mbuf结构(后续简称为mbuf)的 示意图。图5中的mbuf的总长为1000字节,其中包括20字节的头部(对应图3A中的数据 描述),则一个mbuf最多可存储980字节的数据,因此当报文的长度大于980字节时,该报 文需要被存储在2个mbuf(即2个存储块)中。Mbuf的总长可以是其他长度,例如,2000 字节。当mbuf长度为2000字节时,一个mbuf存储一个TCP报文。Mbuf的头部也可以是其 他长度,例如,100字节。如图5所示,Mbuf的头部可以包括多个字段,其中,m_next指 向存储同一个报文的下一个mbuf,只有当一个报文被存储于多个mubf时有效,否则为null; m_nextpkt指向另一个报文的第一个mubf;m_len指示该mbuf中存储的数据的大小,例如, 图5中为80字节;m_data为指向存储的数据的指针;m_type指示包含在mbuf中的数据的类 型,图5中为MT_header,指示该数据包含TCP头;m_flags可以为M_PKTHDR,0或M_EXT, 其中,M_PKTHDR表示这个mbuf是此mubf链表中的第一个,即链表的头,0表示此mbuf只包 含数据,M_EXT表示此mbuf用到了外部的簇来存储较大的数据。此外,一个报文的首个mbuf 的头部还可以包括m_pkthdr.len以及m_pkthdr.rcvif,m_pkthdr.len指示报文的头部的长 度,m_pkthdr.rcvif指示指向接口结构的指针,而非首个mbuf则不需要m_pkthdr.len和 m_pkthdr.rcvif。图5所示的mbuf包括报文头,且数据部分存储了14字节的二层头,20字 节的三层头和20字节的TCP头和26字节的负荷,灰色部分表示mbuf中未被占用的字节。[0107]在S403中,NP 104根据该第一存储地址从BMU存储区中的第一存储块读取该目标TCP 报文的报文头,根据该报文头中的信息确定该目标TCP报文需要由TOE组件105处理。[0108]在一个实施方式中,该目标TCP报文的报文头包括二层头,三层头和TCP头。根据该目 标TCP报文的报文头中的信息确定该目标TCP报文需要由TOE组件105处理可以是根据流表 以及该报文头指示的流特征确定该目标TCP报文需要由TOE组件105处理。流表中的每个表 项包括流特征和对应的动作,该动作包括向CPU转发,向出接口转发或向TOE组件转发。当 该报文头包括的流特征在该流表中对应的动作为向TOE组件转发时,NP 104确定该目标TCP 报文需要由TOE组件105处理。其中,流特征可以是流标识,或者五元组(源IP地址,目的 IP地址,源端口号,目的端口号,传输层协议)中的至少一项。[0109]在S404中,NP 104向TOE组件105发送该第一存储地址。TOE组件105接收该第一存储 地址,根据该第一存储地址从该第一存储块获取该目标TCP报文的报文头,根据该报文头执 行TCP相关的协议处理。在该TOE组件105根据该报文头执行TCP相关的协议处理时,该目 标TCP报文在该BMU存储区中的存储位置不变,且该目标TCP报文的负荷没有被该TOE组件 105读出该第一存储块。

13

CN 110958213 A[0110]

说 明 书

10/13页

在一个实施方式中,NP 104向TOE组件105的TOE接收模块105-1发送该第一存储地

址。

在一个实施方式中,该TCP相关的协议处理包括以下处理中的一个或多个:状态迁

移, 拥塞控制,乱序重排,丢包重传,往返时延(round-trip time,RTT)计算等。TCP相关的 协议处理可以采用本领域技术人员熟知的任意算法或方式。[0112]在S405中,TOE组件105向CPU 106发送第二存储地址。该第二存储地址指示可被该CPU 处理的TCP负荷。

[0113]在一个实施方式中,TOE组件105通过TOE接收模块105-1向CPU 106的套接字发送该 第二存储地址。[0114]如前该,在一个实施方式中,该第二存储地址为该第一存储地址;在另一个实施方式中, 该第二存储地址指示第二存储块,该第二存储块为至少一个存储块的起始块,该至少一个存 储块包括该第一存储块。[0115]在一个实施方式中,TOE组件105记录该目标TCP报文的第一存储地址,TOE组件105在 确定接收到该目标TCP报文所属数据流的多个TCP报文的存储地址后,根据该多个TCP报文 的存储地址生成第一存储链,并向CPU发送该第一存储链的地址,即该第一存储链的起始块 的地址。在一个实施方式中,该多个TCP报文包括该目标TCP报文。本实施方式中,该第一 存储链的地址即为该第二存储地址。[0116]其中,该第一存储链的地址用于该CPU获取该第一存储链包括的每个存储块中的TCP负 荷。

[0117]在一个实施方式中,该第一存储链为mbuf链。如图6所示,为一个mbuf链的结构示意 图,该mbuf链指示两个TCP报文,即TCP报文A和TCP报文B,TCP报文A占用了两个mbuf, TCP报文B占用了一个mbuf,TCP报文A的m_nextpkt指针指向TCP报文B的m_nextpkt,TCP 报文B的m_nextpkt为空(null)。[0118]在S406中,CPU 106中的套接字接收该第二存储地址,并将该第二存储地址发送给应用 程序。

[0119]在一个实施方式中,套接字通过mbuf_recv接口(为本申请扩展的能够接收mbuf链地址 的接口)接收该mbuf链的地址。[0120]在S407中,应用程序向该套接字发送第三存储地址。该第三存储地址指示该应用程序确 定的待发送数据所在的存储块。[0121]在一个实施方式中,该待发送数据包括该目标TCP报文的TCP负荷。在另一个实施方式 中,该待发送数据不包括该目标TCP报文的TCP负荷。[0122]应用程序接收到该第二存储地址后,可以处理该第二存储地址指示的TCP负荷,例如, 修改TCP负荷中的内容,也可以不处理该第二存储地址指示的TCP负荷。[0123]在一个实施方式中,该应用程序确定的待发送数据包括多个TCP报文的负荷,或该应用 程序确定的待发送数据存储在多个mbuf中时,该应用程序根据待发送数据生成第二存储链, 调用套接字的mbuf_send接口(为本申请扩展的能够发送mbuf链地址的接口),通过该 mbuf_send接口向套接字发送该第二存储链的地址。其中,该第二存储链的地址为该第二存 储链的起始块的地址。该第二存储链可以与该第一存储链相同或不同。该第二存储链的地址 即为该第三存储地址。

14

[0111]

CN 110958213 A[0124]

说 明 书

11/13页

在一个实施方式中,S406和S407可以概括为:CPU 106接收该第二存储地址,并根

据 该第二存储地址确定待发送数据以及该待发送数据所在的存储块的第三存储地址。在一个实 施方式中,该待发送数据为该第二存储地址指示的TCP负荷中的全部或部分数据。相应地, 该第三存储地址与该第二存储地址可以相同也可以不同。在一个实施方式中,该待发送数据 包括该目标TCP报文的TCP负荷。[0125]在S408中,CPU 106向TOE组件105发送该第三存储地址。[0126]在一个实现方式中,CPU 106中的套接字向TOE组件105的TOE发送模块105-2发送该 第三存储地址。[0127]在S409中,TOE组件105修改该第三存储地址指示的每个TCP负荷对应的TCP头。[0128]在一个实施方式中,TOE发送模块105-2根据第三地址模块查找到待发送的每个TCP负 荷,并根据需要修改该TCP负荷对应的TCP头,例如,修改TCP头中的TCP端口号。其中, S409为本申请的可选步骤。[0129]在S410中,TOE组件105根据该第三存储地址确定窗口数据,该窗口数据为该待发送数 据中的部分或全部数据。[0130]进一步地,TOE组件105向NP 104发送第四存储地址,该第四存储地址指示该窗口数据 在该存储器中的存储块。[0131]在一个实现方式中,TOE组件105中的TOE发送模块105-2根据网络设备100的拥塞窗 口以及对端的接收窗口以及该第三存储地址对应的存储块中存储的待发送数据确定窗口数 据。TOE组件发送模块105-2先根据网络设备100的拥塞窗口以及对端的接收窗口确定窗口 数据量,然而根据该窗口数据量从该第三存储地址对应的存储块中存储的待发送数据中确定 窗口数据。该窗口数据量可以为mbuf个数,或者需要发送的字节数。该第四存储地址是根据 每次发送的窗口数据确定的。[0132]例如,待发送数据包括5个mbuf,即mbuf 1,mbuf 2,mbuf 3,mbuf 4和mbuf 5,TOE 组件105根据网络设备100的拥塞窗口以及对端的接收端口确定第一次可以发送3个mbuf, 则根据mbuf 1,mbuf 2和mbuf 3生成第三存储链,并将第三存储链的地址(即mbuf 1所在 的存储块的存储地址)作为第四存储地址发送给NP 104。当第三存储链中的数据发送完成后,TOE组件105可以将剩余的2个mbuf,即mbuf 4和mbuf 5组成第四存储链,并将该第四存 储链的地址(即mbuf 4所在的存储块的存储地址)作为第四存储地址发送给NP 104。[0133]在另一个实施方式中,窗口数据为一个mbuf中的部分数据,则TOE组件105可以将该 mbuf拆分为多个mbuf,新拆分的多个mbuf中的每个mbuf占用一个存储块,该多个mbuf中 的第一mbuf包括该窗口数据,该第四存储地址即为该第一mbuf所在的存储块的存储地址。[0134]在S411中,NP 104接收该第四存储地址,修改该第四存储地址对应的存储块中的三层 头和二层头,得到修改后的TCP报文。

[0135]根据该第四存储地址对应的存储块的数量,该修改后的TCP报文可以是一个或多个。

[0136]在S412中,NP 104向PPE 101发送该第四存储地址。[0137]在S413中,PPE 101接收该第四存储地址,从该第四存储地址对应的存储块读取修改后 的TCP报文,计算TCP校验和,将计算得到的TCP校验和添加在修改后的TCP报文中,发送 修改后的TCP报文。

15

CN 110958213 A[0138]

说 明 书

12/13页

上述过程中,该修改后的TCP报文仍然存储在该第四存储地址对应的存储块中。在

S414 中,TOE组件105(通过TOE接收模块105-1)接收TCP确认消息,该TCP确认消息用于通知 对端设备接收的数据。TOE组件105根据该TCP确认消息确定该窗口数据发送成功,并通知 BMU 102释放该第四存储地址对应的存储块。[0139]其中,S414为S308和S309的一种实现方式。

[0140]本申请上述实施例不需要为TCP连接分配的发送缓冲区和接收缓冲区,节省了大量 存储资源。假设图2所示的方法需要为每个TCP连接分配KB的缓冲区,采用本申请实施例, 在有10M条数据流的情况下,可以节省0GB的存储器空间。[0141]通常,一个以太报文的长度在字节到1500字节,而报文头的长度在20字节到字 节,本申请中,PPE 101将TCP报文写入BMU存储区后,NP 104和TOE组件105在处理TCP 报文的时候,只需要读取该TCP报文的报文头,而不需要频繁从BMU存储区读取该TCP报文 的负荷,能够降低存储器103的访问带宽,提高处理效率。[0142]为了实现本申请实施例上述方法,如图7所示,本申请还提供了一种TOE组件700,该 TOE组件包括接口701和处理器702。其中,该接口701用于TOE组件100与网络设备的其他 组件通信。

[0143]处理器702通过接口701获取第一存储地址;该第一存储地址为存储器中第一存储块的 地址,该第一存储块存储目标TCP报文,该目标TCP报文包括报文头和TCP负荷。处理器702 根据该第一存储地址从该第一存储块获取该报文头。处理器702根据该报文头执行TCP相关 的协议处理;在根据该报文头执行TCP相关的协议处理的过程中,该TCP负荷没有被该TOE 组件读出该第一存储块。[0144]在一个实施方式中,处理器702还通过接口701向处理单元CPU发送第二存储地址; 该第二存储地址为该第一存储地址,或该第二存储地址指示第二存储块,该第二存储块为至 少一个存储块的起始块,该至少一个存储块包括该第一存储块。[0145]在一个实施方式中,处理器702还在获取到该目标TCP报文所属数据流的多个TCP报文 的存储地址后,根据该多个TCP报文的存储地址生成存储链;该第二存储地址为该存储链中 的起始块的地址。[0146]在一个实施方式中,处理器702还通过接口701接收该CPU发送的第三存储地址,该第 三存储地址指示该CPU确定的待发送数据所在的存储块,该待发送数据包括该TCP负荷。处 理器702还根据该第三存储地址获取该待发送数据,在该待发送数据被发送成功前,该待发 送数据在该存储器中的存储位置不变。

[0147]在一个实施方式中处理器702还通过接口701接收处理单元CPU发送的第三存储地 址,该第三存储地址指示该CPU确定的待发送数据所在的存储块。处理器702根据该第三存 储地址获取该待发送数据;在该待发送数据被发送成功前,该待发送数据在该存储器中的存 储位置不变。

[0148]本申请进一步提供了一种芯片,该芯片包括图7所示的TOE组件以及网络处理器。该网 络处理器可以是图1,图2或图3中的NP 104。进一步地,该芯片还可以包括图1中的PPE 101 和BMU 102中的一个或全部。

[0149]本申请进一步提供了一种网络设备,该网络设备如图8所示,包括TOE组件801,存储 器802和CPU 803,该CPU 803运行套接字和应用程序。TOE组件801,存储器802和CPU 803 

16

CN 110958213 A

说 明 书

13/13页

通过总线804相互通信。存储器802存储传输控制协议TCP报文。[0150]TOE组件801获取第一存储地址,该第一存储地址为该存储器中第一存储块的地址,该 第一存储块存储目标TCP报文,该目标TCP报文包括报文头和TCP负荷。TOE组件801还根 据该第一存储地址从该第一存储块获取该报文头,并根据该报文头执行TCP相关的协议处理; 在根据该报文头执行TCP相关的协议处理的过程中,该TCP负荷没有被该TOE组件读出该第 一存储块。

[0151]在一个实施方式中,TOE组件801还向该CPU 803发送第二存储地址;该第二存储地址 为该第一存储地址,或该第二存储地址指示第二存储块,该第二存储块为至少一个存储块的 起始块,该至少一个存储块包括该第一存储块。该CPU 803接收该第二存储地址,根据该第 二存储地址确定待发送数据以及第三存储地址,该第三存储地址指示该待发送数据所在的存 储块,该待发送数据包括该TCP负荷。[0152]在一个实施方式中,该TOE组件801还在获取到该目标TCP报文所属数据流的多个TCP 报文的存储地址后,根据该多个TCP报文的存储地址生成存储链;该第二存储地址为该存储 链的起始块的地址。[0153]在一个实施方式中,该TOE组件801向该套接字发送该第二存储地址。该套接字接收该 第二存储地址,向该应用程序发送该第二存储地址,并接收该应用程序发送的该第三存储地 址。该应用程序接收该第二存储地址,根据该第二存储地址确定该待发送数据以及该第三存 储地址,并向该套接字发送该第三存储地址。[0154]进一步地,该套接字还向该TOE组件801发送该第三存储地址.该TOE组件801还接收该 第三存储地址,根据该第三存储地址获取该待发送数据;在该待发送数据被发送成功前,该 待发送数据在该存储器中的存储位置不变。[0155]在另一个实施方式中,该CPU 803向该TOE组件发送第三存储地址,该第三存储地址指 示该CPU确定的待发送数据所在的存储块。该TOE组件801还根据该第三存储地址获取该待 发送数据;在该待发送数据被发送成功前,该待发送数据在该存储器中的存储位置不变。

[0156]本申请的TOE组件、芯片和网络设备在处理TCP报文的时候,只需要读取该TCP报文的 报文头,而不需要频繁从存储器中读取该TCP报文的负荷,能够降低存储器的访问带宽,提 高处理效率。

[0157]本申请提供的各实施方式在不冲突的情况下可以互相参考和应用。[0158]以上该仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来 说,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

17

CN 110958213 A

说 明 书 附 图

1/6页

图1

图2

18

CN 110958213 A

说 明 书 附 图

2/6页

图3

19

CN 110958213 A

说 明 书 附 图

3/6页

图3A

图4

20

说 明 书 附 图

4/6页

图5

21

CN 110958213 A

CN 110958213 A

说 明 书 附 图

5/6页

图6

22

CN 110958213 A

说 明 书 附 图

6/6页

图7

图8

23

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 517ttc.cn 版权所有 赣ICP备2024042791号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务