CN103428226A - 一种用户态与内核通信的方法与*** - Google Patents

一种用户态与内核通信的方法与*** Download PDF

Info

Publication number
CN103428226A
CN103428226A CN2013103890015A CN201310389001A CN103428226A CN 103428226 A CN103428226 A CN 103428226A CN 2013103890015 A CN2013103890015 A CN 2013103890015A CN 201310389001 A CN201310389001 A CN 201310389001A CN 103428226 A CN103428226 A CN 103428226A
Authority
CN
China
Prior art keywords
message
main frame
microsoft loopback
loopback adapter
user
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2013103890015A
Other languages
English (en)
Other versions
CN103428226B (zh
Inventor
高福亮
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
TIANJIN CP-WORLD INFORMATION TECHNOLOGY Co Ltd
Original Assignee
TIANJIN CP-WORLD INFORMATION TECHNOLOGY Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by TIANJIN CP-WORLD INFORMATION TECHNOLOGY Co Ltd filed Critical TIANJIN CP-WORLD INFORMATION TECHNOLOGY Co Ltd
Priority to CN201310389001.5A priority Critical patent/CN103428226B/zh
Publication of CN103428226A publication Critical patent/CN103428226A/zh
Application granted granted Critical
Publication of CN103428226B publication Critical patent/CN103428226B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Computer And Data Communications (AREA)

Abstract

本发明提供一种用户态与内核通信的方法与***,包括:在用户态获得物理网卡注册接口的网络数据结构;根据所获得的物理网卡注册接口的网络数据结构,在内核使用所述物理网卡注册接口的名称注册虚拟网卡接口;利用用户态的物理网卡收取需要内核处理的主机接收报文,将所述主机接收报文通过对应的虚拟网卡传送到内核;将内核处理完成的主机发送报文通过对应的虚拟网卡传送到用户态,并通过所述用户态发送到物理网卡。本发明可以分别满足用户态、内核对于物理网络接口状态的感知需求,也解决了用户态报文格式与内核报文格式的转换问题。减少了用户态与内核信息传输的***性能损耗,节约了信息传输的时间,提高了报文传输和处理的效率。

Description

一种用户态与内核通信的方法与***
技术领域
本发明涉及数据交互领域,尤其涉及一种用户态与内核通信的方法与***。
背景技术
在数据交互领域,用户态与内核之间的通信是一个非常重要的研究课题。由于内核态程序的局限性,多数内核态程序都需要与用户态进行数据的交换和传输,从而实现***更广泛的扩展和应用。
在现有技术中,主要采用以下方法来实现用户态与内核通信的目的:一种方法是通过内核直接加载物理网卡驱动,通过物理网卡进行外部数据端的报文收发,然后由内核通过数据拷贝送到用户态进程中进行业务处理;而另一种方法是利用用户态来加载物理网卡驱动,通过物理网卡进行报文的收发,对于需要转发到内核处理的主机报文,用户态会利用套接字(socket)函数创建通信链句柄或通过进程(proc)文件***创建文件来实现数据的交互。
根据以上描述可以看出,在现有技术中,通过内核加载网卡驱动的方法容易在万兆网卡大流量的冲击下引发大量中断而消耗一定的CPU性能(特别是针对X86体系架构),另外从内核态到用户态的数据拷贝也会造成一定***性能的损耗;而现有的用户态加载网卡驱动的方法,虽然不再面临上述导致CPU中断问题,也避免了数据拷贝导致的***性能损耗,但却无法解决一些主机报文业务处理(如Linux内核的上网拨号、动态IP地址分配等)需要感知实际物理网络及网络接口状态的问题。
发明内容
(一)要解决的技术问题
本发明提供一种用户态与内核通信的方法与***,能够感知实际物理网络接口的物理状态并且在通信过程中无需报文格式转换,解决了现有技术中没有网络接口可进行物理感知的技术问题。
(二)技术方案
为解决上述技术问题,本发明提供一种用户态与内核通信的方法,其特征在于,包括:
在用户态获得物理网卡注册接口的网络数据结构;
根据所获得的物理网卡注册接口的网络数据结构,在内核使用所述物理网卡注册接口的名称注册虚拟网卡接口;
利用用户态的物理网卡收取需要内核处理的主机接收报文,将所述主机接收报文通过对应的虚拟网卡传送到内核;
将内核处理完成的主机发送报文通过对应的虚拟网卡传送到用户态,并通过所述用户态发送到物理网卡。
进一步地,
所述将所述主机接收报文通过对应的虚拟网卡传送到内核进一步包括:
在用户态创建主机报文接收链表,与所述物理网卡中的接收队列相对应,根据接收到的主机接收报文网络数据结构中的设备文件句柄查找对应的虚拟网卡,将所述主机接收报文入队至所述主机报文接收链表,留待后续出队将所述主机接收报文写入所述对应虚拟网卡,传送至内核;
和/或,
所述将内核处理完成的主机发送报文通过对应的虚拟网卡传送到物理网卡进一步包括:
在用户态创建主机报文发送链表,与所述物理网卡中的发送队列相对应,用户态从物理网卡接口网络数据结构中的设备文件句柄对应的虚拟网卡,将所述内核处理完成的主机发送报文读出,入队至所述主机报文发送链表,留待后续出队通过物理网卡发送队列发送出去。
进一步地,
在所述入队至所述主机报文接收链表之后且在所述将所述主机接收报文写入所述对应虚拟网卡之前,还包括:在用户态采用轮询方式遍历所有物理网卡接口的网络数据结构维护的主机报文接收链表,令报文出队直到对应某个虚拟网卡的报文链表为空;
和/或,
在所述在用户态创建主机报文发送链表之后且在所述用户态从物理网卡接口网络数据结构中的设备文件句柄对应的虚拟网卡,将所述内核处理完成的主机发送报文读出之前,还包括:在用户态采用轮询方式遍历所有虚拟网卡的设备文件句柄,直到某个设备文件句柄对应的虚拟网卡读出的数据为空。
进一步地,从所述主机报文接收链表和所述主机报文发送链表中入队和出队的操作分别独立进行。
进一步地,所述物理网卡和相应名称的所述虚拟网卡的接口物理状态保持一致,包括:在用户态扫描所述物理网卡的接口物理状态并下发到内核,在内核控制所述虚拟网卡的接口物理状态与相应名称的所述物理网卡的接口物理状态保持一致。
另一方面,本发明还提供一种用户态与内核通信的***,包括:物理网卡注册设备、虚拟网卡注册设备、物理网卡、用户空间、虚拟网卡接口模块、虚拟网卡和内核空间,其中物理网卡注册设备和物理网卡相连,位于用户空间,虚拟网卡注册设备和虚拟网卡相连,位于内核空间,用户空间和内核空间之间通过虚拟网卡接口模块相连;其中:
物理网卡注册设备,用于在用户空间获得物理网卡注册接口的网络数据结构,并通过虚拟网卡接口模块发送至内核空间的虚拟网卡注册设备;
虚拟网卡注册设备,用于根据所获得的物理网卡注册接口的网络数据结构,在内核空间使用物理网卡注册接口的名称注册虚拟网卡接口;
物理网卡,用于收取需要内核空间处理的主机接收报文并通过用户空间转发,发送由用户空间接收到的经内核空间处理完毕的主机发送报文;
用户空间,用于通过虚拟网卡接口模块将物理网卡接收到的需要内核空间处理的主机接收报文发送至内核空间,通过虚拟网卡接口模块接收经内核空间处理完毕的主机发送报文并通过物理网卡发送出去;
虚拟网卡接口模块,用于将需要内核空间处理的主机接收报文写入虚拟网卡发送至内核空间,将经内核空间处理完毕的主机发送报文从虚拟网卡读出到用户空间;
虚拟网卡,用于接收虚拟网卡接口模块写入的需要内核空间处理的主机接收报文并转发到内核空间,接收经内核空间处理完毕的主机发送报文并通过虚拟网卡接口模块读出转发到用户空间;
内核空间,用于接收虚拟网卡发送的需要内核空间处理的主机接收报文,进行处理,并将处理完毕的主机发送报文通过虚拟网卡发送出去。
进一步地,所述用户空间还包括:
主机报文链表接收模块,用于创建与物理网卡中的接收队列相对应的主机报文接收链表,根据物理网卡接收到的主机接收报文网络数据结构中的设备文件句柄,查找所对应虚拟网卡的主机报文接收链表,并将主机接收报文入队所述主机报文接收链表;
和/或,
主机报文链表发送模块,用于创建与物理网卡中的发送队列相对应的主机报文发送链表,将用户空间从虚拟网卡中读出的内核处理完成的主机发送报文,入队与该虚拟网卡的设备文件句柄对应的主机报文发送链表,再传送至物理网卡发送队列。
进一步地,所述虚拟网卡接口模块还包括:
虚拟网卡报文写入模块,用于通过轮询方式遍历所述主机报文链表接收模块中的主机报文接收链表,将该主机接收报文出队并写入相对应的虚拟网卡,直到所述主机报文接收链表为空停止;
和/或,
虚拟网卡报文读取模块,用于通过轮询方式遍历所有虚拟网卡,直将该主机发送报文读出并发送至主机报文链表发送模块,直到从所述虚拟网卡读取的内容为空停止。
进一步地,所述虚拟网卡报文读取模块和所述虚拟网卡报文写入模块的操作分别独立进行。
进一步地,所述虚拟网卡为至少一个,部署在内核空间的以太网层,所述物理网卡数量与所述虚拟网卡数量相同;
每个所述物理网卡的接口物理状态与相应名称的所述虚拟网卡的接口物理状态保持一致。
(三)有益效果
可见,在本发明提出的用户态与内核通信的方法与***中,通过用户态的物理网卡接收数据报文,并经内核部署的虚拟网卡(tap)与内核实现数据交互,无需内核加载网卡驱动引发中断而消耗CPU性能,也不需要从内核态到用户态拷贝数据来损耗***的性能;而由于用户态的物理网卡接口和内核虚拟网卡接口的个数、名称均相同,具有一一对应的关系,可以分别满足用户态、内核对于物理网络接口状态的感知需求,可以进行接口绑定的操作,也解决了用户态报文格式与内核报文格式的转换问题。减少了用户态与内核信息传输的***性能损耗,节约了信息传输的时间,提高了报文传输和处理的效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明用户态与内核通信的方法基本流程示意图;
图2是本发明用户态与内核通信的方法的一个优选实施例的流程示意图;
图3是本发明用户态与内核通信的方法中用户态与内核数据交互的流程图;
图4是本发明用户态与内核通信的***的基本结构示意图;
图5是本发明用户态与内核通信的***中用户空间的一个优选实施例的结构示意图;
图6是本发明用户态与内核通信的***的数据交互拓扑图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提出了一种用户态与内核通信的方法,包括:
步骤101:在用户态获得物理网卡注册接口的网络数据结构。
步骤102:根据所获得的物理网卡注册接口的网络数据结构,在内核使用所述物理网卡注册接口的名称注册虚拟网卡接口。
步骤103:利用用户态的物理网卡收取需要内核处理的主机接收报文,将所述主机接收报文通过对应的虚拟网卡传送到内核。
步骤104:将内核处理完成的主机发送报文通过对应的虚拟网卡传送到用户态,并通过所述用户态发送到物理网卡。
可见,在本发明实施例提出的用户态与内核通信的方法中,可以通过用户态的物理网卡接收数据报文,并经内核部署的虚拟网卡与内核实现数据交互,无需内核加载网卡驱动引发中断而消耗CPU性能,也不需要从内核态到用户态拷贝数据来损耗***的性能;而由于用户态的物理网卡接口和内核虚拟网卡接口的个数、名称均相同,具有一一对应的关系,可以分别满足用户态、内核对于物理网络接口状态的感知需求,可以进行接口绑定的操作,也解决了用户态报文格式与内核报文格式的转换问题。减少了用户态与内核信息传输的***性能损耗,节约了信息传输的时间,提高了报文传输和处理的效率。
并且,在本发明的实施例中,为了进一步确定相对应的虚拟网卡,并且对收取和发送的报文起到顺序缓冲的作用,优选地,可以在将主机接收报文发送到内核的过程中采用如下方法:
在用户态创建主机报文接收链表,与所述物理网卡中的接收队列相对应,根据接收到的主机接收报文网络数据结构中的设备文件句柄查找对应的虚拟网卡,将所述主机接收报文入队至所述主机报文接收链表,留待后续出队将所述主机接收报文写入所述对应虚拟网卡,传送至内核。
在本发明的另一个实施例中,在接收内核处理完成的主机发送报文的过程中可以采用如下方法:
在用户态创建主机报文发送链表,与所述物理网卡中的发送队列相对应,用户态从物理网卡接口网络数据结构中的设备文件句柄对应的虚拟网卡,将所述内核处理完成的主机发送报文读出,入队至所述主机报文发送链表,留待后续出队通过物理网卡发送队列发送出去。
在本发明实施例的实际应用中,为了能够无遗漏地一一发送需经内核处理的报文,优选地,在入队至主机报文接收链表之后,将主机接收报文写入对应虚拟网卡之前,还可以包括:在用户态采用轮询方式遍历所有物理网卡接口的网络数据结构维护的主机报文接收链表,令报文出队直到对应某个虚拟网卡的报文链表为空。
在本发明的另一个实施例中,为了能够无遗漏地随时一一收取内核处理完毕的报文,优选地,在用户态创建主机报文发送链表之后,并且在用户态从物理网卡接口网络数据结构中的设备文件句柄对应的虚拟网卡,将内核处理完成的主机发送报文读出之前,还可以包括:在用户态采用轮询方式遍历所有虚拟网卡的设备文件句柄,直到某个设备文件句柄对应的虚拟网卡读出的数据为空。
在本发明的另一个实施例中,发送报文和收取报文的过程并不冲突,所以在用户态从主机报文接收链表和主机报文发送链表中入队和出队的操作可以分别独立进行。
在本发明的一个实施例中,在针对一些主机报文业务处理时为了感知实际的物理网络和网络接口的状态,需要在内核进行相对应的接口物理状态感知,优选地,物理网卡和相应名称的所述虚拟网卡的接口物理状态可以保持一致。在本发明实施例的一个实际实现中,可以在用户态扫描所述物理网卡的接口物理状态并下发到内核,在内核控制所述虚拟网卡的接口物理状态与相应名称的所述物理网卡的接口物理状态保持一致。
下面以自用户态具体接收一篇需要内核处理的报文的过程为例,来详细说明本发明一个实施例的实现过程,参见图2,该报文的处理过程包括:
步骤201:内核进行初始化,并配置虚拟网卡可用,部署虚拟网卡。
此步骤中,对内核进行初始化操作,并且由于在后续步骤中内核端需要利用虚拟网卡收发报文,与用户态通信,所以在内核初始化的同时需要配置虚拟网卡可用。
内核的虚拟网卡需要部署在以太网层,在此步骤中虚拟网卡可以为一个或多个,视实际接口的条件而定,并且虚拟网卡还可以进行桥接口、链路聚合口绑定等等操作。
步骤202:对用户态进行初始化操作,并加载物理网卡驱动,完成物理网卡初始化接口注册。
在此步骤中,物理网卡部署在用户态,用于接收外部数据端的报文,所以需要在用户态进行物理网卡的驱动加载和初始化接口注册步骤。
步骤203:在用户态以注册的接口网络数据结构(netdev)作为函数入参,调用添加的接口函数以网络设备名称(netdev-name)进行内核虚拟网卡的初始化及接口注册,使得虚拟网卡注册接口与物理网卡注册接口的名称相同,将注册返回的设备文件句柄(tapfd)存入用户态的netdev。
本步骤中,需要利用物理网卡注册接口的netdev来保证虚拟网卡注册接口的名称与物理网卡保持一致,以实现一一对应的关系,以便后续步骤中的报文传输和接口物理状态的感应。
内核的虚拟网卡注册接口返回的tapfd保存至用户态的netdev,可以供后续步骤中通过接收到报文的netdev来查找对应tapfd的虚拟网卡,以便存入相对应的虚拟网卡。
步骤204:创建主机报文接收链表(user_to_kernel_queue)和主机报文发送链表(kernel_to_user_queue),使得分别与物理网卡的接收和发送队列相对应,并将两个报文链表存入用户态的netdev,如图3所示。
此步骤可以便于用户态根据接收到报文的netdev来查找对应tapfd的收发队列以便收发报文。
步骤205:通过物理网卡接收外部数据端发送的需要内核处理的报文。
在用户态,本发明实施例利用物理网卡来接收外部数据端发送的各种报文,并负责将需要内核处理的报文转发。
步骤206:在用户态通过物理网卡接收到的PKB格式报文中所存储的netdev来找到步骤203中存入的对应的tapfd。
根据所接收的报文中的网络数据结构netdev可以在用户态中查找到步骤204中存入的与其相对应的收发队列,与虚拟网卡tapfd对应。
步骤207:在用户态添加虚拟网卡报文收发函数,将接收到的报文入队该tap设备的user_to_kernel_queue,见图3。
将接收到的需要内核处理的报文入队相对应的主机报文接收链表,以便于在后续步骤中写入相应的虚拟网卡并发送至内核。
步骤208:采用轮询方式遍历主机报文接收链表,当某个tap对应的主机报文接收链表不为空时,则将其出队并通过写入(write)函数写入该虚拟网卡的tapfd并交内核处理,如图3所示。
在用户态采用轮询方式可以保证随时且不遗漏地向相应的虚拟网卡写入需要内核处理的报文。至此步骤,完成了整个报文接收并转发至内核的过程。
步骤209:内核处理虚拟网卡转发的需要其处理的报文,处理完毕后将报文发送至相对应的虚拟网卡的tapfd,见图3。
内核接收并处理完毕报文后,需要再发还至用户态,此通信过程同样需要经由内核的虚拟网卡作为中转接收并发送。
步骤210:在用户态通过轮询方式遍历所有虚拟网卡的tapfd,通过读取(read)函数从虚拟网卡中读出报文,如图3所示。
此时同样采用轮询的方式来读取所有虚拟网卡的tapfd,可以保证随时且不遗漏地读出经由内核处理完毕的报文。
步骤211:将报文入队该tapfd对应的kernel_to_user_queue,然后出队通过用户态经相应的物理网卡发送队列发送出去,见图3。
为了保证收取报文的顺序性转发,需要先将内核处理完毕的报文入队相应的主机报文发送链表,最后通过用户态经物理网卡发送队列发出。
至此,则完成了将内核处理完毕的报文再度转发回用户态并发出的全过程。
以上是将某个需要内核处理的报文自用户态转发至内核,然后处理完毕再发还至用户态的全过程,至此则完成了用户态与内核通信的整个流程。
另外,需要说明的是,上述基于图2、图3的所有流程描述是本发明用户态与内核通信的方法的一种优选的实现过程,在本发明用户态与内核通信的方法的实际实现中,可以根据需要在图1所示流程的基础上进行任意变形,可以是选择图2、图3中的任意步骤来实现,各步骤的先后顺序也可以根据需要调整等。比如,在一种实际实现中,在步骤207中可以不将报文入队而是直接运行虚拟网卡的写入程序;再如,在本发明方法的另一种实际实现中,可以不执行步骤208中遍历轮询的过程,而是采用其他的方式。
本发明的一个实施例中还提出了一种用户态与内核通信的***,参见图4,该***包括:物理网卡注册设备401、虚拟网卡注册设备402、物理网卡403、用户空间404、虚拟网卡接口模块405、虚拟网卡406和内核空间407,其中物理网卡注册设备401和物理网卡403相连,位于用户空间404,虚拟网卡注册设备402和虚拟网卡406相连,位于内核空间407,用户空间404和内核空间407之间通过虚拟网卡接口模块405相连;其中:
物理网卡注册设备401,用于在用户空间获得物理网卡注册接口的网络数据结构,并通过虚拟网卡接口模块发送至内核空间的虚拟网卡注册设备;
虚拟网卡注册设备401,用于根据所获得的物理网卡注册接口的网络数据结构,在内核空间使用物理网卡注册接口的名称注册虚拟网卡接口;
物理网卡403,用于收取需要内核空间处理的主机接收报文并通过用户空间转发,发送由用户空间接收到的经内核空间处理完毕的主机发送报文;
用户空间404,用于通过虚拟网卡接口模块将物理网卡接收到的需要内核空间处理的主机接收报文发送至内核空间,通过虚拟网卡接口模块接收经内核空间处理完毕的主机发送报文并通过物理网卡发送出去;
虚拟网卡接口模块405,用于将需要内核空间处理的主机接收报文写入虚拟网卡发送至内核空间,将经内核空间处理完毕的主机发送报文从虚拟网卡读出到用户空间;
虚拟网卡406,用于接收虚拟网卡接口模块写入的需要内核空间处理的主机接收报文并转发到内核空间,接收经内核空间处理完毕的主机发送报文并通过虚拟网卡接口模块读出转发到用户空间;
内核空间407,用于接收虚拟网卡发送的需要内核空间处理的主机接收报文,进行处理,并将处理完毕的主机发送报文通过虚拟网卡发送出去。
并且,在本发明***的实施例中,为了进一步确定相对应的虚拟网卡设备,并且对收取和发送的报文起到顺序缓冲的作用,优选地,如图5所示,用户空间404还可以包括:主机报文链表接收模块501,用于创建与物理网卡中的接收队列相对应的主机报文接收链表,根据物理网卡接收到的主机接收报文网络数据结构中的设备文件句柄,查找所对应虚拟网卡的主机报文接收链表,并将主机接收报文入队所述主机报文接收链表。
在本发明的另一个实施例中,用户空间404还可以包括:主机报文链表发送模块502,用于创建与物理网卡中的发送队列相对应的主机报文发送链表,将用户空间从虚拟网卡中读出的内核处理完成的主机发送报文,入队与该虚拟网卡的设备文件句柄对应的主机报文发送链表,再传送至物理网卡发送队列。
在本发明实施例的实际应用中,为了能够无遗漏地一一发送需经内核处理的报文,优选地,虚拟网卡接口模块405还可以包括:虚拟网卡报文写入模块503,用于通过轮询方式遍历所述主机报文链表接收模块中的主机报文接收链表,将该主机接收报文出队并写入相对应的虚拟网卡,直到所述主机报文接收链表为空停止
在本发明的另一个实施例中,为了能够无遗漏地随时一一收取内核处理完毕的报文,优选地,虚拟网卡接口模块405还可以包括:虚拟网卡报文读取模块504,用于通过轮询方式遍历所有虚拟网卡,直将该主机发送报文读出并发送至主机报文链表发送模块,直到从所述虚拟网卡读取的内容为空停止。
在本发明的另一个实施例中,发送报文和收取报文的过程并不冲突,所以虚拟网卡报文读取模块504和虚拟网卡报文写入模块503的操作可以分别独立进行。
在本发明的一个实施例中,物理网卡和虚拟网卡的数量可以根据实际的接口和承载量所决定的,所以虚拟网卡可以包括一个或多个虚拟网卡,部署在内核空间的以太网层,而物理网卡则相应地包括一个或多个物理网卡,如图6所示。
在针对一些主机报文业务处理时为了感知实际的物理网络和网络接口的状态,需要在内核进行相对应的接口物理状态感知,优选地,物理网卡的接口物理状态和相应名称的虚拟网卡的接口物理状态可以保持一致。
需要说明的是,上述图4至图6所示的用户态与内核通信的各个实施例的结构可以进行任意组合使用。
可见,本发明实施例具有如下有益效果:
在本发明实施例提出的用户态与内核通信的方法与***中,通过用户态的物理网卡接收数据报文,并经内核部署的虚拟网卡与内核实现数据交互,无需内核加载网卡驱动引发中断而消耗CPU性能,也不需要从内核态到用户态拷贝数据来损耗***的性能;而由于用户态的物理网卡接口和内核虚拟网卡接口的个数、名称均相同,具有一一对应的关系,可以分别满足用户态、内核对于物理网络接口状态的感知需求,可以进行接口绑定的操作,也解决了用户态报文格式与内核报文格式的转换问题。减少了用户态与内核信息传输的***性能损耗,节约了信息传输的时间,提高了报文传输和处理的效率。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (10)

1.一种用户态与内核通信的方法,其特征在于,包括:
在用户态获得物理网卡注册接口的网络数据结构;
根据所获得的物理网卡注册接口的网络数据结构,在内核使用所述物理网卡注册接口的名称注册虚拟网卡接口;
利用用户态的物理网卡收取需要内核处理的主机接收报文,将所述主机接收报文通过对应的虚拟网卡传送到内核;
将内核处理完成的主机发送报文通过对应的虚拟网卡传送到用户态,并通过所述用户态发送到物理网卡。
2.根据权利要求1所述的用户态与内核通信的方法,其特征在于,
所述将所述主机接收报文通过对应的虚拟网卡传送到内核进一步包括:
在用户态创建主机报文接收链表,与所述物理网卡中的接收队列相对应,根据接收到的主机接收报文网络数据结构中的设备文件句柄查找对应的虚拟网卡,将所述主机接收报文入队至所述主机报文接收链表,留待后续出队将所述主机接收报文写入所述对应虚拟网卡,传送至内核;
和/或,
所述将内核处理完成的主机发送报文通过对应的虚拟网卡传送到物理网卡进一步包括:
在用户态创建主机报文发送链表,与所述物理网卡中的发送队列相对应,用户态从物理网卡接口网络数据结构中的设备文件句柄对应的虚拟网卡,将所述内核处理完成的主机发送报文读出,入队至所述主机报文发送链表,留待后续出队通过物理网卡发送队列发送出去。
3.根据权利要求2所述的用户态与内核通信的方法,其特征在于:
在所述入队至所述主机报文接收链表之后且在所述将所述主机接收报文写入所述对应虚拟网卡之前,还包括:在用户态采用轮询方式遍历所有物理网卡接口的网络数据结构维护的主机报文接收链表,令报文出队写入虚拟网卡直到对应某个虚拟网卡的报文链表为空;
和/或,
在所述在用户态创建主机报文发送链表之后且在所述用户态从物理网卡接口网络数据结构中的设备文件句柄对应的虚拟网卡,将所述内核处理完成的主机发送报文读出之前,还包括:在用户态采用轮询方式遍历所有虚拟网卡的设备文件句柄,直到某个设备文件句柄对应的虚拟网卡读出的数据为空。
4.根据权利要求3所述的用户态与内核通信的方法,其特征在于:
从所述主机报文接收链表和所述主机报文发送链表中入队和出队的操作分别独立进行。
5.根据权利要求1至4中任一项所述的用户态与内核通信的方法,其特征在于,所述物理网卡和相应名称的所述虚拟网卡的接口物理状态保持一致,包括:在用户态扫描所述物理网卡的接口物理状态并下发到内核,在内核控制所述虚拟网卡的接口物理状态与相应名称的所述物理网卡的接口物理状态保持一致。
6.一种用户态与内核通信的***,其特征在于,包括:物理网卡注册设备、虚拟网卡注册设备、物理网卡、用户空间、虚拟网卡接口模块、虚拟网卡和内核空间,其中物理网卡注册设备和物理网卡相连,位于用户空间,虚拟网卡注册设备和虚拟网卡相连,位于内核空间,用户空间和内核空间之间通过虚拟网卡接口模块相连;其中:
物理网卡注册设备,用于在用户空间获得物理网卡注册接口的网络数据结构,并通过虚拟网卡接口模块发送至内核空间的虚拟网卡注册设备;
虚拟网卡注册设备,用于根据所获得的物理网卡注册接口的网络数据结构,在内核空间使用物理网卡注册接口的名称注册虚拟网卡接口;
物理网卡,用于收取需要内核空间处理的主机接收报文并通过用户空间转发,发送由用户空间接收到的经内核空间处理完毕的主机发送报文;
用户空间,用于通过虚拟网卡接口模块将物理网卡接收到的需要内核空间处理的主机接收报文发送至内核空间,通过虚拟网卡接口模块接收经内核空间处理完毕的主机发送报文并通过物理网卡发送出去;
虚拟网卡接口模块,用于将需要内核空间处理的主机接收报文写入虚拟网卡发送至内核空间,将经内核空间处理完毕的主机发送报文从虚拟网卡读出到用户空间;
虚拟网卡,用于接收虚拟网卡接口模块写入的需要内核空间处理的主机接收报文并转发到内核空间,接收经内核空间处理完毕的主机发送报文并通过虚拟网卡接口模块读出转发到用户空间;
内核空间,用于接收虚拟网卡发送的需要内核空间处理的主机接收报文,进行处理,并将处理完毕的主机发送报文通过虚拟网卡发送出去。
7.根据权利要求6所述的用户态与内核通信的***,其特征在于,所述用户空间还包括:
主机报文链表接收模块,用于创建与物理网卡中的接收队列相对应的主机报文接收链表,根据物理网卡接收到的主机接收报文网络数据结构中的设备文件句柄,查找所对应虚拟网卡的主机报文接收链表,并将主机接收报文入队所述主机报文接收链表;
和/或,
主机报文链表发送模块,用于创建与物理网卡中的发送队列相对应的主机报文发送链表,将用户空间从虚拟网卡中读出的内核处理完成的主机发送报文,入队与该虚拟网卡的设备文件句柄对应的主机报文发送链表,再传送至物理网卡发送队列。
8.根据权利要求7所述的用户态与内核通信的***,其特征在于,所述虚拟网卡接口模块还包括:
虚拟网卡报文写入模块,用于通过轮询方式遍历所述主机报文链表接收模块中的主机报文接收链表,将该主机接收报文出队并写入相对应的虚拟网卡,直到所述主机报文接收链表为空停止;
和/或,
虚拟网卡报文读取模块,用于通过轮询方式遍历所有虚拟网卡,直将该主机发送报文读出并发送至主机报文链表发送模块,直到从所述虚拟网卡读取的内容为空停止。
9.根据权利要求8所述的用户态与内核通信的***,其特征在于:所述虚拟网卡报文读取模块和所述虚拟网卡报文写入模块的操作分别独立进行。
10.根据权利要求6至9中任一项所述的用户态与内核通信的***,其特征在于:
所述虚拟网卡为至少一个,部署在内核空间的以太网层,所述物理网卡数量与所述虚拟网卡数量相同;
每个所述物理网卡的接口物理状态与相应名称的所述虚拟网卡的接口物理状态保持一致。
CN201310389001.5A 2013-08-30 2013-08-30 一种用户态与内核通信的方法与*** Active CN103428226B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310389001.5A CN103428226B (zh) 2013-08-30 2013-08-30 一种用户态与内核通信的方法与***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310389001.5A CN103428226B (zh) 2013-08-30 2013-08-30 一种用户态与内核通信的方法与***

Publications (2)

Publication Number Publication Date
CN103428226A true CN103428226A (zh) 2013-12-04
CN103428226B CN103428226B (zh) 2017-04-19

Family

ID=49652402

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310389001.5A Active CN103428226B (zh) 2013-08-30 2013-08-30 一种用户态与内核通信的方法与***

Country Status (1)

Country Link
CN (1) CN103428226B (zh)

Cited By (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103929418A (zh) * 2014-03-28 2014-07-16 汉柏科技有限公司 基于网络安全设备的无线上网方法及***
CN104123194A (zh) * 2014-07-16 2014-10-29 上海斐讯数据通信技术有限公司 内核态与用户态的通信结构及通信方法
CN105094995A (zh) * 2014-05-19 2015-11-25 北京东土科技股份有限公司 一种内核与用户态进程间的安全通信传输方法和***
CN106101012A (zh) * 2016-07-06 2016-11-09 广州海格通信集团股份有限公司 一种卫星ip网关协议适配的方法
CN108306832A (zh) * 2018-01-29 2018-07-20 北京启明星辰信息安全技术有限公司 一种网络流量分流方法及装置
CN108322326A (zh) * 2017-06-27 2018-07-24 新华三技术有限公司 一种接口状态控制方法、报文传输方法及装置
CN109062542A (zh) * 2018-03-15 2018-12-21 山东超越数控电子股份有限公司 一种国产万兆网卡实现网络通讯的方法
CN109753368A (zh) * 2018-12-20 2019-05-14 清华大学 一种实时数据发送方法及***
CN109842585A (zh) * 2017-11-27 2019-06-04 中国科学院沈阳自动化研究所 面向工业嵌入式***的网络信息安全防护单元和防护方法
CN111147340A (zh) * 2019-12-26 2020-05-12 山东超越数控电子股份有限公司 一种对can总线接口进行网络化访问的方法、设备及介质
CN113301004A (zh) * 2020-06-17 2021-08-24 阿里巴巴集团控股有限公司 数据处理方法、装置、通信方法和单网卡虚拟机
CN114338408A (zh) * 2021-12-27 2022-04-12 北京字节跳动网络技术有限公司 多***中网络设备虚拟化实现方法及装置、电子设备、存储介质
CN114567583A (zh) * 2022-02-24 2022-05-31 北京卓越信通电子股份有限公司 一种路由报文从网卡经内核到路由模块的传输方法
CN114584541A (zh) * 2022-03-07 2022-06-03 浪潮云信息技术股份公司 一种加速虚拟机网络的方法
CN115002028A (zh) * 2022-04-30 2022-09-02 济南浪潮数据技术有限公司 一种报文处理方法、装置及介质
CN117395329A (zh) * 2023-12-13 2024-01-12 井芯微电子技术(天津)有限公司 收发以太二层协议报文的方法、装置及存储介质
CN117453299A (zh) * 2023-12-25 2024-01-26 南京沁恒微电子股份有限公司 一种应用态网卡驱动方法及其装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101409714A (zh) * 2008-11-18 2009-04-15 华南理工大学 一种基于虚拟机的防火墙***
CN102497434A (zh) * 2011-12-16 2012-06-13 中国科学院计算技术研究所 内核态虚拟网络设备的建立方法、及其包发送和接收方法
CN102932174A (zh) * 2012-10-25 2013-02-13 华为技术有限公司 一种物理网卡管理方法、装置及物理主机

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101409714A (zh) * 2008-11-18 2009-04-15 华南理工大学 一种基于虚拟机的防火墙***
CN102497434A (zh) * 2011-12-16 2012-06-13 中国科学院计算技术研究所 内核态虚拟网络设备的建立方法、及其包发送和接收方法
CN102932174A (zh) * 2012-10-25 2013-02-13 华为技术有限公司 一种物理网卡管理方法、装置及物理主机

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
麻利辉: "虚拟网卡TUN/TAP驱动程序设计原理", 《CHINAUNIX.NET LINUX时代》 *

Cited By (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103929418A (zh) * 2014-03-28 2014-07-16 汉柏科技有限公司 基于网络安全设备的无线上网方法及***
CN105094995A (zh) * 2014-05-19 2015-11-25 北京东土科技股份有限公司 一种内核与用户态进程间的安全通信传输方法和***
CN105094995B (zh) * 2014-05-19 2019-02-12 北京东土科技股份有限公司 一种内核与用户态进程间的安全通信传输方法和***
CN104123194A (zh) * 2014-07-16 2014-10-29 上海斐讯数据通信技术有限公司 内核态与用户态的通信结构及通信方法
CN106101012A (zh) * 2016-07-06 2016-11-09 广州海格通信集团股份有限公司 一种卫星ip网关协议适配的方法
CN108322326B (zh) * 2017-06-27 2021-02-26 新华三技术有限公司 一种接口状态控制方法、报文传输方法及装置
CN108322326A (zh) * 2017-06-27 2018-07-24 新华三技术有限公司 一种接口状态控制方法、报文传输方法及装置
CN109842585B (zh) * 2017-11-27 2021-04-13 中国科学院沈阳自动化研究所 面向工业嵌入式***的网络信息安全防护单元和防护方法
CN109842585A (zh) * 2017-11-27 2019-06-04 中国科学院沈阳自动化研究所 面向工业嵌入式***的网络信息安全防护单元和防护方法
CN108306832A (zh) * 2018-01-29 2018-07-20 北京启明星辰信息安全技术有限公司 一种网络流量分流方法及装置
CN109062542A (zh) * 2018-03-15 2018-12-21 山东超越数控电子股份有限公司 一种国产万兆网卡实现网络通讯的方法
CN109753368A (zh) * 2018-12-20 2019-05-14 清华大学 一种实时数据发送方法及***
CN111147340A (zh) * 2019-12-26 2020-05-12 山东超越数控电子股份有限公司 一种对can总线接口进行网络化访问的方法、设备及介质
CN113301004A (zh) * 2020-06-17 2021-08-24 阿里巴巴集团控股有限公司 数据处理方法、装置、通信方法和单网卡虚拟机
CN113301004B (zh) * 2020-06-17 2023-05-09 阿里巴巴集团控股有限公司 数据处理方法、装置、通信方法和单网卡虚拟机
CN114338408A (zh) * 2021-12-27 2022-04-12 北京字节跳动网络技术有限公司 多***中网络设备虚拟化实现方法及装置、电子设备、存储介质
CN114567583A (zh) * 2022-02-24 2022-05-31 北京卓越信通电子股份有限公司 一种路由报文从网卡经内核到路由模块的传输方法
CN114584541B (zh) * 2022-03-07 2024-06-04 浪潮云信息技术股份公司 一种加速虚拟机网络的方法
CN114584541A (zh) * 2022-03-07 2022-06-03 浪潮云信息技术股份公司 一种加速虚拟机网络的方法
CN115002028A (zh) * 2022-04-30 2022-09-02 济南浪潮数据技术有限公司 一种报文处理方法、装置及介质
CN115002028B (zh) * 2022-04-30 2024-02-13 济南浪潮数据技术有限公司 一种报文处理方法、装置及介质
CN117395329B (zh) * 2023-12-13 2024-02-06 井芯微电子技术(天津)有限公司 收发以太二层协议报文的方法、装置及存储介质
CN117395329A (zh) * 2023-12-13 2024-01-12 井芯微电子技术(天津)有限公司 收发以太二层协议报文的方法、装置及存储介质
CN117453299A (zh) * 2023-12-25 2024-01-26 南京沁恒微电子股份有限公司 一种应用态网卡驱动方法及其装置
CN117453299B (zh) * 2023-12-25 2024-03-01 南京沁恒微电子股份有限公司 一种应用态网卡驱动方法及其装置

Also Published As

Publication number Publication date
CN103428226B (zh) 2017-04-19

Similar Documents

Publication Publication Date Title
CN103428226A (zh) 一种用户态与内核通信的方法与***
CN103312601B (zh) 用户态到内核态的数据报文处理方法
CN105930121B (zh) 多客户端的笔迹同步方法和***
CN103645994A (zh) 一种数据处理方法及设备
CN101599991A (zh) 一种基于高速通信协议的提升网络文件***性能的方法
CN105281921A (zh) 一种虚拟桌面实现组播的方法及装置
CN103763173A (zh) 数据传输方法和计算节点
CN104010228B (zh) 一种用于基于级的自动调整的对等媒体流的装置和方法
CN105025047A (zh) 一种云桌面的推送方法、***以及推送端和接收端
CN102480420A (zh) 报文发送方法以及报文接收方法、装置及***
CN104468509A (zh) 手机网络游戏数据传输的方法、***和手机用户端
CN108419336B (zh) 一种led灯光屏幕控制***及其实现方法
CN102065143A (zh) 基于http的通信方法及***、http服务器、http客户端
CN102843435A (zh) 一种在集群***中存储介质的访问、响应方法和***
CN103746904A (zh) 信息交互方法和装置
CN104159212A (zh) 一种绑定终端的方法及装置
CN112954068A (zh) 一种基于rdma的数据传输方法及装置
CN102129663B (zh) 一种读取地址和宽度不对齐图像处理方法及电路结构
CN105448008A (zh) 一种电子化课堂抢答的实现方法、装置和***
CN100353330C (zh) 一种基于ip网络的磁盘镜像方法
CN103701865A (zh) 一种数据传输的方法及***
CN110519242A (zh) 数据传输方法及装置
CN102379109B (zh) 一种数据流重用传输的方法、复制点设备及***
CN103117955A (zh) 消息传输方法及装置、***
CN106453596A (zh) 一种分享图片的方法、装置和***

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
PP01 Preservation of patent right
PP01 Preservation of patent right

Effective date of registration: 20180528

Granted publication date: 20170419

PD01 Discharge of preservation of patent

Date of cancellation: 20240528

Granted publication date: 20170419