[发明专利]一种实现局域网内高效传输大块数据的方法及系统有效
申请号: | 200810068094.0 | 申请日: | 2008-06-25 |
公开(公告)号: | CN101304373A | 公开(公告)日: | 2008-11-12 |
发明(设计)人: | 王魏强;孙福清;程宁 | 申请(专利权)人: | 中兴通讯股份有限公司 |
主分类号: | H04L12/56 | 分类号: | H04L12/56;H04L1/16;H04L1/00;H04L29/08;H04L12/28 |
代理公司: | 深圳市君胜知识产权代理事务所 | 代理人: | 王永文 |
地址: | 518057广东省深圳市南山*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 实现 局域网 高效 传输 大块 数据 方法 系统 | ||
技术领域
本发明涉及一种计算机应用领域的网络通信方法及系统,具体涉及的是一种基于Linux的网络协议栈实现局域网内高效传输大块数据的方法及系统。
背景技术
在现有技术的Linux操作系统中,常常通过网络套接字使用系统调用接收和发送网络数据包。在数据包的接收过程中,需要通过接收系统调用陷入内核态,将网卡接收的数据包从内核接收缓存拷贝到用户缓冲区;在数据包的发送过程中,又需要通过发送系统调用陷入内核态,将用户待发送的数据包从用户缓冲区拷贝到内核发送缓存并发送出去。
为了减少用户程序收发数据包过程中出现的拷贝操作,出现了零拷贝技术。零拷贝技术的基本思想是:数据包在网卡与用户进程空间之间传递的过程中,避免数据拷贝,降低CPU的消耗。零拷贝技术主要利用了内存映射技术和DMA(Direct Memory Access,直接内存存取)传输技术:接收时,数据包直接从网卡DMA到内核空间,用户进程通过内存映射获得网络数据;发送时,数据包直接从用户空间缓冲区DMA到网卡。
在基于Linux操作系统的网络应用中,常常需要将大块数据在网络上进行传输。当在网络客户端和服务器端之间传输大块数据时,大块数据要在不同的系统空间中进行多次传递,传递流程主要包括以下几个部分:
客户端发送数据请求:客户端根据应用需要,向服务器端发送数据请求;
服务器端接收数据请求:服务器端接收到客户端的数据请求之后,准备客户端所需要的数据块;
服务器端发送数据应答:服务器端将数据块按一定的方式进行组织,封装成适合网络传输的一批数据应答包,向客户端发送数据应答;
客户端接收数据应答:客户端接收到服务器端的数据应答之后,对应答数据进行重排整理,最终获得客户端所需要的数据块。
在这种方式下,除了网络数据收发需要消耗系统资源外,服务器端将数据块封装成一系列的数据应答包、客户端将这一系列的数据应答包组织成数据块,这些数据组织操作都需要进行额外的数据拷贝。
对于这类应用而言,即使采用零拷贝技术,也不能够避免由于数据组织而需要进行的多次数据拷贝。此外,目前的零拷贝技术还存在以下一些限制:首先,零拷贝的基本功能是在网卡驱动中实现的,往往需要对网卡驱动进行大量修改,这就增大了零拷贝对网卡驱动的依赖;其次,网卡驱动采用零拷贝技术后,从该网卡收发的任何数据包都将不再经过Linux协议栈的处理,而只能通过专门的收发接口直接与用户进程交互,这就限制了网卡的使用范围和使用方式。
大块数据传输过程中的开销主要产生在用户程序、操作系统、网卡驱动等不同层次的数据组织、数据拷贝和数据传输上。如何有效地减少数据拷贝的次数,增强系统的兼容能力,对于降低CPU的消耗和提高系统的处理能力,具有至关重要的影响。
而现有技术在大块数据传输过程中的CPU消耗太高,系统处理能力受到限制,因此,需要改进和发展。
发明内容
本发明的目的在于提出一种基于Linux的网络协议栈实现局域网内高效传输大块数据的方法及系统,在不影响Linux系统原有网络协议栈的情况下,以尽量减少网络处理引起的CPU消耗,提高系统的处理能力。
为实现上述目的,本发明的技术方案包括:
一种实现局域网内高效传输大块数据的方法,其包括以下步骤:
A、客户端向服务器端发送数据请求;
B、所述服务器端接收数据请求后,所述服务器端进行数据准备,并向客户端发送大块数据应答,利用网卡的直接内存存取DMA功能和分散/汇聚SG功能,采用头部和载荷分离的方式实现零拷贝的数据发送;
C、所述客户端接收服务器端的大块数据应答,利用数据包中携带的用户缓冲区地址信息,将数据包的载荷写入对应的用户缓冲区。
所述的方法,其中,所述步骤A还包括:
A1、客户端用户程序根据数据请求的帧结构,分配用户缓冲区并填充数据请求包,向服务器端用户程序请求大块数据;
A2、所述客户端用户程序通过网络套接字调用数据发送的接口陷入内核态,进入数据请求包发送流程。
所述的方法,其中,所述步骤A还包括:
A3、协议栈内核模块验证数据请求帧结构的合法性,如果数据请求帧结构合法,则继续执行;如果数据请求帧结构不合法,则返回帧错误;
A4、协议栈内核模块对控制缓冲区和数据缓冲区地址进行变换,将客户端用户程序提供的进程虚拟地址转换为物理内存地址,并存储在该网络套接字相关的内核数据结构中,同时锁定相关物理内存;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中兴通讯股份有限公司,未经中兴通讯股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200810068094.0/2.html,转载请声明来源钻瓜专利网。