一种数据包收发方法

文档序号:7723606阅读:136来源:国知局
专利名称:一种数据包收发方法
技术领域
本发明涉及互联网的可靠性保护方法,尤其涉及一种提高网络系统性能的数据包
收发方法。
背景技术
随着信息化过程时代的加速发展,互联网已逐步渗透进人们的生活中。为了满足 人们对服务和网络应用越来越丰富的要求,运营商不断地发展着新的业务,而新业务的发 展必须考虑网络的性能。众所周知,系统性能的好坏最关键的影响因素是网络系统中数据 包的收发。 现有的数据包收发方法包括以下步骤
步骤SlOl,网卡驱动程序接收数据包;
步骤S102,产生硬件中断; 步骤S103,通知操作系统的内核空间接收所述数据包; 步骤S104,调用所述操作系统的软件中断服务程序并通过IP协议栈对所述数据
包执行一次内存拷贝一从操作系统的内核空间拷贝到用户空间; 步骤S105,所述用户空间的上层应用程序对所述数据包进行处理; 步骤S106,调用所述操作系统的软件中断服务程序,通过IP协议栈对处理后的数
据包进行另一次内存拷贝-从用户空间拷贝到操作系统的内核空间; 步骤S107,所述网卡驱动程序发送所述数据包,结束。 由上可以看出,在上述数据包的收发方法中,由于所述用户空间的上层应用程序 无法直接对操作系统的内核空间的数据包进行读写操作,因此需要通过IP协议栈对数据 包进行两次拷贝并且频繁地进行系统调用,以故CPU的利用率和总线带宽的利用低、软件 中断响应时间长、系统整体效率低、网络吞吐量小。因此系统性能差。
因此,有必要提供一种改进的数据包收发方法以克服现有技术的缺陷。

发明内容
本发明实施例的目的在于提供一种数据包收发方法,能提高CPU的利用率和总线 带宽的利用率,縮短软件中断响应时间,提升系统整体效率和网络吞吐量,进而改善系统性 能。 为了实现上述目的,本发明提供了一种数据包收发方法,包括如下步骤在网卡的 物理内存中设置一段作为缓存的空间并建立用户空间的上层应用程序与所述缓存的映射 关系;网卡硬件接收数据包;将所述数据包写入所述缓存;产生硬件中断;调用网卡软件中 断服务程序并通知网卡驱动程序接收所述缓存中的数据包,所述网卡驱动程序进而通知所 述用户空间的上层应用程序接收所述缓存中的数据包;所述上层应用程序接收所述缓存中 的数据包并对所述数据包进行处理;调用所述网卡软件中断服务程序并通知所述网卡驱动 程序发送所述数据包;所述网卡驱动程序发送所述数据包。
在本发明的一个实施例中,所述网卡硬件接收数据包的步骤之前还包括建立工 作集。 较佳地,所述将所述数据包写入所述缓存的步骤具体为通过直接存储器存取数 据传输方式将所述数据包写入所述缓存。 同样较佳地,所述网卡驱动程序进而通知所述用户空间的上层应用程序接收所述 缓存中的数据包的步骤具体为所述网卡驱动程序进而采取异步通信方式通知所述用户空 间的上层应用程序接收所述缓存中的数据包;所述通知所述网卡驱动程序发送所述数据包 的步骤具体为采取异步通信方式通知所述网卡驱动程序发送所述数据包。
在本发明的另一个实施例中,所述上层应用程序接收所述缓存中的数据包的步骤 之前还包括检测所述上层应用程序收包是否正常;当检测到所述上层应用程序正常收包 时,所述网卡驱动程序转入运行模式状态。 较佳地,所述方法还包括步骤当检测到所述上层应用程序不正常收包时,所述网
卡驱动程序自动转入保护模式状态并按照预配置的规则发送所述数据包。 在本发明的再一实施例在中,所述网卡驱动程序检测所述上层应用程序收包是否
正常的步骤之前还包括建立包缓冲区;将所述缓存区数据包传送至所述缓冲区,则所述
上层应用程序接收所述缓存中的数据包并对所述数据包进行处理的步骤具体为所述上层
应用程序接收经由所述缓存传送至所述缓冲区的数据包并对所述数据包进行处理。 与现有技术相比,本发明数据包收发方法在接收或发送数据包时能通过用户空间
的上层应用程序与网卡缓存的映射关系直接与用户空间的上层应用程序进行交互,不需要
利用操作系统的IP栈对数据包进行操作系统的内核空间与用户空间之间的两次拷贝,不
会出现大量不必要的软件中断,因而本方法提高了 CPU和总线带宽的利用率,縮短了软件
中断响应时间,极大地提升了系统整体效率和网络吞吐量。因此系统性能好。


图1为现有技术数据包收发方法的流程图。
图2为本发明数据包收发方法的第一个实施例的流程图。 图3为本发明数据包收发方法的第二个实施例的流程图。
具体实施例方式
现在参考附图描述本发明的实施例,附图中类似的元件标号代表类似的元件。如 上所述,本发明提供了一种数据包收发方法,无需利用操作系统的IP栈对数据包进行操作 系统的内核空间与用户空间之间的两次拷贝,能通过用户空间的上层应用程序与网卡缓存 的映射关系直接与用户空间的上层应用程序进行交互,不会出现大量的不必要的软件中 断,CPU的利用率和总线带宽的利用率大、软件中断响应时间短、系统整体效率高和网络吞 吐量大、系统性能好。下面将详细阐述。 参考图2,本实施例一数据包收发方法包括如下步骤 步骤S201,在网卡的物理内存中设置一段作为缓存的空间并建立用户空间的上层 应用程序与所述缓存的映射关系;
步骤S202 ,建立工作集;
步骤S203,网卡硬件接收数据包; 步骤S204,通过直接存储器存取(DMA, Direct Memory Access)数据传输方式将
所述数据包写入所述缓存; 步骤S205,产生硬件中断; 步骤S206,调用网卡软件中断服务程序并通知网卡驱动程序接收所述缓存中的数 据包; 步骤S207,判断所述用户空间的上层应用程序是否需要进行收包,如果是,转步骤 S209,如果不是,继续步骤S208 ; 步骤S208,所述网卡驱动程序按照预配置的规则发送所述数据包,结束; 步骤S209,所述网卡驱动程序采取异步通信方式通知所述用户空间的上层应用程
序接收所述缓存中的数据包; 步骤S210,所述上层应用程序访问所述缓存的地址,接收所述缓存地址中对应的 数据包,并对所述数据包进行分析、修改等处理; 步骤S211,调用所述网卡软件中断服务程序,所述上层应用程序采取异步通信方
式通知所述网卡驱动程序发送所述数据包; 步骤S212,所述网卡驱动程序发送所述数据包,结束。 由上可以看出,本实施例数据包收发方法在接收或发送数据包时能通过用户空间 的上层应用程序与网卡缓存的映射关系直接与用户空间的上层应用程序进行交互,不需要 利用操作系统的IP栈对数据包进行操作系统的内核空间与用户空间之间的两次拷贝,不 会出现大量的不必要的软件中断,因而本方法提高了 CPU的利用率、总线带宽的利用率,縮 短了软件中断响应时间,极大地提升了系统整体效率和网络吞吐量。因此系统性能好。
另外,所述直接存储器存取数据传输方式传输速度非常快,减少了 CPU的干预,能 大幅提高系统效率。所述工作集的建立可以确定多个网卡协同工作的关系。
参考图3,本实施例二数据包收发方法包括如下步骤 步骤S301,在网卡的物理内存中设置一段作为缓存的空间并建立用户空间的上层 应用程序与所述缓存的映射关系;
步骤S302 ,建立工作集;
步骤S303 ,建立包缓冲区;
步骤S304,网卡硬件接收数据包; 步骤S305,通过直接存储器存取数据传输方式将所述数据包写入所述缓存;
步骤S306 ,产生硬件中断; 步骤S307,调用网卡软件中断服务程序并通知网卡驱动程序接收所述缓存中的数 据包; 步骤S308,判断所述用户空间的上层应用程序是否需要进行收包,如果是,转步骤 S310,如果不是,继续步骤S309 ; 步骤S309,所述网卡驱动程序按照预配置的规则发送所述数据包,结束; 步骤S310,所述网卡驱动程序采取异步通信方式通知所述用户空间的上层应用程
序接收所述缓存中的数据包; 步骤S311,将所述缓存地址中对应的数据包传送至所述缓冲区;
步骤S312,周期性检测所述上层应用程序收包是否正常,当检测到所述上层应用 程序不正常收包时,继续步骤S313,当检测到所述上层应用程序正常收包时,转步骤S314 ;
步骤S313,所述网卡驱动程序自动转入保护模式(PASSBY)状态,转步骤S309 ;
步骤S314,所述网卡驱动程序转入运行模式(DELIVER)状态;
步骤S315,所述上层应用程序接收经由所述缓存传送至所述缓冲区的数据包并对 所述数据包进行分析、修改等处理; 步骤S316,调用所述网卡软件中断服务程序,所述上层应用程序采取异步通信方
式通知所述网卡驱动程序发送所述数据包; 步骤S317,所述网卡驱动程序发送所述数据包,结束; 由上可以看出,本实施例数据包收发方法不仅能实现用户空间的上层应用程序与 网卡驱动的交互,系统整体效率高、网络吞吐量大、系统性能好,此外引入的对上层应用程 序的周期性检测机制能保证网络系统运行的畅通,在软件升级甚至软件故障的情况下,网 络系统都能够快速反应,因而成功实现对网络系统的保护,系统的可靠性和稳定性高。经测 试,本实施例的方法最长故障响应时间已经达到了电信级可靠性要求。 另外,本实施例通过建立缓冲区来存储一段时间的数据包,避免数据包在处理过 程中丢失,进而增加了系统的可靠性。此外,所述上层应用程序可以直接访问所述包缓冲 区,减少内存的拷贝。 以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员 来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为 本发明的保护范围。
权利要求
一种数据包收发方法,包括如下步骤在网卡的物理内存中设置一段作为缓存的空间并建立用户空间的上层应用程序与所述缓存的映射关系;网卡硬件接收数据包;将所述数据包写入所述缓存;产生硬件中断;调用网卡软件中断服务程序并通知网卡驱动程序接收所述缓存中的数据包,所述网卡驱动程序进而通知所述用户空间的上层应用程序接收所述缓存中的数据包;所述上层应用程序接收所述缓存中的数据包并对所述数据包进行处理;调用所述网卡软件中断服务程序并通知所述网卡驱动程序发送所述数据包;以及所述网卡驱动程序发送所述数据包。
2. 如权利要求1所述的数据包收发方法,其特征在于,所述网卡硬件接收数据包的步 骤之前还包括建立工作集。
3. 如权利要求1所述的数据包收发方法,其特征在于,所述将所述数据包写入所述缓 存的步骤具体为通过直接存储器存取数据传输方式将所述数据包写入所述缓存。
4. 如权利要求1所述的数据包收发方法,其特征在于,所述网卡驱动程序进而通知所 述用户空间的上层应用程序接收所述缓存中的数据包的步骤具体为所述网卡驱动程序进而采取异步通信方式通知所述用户空间的上层应用程序接收所 述缓存中的数据包,所述通知所述网卡驱动程序发送所述数据包的步骤具体为 采取异步通信方式通知所述网卡驱动程序发送所述数据包。
5. 如权利要求1所述的数据包收发方法,其特征在于,所述上层应用程序接收所述缓 存中的数据包的步骤之前还包括检测所述上层应用程序收包是否正常;当检测到所述上层应用程序正常收包时,所述网卡驱动程序转入运行模式状态。
6. 如权利要求5所述的数据包收发方法,其特征在于,还包括步骤当检测到所述上层应用程序不正常收包时,所述网卡驱动程序自动转入保护模式状态 并按照预配置的规则发送所述数据包。
7. 如权利要求5所述的数据包收发方法,其特征在于,所述网卡驱动程序检测所述上 层应用程序收包是否正常的步骤之前还包括建立包缓冲区;将所述缓存区数据包传送至所述缓冲区,贝U,所述上层应用程序接收所述缓存中的数据包并对所述数据包进行处理的步骤具体为所述上层应用程序接收经由所述缓存传送至所述缓冲区的数据包并对所述数据包进 行处理。
全文摘要
本发明公开了一种数据包收发方法,包括如下步骤在网卡的物理内存中设置缓存并建立用户空间的上层应用程序与缓存的映射关系;网卡硬件接收数据包;将数据包写入缓存;产生硬件中断;调用网卡软件中断服务程序并通知网卡驱动程序接收缓存中的数据包,网卡驱动程序通知上层应用程序接收缓存中的数据包;上层应用程序接收数据包并对数据包进行处理;调用网卡软件中断服务程序并通知网卡驱动程序发送数据包;所述网卡驱动程序发送数据包。本方法收发数据包时无需利用IP栈对数据包进行操作系统的内核空间与用户空间之间的两次拷贝,不会出现大量的不必要的软件中断,CPU和总线带宽的利用率大、软件中断响应时间短、网络吞吐量大、系统性能好。
文档编号H04L29/08GK101702688SQ20091027284
公开日2010年5月5日 申请日期2009年11月24日 优先权日2009年11月24日
发明者刘锋 申请人:武汉绿色网络信息服务有限责任公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1