一种转发报文的方法及装置.pdf

上传人:a*** 文档编号:1682486 上传时间:2018-07-04 格式:PDF 页数:12 大小:783.79KB
返回 下载 相关 举报
摘要
申请专利号:

CN201510170834.1

申请日:

2015.04.10

公开号:

CN104796337A

公开日:

2015.07.22

当前法律状态:

实审

有效性:

审中

法律详情:

专利申请权的转移IPC(主分类):H04L 12/741登记生效日:20180214变更事项:申请人变更前权利人:京信通信系统(广州)有限公司变更后权利人:京信通信系统(中国)有限公司变更事项:地址变更前权利人:510663 广东省广州市经济技术开发区金碧路6号变更后权利人:510663 广东省广州经济技术开发区广州科学城神舟路10号变更事项:申请人变更后权利人:京信通信系统(广州)有限公司 京信通信技术(广州)有限公司 天津京信通信系统有限公司|||实质审查的生效IPC(主分类):H04L 12/741申请日:20150410|||公开

IPC分类号:

H04L12/741(2013.01)I

主分类号:

H04L12/741

申请人:

京信通信系统(广州)有限公司

发明人:

赵剑川; 贾克明

地址:

510663广东省广州市经济技术开发区金碧路6号

优先权:

专利代理机构:

北京同达信恒知识产权代理有限公司11291

代理人:

黄志华

PDF下载: PDF下载
内容摘要

本发明公开了一种转发报文的方法及装置,包括:内核态接收进程将网卡接收到的报文存储于共享内存中并通知用户态进程;用户态进程将所述共享内存的物理地址映射到所述用户态进程的虚拟地址后,从共享内存中提取所述报文并对所述报文进行处理;用户态进程将处理后的报文存储于所述共享内存中并通知内核态发送进程;所述内核态发送进程将所述处理后的报文通过相应的网卡发送,因此,避免了将报文从内核空间到应用空间的拷贝,从而在提高报文转发速度的同时,也能够提高系统的资源利用率。

权利要求书

权利要求书1.  一种转发报文的方法,其特征在于,该方法包括:内核态接收进程将网卡接收到的报文存储于共享内存中并通知用户态进程;所述用户态进程将所述共享内存的物理地址映射到所述用户态进程的虚拟地址后,从所述共享内存中提取所述报文并对所述报文进行处理;所述用户态进程将处理后的报文存储于所述共享内存中并通知内核态发送进程;所述内核态发送进程将所述处理后的报文通过相应的网卡发送。2.  如权利要求1所述的方法,其特征在于,所述内核态接收进程将网卡接收到的报文存储于共享内存并通知用户态进程,具体为:所述内核态接收进程从内存池中申请内存块,将网卡接收到的所述报文存储于所述内存块中,并将所述内存块的地址插入接收队列队尾;所述用户态进程轮询所述接收队列,从接收队列头部读取所述内存块的地址,直至所述接收队列为空;在所述接收队列为空时,所述用户态进程进入睡眠状态,直至所述接收队列非空时唤醒所述用户态进程。3.  如权利要求2所述的方法,其特征在于,将所述内存块的地址插入接收队列,具体为:根据所述报文的源IP地址和目的IP地址进行哈希运算;根据哈希运算后所得到的值,确定内核态接收队列的队列值;根据确定的内核接收队列的队列值,将所述报文的内存块地址存储至相应的接收队列中。4.  如权利要求2所述的方法,其特征在于,所述用户态进程从所述共享内存中提取所述报文并对所述报文进行处理,具体为:所述用户态进程从所述共享内存的接收队列队头中读出存储所述报文的内存块的地址,根据所述内存块的地址到内存池的相应位置处读取所述报文的内容并对所述报文进行处理。5.  如权利要求1所述的方法,其特征在于,所述用户态进程将处理后的报文存储于所述共享内存中并通知所述内核态发送进程,具体为:所述用户态进程将所述处理后的报文的内存块的地址插入到发送队列队尾,并调用系统函数通知所述内核态发送进程。6.  如权利要求1至5任一项所述的方法,其特征在于,所述共享内存为所述内核态在初始化时分配的,包括:由多内存块组成的内存池;用于保存所述内存块的地址的接收队列和发送队列所使用到的内存;用于保存所述接收队列的头指针和尾指针以及用于保存所述发送队列的头指针和尾指针所使用到的内存。7.  一种转发报文的装置,其特征在于,该装置包括:接收模块,用于指示内核态接收进程将网卡接收到的报文存储于共享内存中并通知用户态进程;处理模块,用于在所述用户态进程将所述共享内存的物理地址映射到所述用户态进程的虚拟地址后,从所述共享内存中提取所述报文并对所述报文进行处理;通知模块,用于在所述用户态进程将处理后的报文存储于所述共享内存后,通知内核态发送进程;发送模块,用于指示所述内核态发送进程将所述处理后的报文通过相应的网卡发送。8.  如权利要求7所述的装置,其特征在于,所述接收模块,具体用于:指示所述内核态接收进程从内存池中申请内存块,将网卡接收到的所述报文存储于所述内存块中,并将所述内存块的地址插入接收队列队尾;指示所述用户态进程轮询所述接收队列,从接收队列头部读取所述内存块地址,直至所述接收队列为空;在所述接收队列为空时,指示所述用户态进程进入睡眼状态,直至所述接 收队列非空时唤醒所述用户态进程。9.  如权利要求8所述的装置,其特征在于,所述接收模块,具体用于:根据所述报文的源IP地址和目的IP地址进行哈希运算;根据哈希运算后所得到的值,确定内核态接收队列的队列值;根据确定的内核接收队列的队列值,将所述报文的内存块地址存储至相应的接收队列中。10.  如权利要求7所述的装置,其特征在于,所述处理模块,具体用于:指示所述用户态进程从所述共享内存的接收队列队头中读出保存了所述报文的内存块的地址,根据所述内存块地址到内存池中读取所述报文的内容并对所述报文进行处理。11.  如权利要求7所述的装置,其特征在于,所述通知模块,具体用于:指示所述用户态进程将所述处理后的报文的内存块地址插入到发送队列队尾,并调用系统函数通知所述内核态发送进程。12.  如权利要求7至11任一项所述的装置,其特征在于,所述共享内存为所述内核态在初始化时分配的,包括:由多个所述内存块组成的内存池;用于保存所述内存块的地址的接收队列和发送队列所使用到的内存;用于保存所述接收队列的头指针和尾指针以及用于保存所述发送队列的头指针和尾指针所使用到的内存。

说明书

说明书一种转发报文的方法及装置
技术领域
本发明涉及通信领域,尤其涉及一种转发报文的方法及装置。
背景技术
在网络通信技术领域中,经常需要从网络中接收报文,然后根据系统功能对报文进行相应的处理。处理完成后,对于中间设备,报文需要从另一个端口中转发。这就涉及同一个系统中多个网卡间的报文转发技术,在对现有报文转发技术进行研究的过程中,发现采用基于socket的应用程序实现方法。该方法基于现有操作系统平台,在用户空间中采用socket技术完成对网络报文的接收、处理、转发的过程。在整个过程中,网络报文在到达应用程序之前,需要经过以下处理环节:网卡驱动处理、内核协议栈处理、报文从内核空间到应用空间的拷贝、内核协议栈、网卡驱动。而拷贝是一种很耗系统资源的过程,从而导致报文转发的处理速率低下。
发明内容
本发明实施例提供一种转发报文的方法及装置,用以实现在转发报文的过程中,能够避免将报文从内核空间到应用空间的拷贝,从而在提高报文转发速度的同时,也能够提高系统的资源利用率。
本发明实施例提供一种转发报文的方法,该方法包括:内核态接收进程将网卡接收到的报文存储于共享内存中并通知用户态进程;
所述用户态进程将所述共享内存的物理地址映射到所述用户态进程的虚拟地址后,从所述共享内存中提取所述报文并对所述报文进行处理;
所述用户态进程将处理后的报文存储于所述共享内存中并通知内核态发 送进程;
所述内核态发送进程将所述处理后的报文通过相应的网卡发送。
较佳的,所述内核态接收进程将网卡接收到的报文存储于共享内存并通知用户态进程,具体为:
所述内核态接收进程从内存池中申请内存块,将网卡接收到的所述报文存储于所述内存块中,并将所述内存块的地址插入接收队列队尾;
所述用户态进程轮询所述接收队列,从接收队列头部读取所述内存块的地址,直至所述接收队列为空;
在所述接收队列为空时,所述用户态进程进入睡眠状态,直至所述接收队列非空时唤醒所述用户态进程。
较佳的,将所述内存块的地址插入接收队列,具体为:
根据所述报文的源IP地址和目的IP地址进行哈希运算;
根据哈希运算后所得到的值,确定内核态接收队列的队列值;
根据确定的内核接收队列的队列值,将所述报文的内存块地址存储至相应的接收队列中。
较佳的,所述用户态进程从所述共享内存中提取所述报文并对所述报文进行处理,具体为:所述用户态进程从所述共享内存的接收队列队头中读出存储所述报文的内存块的地址,根据所述内存块的地址到内存池的相应位置处读取所述报文的内容并对所述报文进行处理。
较佳的,所述用户态进程将处理后的报文存储于所述共享内存中并通知所述内核态发送进程,具体为:
所述用户态进程将所述处理后的报文的内存块的地址插入到发送队列队尾,并调用系统函数通知所述内核态发送进程。
较佳的,所述共享内存为所述内核态在初始化时分配的,包括:
由多内存块组成的内存池;
用于保存所述内存块的地址的接收队列和发送队列所使用到的内存;
用于保存所述接收队列的头指针和尾指针以及用于保存所述发送队列的头指针和尾指针所使用到的内存。
本发明实施例提供一种转发报文的装置,装置包括:
接收模块,用于指示内核态接收进程将网卡接收到的报文存储于共享内存中并通知用户态进程;
处理模块,用于在所述用户态进程将所述共享内存的物理地址映射到所述用户态进程的虚拟地址后,从所述共享内存中提取所述报文并对所述报文进行处理;
通知模块,用于在所述用户态进程将处理后的报文存储于所述共享内存后,通知内核态发送进程;
发送模块,用于指示所述内核态发送进程将所述处理后的报文通过相应的网卡发送。
较佳的,所述接收模块,具体用于:
指示所述内核态接收进程从内存池中申请内存块,将网卡接收到的所述报文存储于所述内存块中,并将所述内存块的地址插入接收队列队尾;
指示所述用户态进程轮询所述接收队列,从接收队列头部读取所述内存块地址,直至所述接收队列为空;
在所述接收队列为空时,指示所述用户态进程进入睡眼状态,直至所述接收队列非空时唤醒所述用户态进程。
较佳的,所述接收模块,具体用于:
根据所述报文的源IP地址和目的IP地址进行哈希运算;
根据哈希运算后所得到的值,确定内核态接收队列的队列值;
根据确定的内核接收队列的队列值,将所述报文的内存块地址存储至相应的接收队列中。
较佳的,所述处理模块,具体用于:
指示所述用户态进程从所述共享内存的接收队列队头中读出保存了所述 报文的内存块的地址,根据所述内存块地址到内存池中读取所述报文的内容并对所述报文进行处理。
较佳的,所述通知模块,具体用于:
指示所述用户态进程将所述处理后的报文的内存块地址插入到发送队列队尾,并调用系统函数通知所述内核态发送进程。
较佳的,所述共享内存为所述内核态在初始化时分配的,包括:
由多个所述内存块组成的内存池;
用于保存所述内存块的地址的接收队列和发送队列所使用到的内存;
用于保存所述接收队列的头指针和尾指针以及用于保存所述发送队列的头指针和尾指针所使用到的内存。
上述实施例提供的转发报文的方法及装置,包括:内核态接收进程将网卡接收到的报文存储于共享内存中并通知用户态进程;所述用户态进程将所述共享内存的物理地址映射到所述用户态进程的虚拟地址后,从所述共享内存中提取所述报文并对所述报文进行处理;所述用户态进程将处理后的报文存储于所述共享内存中并通知内核态发送进程;所述内核态发送进程将所述处理后的报文通过相应的网卡发送。可以看出,首先,内核态接收进程将网卡接收到的报文存储于共享内存中;然后,用户态进程将共享内存的物理地址与用户态进程的虚拟地址建立映射关系,用户态进程根据所建立的映射关系对网卡接收到的报文进行处理,并将处理后的报文存储于共享内存中;最后,由内核态发送进程将处理后的报文通过相应的网卡发送,因此,避免了将报文从内核空间到应用空间的拷贝,从而在提高报文转发速度的同时,也能够提高系统的资源利用率。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的 一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的转发报文的方法流程图;
图2为本发明实施例提供的转发报文的装置结构示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
图1,为本发明实施例提供的一种转发报文的方法流程图。如图1所示,该方法可包括:
S101、内核态接收进程将网卡接收到的报文存储于共享内存中并通知用户态进程。
S102、用户态进程将共享内存的物理地址映射到用户态进程的虚拟地址后,从共享内存中提取报文并对报文进行处理。
S103、用户态进程将处理后的报文存储于共享内存中并通知内核态发送进程。
S104、内核态发送进程将处理后的报文通过相应的网卡发送。
其中,共享内存为内核态在初始化时分配的。具体的,内核态在初始化时,可分配一定容量的第一块连续的物理内存用于构建共享内存,并可进一步地将所分配的连续的物理内存进行划分。例如,内核态在初始化时,可分配大小为16M的连续物理内存用于构建共享内存,进一步地,还可将所分配的16M的连续物理内存分为8K个内存块,这样可计算出每个内存块的大小为2K,并将大小为2K的内存块用于存储内核态接收进程接收到的报文。
内核态在初始化时,除了分配一定容量的连续的物理内存用于构建共享内 存之外,还分配第二块连续的物理内存用于构建接收队列和发送队列。其中,所构建的接收队列用于存储内核态接收进程所接收的报文的内存块地址,所构建的发送队列用于存储内核态发送进程处理后的报文的内存块地址。例如,假设内核态在初始化时,分配大小为16M的连续物理内存用于构建共享内存,并将所分配的16M的连续物理内存分为8K个内存块,进一步假设1K个内存块的地址需要用一个队列进行保存,这时,内核态在初始化时,除了分配大小为16M的连续物理内存用于构建共享内存之外,还需分配另一块内存用于保存8个接收队列和8个发送队列,其中,8个接收队列可以为:为qos[1]、qos[2]、qos[3]、qos[4]、qos[5]、qos[6]、qos[7]、qos[8];8个发送队列可以为:qos[9]、qos[10]、qos[11]、qos[12]、qos[13]、qos[14]、qos[15]、qos[16]。
具体的,在将报文的内存块地址存储至接收队列中时,可根据内核态接收进程所接收的报文的源IP地址和目的IP地址进行哈希运算;根据哈希运算后所得到的值,确定内核态接收队列的队列值;根据确定的内核接收队列的队列值,将报文的内存块地址存储至相应的接收队列中,以保证报文的同源同宿。
其中,哈希运算就是在接收到报文以后,首先分别从报文的源IP地址、目的IP地址的32位二进制数中提取固定位置、固定数量的二进制数,比如12位到20位共9位数,然后将这组数进行异或操作,并根据队列数进行取余数操作。这样,就可以将不同的报文存储到不同的接收队列中,同时也保证了报文的同源同宿。
此外,内核态在初始化时,除了分配一定容量的第一块连续的物理内存用于构建共享内存、以及第二块连续的物理内存用于构建接收队列、发送队列之外,还可分配第三块连续的物理内存,用于存储接收队列的头指针和尾指针以及发送队列的头指针和尾指针。
例如,假设内核态在初始化时,分配大小为16M的连续物理内存用于构建共享内存和另一块内存用于保存8个接收队列和8个发送队列。进一步假设8个接收队列分别为:qos[1]、qos[2]、qos[3]、qos[4]、qos[5]、qos[6]、qos[7]、 qos[8];8个发送队列分别为:qos[9]、qos[10]、qos[11]、qos[12]、qos[13]、qos[14]、qos[15]、qos[16];进一步假设上述8个接收队列的头指针和尾指针分别为:为qos[1].head、qos[2].head、qos[3].head、qos[4].head、qos[5].head、qos[6].head、qos[7].head、qos[8].head、qos[1].tail、qos[2].tail、qos[3].tail、qos[4].tail、qos[5].tail、qos[6].tail、qos[7].tail、qos[8].tail;上述8个发送队列的头指针和尾指针分别为:为qos[9].head、qos[10].head、qos[11].head、qos[12].head、qos[13].head、qos[14].head、qos[15].head、qos[16].head、qos[9].tail、qos[10].tail、qos[11].tail、qos[12].tail、qos[13].tail、qos[14].tail、qos[15].tail、qos[16].tail。
这时,内核态在初始化时,还需分配另一块连续的物理内存,用于存放上述8个接收队列的头指针和尾指针以及上述8个发送队列的头指针和尾指针。
内核态在初始化时,不仅分配第一块连续的物理内存用于构建共享内存、第二块连续的物理内存用于构建接收队列和发送队列以及第三块连续的物理内存用于储接收队列的头指针和尾指针以及发送队列的头指针和尾指针,而且还记录所分配的第一块连续的物理内存的首地址、第二块连续的物理内存的首地址以及第三块连续的物理内存的首地址。这样,用户态进程通过记录的所分配的第一块连续的物理内存的首地址、第二块连续的物理内存的首地址以及第三块连续的物理内存的首地址,能够读取到第一块连续的物理内存的首地址及其大小、第二块连续的物理内存的首地址及其大小以及第三块连续的物理内存的首地址及其大小。并且,在用户态进程读取到第一块连续的物理内存的首地址及其大小、第二块连续的物理内存的首地址及其大小以及第三块连续的物理内存的首地址及其大小后,通过调用系统函数使得第一块连续的物理内存的地址与用户态进程的虚拟地址建立映射关系,这样,用户态进程可通过建立的映射关系,对内存块中存储的报文进行处理,因此,用户态进程可直接访问到内核态接收到的报文,从而避免了将报文从内核态到用户态的拷贝,提高了报文的转发速度,同时,也节约了系统资源。
上述步骤S101中,内核态接收进程将网卡接收到的报文存储于共享内存 并通知用户态进程,具体为:内核态接收进程从内存池中申请内存块,将网卡接收到的报文存储于申请到的内存块中,并将申请到的内存块的地址插入到接收队列的队尾;用户态进程轮询接收队列,从接收队列头部读取内存块的地址,直至接收队列为空;在接收队列为空时,用户态进程进入睡眠状态,直至接收队列非空时唤醒用户态进程。可以看出,采用等待唤醒机制以及中断轮询相结合的方式,减去了空闲时CPU的开销,从而提高了报文的转发速度和系统资源利用率。
上述步骤S102中,用户态进程从共享内存中提取报文并对报文进行处理,具体为:用户态进程从共享内存的接收队列队头中读出存储报文的内存块的地址,根据内存块的地址到内存池的相应位置处读取报文的内容并对报文进行处理。
上述步骤S103中,用户态进程将处理后的报文存储于共享内存中并通知内核态发送进程,具体为:用户态进程将处理后的报文的内存块的地址插入到发送队列队尾,并调用系统函数通知内核态发送进程。
下面通过一个具体的例子,对上述的内容进行详细的解释说明。
为了描述简便起见,假设接收队列只有一个队列为qos[M]且该队列当前为空。进一步假设内核态接收进程按照时间先后顺序接收到的报文为报文1、报文2、报文3,则内核态接收进程在接收到报文1、报文2、报文3后,从共享内存申请到内存块1用于存储报文1、申请到内存块2用于存储报文2的以及申请到内存块3用于存储报文。进一步假设申请到的内存块1的物理地址为001、内存块2的物理地址为002(二进制为0010)、内存块3的物理地址为003(二进制为0011)。然后,将内存块1的物理地址为001、内存块2的物理地址为002、内存块3的物理地址为003依次存储至接收队列qos[M]中,则报文1的物理地址001存储在接收队列qos[M]的头部,报文3的物理地址003存储在接收队列qos[M]的尾部。此时,用户态进程可通过调用系统函数,并根据接收队列qos[M]的头指针和尾指针,使得物理地址001、物理地址002、物理 地址003与用户态进程的虚拟地址建立映射关系。这样,用户态进程根据所建立的映射关系,可对报文1、报文2、报文3进行处理,因此,用户态进程可直接访问到内核态接收到的报文,从而避免了将报文从内核态到用户态的拷贝,节约了系统资源。
基于上述例子的基础上,假设发送队列为qos[N]且当前为空。在用户态进程对报文1、报文2、报文3进行处理后,依次将报文1的物理地址001、报文2的物理地址002、报文3的物理地址003存储至发送队列qos[N],内核态发送进行通过到发送队列qos[N],并根据发送队列qos[N]中报文1的物理地址001、报文2的物理地址002、报文3的物理地址003,读取到报文1、报文2、报文3,并将报文1、报文2、报文3发送至相应的网卡上。在内核态发送进程将报文1、报文2、报文3发送至相应的网卡以后,将内存块1、内存块2、内存块3进行释放,这时,内核态发送进程回收内存块1、内存块2、内存块3以及所分配的内存块1的物理地址001、内存块2的物理地址002、内存块3的物理地址003。
上述的接收队列qos[M]、发送队列qos[N]采用的是先进先出的方式,在具体实施时,接收队列和发送队列也可以采用先进后出的方式,在此不再对先进后出的方式进行详述。
本发明实施例中的报文可以是5元组报文,也可以是其它类型的报文。
根据以上内容,可以看出,上述实施例提供的转发报文的方法,包括:内核态接收进程将网卡接收到的报文存储于共享内存中并通知用户态进程;所述用户态进程将所述共享内存的物理地址映射到所述用户态进程的虚拟地址后,从所述共享内存中提取所述报文并对所述报文进行处理;所述用户态进程将处理后的报文存储于所述共享内存中并通知内核态发送进程;所述内核态发送进程将所述处理后的报文通过相应的网卡发送。可以看出,首先,内核态接收进程将网卡接收到的报文存储于共享内存中;然后,用户态进程将共享内存的物理地址与用户态进程的虚拟地址建立映射关系,用户态进程根据所建立的映射 关系对网卡接收到的报文进行处理,并将处理后的报文存储于共享内存中;最后,由内核态发送进程将处理后的报文通过相应的网卡发送,因此,避免了将报文从内核空间到应用空间的拷贝,从而在提高报文转发速度的同时,也能够提高系统的资源利用率。
基于相同的技术构思,本发明实施例还提供一种转发报文的装置,该装置可执行上述方法实施例。本发明实施例提供的转发报文的装置如图2所示。包括:
接收模块21,用于指示内核态接收进程将网卡接收到的报文存储于共享内存中并通知用户态进程;
处理模块22,用于在所述用户态进程将所述共享内存的物理地址映射到所述用户态进程的虚拟地址后,从所述共享内存中提取所述报文并对所述报文进行处理;
通知模块23,用于在所述用户态进程将处理后的报文存储于所述共享内存后,通知内核态发送进程;
发送模块24,用于指示所述内核态发送进程将所述处理后的报文通过相应的网卡发送。
较佳的,接收模块21,具体用于:
指示所述内核态接收进程从内存池中申请内存块,将网卡接收到的所述报文存储于所述内存块中,并将所述内存块的地址插入接收队列队尾;
指示所述用户态进程轮询所述接收队列,从接收队列头部读取所述内存块地址,直至所述接收队列为空;
在所述接收队列为空时,指示所述用户态进程进入睡眼状态,直至所述接收队列非空时唤醒所述用户态进程。
较佳的,接收模块21,具体用于:
根据所述报文的源IP地址和目的IP地址进行哈希运算;
根据哈希运算后所得到的值,确定内核态接收队列的队列值;
根据确定的内核接收队列的队列值,将所述报文的内存块地址存储至相应的接收队列中。
较佳的,处理模块22,具体用于:
指示所述用户态进程从所述共享内存的接收队列队头中读出保存了所述报文的内存块的地址,根据所述内存块地址到内存池中读取所述报文的内容并对所述报文进行处理。
较佳的,通知模块23,具体用于:
指示所述用户态进程将所述处理后的报文的内存块地址插入到发送队列队尾,并调用系统函数通知所述内核态发送进程。
较佳的,所述共享内存为所述内核态在初始化时分配的,包括:
由多个所述内存块组成的内存池;
用于保存所述内存块的地址的接收队列和发送队列所使用到的内存;
用于保存所述接收队列的头指针和尾指针以及用于保存所述发送队列的头指针和尾指针所使用到的内存。
综上,本发明实施例提供的转发报文的方法及装置,包括:内核态接收进程将网卡接收到的报文存储于共享内存中并通知用户态进程;所述用户态进程将所述共享内存的物理地址映射到所述用户态进程的虚拟地址后,从所述共享内存中提取所述报文并对所述报文进行处理;所述用户态进程将处理后的报文存储于所述共享内存中并通知内核态发送进程;所述内核态发送进程将所述处理后的报文通过相应的网卡发送。可以看出,首先,内核态接收进程将网卡接收到的报文存储于共享内存中;然后,用户态进程将共享内存的物理地址与用户态进程的虚拟地址建立映射关系,用户态进程根据所建立的映射关系对网卡接收到的报文进行处理,并将处理后的报文存储于共享内存中;最后,由内核态发送进程将处理后的报文通过相应的网卡发送,因此,避免了将报文从内核空间到应用空间的拷贝,从而在提高报文转发速度的同时,也能够提高系统的资源利用率。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

一种转发报文的方法及装置.pdf_第1页
第1页 / 共12页
一种转发报文的方法及装置.pdf_第2页
第2页 / 共12页
一种转发报文的方法及装置.pdf_第3页
第3页 / 共12页
点击查看更多>>
资源描述

《一种转发报文的方法及装置.pdf》由会员分享,可在线阅读,更多相关《一种转发报文的方法及装置.pdf(12页珍藏版)》请在专利查询网上搜索。

本发明公开了一种转发报文的方法及装置,包括:内核态接收进程将网卡接收到的报文存储于共享内存中并通知用户态进程;用户态进程将所述共享内存的物理地址映射到所述用户态进程的虚拟地址后,从共享内存中提取所述报文并对所述报文进行处理;用户态进程将处理后的报文存储于所述共享内存中并通知内核态发送进程;所述内核态发送进程将所述处理后的报文通过相应的网卡发送,因此,避免了将报文从内核空间到应用空间的拷贝,从而在提。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 >


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1