一种基于以太网驱动的数据转发方法和装置的制作方法

文档序号:7699017阅读:141来源:国知局
专利名称:一种基于以太网驱动的数据转发方法和装置的制作方法
技术领域
本发明涉及数据传输技术,特别是指一种基于以太网驱动的数据转发方法 和装置。
背景技术
随着网络技术的飞速发展,网络中语音电话数据、实时^L频数据、因特网 浏览数据等各种业务类型的数据量急剧增加;同时,普通家庭用户对网络传输 质量和网络带宽的要求也越来越高。显然,基于以太网路由器的数据传输势必 将会成为今后发展的一个重要方向。
目前,基于LINUX的以太网上行路由器与基于非对称数字用户线路 (ADSL , Asymmetric Digital Subscriber Line )的上4亍路由器相比,虽然其性能 有了较大的提高,但其在网络报文的转发方面仍然存在着瓶颈,所谓瓶颈集中 体现在基于LINUX的以太网路由器网络驱动的收包处理上。从LINUX系统的 网络驱动层来看,以太网上行路由器对接收到的每一帧网络报文的处理流程为 介质访问控制层(MAC, Media Access Control)收到一帧一>引发石更件中断一> 中央处理单元(CPU, Central Process Unit)调用相应的中断处理函数进行硬件 中断的处理一〉CPU调用网络接口接收函数netif—rx函数,将此网络报文发送 到LINUX协议栈一>标记软中断一>中断完成。
可以看出,上述处理过程中每一帧网络报文都需向LINUX协议栈发送一 遍,但是在实际应用中,某些报文是不需要进入LINUX协议栈中处理的。这 样,将每一帧网^^艮文都发送给LINUX协议栈处理,会增加网络报文在LINUX 协议栈中的处理时间,使网络报文的传输效率和速率受到了很大程度的限制, 从而限制了网络的吞吐量。

发明内容
有鉴于此,本发明的主要目的在于提供一种基于以太网驱动的数据转发方
法和装置,可以减少数据报文在LINUX协议栈中的处理时间,提高数据的传
输速度和效率。
为达到上述目的,本发明的技术方案是这样实现的
本发明提供了 一种基于以太网驱动的数据转发方法,该方法包括
包头处理器PHP确认当前数据包需进行快速转发时,查找到当前数据包在
快速转发表中匹配的快速转发入口 ;
驱动接收端在当前数据包为传输控制协议TCP控制报文之外的TCP报文,
或者当前数据包为没有超时的用户数据报协议UDP报文时,将当前数据包通过
所述快速转发入口发送到驱动发送端; 驱动发送端转发所述凄t据包。
其中,在确认当前数据包需进行快速转发之前,该方法还包括 依据报文类型,将数据包按照预设的优先级置入PHP中,并将所述数据包
包头的描述符存储在PHP的分组包头结构描述符中;驱动接收端依据所述优先
级将包头描述符从PHP中取出,并存储。
在所述分组包头结构描述符中设置状态位,则所述确认当前数据包需进行
快速转发为
依据当前凝:据包包头描述符对应的分组包头结构描述符中的状态位,如果 所述状态位置位,则确认当前数据包需进行快速转发;否则,将当前数据包发 送给LINUX协i义栈。
所述查找数据包在快速转发表中匹配的快速转发入口为
依据当前数据包的包头描述符对应的分组包头结构描述符,计算该数据包 的PHP哈希HASH值,并依据所述PHP HASH值在所述快速转发表中查找匹 配的快速转发入口。
该方法还包4舌当数据包第 一次经过LINUX协议栈时,通过LINUX协议栈学习该数据包 的路由信息,并得到该数据包在驱动接收端的目的端口;计算该数据包的PHP HASH值,将所述目的端口作为快速转发入口与该所述PHP HASH值进行匹配, 存入快速转发表中,并为其设置老化时间;在所述老化时间到时后,将所述快 速转发入口删除。
该方法还包括
在快速转发表中没有查找到与当前数据包匹配的快速转发入口时,将该数 据包发送给LINUX协议栈。 该方法还包括
当前数据包报文为TCP控制报文,或者为超时的UDP报文时,将该数据 包发送给LINUX协议栈。
所述驱动发送端转发当前数据包为
所述驱动发送端将所述数据包的包头描述符添加到硬件发送队列中,通过 所述硬件发送队列将数据包转发出去。
本发明还提供了一种基于以太网驱动的数据转发装置,该装置包括PHP、 驱动接收端和驱动发送端,其中,
所迷PHP,用于在确认当前数据包需进行快速转发时,查找到当前数据包 在快速转发表中匹配的快速转发入口;还用于判断当前数据包是否为TCP控制 报文之外的TCP报文,或者是否为没有超时的UDP报文;
所述驱动接收端,用于存储需转发的数据包,并将确认为除TCP控制报文 外的TCP报文,或者为没有超时的UDP报文,通过快速转发入口发送给驱动 发送端;
所述驱动发送端,用于接收所述驱动接收端发送的报文数据包,并将所述 数据包转发出去。
其中,所述PHP,还用于将数据包的包头描述符存储在PHP的分组包头结 构描述符中;
所述驱动接收端,还用于在PHP确认当前数据包不需进行快速转发时;或
7者PHP在快速转发表中没有查找到与当前数据包匹配的快速转发入口时;或者 PHP确认当前数据包为TCP控制报文,或为超时的UDP报文时,将数据包发 送给LINUX协i义栈。
本发明基于以太网驱动的数据转发方法,在现有基于以太网驱动的路由器 中结合使用了包头处理器(PHP, Packet Header Processor),并在路由器对数据 进行处理时,通过PHP来协助CPU对当前需要处理的数据进行转发条件的判 断,将一些不需要经过LINUX协议栈处理的数据报文直接转发出去,从而减 少了报文在LINUX协议栈处理的时间;同时,由于PHP的使用,分担了 CPU 的工作负担,提高了系统的工作效率,从而提高了数据在以太网路由器中的处 理速度,提高了传输的速度和效率、以及网络吞吐量。


图1为本发明数据转发方法中驱动接收端对网络报文的处理流程示意图; 图2为本发明数据转发方法中驱动发送端对网络报文的处理流程示意图; 图3为本发明数据转发装置的组成结构关系示意图。
具体实施例方式
下面结合附图和具体实施例对本发明的技术方案进一步详细阐述。 本发明基于以太网驱动的数据转发方法,结合使用PHP和基于以太网驱动 的路由器对传输数据进行处理,调整了基于LINUX的以太网驱动对数据的收 发流程,跳过正常的和多余的以太网驱动的数据处理流程,从而减少了数据在 LINUX协议栈中的处理时间。
本发明中,将网络报文不经过LINUX协议栈处理的转发称为快速转发。 网络报文在本发明的数据处理流程中以数据包的形式存在,驱动接收端对 网络报文的处理基于数据包包头的描述符,该描述符是包头中的一个字段,用 于描述数据包的包头信息,唯一标识数据包并确定数据包在内存中的存储位置。 以太网路由器通二层的逻辑接口接收到网络报文后,将网络报文数据包存放在
8内存中;将包头描述符作为内存中数据包的索引存放在高速緩存区中预先划分的分组緩存中,则依据分组緩存中的包头描述符,可以查找到该包头描述符在内存中对应的数据包。图1为本发明基于以太网驱动的数据转发方法中驱动接收端对网络报文的处理流程,如图l所示,该流程包括
步骤101,依据包头描述符中的报文类型,将包头描述符按照预设的优先级置入PHP的结果队列中。
较佳地,可以依据包头描述符中的报文类型,将包头描述符按照不同的优先级置入PHP中相应的结果队列。如可以预先设置报文类型和优先级的对应关系,将报文分为高、中、低三个优先级,则PHP的结果队列可以分为高优先级队列、中优先级队列和低优先级队列。具体的,可以将语音报文等对实时性要求相对较高的报文的优先级设置为高,则将该报文数据包的包头描述符置入PHP结果队列中的高优先级队列中。
在PHP将包头描述符置入其结果队列之前,以太网路由器的精简指令计算机(RISC, reduced instruction set computer)将任务指针力文在PHP的请求(R叫uest)队列中,以控制PHP执行以下任务PHP将包头描述符从分组緩存中取出,存储到PHP的分组包头结构描述符中,则包头描述符在PHP中的表现形式为分组包头结构描述符;然后PHP依据分组包头结构描述符验证该数据包的校验和、即验证其有效性,如果无效,则将该数据包丟弃;如果有效,则将该包头描述符添加到RISC的硬件接收队列中。
然后,PHP将包头描述符从RISC的硬件接收队列中取出,置入PHP的结果队列中。
步骤102,以太网驱动从PHP的结果队列中取出包头描述符,并按照预设的优先级存储。
以太网驱动的接收端将包头描述符依次从PHP的结果队列中取出,并按优先级存入分组緩存中。
然后,PHP按照预设的优先级对分组緩存中的包头描述符依次进行分析,以决定包头描述符对应的数据包是否需要进行快速转发。步骤103,判断当前包头描述符对应的数据包是否可以进行快速转发,如果是,则执行步骤104;如果不是,则执行步骤108,将包头描述符直接发送给LINUX协议栈,进行正常的处理。
较佳地,可以在当前包头描述符对应的分组包头结构描述符中设置一个状态位,假设状态位为1时,表示当前包头描述符对应的数据包需要进行快速转发;如果为0,则将该包头描述符直接发送给LINUX协议栈。
根据报文类型可知,网络报文中有一些必须要送往LINUX协议栈进行处理,如以太网点到点连接协议(PPPOE)报文和各种类型的控制报文,本发明将这些报文的包头描述符对应的分组包头结构描述符的状态位设为0;将其他报文的包头描述符对应的分组包头结构描述符的状态位设置为1,即表示这些报文可以进行快速转发,然后执行步骤104。
步骤104,判断当前包头描述符对应的数据包是否有匹配的快速转发入口,如果有,则执行步骤105;如果没有,则执行步骤108。
PHP依据当前包头描述符在分组包头结构描述符中对应的内容,如协议类型、源IP地址、目的IP地址、源端口号及目的端口号等,计算该数据包的PHP哈希(HASH)值,此处可以通过现有技术实现,不再赘述。根据计算得到的PHP HASH值在快速转发表中查找与该PHP HASH值匹配的快速转发入口 。其中,快速转发表存放在高速緩存区的快速转发緩存中,快速转发表中保存了 PHPHASH值与快速转发入口的匹配关系。
当 一个数据包第一次通过LINUX协议栈时,LINUX协议栈会通过包头描述符学习到该数据包的路由信息,由此可以得到该数据包在驱动接收端的目的端口 ,然后将该目的端口设为该数据包对应的快速转发入口 ;将该数据包的PHPHASH值与该快速转发入口进行匹配,并存放在快速转发表中。同时,可根据需要为该快速转发入口设置一个老化时间,当超过该设定的老化时间后,在快速转发表中将该快速转发入口删除,以避免快速转发表溢出。
如果当前包头描述符对应的数据包没有匹配的快速转发入口 ,则执行步骤108,将该包头描述符发送给LINUX协议栈,学习该数据包的路由信息,得到对应的快速转发入口。
如果当前包头对应的数据包有匹配的快速转发入口 ,则执行步骤105。
步骤105,判断当前包头描述符对应的报文是否为传输控制协议(TCP,Transmission Control Protocol)净艮文或用户数据净艮协i义(UDP, User DatagramProtocol)报文,如果是,则执行步骤106;否则,执行步骤108。
较佳地,可以在包头描述符中设置相应的标志位来表示该报文的类型,通过读取该标志位即可判断出报文的类型。如果当前包头描述符对应的数据包报文不是TCP或UDP报文,则将该包头描述符直接发送给LINUX协议栈,进行正常的处理流程;如果是,则执行步骤106。
步骤106 107,判断TCP报文是否为TCP控制报文、或UDP报文是否超时,如果否,则将包头描述符通过快速转发入口发送给驱动发送端,当前流程结束;如果是,则执行步骤108。
对于TCP报文,可以在其包头描述符中设置相应的标志位来表示其是否为TCP控制报文,如该标志位为1表示该TCP报文为TCP控制报文;该标志位为0时表示该TCP才艮文不为TCP控制才艮文。
对于UDP报文,可以在系统中设置一个时间值,驱动接收端将前后两次接收到的UDP报文的时间间隔与预设的时间值相比较,如果时间间隔大于预设的时间值,则当前接收到的UDP报文超时;反之,则没有超时。
当TCP报文为TCP控制报文,或者UDP报文超时时,将包头描述符发送给LINUX协议栈进行处理;如果TCP报文不是TCP控制报文,或者UDP报文没有超时,则将包头描述符通过快速转发入口发送给驱动发送端。
通过图1的流程可知,驱动接收端发送给驱动发送端的报文经过两个途径一是驱动接收端将报文发送给LINUX协议栈,LINUX协议栈处理后下发给驱动发送端; 一是驱动接收端通过快速转发入口发送给驱动发送端。
图2为本发明中驱动发送端对网络"^艮文的处理流程,驱动发送端对报文的处理也是基于包头标识符。
对于LINUX协议栈下发的报文,按照步骤201 步骤204的流程来处理;对于驱动接收端通过快速转发入口发送过来的报文,执行步骤202~204的流程。从图2所示的流程可知,对于LINUX协议栈处理后下发给驱动发送端的数据需要对其包头进行相应的调整;而对于驱动接收端通过快速转发入口发送给驱动发送端数包则不需要,具体处理包括步骤201,对包头进4亍调整。
对于LINUX协议栈下发给驱动发送端的数据,需要对其包头进行调整当包头描述符通过LINUX协议栈进行处理时,可以得知当前包头描述符对应的数据包所使用的路由转发协议,驱动发送端根据数据包使用的路由转发协议的类型在包头中加上相应的协议类型字^:,同时需在PHP的孩t码中增加对此新增协议字段的识别程序。
步骤202,判断当前包头描述符对应的报文是否为TCP或UDP报文,如果是,则执行步骤203;如果否,则执行步骤204。该步骤的判断与步骤105相同,此处不再赘述。步骤203,为当前包头描述符对应的数据包设置快速转发出口 。如果驱动发送端接收到的数据包报文为TCP或UDP报文,则PHP为该数据包设置快速转发出口向高速緩存区申请一个快速转发緩存,然后依据该包头描述符到内存中查找其对应的数据包,并将该数据包存储到申请的快速转发緩存中。
步骤204,将包头描述符添加到硬件发送队列中,并将数据包转发出去。当驱动发送端接收到的数据包报文不是TCP或UDP报文时,则PHP直接将包头描述符依据预设的优先级添加到RISC中相应的硬件发送队列中,如高优先级硬件发送队列、中优先级硬件发送队列和低优先级硬件发送队列;然后驱动发送端依据RISC硬件发送队列的优先级,将包头描述符在内存中对应的数椐包发送出去。
当驱动发送端接收到的数据包报文为TCP或UDP报文时,PHP为其设置快速转发出口;再将该数据包的包头描述符依据预设的优先级添加到RISC中相应的硬件发送队列中;然后驱动发送端依据RISC硬件发送队列的优先级,将包头描述符在快速转发出口中对应的数据包发送出去。
综上所述,本发明在现有的以太网路由器中结合使用了 PHP,通过PHP来分担RISC的工作负担。其中,路由器接收到网络报文后将数据包存储在内存中,将包头描述符存在在高速緩存中;RISC控制PHP将包头描述符进行排序,驱动接收端将排序后的包头描述符从PHP中取出并存储;然后,RISC控制PHP对驱动接收端的包头描述符进行分析处理,驱动接收端再将处理后的包头描述通过快速转发入口发送给驱动发送端;在驱动发送端,RISC控制PHP为数据包设置快速转发出口 ,并将包头描述符按照优先级存入RISC相应的硬件发送队列中,最后驱动发送端依据RISC硬件队列的优先级,将包头描述符在快速转发出口中对应的数据进行转发。
为了实现本发明基于以太网驱动的数据转发方法,本发明提供了 一种数据转发装置,如图3所示,该装置包括PHPIO、驱动接收端20和驱动发送端30,其中,
PHP 10,用于在确iU区动接收端20中当前数据包可以进4亍快速转发时,查找到该数据包在快速转发表中匹配的快速转发入口 ;还用于判断当前数据包是否为除TCP控制报文外的TCP报文,或者判断是否为没有超时的UDP报文;
驱动接收端20,用于存储需要转发的数据包,并将确认为除TCP控制报文夕卜的TCP报文,或者确认为没有超时的UDP报文,通过快速转发入口发送给驱动发送端30;
驱动发送端30,用于接收驱动接收端20发送的报文数据包,并将报文转发出去。
另夕卜,PHP10,还用于将数据包的包头描述符存入PHP的分组包头结构描述符中;
驱动接收端20,还用于在PHP10确认当前数据包不进行快速转发时;或者PHP 10在快速转发表中没有查找到与当前数据包匹配的快速转发入口时;或者PHP 10确认当前数据包为TCP控制报文,或为超时的UDP报文时,将数据包发送给LINUX协议栈。
13以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
权利要求
1、一种基于以太网驱动的数据转发方法,其特征在于,该方法包括包头处理器PHP确认当前数据包需进行快速转发时,查找到当前数据包在快速转发表中匹配的快速转发入口;驱动接收端在当前数据包为传输控制协议TCP控制报文之外的TCP报文,或者当前数据包为没有超时的用户数据报协议UDP报文时,将当前数据包通过所述快速转发入口发送到驱动发送端;驱动发送端转发所述数据包。
2、 根据权利要求1所述基于以太网驱动的数据转发方法,其特征在于,在 确认当前数据包需进行快速转发之前,该方法还包括依据报文类型,将数据包按照预设的优先级置入PHP中,并将所述数据包 包头的描述符存储在PHP的分组包头结构描述符中;驱动接收端依据所述优先 级将包头描述符从PHP中取出,并存储。
3、 根据权利要求2所述基于以太网驱动的数据转发方法,其特征在于,在 所述分组包头结构描述符中设置状态位,则所述确认当前凝:据包需进行快速转 发为依据当前数据包包头描述符对应的分组包头结构描述符中的状态位,如果 所述状态位置位,则确认当前数据包需进行快速转发;否则,将当前数据包发 送给LINUX协议栈。
4、 根据权利要求2所述基于以太网驱动的数据转发方法,其特征在于,所 述查找数据包在快速转发表中匹配的快速转发入口为依据当前数据包的包头描述符对应的分组包头结构描述符,计算该数据包 的PHP哈希HASH值,并依据所述PHP HASH值在所述快速转发表中查找匹 配的快速转发入口。
5、 根据权利要求4所述基于以太网驱动的数据转发方法,其特征在于,该 方法还包括当数据包第 一次经过LINUX协议栈时,通过LINUX协议栈学习该数据包 的路由信息,并得到该数据包在驱动接收端的目的端口 ;计算该数据包的PHP HASH值,将所述目的端口作为快速转发入口与该所述PHP HASH值进行匹配, 存入快速转发表中,并为其设置老化时间;在所述老化时间到时后,将所述快 速转发入口删除。
6、 根据权利要求1至4中任一项所述基于以太网驱动的数据转发方法,其 特4正在于,该方法还包4奮在快速转发表中没有查找到与当前数据包匹配的快速转发入口时,将该数 据包发送给LINUX协议栈。
7、 根据权利要求1至4中任一项所述基于以太网驱动的数据转发方法,其 特征在于,该方法还包括当前数据包报文为TCP控制报文,或者为超时的UDP报文时,将该数据 包发送给LINUX协i义栈。
8、 根据权利要求1至4中任一项所述基于以太网驱动的数据转发方法,其 特征在于,所述驱动发送端转发当前数据包为所述驱动发送端将所述数据包的包头描述符添加到硬件发送队列中,通过 所述硬件发送队列将数据包转发出去。
9、 一种基于以太网驱动的数据转发装置,其特征在于,该装置包括PHP、 驱动接收端和驱动发送端,其中,所述PHP,用于在确认当前数据包需进行快速转发时,查找到当前数据包 在快速转发表中匹配的快速转发入口;还用于判断当前数据包是否为TCP控制 报文之外的TCP报文,或者是否为没有超时的UDP报文;所述驱动接收端,用于存储需转发的数据包,并将确认为除TCP控制报文 外的TCP报文,或者为没有超时的UDP报文,通过快速转发入口发送给驱动 发送端;所述驱动发送端,用于接收所述驱动接收端发送的报文数据包,并将所述 数据包转发出去。
10、根据权利要求9所述基于以太网驱动的数据转发装置,其特征在于,所述PHP,还用于将数据包的包头描述符存储在PHP的分组包头结构描述符中;所述驱动接收端,还用于在PHP确认当前数据包不需进行快速转发时;或 者PHP在快速转发表中没有查找到与当前数据包匹配的快速转发入口时;或者 PHP确认当前数据包为TCP控制报文,或为超时的UDP报文时,将数据包发 送给LINUX协议才戋。
全文摘要
本发明公开了一种基于以太网驱动的数据转发方法,该方法包括包头处理器(PHP)确认当前数据包需进行快速转发时,查找到当前数据包在快速转发表中匹配的快速转发入口;驱动接收端在当前数据包为传输控制协议(TCP)控制报文之外的TCP报文,或者当前数据包为没有超时的用户数据报协议(UDP)报文时,将当前数据包通过快速转发入口发送到驱动发送端;驱动发送端转发数据包。本发明还公开了一种基于以太网驱动的数据转发装置,基于本发明的方法和装置,可以节约数据报文在LINUX协议栈中的处理时间。
文档编号H04L12/56GK101494605SQ20091007925
公开日2009年7月29日 申请日期2009年3月5日 优先权日2009年3月5日
发明者稳 李, 辉 郭 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1