一种基于操作系统内核网桥的数据发送方法和装置与流程

文档序号:12492687阅读:304来源:国知局
一种基于操作系统内核网桥的数据发送方法和装置与流程

本发明涉及计算机技术领域,具体涉及一种基于操作系统内核网桥的数据发送方法和装置。



背景技术:

目前,Linux kernel bridge(内核网桥)转发数据的过程为:网卡驱动从网卡缓存中提取网络数据,然后,网卡驱动将该网络数据传输至Linux kernel bridge子系统,Linux kernel bridge子系统对网络数据包进行转发处理,以将该网络数据发送出去。

然而,由于Linux kernel bridge子系统对网络数据的转发处理比较复杂,代码逻辑比较厚重,因此会降低Linux kernel bridge的数据转发性能。



技术实现要素:

本发明实施例提供一种基于操作系统内核网桥的数据发送方法和装置,可以提高Linux kernel bridge的数据转发性能。

本发明实施例提供一种基于操作系统内核网桥的数据发送方法,包括:

从网卡缓存中读取待发送的数据包;

在缓存的地址转发信息中查找所述数据包对应的地址转发信息;

当查找到所述数据包对应的地址转发信息时,根据查找到的地址转发信息确定用于发送所述数据包的目标网卡驱动;

直接向所述目标网卡驱动发送所述数据包,以便所述目标网卡驱动将所述数据包发送出去。

相应的,本发明实施例还提供一种基于操作系统内核网桥的数据发送装置,包括:

读取单元,用于从网卡缓存中读取待发送的数据包;

查找单元,用于在缓存的地址转发信息中查找所述数据包对应的地址转发信息;

确定单元,用于当查找到所述数据包对应的地址转发信息时,根据查找到的地址转发信息确定用于发送所述数据包的目标网卡驱动;

发送单元,用于直接向所述目标网卡驱动发送所述数据包,以便所述目标网卡驱动将所述数据包发送出去。

本发明实施例采用从网卡缓存中读取待发送的数据包,然后,在缓存的地址转发信息中查找该数据包对应的地址转发信息,当查找到该数据包对应的地址转发信息时,根据查找到的地址转发信息确定用于发送该数据包的目标网卡驱动,直接向该目标网卡驱动发送该数据包,以便该目标网卡驱动将该数据包发送出去。该方案可以将数据包直接发送给目标网卡驱动,并通过目标网卡驱动将数据包转发出去,无需再先将数据包发送至Linux kernel bridge子系统,然后由该子系统进行转发处理以将数据发送出去;因此,该方案可以提高Linux kernel bridge的数据转发速度,进而提高Linux kernel bridge的数据转发性能。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1a是本发明实施例提供的数据转发系统的场景示意图;

图1b是本发明实施例提供的基于操作系统内核网桥的数据发送方法的流程图;

图2a是本发明实施例提供的Linux bridge(网桥)系统的结构示意图;

图2b是本发明实施例提供的基于操作系统内核网桥的数据发送方法的另一流程图;

图3a是本发明实施例提供的基于操作系统内核网桥的数据发送装置的结构示意图;

图3b是本发明实施例提供的基于操作系统内核网桥的数据发送装置的另一结构示意图;

图3c是本发明实施例提供的基于操作系统内核网桥的数据发送装置的又一结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例提供一种基于操作系统内核网桥的数据发送方法和装置。

本发明实施例提供了一种数据转发系统包括:本发明实施例任一提供的基于操作系统内核网桥的数据发送装置。该数据发送装置可以集成在服务器中,比如,集成在Linux操作系统的服务器中。

如图1a所示,该数据转发系统包括服务器a、服务器b以及终端c,其中,服务器a集成有本发明实施例任一提供的基于操作系统内核网桥的数据发送装置。该服务器a与服务器b之间通过网络连接,服务器a与终端c之间通过网络连接。

在数据转发时,服务器a用于从网卡缓存中读取待发送的数据包,然后,在缓存的地址转发信息中查找该数据包对应的地址转发信息,当查找到该数据包对应的地址转发信息时,根据查找到的地址转发信息确定用于发送该数据包的目标网卡驱动,直接向该目标网卡驱动发送该数据包,以便该目标网卡驱动将该数据包发送给服务器a和终端c。

此外,服务器a还用于通过物理网卡将服务器b或者终端c发送的信号转换成网络数据,并存放在相应的网卡缓存中。

以下将分别进行详细说明。

实施例一、

本实施例将从基于操作系统内核网桥(kernel bridge)的数据发送装置的角度进行描述,该数据发送装置具体可以集成服务器中,比如,该服务器可以为Linux服务器。

一种基于操作系统内核网桥的数据发送方法,包括:从网卡缓存中读取待发送的数据包,然后,在缓存的地址转发信息中查找该数据包对应的地址转发信息,当查找到该数据包对应的地址转发信息时,根据查找到的地址转发信息确定用于发送该数据包的目标网卡驱动,直接向该目标网卡驱动发送该数据包,以便该目标网卡驱动将该数据包发送出去。

如图1b所示,该基于操作系统内核网桥的数据发送方法的流程图具体可以如下:

101、从网卡缓存中读取待发送的数据包。

其中,网卡缓存用于存放物理网卡转换的网络数据,每个物理网卡可以对应一个网卡缓存。

本实施例中操作系统可以Linux系统、或者其他的操作系统。

可选地,在步骤101之前,本实施例方法还可以包括:对内核网桥系统的地址转换信息进行拷贝,对拷贝的地址转换信息进行缓存。这样便于后续数据包转发时数据包进入内核网桥系统之前进行数据包的地址转发信息的确定。

102、在缓存的地址转发信息中查找该数据包对应的地址转发信息。

其中,地址转发(fdb)信息为用于转发或者发送数据包的信息,其主要功能是供网络设备如服务器在数据链路层对数据包进行转发,用于确定数据包发往哪个端口。该地址转发信息主要包括MAC(Media Access Control,媒体访问控制)地址与转发端口之间的对应关系(即映射关系)。

该地址转发信息可以包括地址转发表,比如,可以包括MAC(Media Access Control,媒体访问控制)地址转发表;该MAC地址也可以称为物理地址、硬件地址等等。

其中,地址转发表包含了转发地址与转发端口(port)之间的对应关系(映射关系),具体地,该地址转发表包含若干地址转发表项,该地址转发表项包含了转发地址与转发端口之间的对应关系(映射关系)。

比如,MAC地址转发表包含若干MAC地址转发表项,每个表项包含了MAC地址与转发端口(port)之间的对应关系。该地址转发表可以为一个二层转发表。

当缓存的地址转发信息包括地址转发表时,步骤“在缓存的地址转发信息中查找该数据包对应的地址转发信息”可以包括:

获取该数据包对应的目的地址;

根据该目的地址在缓存的地址转发表中,查找与目的地址对应的地址转发表项。

其中,目的地址对应的地址转发表项可以包含目的地址与转发端口之间的对应关系。

比如,可以获取数据包对应的目的MAC地址,然后,根据该目的MAC地址在MAC地址转发表中,查找与目的MAC地址对应的地址转发表项,该目的MAC地址对应的地址转发表项包含目的MAC地址与转发端口之间的对应关系。

103、当查找到该数据包对应的地址转发信息时,根据查找到的地址转发信息确定用于发送该数据包的目标网卡驱动。

步骤“根据查找到的地址转发信息确定用于发送该数据包的目标网卡驱动”,包括:

根据该查找到的地址转发信息查找相应的转发端口;

将与该转发端口关联的网卡驱动,作为用于发送该数据包的目标网络驱动。

具体地,当地址转发信息包括地址转发表时,该地址转发表包含若干地址转发表项,每个地址转发表项包含转发地址与转发端口之间的对应关系;此时,查找到的地址转发信息包括目的地址对应的地址转发表项,该目的地址为数据包的目的地址,也即目的地址对应的地址转发表项包含目的地址与转发端口之间的映射关系。

步骤“根据该查找到的地址转发信息查找相应的转发端口”可以包括:根据查找到的地址转发表项查找相应的转发端口。

比如,当缓存的地址转发信息包括MAC地址转发表时,可以获取数据包对应的目的MAC地址,然后,根据该目的MAC地址在该MAC地址转发表中查找与目的MAC地址对应的MAC地址转发表项。在查找到目的MAC地址对应的MAC地址转发表项之后,可以基于该MAC地址转发表项查找相应的转发端口。

本实施例中,可以基于端口驱动映射关系集合来确定转发端口关联的网卡驱动;也即步骤“将与该转发端口关联的网卡驱动,作为用于发送该数据包的目标网络驱动”可以包括:

根据该转发端口、端口驱动映射集合确定与该转发端口关联的网卡驱动,该端口驱动映射集合包括转发端口与网卡驱动之间的映射关系(对应关系);

将该转发端口关联的网卡驱动,作为用于发送该数据包的目标网络驱动。

本实施例中,网卡驱动为一种驱动程序(Device Driver)全称为“设备驱动程序”,是一种可以使计算机中央处理器——CPU控制和使用设备的特殊程序,相当于硬件的接口,操作系统通过这个接口,控制硬件设备的工作。

104、直接向该目标网卡驱动发送该数据包,以便该目标网卡驱动将该数据包发送出去。

具体地,步骤“直接向该目标网卡驱动发送该数据包”可以包括:

与该目标网卡驱动之间建立通信通道;

通过该通信通道向该目标网卡驱动发送该数据包。

可选地,当未查找到该数据包对应的地址转发信息时,本实施例方法可以向内核网桥系统发送该数据包,以便该内核网桥系统将数据包发送出去。

比如,当未查找到目的地址对应的地址转发表项时,可以向内核网桥系统(如Linux kernel bridge子系统)发送该数据包,该内核网桥系统开启学习模式,并根据学习结果将该数据包发送给对应的网卡驱动,以便该网卡驱动将该数据包发送出去。

由上可知,本发明实施例采用从网卡缓存中读取待发送的数据包,然后,在缓存的地址转发信息中查找该数据包对应的地址转发信息,当查找到该数据包对应的地址转发信息时,根据查找到的地址转发信息确定用于发送该数据包的目标网卡驱动,直接向该目标网卡驱动发送该数据包,以便该目标网卡驱动将该数据包发送出去。该方案可以将数据包直接发送给目标网卡驱动,并通过目标网卡驱动将数据包转发出去,无需再先将数据包发送至Linux kernel bridge子系统,然后由该子系统进行转发处理以将数据发送出去;因此,该方案可以提高Linux kernel bridge的数据转发速度,进而提高Linux kernel bridge的数据转发性能以及节省了设备资源。

实施例二、

根据实施例一所描述的方法,以下将举例作进一步详细说明。

在本实施例中,将以该数据发送装置具体集成操作系统为Linux的服务器(称为Linux服务器)为例进行说明。

如图2a所示,该Linux服务器可以包括Linux bridge(网桥)系统,该系统可以包括:Linux kernel bridge(Linux内核网桥)子系统、网卡驱动1、物理网卡1、网卡驱动2、物理网卡2、网卡驱动3以及物理网卡3。

下面基于图2a所示的Linux bridge(网桥)系统来详细介绍本发明的数据发送方法。

如图2b所示,一种基于操作系统内核网桥(kernel bridge)的数据发送方法,具体流程如下:

201、Linux服务器对Linux kernel bridge子系统的地址转发信息进行拷贝,并缓存拷贝的地址转发信息。

比如,在linux kernel bridge子系统插入一个function,用于拷贝缓存inux kernel bridge子系统的地址转发(fdb)信息。

其中,地址转发信息可以包括MAC地址转发表,该MAC地址转发表包括若干MAC地址表项,该表项包含了MAC地址与转发端口(port)之间的映射关系。

又比如,可以由网卡驱动1对Linux kernel bridge子系统的地址转发信息进行拷贝,并缓存拷贝的地址转发信息。

202、物理网卡1接收电信号,并将电信号转换成网络数据,以及将该网络数据存放在相应的网卡缓存中。

比如,物理网卡1通过网络接收电信号,然后,将电信号转换成相应的数据,得到网络数据包。

203、网卡驱动1从网卡缓存中读取待发送的网络数据包。

204、网卡驱动1从缓存的地址转发信息中查找该网络数据包对应的地址转发信息。

比如,可以在网卡驱动1中插入一个function用于执行步骤204-208。

具体地,网卡驱动1获取网络数据包对应的目的MAC地址,然后,根据该目的MAC地址在缓存的MAC地址转发表中查找该目的MAC地址对应的MAC地址表项。

205、网卡驱动1确定是否查找到该网络数据包对应的地址转发信息,若是,则执行步骤206,若否,则执行步骤210。

比如,通过一个函数int nfp_process(uint32_t if_index,struct sk_buff*skb)来从地址转发信息中查找该网络数据包对应的地址转发信息,若查找到,则返回0,若查不到则返回-1。

206、网卡驱动1根据查找到的地址转发信息查找相应的转发端口。

当网卡驱动1查找到目的MAC地址对应的MAC地址表项时,可以基于该MAC地址表项查找相应的转发端口。

其中,可以调用函数dev_queue_xmit()来执行步骤206-208。

例如,在网卡驱动1中,在tun_get_user()中,生成数据包sk_buff后,执行nfp_process(),若nfp_process()返回0,即查找到网络数据包对应的fdb信息。此时,可以调用dev_queue_xmit()将该数据包转发出去(执行步骤206-208),不再执行tun_netif_rx_ni(skb),即不再将数据包传给linux kernel bridge子系统。

207、网卡驱动1确定该转发端口关联的目标网卡驱动为网卡驱动2。

208、网卡驱动1与网卡驱动3之间建立通信通道,并通过该通信通过将该网络数据包发送至网卡驱动2。

209、网卡驱动2将该网络数据包放入到相应的网卡缓存中,物理网卡2将该网卡缓存中的网络数据包转换成电信号发送出去。

210、网卡驱动1将该网络数据包发送给Linux kernel bridge子系统。

比如,在网卡驱动1中,在tun_get_user()中,生成数据包sk_buff后,执行nfp_process(),若nfp_process()返回-1,则继续执行tun_netif_rx_ni(skb),以将数据包传给linux kernel bridge子系统。

211、Linux kernel bridge子系统开启学习模式,并根据学习结果向对应的网卡驱动3发送网络数据包。

212、网卡驱动3将该网络数据包放入到相应的网卡缓存中,物理网卡3将该网卡缓存中的网络数据包转换成电信号发送出去。

本实施例中,网卡驱动1可以在tun_get_user()中,生成数据包sk_buff后,执行nfp_process(),若nfp_process()返回0,即查找到网络数据包对应的fdb信息,并调用dev_queue_xmit()将该数据包转发出去,此时不再执行tun_netif_rx_ni(skb),即不再将数据包传给linux kernel bridge子系统;若nfp_process()返回-1,则继续执行tun_netif_rx_ni(skb),将数据包传给linux kernel bridge子系统。具体代码如下:

if(!nfp_process(skb->dev->ifindex,skb)){

tun_netif_rx_ni(skb);

}。

由上可知,本发明实施例可以从网卡缓存中读取待发送的数据包,然后,在缓存的地址转发信息中查找该数据包对应的地址转发信息,当查找到该数据包对应的地址转发信息时,根据查找到的地址转发信息确定用于发送该数据包的目标网卡驱动,直接向该目标网卡驱动发送该数据包,以便通过目标网卡驱动将该数据包发送出去;当未查找到该数据包对应的地址转发信息时将该数据包发送给内核网桥系统,以便通过内核网桥系统将数据包发送出去。该方案可以将一部分数据包直接发送给目标网卡驱动,并通过目标网卡驱动将数据包转发出去,无需再先将数据包发送至Linux kernel bridge子系统,然后由该子系统进行转发处理以将数据发送出去;因此,该方案可以提高Linux kernel bridge的数据转发速度,进而提高Linux kernel bridge的数据转发性能以及节省了服务器的资源。

实施例三、

为了更好地实施以上方法,本发明实施例还提供一种基于操作系统内核网桥的数据发送装置,如图3a所示,该广告信息发送装置包括读取单元301、查找单元302、确定单元303以及发送单元304,如下:

(1)读取单元301;

读取单元301,用于从网卡缓存中读取待发送的数据包。

其中,网卡缓存用于存放物理网卡转换的网络数据,每个物理网卡可以对应一个网卡缓存。

本实施例中操作系统可以Linux系统、或者其他的操作系统。

(2)查找单元302;

查找单元302,用于在缓存的地址转发信息中查找该数据包对应的地址转发信息。

其中,地址转发(fdb)信息为用于转发或者发送数据包的信息,其主要功能是供网络设备如服务器在数据链路层对数据包进行转发,用于确定数据包发往哪个端口。该地址转发信息主要包括MAC(Media Access Control,媒体访问控制)地址与转发端口之间的对应关系(即映射关系)。,

比如,参考图3b,当该缓存的地址转发信息包括:地址转发表时,该查找单元302,具体可以包括:

地址获取子单元3021,用于获取该数据包对应的目的地址;

查找子单元3022,用于根据该目的地址在缓存的地址转发表中,查找与目的地址对应的地址转发信息。

比如,地址获取子单元3021,可以用于获取该数据包对应的目的MAC地址;查找子单元3022,用于据该目的MAC地址在MAC地址转发表中,查找与目的MAC地址对应的地址转发表项。

(3)确定单元303;

确定单元303,用于当查找到该数据包对应的地址转发信息时,根据查找到的地址转发信息确定用于发送该数据包的目标网卡驱动。

比如,参考图3c,确定单元303,可以包括:

端口查找子单元3031,用于根据该查找到的地址转发信息查找相应的转发端口;

驱动确定子单元3032,用于将与该转发端口关联的网卡驱动,作为用于发送该数据包的目标网络驱动。

例如,端口查找子单元3031,用于根据查找到的MAC地址表项查找相应的转发端口。

又例如,驱动确定子单元3032,用于根据该转发端口、端口驱动映射集合确定与该转发端口关联的网卡驱动,该端口驱动映射集合包括转发端口与网卡驱动之间的映射关系(对应关系)。

本实施例中,网卡驱动为一种驱动程序(Device Driver)全称为“设备驱动程序”,是一种可以使计算机中央处理器——CPU控制和使用设备的特殊程序,相当于硬件的接口,操作系统通过这个接口,控制硬件设备的工作。

(4)发送单元304;

发送单元304,用于直接向该目标网卡驱动发送该数据包,以便该目标网卡驱动将该数据包发送出去。

比如,该发送单元304,可以具体包括:

通道建立子单元,用于与该目标网卡驱动之间建立通信通道;

发送子单元,用于通过该通信通道向该目标网卡驱动发送该数据包。

可选地,该数据转发装置还可以包括:缓存单元;该缓存单元用于:

在读取单元读取数据包之前,对内核网桥系统的地址转换信息进行拷贝;

对拷贝的地址转换信息进行缓存。

具体实施时,以上各个单元可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个单元的具体实施可参见前面的方法实施例,在此不再赘述。

该基于操作系统内核网桥的数据发送装置具体可以集成在服务器等网络设备中,该服务器可以为Linux服务器等。实际应用中,该数据发送装置可以集成在网卡驱动中。

由上可知,本发明实施例数据转发装置通过读取单元301从网卡缓存中读取待发送的数据包,然后,由查找单元302在缓存的地址转发信息中查找该数据包对应的地址转发信息,当查找到该数据包对应的地址转发信息时,由确定单元303根据查找到的地址转发信息确定用于发送该数据包的目标网卡驱动,由发送单元304直接向该目标网卡驱动发送该数据包,以便该目标网卡驱动将该数据包发送出去。该方案可以将数据包直接发送给目标网卡驱动,并通过目标网卡驱动将数据包转发出去,无需再先将数据包发送至Linux kernel bridge子系统,然后由该子系统进行转发处理以将数据发送出去;因此,该方案可以提高Linux kernel bridge的数据转发速度,进而提高Linux kernel bridge的数据转发性能以及节省了设备资源。

本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。

以上对本发明实施例所提供的一种基于操作系统内核网桥的数据发送方法和装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

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