一种数据包处理方法及装置转让专利

申请号 : CN201410555669.7

文献号 : CN104601645B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 林晓峰陈渝李晓栋茅俊杰何嘉权牟旋

申请人 : 新浪网技术(中国)有限公司清华大学

摘要 :

本发明公开了一种数据包处理方法及装置。该方法网络设备接收数据包,查找与该数据包对应的连接状态信息,判断查找到的连接状态信息中是否保存有路由信息,若是,则将保存的路由信息写入该数据包,否则,在路由缓存中查找该数据包的路由信息,将查找到的路由信息写入该数据包,将该路由信息保存在该数据包对应的连接状态信息中。通过上述方法,除了通过每个连接接收的第一个数据包以外,对于通过该连接接收的其它数据包,网络设备在将其递交给网络层之前,均已将保存在该连接的连接状态信息中的路由信息确定为该其它数据包的路由信息,从而,在网络层不用从路由缓存中查找该其它数据包的路由信息,因此,提高了网络设备处理数据包的效率。

权利要求 :

1.一种数据包处理方法,其特征在于,包括:

接收数据包;

查找与所述数据包对应的连接状态信息;

判断查找到的所述连接状态信息中是否保存有路由信息;

若是,则将所述连接状态信息中的路由信息写入所述数据包,并对写入所述路由信息的数据包进行后续处理;

否则,在路由缓存中查找所述数据包的路由信息,将查找到的路由信息写入所述数据包,对写入所述路由信息的数据包进行后续处理,并将查找到的路由信息保存在所述数据包对应的连接状态信息中。

2.如权利要求1所述的方法,其特征在于,所述连接状态信息包括:传输控制协议TCP长连接的连接状态信息;

查找与所述数据包对应的连接状态信息,具体包括:

根据所述数据包的TCP头,查找与所述TCP头对应的连接状态信息。

3.如权利要求1所述的方法,其特征在于,判断查找到的所述连接状态信息中是否保存有路由信息,具体包括:提取查找到的所述连接状态信息中包含的套接字sock信息;

判断提取的所述sock信息中是否保存有路由信息。

4.如权利要求1所述的方法,其特征在于,将所述连接状态信息中的路由信息写入所述数据包,具体包括:采用第一数值对所述数据包中的路由目的变量进行赋值,其中,赋值为所述第一数值的路由目的变量表征所述数据包由本地处理;

对写入所述路由信息的数据包进行后续处理,具体包括:

将写入所述路由信息的数据包中携带的应用层数据递交给相应的进程处理。

5.如权利要求1所述的方法,其特征在于,当未查找到与所述数据包对应的连接状态信息时,所述方法还包括:在路由缓存中查找所述数据包的路由信息;

当根据查找到的路由信息,确定所述路由信息中包含的目的地址是本地地址时,采用第一数值对所述数据包中的路由目的变量进行赋值,将赋值后的数据包中携带的应用层数据递交给相应的进程处理,并在根据所述应用层数据建立了连接时,将在路由缓存中查找到的路由信息保存在建立的所述连接对应的连接状态信息中,其中,赋值为所述第一数值的路由目的变量表征所述数据包由本地处理;

当根据查找到的路由信息,确定所述路由信息中包含的目的地址不是本地地址时,采用第二数值对所述数据包中的路由目的变量进行赋值,根据所述路由信息,将赋值后的数据包转发给其它设备,其中,赋值为所述第二数值的路由目的变量表征所述数据包需转发给其它设备。

6.一种数据包处理装置,其特征在于,包括:

接收模块,用于接收数据包;

第一查找模块,用于查找与所述数据包对应的连接状态信息;

判断模块,用于判断所述第一查找模块查找到的所述连接状态信息中是否保存有路由信息;若是,则将所述连接状态信息中的路由信息写入所述数据包,并对写入所述路由信息的数据包进行后续处理;否则,在路由缓存中查找所述数据包的路由信息,将查找到的路由信息写入所述数据包,对写入所述路由信息的数据包进行后续处理,并将查找到的路由信息保存在所述数据包对应的连接状态信息中。

7.如权利要求6所述的装置,其特征在于,所述连接状态信息包括:传输控制协议TCP长连接的连接状态信息;

所述第一查找模块具体用于,根据所述数据包的TCP头,查找与所述TCP头对应的连接状态信息。

8.如权利要求6所述的装置,其特征在于,所述判断模块具体用于,提取所述第一查找模块查找到的所述连接状态信息中包含的套接字sock信息,判断提取的所述sock信息中是否保存有路由信息。

9.如权利要求6所述的装置,其特征在于,所述判断模块具体用于,采用第一数值对所述数据包中的路由目的变量进行赋值,其中,赋值为所述第一数值的路由目的变量表征所述数据包由本地处理;

所述判断模块具体用于,将写入所述路由信息的数据包中携带的应用层数据递交给相应的进程处理。

10.如权利要求6所述的装置,其特征在于,所述装置还包括:

第二查找模块,用于当所述第一查找模块未查找到与所述数据包对应的连接状态信息时,在路由缓存中查找所述数据包的路由信息;当根据查找到的路由信息,确定所述路由信息中包含的目的地址是本地地址时,采用第一数值对所述数据包中的路由目的变量进行赋值,将赋值后的数据包中携带的应用层数据递交给相应的进程处理,并在根据所述应用层数据建立了连接时,将在路由缓存中查找到的路由信息保存在建立的所述连接对应的连接状态信息中,其中,赋值为所述第一数值的路由目的变量表征所述数据包由本地处理;当根据查找到的路由信息,确定所述路由信息中包含的目的地址不是本地地址时,采用第二数值对所述数据包中的路由目的变量进行赋值,根据所述路由信息,将赋值后的数据包转发给其它设备,其中,赋值为所述第二数值的路由目的变量表征所述数据包需转发给其它设备。

说明书 :

一种数据包处理方法及装置

技术领域

[0001] 本发明涉及计算机技术领域,尤其涉及一种数据包处理方法及装置。

背景技术

[0002] 随着计算机技术的发展,中央处理器(Central Processing Unit,CPU)的发展进入了多核时代,服务器上也越来越地使用多核CPU来处理从大量的传输控制协议(Transmission Control Protocol,TCP)连接上发来的数据包。
[0003] 在现有技术中,网络设备可与其它设备建立TCP长连接,当该网络设备从TCP长连接上接收到数据包后,会在网络层的路由缓存中查找该数据包的路由信息,若该网络设备即为该数据包的目的地,则将该数据包去掉互联网协议(Internet Protocol,IP)头后递交给传输层,在传输层查找该数据包对应的TCP长连接的连接状态信息,若查找到该TCP长连接的连接状态信息,则根据查找到的连接状态信息,通过该连接状态信息中包含的该TCP长连接的Socket,将该数据包中携带的应用层数据递交给应用层中相应的进程处理。
[0004] 但是,由于CPU对从路由缓存中查找路由信息比较耗费时间,而且使用多核CPU的网络设备上一般建立有大量TCP长连接,每个TCP长连接都可能会持续收到多个数据包,因此,分别针对每个数据包从路由缓存中查找路由信息的处理方式降低了网络设备处理数据包的效率。

发明内容

[0005] 本发明实施例提供一种数据包处理方法及装置,用以解决现有技术中分别针对每个数据包从路由缓存中查找路由信息的处理方式降低了网络设备处理数据包的效率。
[0006] 本发明实施例提供的一种数据包处理方法,包括:
[0007] 接收数据包;
[0008] 查找与所述数据包对应的连接状态信息;
[0009] 判断查找到的所述连接状态信息中是否保存有路由信息;
[0010] 若是,则将所述连接状态信息中的路由信息写入所述数据包,并对写入所述路由信息的数据包进行后续处理;
[0011] 否则,在路由缓存中查找所述数据包的路由信息,将查找到的路由信息写入所述数据包,对写入所述路由信息的数据包进行后续处理,并将查找到的路由信息保存在所述数据包对应的连接状态信息中。
[0012] 本发明实施例提供的一种数据包处理装置,包括:
[0013] 接收模块,用于接收数据包;
[0014] 第一查找模块,用于查找与所述数据包对应的连接状态信息;
[0015] 判断模块,用于判断所述第一查找模块查找到的所述连接状态信息中是否保存有路由信息;若是,则将所述连接状态信息中的路由信息写入所述数据包,并对写入所述路由信息的数据包进行后续处理;否则,在路由缓存中查找所述数据包的路由信息,将查找到的路由信息写入所述数据包,对写入所述路由信息的数据包进行后续处理,并将查找到的路由信息保存在所述数据包对应的连接状态信息中。
[0016] 本发明实施例提供一种数据包处理方法及装置,该方法处理设备接收数据包,查找与所述数据包对应的连接状态信息,判断查找到的所述连接状态信息中是否保存有路由信息;若是,则将所述连接状态信息中的路由信息写入所述数据包,并对写入所述路由信息的数据包进行后续处理;否则,在路由缓存中查找所述数据包的路由信息,将查找到的路由信息写入所述数据包,对写入所述路由信息的数据包进行后续处理,并将查找到的路由信息保存在所述数据包对应的连接状态信息中。通过上述方法,由于针对网络设备上的每个连接,除了通过该连接接收的第一个数据包以外,对于通过该连接接收的其它数据包,网络设备在将该其它数据包递交给网络层之前,均将保存在该连接的连接状态信息中的该第一个数据包的路由信息确定为该其它数据包的路由信息,从而,在网络层,网络设备不用从路由缓存中查找该其它数据包的路由信息,因此,提高了网络设备处理数据包的效率。

附图说明

[0017] 此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
[0018] 图1为本发明实施例提供的数据包处理过程;
[0019] 图2A为本发明实施例提供的对应于TCP协议栈的数据包处理主要流程示意图;
[0020] 图2B为现有技术中对应于TCP协议栈的数据包处理主要流程示意图;
[0021] 图3为本发明实施例提供的数据包处理的详细流程;
[0022] 图4为本发明实施例提供的数据包处理装置结构示意图。

具体实施方式

[0023] 为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明具体实施例及相应的附图对本发明技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
[0024] 图1为本发明实施例提供的数据包处理过程,具体包括以下步骤:
[0025] S101:网络设备接收数据包。
[0026] 在本发明实施例中,所述的网络设备可以为服务器或客户端。其中,所述的服务器包括但不限于:使用了多核CPU的服务器、使用了多个CPU的服务器等。所述的客户端包括但不限于:个人计算机(Personal Computer,PC)、手机、平板电脑等。网络设备之间可建立连接,连接建立后,网络设备则可基于建立的连接发送和接收数据包。具体的,网络设备接收到的数据包可以是携带有IP头的数据包,则后续网络设备可在其网络层基于IP协议处理该数据包。
[0027] 步骤S101中,网络设备通过其网卡从已建立的连接上接收数据包,然后在数据链路层,网卡针对接收到的每个数据包,校验该数据包的帧头中携带的循环冗余校验码(Cyclic Redundancy Check,CRC),并校验帧头中携带的目的物理地址,若对帧头中携带的CRC校验通过,且帧头中携带的目的物理地址与网络设备的物理地址(也即,网络设备的网卡的物理地址)相同,则确定该数据包合法,可对其进行后续处理,否则,确定该数据包非法,可直接将其丢弃。
[0028] S102:网络设备查找与该数据包对应的连接状态信息。
[0029] 在数据链路层,网络设备针对上述每个合法的数据包,会为该数据包在操作系统内核中构建一个相应的套接字缓冲区(sk_buff,SKB),并将该数据包封装在该SKB中。由于后续协议栈中要处理和递交的数据包均已封装在SKB中,因此,后续协议栈中的各层协议对数据包进行相应的处理和递交也可视为对封装有该数据包的SKB进行相应的处理和递交。本发明下面所述的数据包均是指封装在SKB中的数据包。
[0030] 在本发明实施例中,网络设备在将数据包从数据链路层递交至网络层之前,可查找与该数据包对应的连接状态信息(也即,接收该数据包所基于的连接的连接状态信息),进而,尝试确定该数据包的路由信息。其中,所述的连接状态信息保存在传输层,连接状态信息可包含套接字(sock)信息等。其中,数据包的路由信息可表征该数据包由本地处理,或该数据包需转发给其它设备。
[0031] S103:网络设备判断查找到的该连接状态信息中是否保存有路由信息,若是,则执行步骤S104,否则,执行步骤S105。
[0032] S104:网络设备将该连接状态信息中的路由信息写入该数据包,并对写入该路由信息的数据包进行后续处理。
[0033] 在本发明实施例中,若网络设备确定查找到的该连接状态信息中保存有路由信息,则网络设备将该连接状态信息中的路由信息写入该数据包中,此时,该数据包的路由信息即为写入该数据包的路由信息,从而网络设备可根据写入的路由信息,对写入该路由信息的数据包进行后续处理。
[0034] 具体的,网络设备将写入该路由信息的数据包从数据链路层递交给网络层,网络层通过读取写入该路由信息的数据包的路由目的变量可判断出该数据包中已写入路由信息,因此,不必在路由缓存中去查找该数据包的路由信息,而是可以根据该数据包中已写入的路由信息确定该数据包是由本地处理,还是需转发给其它设备。
[0035] S105:网络设备在路由缓存中查找该数据包的路由信息,将查找到的路由信息写入该数据包,对写入该路由信息的数据包进行后续处理,并将查找到的路由信息保存在所述数据包对应的连接状态信息中。
[0036] 在本发明实施例中,若网络设备确定查找到的该连接状态信息中未保存路由信息,则网络设备将该数据包从数据链路层递交给网络层,在网络层的路由缓存中去查找该数据包的路由信息。
[0037] 具体的,网络层可根据该数据包中携带的源IP地址、目的IP地址等计算hash值,再在路由缓存hash表中查找到与该hash值相同的一组表项,然后遍历该组表项对应的链表,查找出与该数据包中携带的源IP地址、目的IP地址、子网掩码等完全相同的表项,此时,网络设备已在网络层的路由缓存中查找到该数据包的路由信息,即为与该数据包中携带的源IP地址、目的IP地址、子网掩码等完全相同的表项。然后,网络设备一方面将该路由信息写入该数据包,另一方面,网络设备还要查找传输层保存的该数据包对应的连接状态信息,并将该路由信息也保存在查找到的该数据包对应的连接状态信息中。
[0038] 由于网络设备已经将该路由信息写入数据包,因此,在网络层可判断出该数据包中已写入路由信息,进而可以根据该数据包中已写入的路由信息决定该数据包是由本地处理,还是需转发给其它设备,从而可根据该路由信息对该数据包进行后续处理。
[0039] 通过上述方法,由于针对网络设备上的每个连接,除了通过该连接接收的第一个数据包以外,对于通过该连接接收的其它数据包,网络设备在将该其它数据包递交给网络层之前,均已将保存在该连接的连接状态信息中的路由信息(该路由信息就是第一个数据包的路由信息)确定为该其它数据包的路由信息,从而,在网络层,网络设备无需从路由缓存中查找该其它数据包的路由信息,直接递交给传输层处理即可,提高了网络设备处理数据包的效率。
[0040] 图2A示出了本发明实施例提供的对应于TCP协议栈的数据包处理主要流程,图2B示出了现有技术中对应于TCP协议栈的数据包处理主要流程,可以看出,在本发明实施例提供的流程(如图2A)中,如果从一个连接上接收到的数据包不是从该连接上接收到的第一个数据包,则网络设备在数据链路层就可为该数据包确定出该数据包的路由信息,因此,在网络层,可跳过在路由缓存中查找路由信息的步骤,从而提高了网络设备处理数据包的效率。
[0041] 在本发明实施例中,在网络设备之间需要通过建立的连接连续发送和接收多个数据包时,网络设备之间建立的连接可以是TCP长连接,相应的,上述的连接状态信息包括TCP长连接的连接状态信息,在上述步骤S102中,查找与数据包对应的连接状态信息,具体包括:根据数据包中的TCP头,查找与该TCP头对应的连接状态信息。其中一种可行的方法为:通过TCP协议栈获取该数据包中的帧头中的特定信息(如上层协议、帧类型等)以定位IP头,进而获取IP头中的特定信息(如上层协议、IP头长度等),以定位TCP头。当然,由于在查找与该TCP头对应的连接状态信息时,数据包仍位于数据链路层,因此,除了在上述可行的方法中涉及的处理操作(这些处理操作仅是为了查找到保存在传输层的与该数据包对应的连接状态信息)以外,可不对该数据包执行其它应当在网络层或传输层执行的其它处理操作。
[0042] 在这种情况下,网络设备每建立起一个TCP长连接,都会在传输层针对该TCP长连接保存该TCP长连接的连接状态信息,其中,TCP长连接的连接状态信息可包含sock信息等,该sock信息包含了该TCP长连接对应的源IP地址、目的IP地址、源端口号、目的端口号(可合称四元组)等。而数据包的TCP头中携带有该数据包的源IP地址、目的IP地址、源端口号、目的端口号等。则在TCP长连接已建立的前提下,网络设备可通过将数据包的TCP头中携带的四元组与各连接状态信息中的四元组进行匹配,进而查找出唯一的与该数据包对应的连接状态信息。
[0043] 进一步的,由于将路由信息保存在连接状态信息中时,具体可将其保存在连接状态信息包含的sock信息中,因此,当网络设备查找到与数据包对应的连接状态信息后,在上述步骤S103中,网络设备判断查找到的连接状态信息中是否保存有路由信息,具体包括:网络设备提取查找到的连接状态信息中包含的sock信息,判断提取的所述sock信息中是否保存有路由信息。
[0044] 进一步的,在实际应用中,在网络层,网络设备是根据数据包中的路由目的变量是否已经赋值来判断该数据包中是否已写入对应的路由信息,如果该路由目的变量已经赋值,则网络设备确定该数据包中已经写入了对应的路由信息,如果该路由目的变量未赋值,则网络设备确定该数据包中尚未写入对应的路由信息。
[0045] 更进一步的,所述的路由目的变量的取值对应的表征含义可由网络设备上的协议栈预先定义,在本发明实施例中,当数据包的路由目的变量的取值为第一数值时,表征该数据包由本地处理,当数据包的路由目的变量的取值为第二数值时,表征该数据包需要转发给其它设备。
[0046] 因此,在上述步骤S104中,若网络设备确定出查找到的连接状态信息中保存有路由信息,则可采用第一数值对该数据包中的路由目的变量进行赋值,将赋值后的数据包作为写入路由信息的数据包,并将写入路由信息的数据包中携带的应用层数据递交给相应的进程处理。具体的,网络设备采用第一数值对该数据包中的路由目的变量进行赋值后,可将该数据包从数据链路层递交给网络层,在网络层根据该数据包中的路由目的变量的取值(即为第一数值)确定该数据包由本地处理,进而,将该数据包递交给传输层,并在传输层通过该数据包对应的套接字(Sock)将该数据包中携带的应用层数据递交给相应的进程处理。
[0047] 另外,在某些场景下,在上述步骤S102中,可能未查到与所述数据包对应的连接状态信息。例如,对于建立TCP连接时使用的握手数据包,由于网络设备接收到握手数据包时,该TCP连接尚未完成建立,因此,在传输层保存的各连接状态信息中还没有该TCP连接的连接状态信息,从而,网络设备也无法查找到与该数据包对应的连接状态信息;类似的还有对于需转发给其它设备的数据包,由于该数据包对应的TCP连接并非建立在该网络设备上,因此,在传输层保存的各连接状态信息中也没有该TCP连接的连接状态信息,从而,网络设备也无法查找到与该数据包对应的连接状态信息。
[0048] 针对上述场景,在本发明实施例中,当网络设备未查找到与该数据包对应的连接状态信息时,则将该数据包从数据链路层递交给网络层,由于在网络层可判断出该数据包中尚未写入路由信息,因此,仍在路由缓存中查找该数据包的路由信息。
[0049] 当根据查找到的路由信息,确定该路由信息中包含的目的IP地址是本地IP地址时,则该数据包可能是建立TCP连接的过程中所使用的握手数据包(由于此时在传输层尚未保存该TCP连接的连接状态信息,因此查找不到该连接状态信息),则采用第一数值对该数据包中的路由目的变量进行赋值,将赋值后的数据包中携带的应用层数据递交给相应的进程处理,并在根据该应用层数据建立了连接时,将在路由缓存中查找到的路由信息保存在建立的该连接对应的连接状态信息中,其中,赋值为第一数值的路由目的变量表征该数据包由本地处理。
[0050] 当根据查找到的路由信息,确定该路由信息中包含的目的地址不是本地地址时,可知该数据包可能是需转发给其它设备的数据包,则采用第二数值对所述数据包中的路由目的变量进行赋值,根据所述路由信息,将赋值后的数据包转发给其它设备,其中,赋值为第二数值的路由目的变量表征所述数据包需转发给其它设备。
[0051] 需要说明的是,由于对于需要转发给其它设备的数据包,其对应的连接并非建立在该网络设备上(对于这种数据包,该网络设备仅为一个转发设备),因此,网络设备在传输层无法查找到与这种数据包对应的连接状态信息。也就是说,如果网络设备接收到的数据包是需要转发给其它设备的数据包,那么网络设备是不可能在传输层中查找到该数据包对应的连接状态信息的,而如果针对接收到的一个数据包,网络设备可以在传输层中查找到该数据包对应的连接状态信息,那么该数据包一定是由该网络设备本地进行处理的。因此,在传输层的连接状态信息中保存的路由信息只能表征数据包由本地处理。
[0052] 根据上述说明,在图1所示的步骤S102中,如果网络设备查找到了该数据包对应的连接状态信息,则可确定该数据包一定是由该网络设备本地进行处理,如果未查找到该数据包对应的连接状态信息,则尚不能确定该数据包是否由本地处理(该数据包既可能是建立TCP长连接的握手数据包,也可能是需要转发给其它设备的数据包),因此只能通过在网络层的路由缓存中查找该数据包对应的路由信息才能确定。
[0053] 另外,当网络设备没有转发功能(也即,网络设备无法被设置为一个路由器)时,若该网络设备接收到数据包,并在网络层确定该数据包是需转发给其它设备的数据包时,则会将该数据包直接丢弃。
[0054] 图3为本发明实施例提供的数据包处理的详细过程,具体包括以下步骤:
[0055] S301:接收数据包。
[0056] S302:根据该数据包的TCP头,查找与该TCP头对应的连接状态信息。
[0057] S303:判断是否查找到了与该TCP头对应的连接状态信息,若是,则执行步骤S304,否则,执行步骤S308。
[0058] S304:提取查找到的连接状态信息中包含的sock信息。
[0059] S305:判断提取出的sock信息中是否保存有路由信息,若是,则执行步骤S306,否则,执行步骤S307。
[0060] S306:采用第一数值对该数据包中的路由目的变量进行赋值,将赋值后的数据包中携带的应用层数据递交给相应的进程处理。
[0061] 其中,赋值为第一数值的路由目的变量表征该数据包由本地处理。
[0062] S307:在路由缓存中查找该数据包的路由信息,根据查找到的路由信息对该数据包进行后续处理,并将查找到的路由信息保存在该数据包对应的sock信息中。
[0063] S308:在路由缓存中查找该数据包的路由信息。
[0064] S309:根据查找到的路由信息,判断该路由信息中包含的目的地址是否为本地地址,若是,则执行步骤S310,否则,执行S311。
[0065] S310:采用第一数值对该数据包中的路由目的变量进行赋值,将赋值后的数据包中携带的应用层数据递交给相应的进程处理。
[0066] 在步骤S310中,如果网络设备根据该数据包中携带的应用层数据,建立了相应的TCP长连接,则会在传输层建立该TCP长连接对应的连接状态信息,此时,网络设备则可直接将步骤S308中查找到的路由信息保存在已经建立的该连接状态信息中。
[0067] S311:采用第二数值对该数据包中的路由目的变量进行赋值,根据该路由信息,将赋值后的数据包转发给其它设备。
[0068] 其中,赋值为第二数值的路由目的变量表征该数据包需转发给其它设备。
[0069] 以上为本发明实施例提供的数据包处理方法,基于同样的思路,本发明实施例还提供一种数据包处理装置,如图4所示。
[0070] 图4为本发明实施例提供的数据包处理装置结构示意图,具体包括:
[0071] 接收模块401,用于接收数据包;
[0072] 第一查找模块402,用于查找与所述数据包对应的连接状态信息;
[0073] 判断模块403,用于判断所述第一查找模块402查找到的所述连接状态信息中是否保存有路由信息;若是,则将所述连接状态信息中的路由信息写入所述数据包,并对写入所述路由信息的数据包进行后续处理;否则,在路由缓存中查找所述数据包的路由信息,将查找到的路由信息写入所述数据包,对写入所述路由信息的数据包进行后续处理,并将查找到的路由信息保存在所述数据包对应的连接状态信息中。
[0074] 述连接状态信息包括:传输控制协议TCP长连接的连接状态信息;
[0075] 所述第一查找模块402具体用于,根据所述数据包的TCP头,查找与所述TCP头对应的连接状态信息。
[0076] 所述判断模块403具体用于,提取所述第一查找模块402查找到的所述连接状态信息中包含的套接字sock信息,判断提取的所述sock信息中是否保存有路由信息。
[0077] 所述判断模块403具体用于,采用第一数值对所述数据包中的路由目的变量进行赋值,其中,赋值为所述第一数值的路由目的变量表征所述数据包由本地处理;
[0078] 所述判断模块403具体用于,将写入所述路由信息的数据包中携带的应用层数据递交给相应的进程处理。
[0079] 所述装置还包括:
[0080] 第二查找模块404,用于当所述第一查找模块402未查找到与所述数据包对应的连接状态信息时,在路由缓存中查找所述数据包的路由信息;当根据查找到的路由信息,确定所述路由信息中包含的目的地址是本地地址时,采用第一数值对所述数据包中的路由目的变量进行赋值,将赋值后的数据包中携带的应用层数据递交给相应的进程处理,并在根据所述应用层数据建立了连接时,将在路由缓存中查找到的路由信息保存在建立的所述连接对应的连接状态信息中,其中,赋值为所述第一数值的路由目的变量表征所述数据包由本地处理;当根据查找到的路由信息,确定所述路由信息中包含的目的地址不是本地地址时,采用第二数值对所述数据包中的路由目的变量进行赋值,根据所述路由信息,将赋值后的数据包转发给其它设备,其中,赋值为所述第二数值的路由目的变量表征所述数据包需转发给其它设备。
[0081] 具体的上述如图4所示的装置可以位于网络设备上。
[0082] 本发明实施例提供一种数据包处理方法及装置,该方法处理设备接收数据包,查找与所述数据包对应的连接状态信息,判断查找到的所述连接状态信息中是否保存有路由信息;若是,则将所述连接状态信息中的路由信息写入所述数据包,并对写入所述路由信息的数据包进行后续处理;否则,在路由缓存中查找所述数据包的路由信息,将查找到的路由信息写入所述数据包,对写入所述路由信息的数据包进行后续处理,并将查找到的路由信息保存在所述数据包对应的连接状态信息中。通过上述方法,由于针对网络设备上的每个连接,除了通过该连接接收的第一个数据包以外,对于通过该连接接收的其它数据包,网络设备在将该其它数据包递交给网络层之前,均已将保存在该连接的连接状态信息中的该第一个数据包的路由信息确定为该其它数据包的路由信息,从而,在网络层,网络设备不用从路由缓存中查找该其它数据包的路由信息,因此,提高了网络设备处理数据包的效率。
[0083] 本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
[0084] 本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其它可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其它可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0085] 这些计算机程序指令也可存储在能引导计算机或其它可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0086] 这些计算机程序指令也可装载到计算机或其它可编程数据处理设备上,使得在计算机或其它可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其它可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0087] 在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
[0088] 内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。内存是计算机可读介质的示例。
[0089] 计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其它数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其它类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其它内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其它光学存储、磁盒式磁带,磁带磁磁盘存储或其它磁性存储设备或任何其它非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
[0090] 还需要说明的是,术语“包括”、“包含”或者其任何其它变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其它要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
[0091] 本领域技术人员应明白,本发明的实施例可提供为方法、系统或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
[0092] 以上所述仅为本发明的实施例而已,并不用于限制本发明。对于本领域技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的权利要求范围之内。