一种数据包处理方法、装置及设备与流程

文档序号:12949298阅读:178来源:国知局
一种数据包处理方法、装置及设备与流程

本发明涉及软件技术领域,特别是涉及一种数据包处理方法、装置及设备。



背景技术:

arp(addressresolutionprotocol,地址解析协议)是根据ip地址获取mac地址的一个tcp/ip协议。

arp的工作流程为:当运行arp协议的本设备需要向目标设备发送数据包时,首先,根据目标设备的ip地址,查找本地arp缓存表,确定能否查找到目标设备的mac地址,如果不能,则将包含目标设备ip地址的arp请求以广播方式发送给网络上的所有设备,并接收目标设备返回的arp应答消息(其中,arp应答消息中包含目标设备的mac地址),从而确定目标设备的mac地址,并将目标设备的ip地址和mac地址一并存入本地arp缓存表中,以便下次需要获得目标设备的mac地址时,可以直接通过查询arp缓存表来获取;当本设备接收到源设备发送的arp请求时,需要将本设备的ip地址和mac地址封装成arp应答消息,发送给源设备。

目前,arp协议的实现主要是基于linux内核的arp协议栈,但是,由于基于linux内核的arp协议栈中,arp缓存表是全局共享的,多线程之间会采用各种锁机制(例如,读写锁和自旋锁),来保证每个线程正确的对共享的arp缓存表进行访问和操作,由于锁机制会引起线程的阻塞,因而导致其处理数据包的效率不高,因此,需要一种能够提高数据包处理效率的方法。



技术实现要素:

本发明实施例的目的在于提供一种数据包处理方法、装置及设备,以实现提高数据包处理效率。具体技术方案如下:

第一方面,本发明实施例提供了一种数据包处理方法,应用于包含多核处理器的设备,每个核以单线程方式运行,每个核上存储有arp缓存表,所述方法包括:

所述多核处理器中的调度核获得目标数据包;确定处理所述目标数据包的目标核;调用所述目标核;

所述目标核根据目标arp缓存表对所述目标数据包进行处理,其中,所述目标arp缓存表为:所述目标核上存储的arp缓存表。

可选的,所述arp缓存表由各个设备对应的节点组成,每一设备对应的节点用于存储该设备的设备信息,所述设备信息包括:设备的ip地址和/或mac地址,所述调度核获得目标数据包,包括:

所述调度核获得本设备要发送给目标设备的目标数据包,其中,所述目标数据包中携带所述目标设备的ip地址;

所述目标核根据目标arp缓存表对所述目标数据包进行处理,包括:

所述目标核根据所述目标设备的ip地址查找所述目标arp缓存表中是否存储有所述目标设备的mac地址;

若为是,将所述目标设备的mac地址填充到所述目标数据包中;

将被填充mac地址后的所述目标数据包发送给所述目标设备。

可选的,若所述目标arp缓存表中未存储所述目标设备的mac地址,所述方法还包括:

所述目标核在所述目标arp缓存表中新建用于存储所述目标设备信息的目标节点,并将所述目标设备的ip地址存入所述目标节点;

缓存所述目标数据包。

可选的,所述方法还包括:

当所述目标核获得所述目标设备的mac地址时,所述目标核将所述目标设备的mac地址存入所述目标节点;并将所述目标设备的mac地址填充至缓存的所述目标数据包中,将被填充mac地址后的所述目标数据包发送至所述目标设备。

可选的,所述arp缓存表还用于存储各个节点所对应设备的键值,其中,一个设备的键值为:按照预设哈希算法计算得到的该设备的ip地址对应的键值;

所述目标核根据所述目标设备的ip地址查找所述目标arp缓存表中是否存储有所述目标设备的mac地址,包括:

所述目标核按照所述预设哈希算法,计算所述目标设备的ip地址对应的目标键值;

根据所述目标键值,查找所述目标arp缓存表中是否存储有与所述目标键值对应的目标节点;

若为是,判断所述目标节点中是否存储有所述目标设备的mac地址,若存储有,确定所述目标arp缓存表中存储有所述目标设备的mac地址。

可选的,所述arp缓存表由各个设备对应的节点组成,每一设备对应的节点用于存储该设备的设备信息,以及该节点的移除状态,各个节点的移除标识的初始设置为不可移除状态;所述目标数据包为本设备要发送给目标设备的数据包,所述目标数据包中携带所述目标设备的目标设备信息,

所述目标核根据目标arp缓存表对所述目标数据包进行处理,包括:所述目标核查找所述目标arp缓存表中是否存储有与所述目标设备信息对应的节点;

所述方法还包括:

所述目标核查找到所述目标arp缓存表中存储有所述目标设备信息对应的节点时,将所述目标设备信息对应的节点的移除标识标记为不可移除状态;

所述方法还包括:

所述目标核在预设时间点,移除所述目标arp缓存表中移除标识被标记为可移除状态的节点;

将所述目标arp缓存表中处于不可移除状态的节点的移出标识标记为可移除状态。

可选的,所述arp缓存表由各个设备对应的节点组成,每一设备对应的节点用于存储该设备的设备信息,所述设备信息包括:设备的ip地址和/或mac地址,所述调度核获得目标数据包,包括:

所述调度核获得源设备发送的目标数据包;

所述目标核根据所述目标设备的ip地址查找所述目标arp缓存表中是否存储有所述目标设备的mac地址,包括:

所述目标核判断所述目标数据包是否为arp数据包;

若是arp数据包,判断所述目标数据包中携带的目标ip地址是否与本设备的ip地址一致;

如果一致,判断所述目标数据包的类型是否为请求包;

如果是请求包,则将所述目标数据包中携带的所述源设备的ip地址和所述源设备的mac地址缓存至所述目标arp缓存表中;并封装本设备的ip地址和mac地址得到目标应答包,将所述目标应答包发送给所述源设备。

可选的,如果所述目标数据包的类型不为请求包,所述方法还包括:

所述目标核判断所述目标数据包的类型是否为响应包;

如果是响应包,则将所述目标数据包中携带的所述源设备的ip地址和mac地址缓存至所述目标arp缓存表中。

可选的,如果所述目标数据包中携带的目标ip地址与本设备的ip地址不一致,或者,如果所述目标数据包的类型不为响应包,所述方法还包括:

所述目标核丢弃所述目标数据包;

释放所述目标数据包在所述目标核上所占用的内存。

可选的,所述方法还包括:

所述目标核检测所述目标arp缓存表是否被更新;

若为是,向其他核发送所述目标arp缓存表的更新消息,以使其他核根据所述更新消息更新存储于自身的arp缓存表。

第二方面,本发明实施例提供了一种数据包处理装置,应用于包含多核处理器的设备,每个核以单线程方式运行,每个核上存储有arp缓存表,所述装置包括:收发模块和处理模块;

所述收发模块,用于所述多核处理器中的调度核获得目标数据包;

所述处理模块,包括:应用于所述多核处理器的调度核中的第一处理子模块和应用于所述多核处理器的目标核中的第二处理子模块;

所述第一处理子模块,用于确定处理所述目标数据包的目标核;调用所述目标核;

所述第二处理子模块,用于根据目标arp缓存表对所述目标数据包进行处理,其中,所述目标arp缓存表为:所述目标核上存储的arp缓存表。

可选的,所述arp缓存表由各个设备对应的节点组成,每一设备对应的节点用于存储该设备的设备信息,所述设备信息包括:设备的ip地址和/或mac地址,

所述收发模块,还用于:

获得本设备要发送给目标设备的目标数据包,其中,所述目标数据包中携带所述目标设备的ip地址;

所述第二处理子模块,还用于:

根据所述目标设备的ip地址查找所述目标arp缓存表中是否存储有所述目标设备的mac地址;

若为是,将所述目标设备的mac地址填充到所述目标数据包中;

将被填充mac地址后的所述目标数据包发送给所述目标设备。

可选的,所述第二处理子模块,还用于:

若所述目标arp缓存表中未存储所述目标设备的mac地址,在所述目标arp缓存表中新建用于存储所述目标设备信息的目标节点,并将所述目标设备的ip地址存入所述目标节点;

缓存所述目标数据包。

可选的,所述第二处理子模块,还用于:

当所述目标核获得所述目标设备的mac地址时,将所述目标设备的mac地址存入所述目标节点;并将所述目标设备的mac地址填充至缓存的所述目标数据包中,将被填充mac地址后的所述目标数据包发送至所述目标设备。

可选的,所述arp缓存表还用于存储各个节点所对应设备的键值,其中,一个设备的键值为:按照预设哈希算法计算得到的该设备的ip地址对应的键值;

所述第二处理子模块,还用于:

按照所述预设哈希算法,计算所述目标设备的ip地址对应的目标键值;

根据所述目标键值,查找所述目标arp缓存表中是否存储有与所述目标键值对应的目标节点;

若为是,判断所述目标节点中是否存储有所述目标设备的mac地址,若存储有,确定所述目标arp缓存表中存储有所述目标设备的mac地址。

可选的,所述arp缓存表由各个设备对应的节点组成,每一设备对应的节点用于存储该设备的设备信息,以及该节点的移除状态,各个节点的移除标识的初始设置为不可移除状态;所述目标数据包为本设备要发送给目标设备的数据包,所述目标数据包中携带所述目标设备的目标设备信息,

所述目标核根据目标arp缓存表对所述目标数据包进行处理,包括:所述目标核查找所述目标arp缓存表中是否存储有与所述目标设备信息对应的节点;

所述第二处理子模块,还用于:

查找到所述目标arp缓存表中存储有所述目标设备信息对应的节点时,将所述目标设备信息对应的节点的移除标识标记为不可移除状态;

在预设时间点,移除所述目标arp缓存表中移除标识被标记为可移除状态的节点;

将所述目标arp缓存表中处于不可移除状态的节点的移出标识标记为可移除状态。

可选的,所述arp缓存表由各个设备对应的节点组成,每一设备对应的节点用于存储该设备的设备信息,所述设备信息包括:设备的ip地址和/或mac地址,所述收发模块,还用于:

获得源设备发送的目标数据包;

所述第二处理子模块,还用于:

判断所述目标数据包是否为arp数据包;

若是arp数据包,则判断所述目标数据包中携带的目标ip地址是否与本设备的ip地址一致;

如果一致,则判断所述目标数据包的类型是否为请求包;

如果为请求包,则将所述目标数据包中携带的所述源设备的ip地址和所述源设备的mac地址缓存至所述目标arp缓存表中;并封装本设备的ip地址和mac地址得到目标应答包,将所述目标应答包发送给所述源设备。

可选的,所述第二处理子模块,还用于:

若所述目标数据包的类型不为请求包,则判断所述目标数据包的类型是否为响应包;

如果是响应包,则将所述目标数据包中携带的所述源设备的ip地址和mac地址缓存至所述目标arp缓存表中。

可选的,所述第二处理子模块,还用于:

如果所述目标数据包中携带的目标ip地址与本设备的ip地址不一致,或者,如果所述目标数据包的类型不为响应包,则丢弃所述目标数据包;释放所述目标数据包在所述目标核上所占用的内存。

可选的,所述第二处理子模块,还用于:

检测所述目标arp缓存表是否被更新;

若为是,则向其他核发送所述目标arp缓存表的更新消息,以使其他核根据所述更新消息更新存储于自身的arp缓存表。

在本发明实施的又一方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述任一所述的数据包处理方法。

在本发明实施的又一方面,本发明实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一所述的数据包处理方法。

可见,应用本发明实施例提供的技术方案,采用多核处理方式,每个核独立维护自身的arp缓存表,并且每个核以单线程方式运行,因而,使得每个线程可以单独对arp缓存表进行访问和操作,无需对arp缓存表采用锁机制,避免了因使用锁机制而引起的线程阻塞,从而提高了数据包处理效率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。

图1为本发明实施例提供的一种数据包处理方法的流程示意图;

图2为本发明实施例提供的一种目标核对目标数据包的处理流程示意图;

图3为本发明实施例提供的另一种目标核对目标数据包的处理流程示意图;

图4为本发明实施例提供的一种arp缓存表的结构示意图;

图5为本发明实施例提供的一种数据包处理装置的结构示意图;

图6为本发明实施例提供的另一种数据包处理装置的结构示意图;

图7为本发明实施例提供的一种设备的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述。

为了解决现有技术中处理数据包效率不高的问题,本发明实施例公开了一种数据包处理方法、装置及设备。

具体的,本发明实施例提供的数据包处理方法应用场景可以为:包含多核处理器的设备作为执行主体,该设备中的每个核以单线程方式运行,每个核上存储有arp缓存表,多核处理器中的调度核获得目标数据包,进而,确定处理该目标数据包的目标核,并调用该目标核;该目标核根据目标arp缓存表对该目标数据包进行处理,其中,目标arp缓存表为:该目标核上存储的arp缓存表。

下面对本发明实施例所提供的一种数据包处理方法进行介绍。

需要说明的是,本发明实施例所提供的一种数据包方法应用于包含多核处理器的设备,每个核以单线程方式运行,每个核上存储有arp缓存表,在具体应用中,该设备可以为服务器,也可以为、手机、平板电脑、个人电脑等可以进行数据包接收与发送处理的设备,这都是合理的。本发明实施例对设备的具体型号不做限定。例如,可以为包含16核处理器的个人电脑。

上述多核处理器从功能上划分可以分为:调度核和非调度核。其中,调度核其功能可以理解为对上述多核处理器中的各个非调度核进行调度。

另外,实现本发明实施例所提供的一种数据包方法的功能软件可以为专门的数据包处理软件,也可以为现有数据包处理软件或其他具有数据包处理功能的软件中的插件。

图1为本发明实施例提供的一种数据包处理方法的一种流程示意图。如图1所示,本发明实施例所提供的一种数据包处理方法,可以包括如下步骤:

s101,多核处理器中的调度核获得目标数据包。

需要说明的是,目标数据包是调度核获得的任意数据包,具体的,目标数据包可以是本设备要发送给目标设备的数据包,也可以是源设备向本设备发送的数据包,目标设备和源设备均是除本设备以外的设备,目标设备和源设备可以为同一设备,也可以为不同设备。本发明实施例对目标数据包的具体类型不做限定。例如,目标数据包可以为arp请求包,也可以为arp响应包。

s102,调度核确定处理所述目标数据包的目标核。

由于本设备的处理器包含多个可以进行数据处理的核,因此,调度核需要从多个核中选择一个核作为目标核来处理该目标数据包,具体的,调度核可以利用多核调度算法,从多个核中选择一个核作为目标核,具体采用的多核调度算法可以为:全局队列调度算法、局部队列调度算法等等,本发明实施例对具体的调度核确定处理目标数据包的目标核的方法不做限定。

实际应用中,调度核和目标核可以对应一个物理核,也可以对应不同的物理核,本发明实施例对此不做限定。

s103,调度核调用所述目标核。

可以理解的是,调度核将目标数据包传递给目标核,可以使目标核对目标数据包进行处理,完成对目标核的调用。具体的调度核将目标数据包传递给目标核的方法为现有技术,本发明实施例在此不再赘述。本发明实施例对具体的将目标数据包传递给目标核的方法不做限定。例如,调用核可以将存储目标数据包内容的结构体以传递参数的形式传递给目标核提供的接口函数,从而,目标核可以获得该目标数据包的内容,进而,目标核可以对该目标数据包进行处理。

s104,目标核根据目标arp缓存表对所述目标数据包进行处理。

其中,目标arp缓存表为:目标核上存储的arp缓存表。

实际应用中,设计人员可以根据自身需求设计根据目标arp缓存表对目标数据包进行处理的方法,本发明实施例对具体的处理方法不做限定。例如,如果目标数据包是本设备要发送给目标设备的数据包,该处理方法可以为:目标核获得目标数据包中携带的目标设备的ip地址,查找目标arp缓存表中是否存在该目标设备的mac地址,如果存在,则将目标设备的mac地址填充到目标数据包中;将被填充mac地址后的目标数据包发送给目标设备。

可见,应用本发明实施例提供的技术方案,采用多核处理方式,每个核独立维护自身的arp缓存表,并且每个核以单线程方式运行,因而,使得每个线程可以单独对arp缓存表进行访问和操作,无需对arp缓存表采用锁机制,避免了因使用锁机制而引起的线程阻塞,从而提高了数据包处理效率。为了简化目标核对数据包的处理过程,在一种具体的实施方式中,arp缓存表由各个设备对应的节点组成,每一设备对应的节点用于存储该设备的设备信息,设备信息包括:设备的ip地址和/或mac地址,目标数据包中携带目标设备的ip地址,在调度核获得本设备要发送给目标设备的目标数据包后,目标核根据目标arp缓存表对目标数据包进行处理,可以包括以下步骤:

第一步,目标核根据目标设备的ip地址查找目标arp缓存表中是否存储有目标设备的mac地址;如果是,则执行第二步;

第二步,目标核将目标设备的mac地址填充到目标数据包中;将被填充mac地址后的目标数据包发送给目标设备。

对于现有技术而言,本设备在获得要发送给目标设备的数据包后,对数据包进行处理的步骤还包括:定期检查数据包状态,而本发明实施例去掉了定期检查数据包状态的步骤,从而简化了目标核对数据包的处理过程,提高了对数据包的处理效率。

实际应用中,在目标arp缓存表中未存储目标设备的mac地址时,目标数据包无法被填充目标设备的mac地址,进而无法被发送给目标设备,此时,目标数据包可以会被丢弃,为了避免目标数据包的丢失,在目标arp缓存表中未存储目标设备的mac地址时,该方法还可以包括:目标核在目标arp缓存表中新建用于存储目标设备信息的目标节点,并将目标设备的ip地址存入所述目标节点;缓存目标数据包。

具体的,每一设备对应的节点存储的内容还包括:缓存包队列,该缓存包队列用于存放暂时未查找到目标设备mac地址的目标数据包。

可以看出,将暂时未查找到目标设备mac地址的目标数据包缓存起来,从而避免了目标数据包的丢失。

为了能够将缓存的目标数据包发送给目标设备,在一种具体的实施方式中,针对已被缓存的目标数据包,该方法还可以包括:

当目标核获得目标设备的mac地址时,目标核将目标设备的mac地址存入该目标节点;并将目标设备的mac地址填充至缓存的目标数据包中,将被填充mac地址后的目标数据包发送至目标设备。

具体的,目标核获得目标设备的mac地址的方法可以为:目标核以广播方式向本局域网内的其他设备发送arp请求包,进而,目标核可以获得目标设备回应的arp响应包,进一步的,可以获得该响应包中携带的该目标设备的mac地址。

可以看出,当目标核获得目标设备的mac地址时,可以将目标设备的mac地址填充至缓存的目标数据包中,从而,能够将被填充mac地址后的目标数据包发送至目标设备。

为了提高目标核查找目标arp缓存表的速率,在一种具体的实施方式中,arp缓存表还用于存储各个节点所对应设备的键值,其中,一个设备的键值为:按照预设哈希算法计算得到的该设备的ip地址对应的键值;目标核根据目标设备的ip地址查找目标arp缓存表中是否存储有目标设备的mac地址,可以为:

目标核按照预设哈希算法,计算目标设备的ip地址对应的目标键值;根据目标键值,查找目标arp缓存表中是否存储有与所述目标键值对应的目标节点;若为是,判断目标节点中是否存储有所述目标设备的mac地址,若存储有,确定目标arp缓存表中存储有目标设备的mac地址。

为了避免哈希冲突和简化算法,目标核可以采用对ip地址的最后八位取值,计算目标设备的ip地址对应的目标键值的公式可以为:

(uint32)ip&(2^8-1)

在一种具体的实施方式中,ip地址可以为:基于ipv4协议的ip地址,基于ipv4协议的ip地址长度为32位,一般而言,局域网中的设备是基于24位子网掩码划分的ip地址,ip地址的最后八位覆盖了局域网中的大部分设备,哈希算法采用对ip地址取最后八位取值,可以使得在同一个网段内各个设备对应的arp节点的分布尽量离散化,并且由于只用ip地址的后八位,减少了计算复杂度,使得目标核每次查找节点的时间接近于o(1),缩短了查找节点的时间。

需要说明的是,本发明实施例以基于ipv4协议的ip地址为例进行说明,仅为本发明的一个具体实例,并不构成对本发明的限定。在实际应用中,ip地址也可以为基于ipv6协议的ip地址。

在实际应用中,arp缓存表中各个节点所对应设备的键值可以是基于链表存储的,当发生哈希冲突时,可以选择依次延长链表长度,来解决哈希冲突。具体的延长链表的方法属于现有技术,本发明实施例在此不再赘述。

由于哈希算法采用对ip地址取最后八位取值,减少了计算复杂度,使得目标核每次查找节点的时间接近于o(1),缩短了查找节点的时间,从而提高了查找目标arp缓存表的速率。

现有技术在每次查找到节点时,会将该节点对应的定时器重置,使得定时器可以重新开始计时,并在超过定时器的定时时间后,会将该节点中存储的内容释放,可以理解为移除该节点,由于频繁的重置定时器会对设备的性能有影响。

因此,为了提高系统性能,在一种具体的实施方式中,arp缓存表由各个设备对应的节点组成,每一设备对应的节点用于存储该设备的设备信息,以及该节点的移除状态,各个节点的移除标识的初始设置为不可移除状态;目标数据包为本设备要发送给目标设备的数据包,目标数据包中携带该目标设备的目标设备信息,目标核根据目标arp缓存表对目标数据包进行处理,可以包括:目标核查找该目标arp缓存表中是否存储有与该目标设备信息对应的节点;

该方法还可以包括:

目标核查找到目标arp缓存表中存储有目标节点时,将目标设备信息对应的节点的移除标识标记为不可移除状态;

该方法还可以包括:

目标核在预设时间点,移除目标arp缓存表中移除标识被标记为可移除状态的节点;将目标arp缓存表中处于不可移除状态的节点的移出标识标记为可移除状态。

本发明实施例对标志位的名称不做限定。例如,在节点中引入标志位:used,该used标志位可以为一个bool(布尔)型变量,当used值为1时,表明该节点处于不可移除状态;当used值为0时,表明该节点处于可移除状态,预设时间点可以是由定时器的定时时长形成的时间点,例如,定时器的定时时长为两小时,定时器开始定时时间为9:00,则预设时间点为:11:00、13:00、15:00、17:00等时间点。

可以看出,在每次查询节点时,不重置定时器,而是采用设置标志位的方法,通过标志位的具体数值来表示该节点所处的移除状态,在预设时间点,移除目标arp缓存表中移除标识被标记为可移除状态的节点;将目标arp缓存表中处于不可移除状态的节点的移出标识标记为可移除状态,从而实现对节点的超时处理,避免了频繁的重置定时器对设备的性能影响,故提高了系统性能。

为了简化目标核对数据包的处理过程,在另一种具体的实施方式中,arp缓存表由各个设备对应的节点组成,每一设备对应的节点用于存储该设备的设备信息,设备信息包括:设备的ip地址和/或mac地址,在调度核获得源设备发送给本设备的目标数据包后,目标核根据目标arp缓存表对目标数据包进行处理,可以包括以下几个步骤:

步骤a,目标核判断目标数据包是否为arp数据包;若是arp数据包,则执行步骤b。

步骤b,判断目标数据包中携带的目标ip地址是否与本设备的ip地址一致;如果一致,则执行步骤c。

步骤c,判断目标数据包的类型是否为请求包;如果是请求包,则执行步骤d。

可以理解的是,请求包表示该目标数据包为:源设备发送的用于请求本设备的ip地址和mac地址的数据包。

步骤d,将目标数据包中携带的源设备的ip地址和源设备的mac地址缓存至目标arp缓存表中;并封装本设备的ip地址和mac地址得到目标应答包,将目标应答包发送给源设备。

对于现有技术而言,本设备在获得源设备发送的数据包后,对数据包进行处理的步骤还包括:构建数据包的状态表,而本发明实施例省略了构建数据包的状态表的步骤,从而简化了目标核对数据包的处理过程,提高了对数据包的处理效率。

为了应对数据包的类型不为请求包的情况,提高对数据包的处理能力,在一种具体的实施方式中,如果目标数据包的类型不为请求包,该方法还可以增加步骤e:目标核判断目标数据包的类型是否为响应包;如果是响应包,则执行步骤f。

可以理解的是,响应包表示该目标数据包为:源设备发送给本设备的数据包,且该数据包用于告知本设备该源设备的ip地址和mac地址。

步骤f,目标核将目标数据包中携带的源设备的ip地址和mac地址缓存至目标arp缓存表中。

可以看出,针对目标数据包的类型为响应包的情况,可以将目标数据包中携带的源设备的ip地址和mac地址缓存至目标arp缓存表中,从而提供了一种应对数据包的类型不为请求包的方法,提高对数据包的处理能力。

为了避免不必要的内存占用,提高内存利用率,在另一种具体的实施方式中,如果目标数据包中携带的目标ip地址与本设备的ip地址不一致,或者,如果目标数据包的类型不为响应包,所述方法还可以增加步骤g:目标核丢弃目标数据包;释放目标数据包在目标核上所占用的内存。

可以看出,针对目标核无法对目标数据包进行处理的情况,即出现目标数据包中携带的目标ip地址与本设备的ip地址不一致,或者,目标数据包的类型不为响应包的情况,目标核可以丢弃目标数据包,并释放目标数据包在目标核上所占用的内存,从而避免了不必要的内存占用,提高了内存利用率。

为了提高arp缓存表的可靠性,在实际应用中,该方法还可以包括:

目标核检测目标arp缓存表是否被更新;若为是,则向其他核发送目标arp缓存表的更新消息,以使其他核根据该更新消息更新存储于自身的arp缓存表。

需要说明的是,当目标核检测到目标arp缓存表出现节点被移除、新建节点的情况,可以认为检测到目标arp缓存表被更新,另外,当目标核检测到目标arp缓存表中的一个或多个节点存储的信息发生改变时,也可认为检测到目标arp缓存表被更新,例如,目标arp缓存表中节点a中之前存储的设备a的ip地址为h,当目标核检测到需要将节点a中存储的ip地址改为m时,即可认为检测到目标arp缓存表被更新,则需要向其他核发送所述目标arp缓存表的更新消息,从而,其他核可以根据该更新消息更新存储于自身的arp缓存表。

可以看出,目标核检测到目标arp缓存表被更新后,可以向其他核发送目标arp缓存表的更新消息,从而,其他核可以根据该更新消息更新存储于自身的arp缓存表,故实现了每个核上的arp缓存表的同步更新,提高了arp缓存表的可靠性。

下面通过一个具体实例来对本发明实施例进行简单介绍。

将本发明实施例提供的数据包处理方法应用于某个设备,该设备包含多核处理器,并且该设备是基于dpdk框架来实现本发明实施例提供的数据包处理方法。dpdk全称dataplanedevelopmentkit,dpdk是一种运行在用户态的快速处理包的高效率开发库,用于对数据包的高性能处理。dpdk运行在用户态上,可以利用自身提供的数据平面库来收发数据包,例如,利用多核并行处理、uio(userspacei/o)、大页内存等技术来收发数据包,绕过了linux内核协议栈对数据包处理过程,因此,基于dpdk开发的数据包处理方法在处理效率上相对于基于linux内核的协议栈开发的数据包处理方法有很大的优势,能够明显提高对数据包的处理速度,并且由于dpdk是运行在用户态,相对于运行在内核态而言,具有更好的可移植性和可修改性,因而,基于dpdk框架实现本发明实施例提供的数据包处理方法具有更好的灵活性。

该设备中的调度核在获得本设备要发送给目标设备的目标数据包后,可以采用全局队列调度算法,确定处理目标数据包的目标核,并调用该目标核,使该目标核可以按照如图2所示的数据包处理流程对该目标数据包进行处理。

参见图2,目标核根据目标数据包中携带的目标设备的ip地址,计算该ip地址对应的哈希值,利用哈希值,确定能否在目标arp缓存表中查找到与该目标设备对应的目标节点,如果能找到,判断目标节点中是否存储有目标设备的mac地址,若存储有,确定目标arp缓存表中存储有目标设备的mac地址,并将目标设备的mac地址填充到目标数据包中;将被填充mac地址后的目标数据包发送给目标设备,如果不能找到,则在目标arp缓存表中新建用于存储目标设备信息的目标节点,并将目标设备的ip地址存入目标节点,并缓存目标数据包。

可见,应用本发明实施例提供的技术方案,采用多核处理方式,每个核独立维护自身的arp缓存表,并且每个核以单线程方式运行,因而,使得每个线程可以单独对arp缓存表进行访问和操作,无需对arp缓存表采用锁机制,避免了因使用锁机制而引起的线程阻塞,从而提高了数据包处理效率,并且去掉了定期检查数据包状态的步骤,从而简化了目标核对数据包的处理过程,进一步的,将暂时未查找到目标设备mac地址的目标数据包缓存起来,从而避免了目标数据包的丢失,采用哈希算法查找节点,缩短了查找节点的时间,从而提高了查找目标arp缓存表的速率。

类似的,该设备中的调度核在获得源设备发送的目标数据包后,可以采用全局队列调度算法,确定处理所述目标数据包的目标核,并调用该目标核,使该目标核可以按照如图3所示的数据包处理流程对该目标数据包进行处理。

参见图3,目标核初始化定时器和目标arp缓存表,其中,目标arp缓存表为用于存储节点信息的哈希表,具体的目标arp缓存表的结构图参见图4,数字1-5分别为:利用哈希算法,基于各个设备的ip地址计算得到的各个设备的哈希值,arp节点内的主要的数据内容包括:mac地址,ip地址,对应的网卡端口,超时的定时器,缓存包队列。

在初始化定时器和目标arp缓存表后,目标核判断收到的目标数据包是否为arp数据包;若是arp数据包,则判断目标数据包中携带的目标ip地址是否与本设备的ip地址一致;如果一致,判断目标数据包的类型是否为请求包;如果是请求包,则将目标数据包中携带的源设备的ip地址和源设备的mac地址缓存至目标arp缓存表中;并封装本设备的ip地址和mac地址得到目标应答包,将目标应答包发送给所述源设备;如果目标数据包的类型不为请求包,判断目标数据包的类型是否为响应包;如果是响应包,将目标数据包中携带的源设备的ip地址和mac地址缓存至目标arp缓存表中。如果目标数据包中携带的目标ip地址与本机的ip地址不一致,或者,如果所述目标数据包的类型不为响应包,则丢弃目标数据包;释放目标数据包在目标核上所占用的内存。

可见,应用本发明实施例提供的技术方案,采用多核处理方式,每个核独立维护自身的arp缓存表,并且每个核以单线程方式运行,因而,使得每个线程可以单独对arp缓存表进行访问和操作,无需对arp缓存表采用锁机制,避免了因使用锁机制而引起的线程阻塞,从而提高了数据包处理效率,并且省略了构建数据包的状态表的步骤,从而简化了目标核对数据包的处理过程,进一步的,针对目标数据包的类型为响应包的情况,可以将目标数据包中携带的源设备的ip地址和mac地址缓存至目标arp缓存表中,从而提供了一种应对数据包的类型不为请求包的方法,提高对数据包的处理能力,针对目标核无法对目标数据包进行处理的情况,即出现目标数据包中携带的目标ip地址与本设备的ip地址不一致,或者,目标数据包的类型不为响应包的情况,目标核可以丢弃目标数据包,并释放目标数据包在目标核上所占用的内存,从而避免了不必要的内存占用,提高了内存利用率。

与上述的方法实施例相对应,本发明实施例还提供一种数据包处理装置,应用于包含多核处理器的设备,每个核以单线程方式运行,每个核上存储有arp缓存表。

参见图5,图5为本发明实施例所提供的一种数据包处理装置的结构示意图,该装置包括:收发模块501和处理模块502;

收发模块501,用于多核处理器中的调度核获得目标数据包;

处理模块502,包括:应用于多核处理器的调度核中的第一处理子模块和应用于多核处理器的目标核中的第二处理子模块;

第一处理子模块,用于获得目标数据包;确定处理该目标数据包的目标核;调用该目标核;

第二处理子模块,用于根据目标arp缓存表对该目标数据包进行处理,其中,目标arp缓存表为:该目标核上存储的arp缓存表。

可见,应用本发明实施例提供的技术方案,采用多核处理方式,每个核独立维护自身的arp缓存表,并且每个核以单线程方式运行,因而,使得每个线程可以单独对arp缓存表进行访问和操作,无需对arp缓存表采用锁机制,避免了因使用锁机制而引起的线程阻塞,从而提高了数据包处理效率。

其中,arp缓存表由各个设备对应的节点组成,每一设备对应的节点用于存储该设备的设备信息,设备信息包括:设备的ip地址和/或mac地址,该收发模块501,还用于:

获得本设备要发送给目标设备的目标数据包,其中,该目标数据包中携带该目标设备的ip地址;

该第二处理子模块,还用于:

根据该目标设备的ip地址查找该目标arp缓存表中是否存储有该目标设备的mac地址;

若为是,将该目标设备的mac地址填充到该目标数据包中;

将被填充mac地址后的目标数据包发送给该目标设备。

其中,该第二处理子模块,还用于:

若该目标arp缓存表中未存储该目标设备的mac地址,在该目标arp缓存表中新建用于存储该目标设备信息的目标节点,并将该目标设备的ip地址存入该目标节点;缓存该目标数据包。

其中,该第二处理子模块,还用于:

当目标核获得该目标设备的mac地址时,将该目标设备的mac地址存入该目标节点;并将该目标设备的mac地址填充至缓存的目标数据包中,将被填充mac地址后的目标数据包发送至该目标设备。

其中,arp缓存表还用于存储各个节点所对应设备的键值,其中,一个设备的键值为:按照预设哈希算法计算得到的该设备的ip地址对应的键值;

该第二处理子模块,还用于:

按照该预设哈希算法,计算该目标设备的ip地址对应的目标键值;

根据该目标键值,查找该目标arp缓存表中是否存储有与该目标键值对应的目标节点;

若为是,判断该目标节点中是否存储有该目标设备的mac地址,若存储有,确定该目标arp缓存表中存储有该目标设备的mac地址。

其中,arp缓存表由各个设备对应的节点组成,每一设备对应的节点用于存储该设备的设备信息,以及该节点的移除状态,各个节点的移除标识的初始设置为不可移除状态;目标数据包为本设备要发送给目标设备的数据包,该目标数据包中携带该目标设备的目标设备信息,

目标核根据目标arp缓存表对该目标数据包进行处理,包括:目标核查找该目标arp缓存表中是否存储有与该目标设备信息对应的节点;

该第二处理子模块,还用于:

查找到该目标arp缓存表中存储有该目标设备信息对应的节点时,将该目标设备信息对应的节点的移除标识标记为不可移除状态;

在预设时间点,移除该目标arp缓存表中移除标识被标记为可移除状态的节点;

将该目标arp缓存表中处于不可移除状态的节点的移出标识标记为可移除状态。

其中,arp缓存表由各个设备对应的节点组成,每一设备对应的节点用于存储该设备的设备信息,设备信息包括:设备的ip地址和/或mac地址,该收发501模块,还用于:

获得源设备发送的目标数据包;

该第二处理子模块,还用于:

判断该目标数据包是否为arp数据包;

若是arp数据包,则判断该目标数据包中携带的目标ip地址是否与本设备的ip地址一致;

如果一致,则判断该目标数据包的类型是否为请求包;

如果为请求包,则将该目标数据包中携带的源设备的ip地址和源设备的mac地址缓存至该目标arp缓存表中;并封装本设备的ip地址和mac地址得到目标应答包,将该目标应答包发送给源设备。

其中,该第二处理子模块,还用于:

若该目标数据包的类型不为请求包,则判断该目标数据包的类型是否为响应包;

如果是响应包,则将该目标数据包中携带的源设备的ip地址和mac地址缓存至该目标arp缓存表中。

其中,该第二处理子模块,还用于:

如果该目标数据包中携带的目标ip地址与本设备的ip地址不一致,或者,如果该目标数据包的类型不为响应包,则丢弃该目标数据包;释放该目标数据包在该目标核上所占用的内存。

其中,该第二处理子模块还用于:

检测该目标arp缓存表是否被更新;

若为是,则向其他核发送该目标arp缓存表的更新消息,以使其他核根据该更新消息更新存储于自身的arp缓存表。

在可选的实施例中,如图6所示,本发明实施例中的处理模块502可以为处理器610,收发模块501可以是收发器620,同时,本发明实施例提供数据包处理装置,还可以包括存储器630,存储器630用于存储程序代码和数据。

本发明实施例还提供了一种设备,如图7所示,包括多核处理器701、通信接口702、存储器703和通信总线704,其中,多核处理器701,通信接口702,存储器703通过通信总线704完成相互间的通信,

存储器703,用于存放计算机程序;

多核处理器701,用于执行存储器703上所存放的程序时,实现本发明实施例所提供的数据包处理方法,具体的,该数据包处理方法如下步骤:

多核处理器中的调度核获得目标数据包;确定处理该目标数据包的目标核;调用该目标核;

目标核根据目标arp缓存表对该目标数据包进行处理,其中,目标arp缓存表为:该目标核上存储的arp缓存表。

可选的,arp缓存表由各个设备对应的节点组成,每一设备对应的节点用于存储该设备的设备信息,设备信息包括:设备的ip地址和/或mac地址,调度核获得目标数据包,包括:

调度核获得本设备要发送给目标设备的目标数据包,其中,该目标数据包中携带该目标设备的ip地址;

目标核根据目标arp缓存表对该目标数据包进行处理,包括:

目标核根据该目标设备的ip地址查找该目标arp缓存表中是否存储有该目标设备的mac地址;

若为是,将该目标设备的mac地址填充到该目标数据包中;

将被填充mac地址后的目标数据包发送给该目标设备。

可选的,若该目标arp缓存表中未存储该目标设备的mac地址,该方法还包括:

目标核在该目标arp缓存表中新建用于存储该目标设备信息的目标节点,并将该目标设备的ip地址存入该目标节点;

缓存该目标数据包。

可选的,该方法还包括:

当目标核获得该目标设备的mac地址时,该目标核将该目标设备的mac地址存入该目标节点;并将该目标设备的mac地址填充至缓存的目标数据包中,将被填充mac地址后的目标数据包发送至该目标设备。

可选的,arp缓存表还用于存储各个节点所对应设备的键值,其中,一个设备的键值为:按照预设哈希算法计算得到的该设备的ip地址对应的键值;

目标核根据该目标设备的ip地址查找该目标arp缓存表中是否存储有该目标设备的mac地址,包括:

目标核按照该预设哈希算法,计算该目标设备的ip地址对应的目标键值;

根据该目标键值,查找该目标arp缓存表中是否存储有与该目标键值对应的目标节点;

若为是,判断该目标节点中是否存储有该目标设备的mac地址,若存储有,确定该目标arp缓存表中存储有该目标设备的mac地址。

可选的,arp缓存表由各个设备对应的节点组成,每一设备对应的节点用于存储该设备的设备信息,以及该节点的移除状态,各个节点的移除标识的初始设置为不可移除状态;目标数据包为本设备要发送给目标设备的数据包,该目标数据包中携带该目标设备的目标设备信息,

目标核根据目标arp缓存表对该目标数据包进行处理,包括:该目标核查找该目标arp缓存表中是否存储有与该目标设备信息对应的节点;

该方法还包括:

目标核查找到该目标arp缓存表中存储有该目标设备信息对应的节点时,将该目标设备信息对应的节点的移除标识标记为不可移除状态;

该方法还包括:

目标核在预设时间点,移除该目标arp缓存表中移除标识被标记为可移除状态的节点;

将该目标arp缓存表中处于不可移除状态的节点的移出标识标记为可移除状态。

可选的,arp缓存表由各个设备对应的节点组成,每一设备对应的节点用于存储该设备的设备信息,设备信息包括:设备的ip地址和/或mac地址,调度核获得目标数据包,包括:

调度核获得源设备发送的目标数据包;

目标核根据该目标设备的ip地址查找该目标arp缓存表中是否存储有该目标设备的mac地址,包括:

目标核判断该目标数据包是否为arp数据包;

若是arp数据包,判断该目标数据包中携带的目标ip地址是否与本设备的ip地址一致;

如果一致,判断该目标数据包的类型是否为请求包;

如果是请求包,则将该目标数据包中携带的源设备的ip地址和源设备的mac地址缓存至该目标arp缓存表中;并封装本设备的ip地址和mac地址得到目标应答包,将该目标应答包发送给源设备。

可选的,如果该目标数据包的类型不为请求包,该方法还包括:

目标核判断该目标数据包的类型是否为响应包;

如果是响应包,则将该目标数据包中携带的源设备的ip地址和mac地址缓存至该目标arp缓存表中。

可选的,如果该目标数据包中携带的目标ip地址与本设备的ip地址不一致,或者,如果该目标数据包的类型不为响应包,该方法还包括:

目标核丢弃该目标数据包;

释放该目标数据包在该目标核上所占用的内存。

可选的,该方法还包括:

目标核检测该目标arp缓存表是否被更新;

若为是,向其他核发送该目标arp缓存表的更新消息,以使其他核根据该更新消息更新存储于自身的arp缓存表。

上述电子设备提到的通信总线可以是外设部件互连标准(peripheralcomponentinterconnect,简称pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,简称eisa)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

通信接口用于上述电子设备与其他设备之间的通信。

存储器可以包括随机存取存储器(randomaccessmemory,简称ram),也可以包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。

上述的处理器可以是通用处理器,包括中央处理器(centralprocessingunit,简称cpu)、网络处理器(networkprocessor,简称np)等;还可以是数字信号处理器(digitalsignalprocessing,简称dsp)、专用集成电路(applicationspecificintegratedcircuit,简称asic)、现场可编程门阵列(field-programmablegatearray,简称fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的数据包处理方法。

在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的数据包处理方法。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solidstatedisk(ssd))等。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1