一种数据通信方法及装置与流程

文档序号:17048686发布日期:2019-03-05 19:48阅读:180来源:国知局
一种数据通信方法及装置与流程

本发明涉及计算机领域,尤其涉及一种数据通信方法及装置。



背景技术:

现有的宿主机和该宿主机上运行的虚拟机(该虚拟机相对于宿主机而言,是客户机)之间的数据通信基本都基于网络通信,但是在某些应用场景中,用户往往会人为事先关闭虚拟机网络以实现虚拟机的网络安全隔离,该场景下无法实现宿主机与客户机正在运行进程之间的实时通信,因为网络通道已经被关闭如果客户机中的进程存在与宿主机中的进程进行数据交互的需求,将无法实现。

目前一种虚拟机软件vmware工具(tool)有一个功能为:在宿主机和客户机之间,或者从一台虚拟机到另一台虚拟机进行复制和粘贴操作,该功能不依赖于网络打开与否,但是只能安装在vmware产品中,无法应用到linux开源社区的虚拟化方案中,并且也仅实现文件的拷贝粘贴工功能,在虚拟机网络被关闭的情况下无法实现宿主机和客户机正在运行进程之间的实时直接数据通信功能。



技术实现要素:

本申请提供一种数据通信方法及装置,可以绕过网络实现数据通信。

本申请采用如下技术方案。

一种数据通信方法,应用于共享硬件的计算机系统之间的通信中,包括:

确定第一计算机系统与第二计算机系统通信时,通过共享的硬件中的输入输出io设备建立通信通道;

基于所建立的通信通道,所述第一计算机系统与所述第二计算机系统进行通信。

其中,所述io设备可以是杂项设备或字符设备。

其中,所述第二计算机系统可以是虚拟机,所述第一计算机系统可以是所述虚拟机的宿主机;

或者,所述第一计算机系统可以是虚拟机,所述第二计算机系统可以是所述虚拟机的宿主机;

或者,所述第一计算机系统、所述第二计算机系统可以是同一个宿主机上的两个虚拟机。

其中,所述通过共享的硬件中的输入输出io设备建立通信通道可以包括:

通过所述第一计算机系统中的设备驱动,以及所述第二计算机系统中的设备驱动,建立所述第一计算机系统中的io设备和所述第二计算机系统中的io设备之间的数据通信通道。

其中,所述第一计算机系统与所述第二计算机系统进行通信可以包括以下一项或多项操作:

第一计算机系统或第二计算机系统,将待发送给对端计算机系统的数据,根据本计算机系统的io设备的文件句柄,写入本计算机系统中的io设备;

第一计算机系统或第二计算机系统,根据本计算机系统的io设备的文件句柄,从本计算机系统中的io设备中,读取对端计算机系统发送的数据;

其中,对端计算机系统是指已通过共享的硬件中的io设备,和本计算机系统建立通信通道的其它计算机系统。

一种数据通信装置,应用于共享硬件的计算机系统之间的通信中,包括:处理器和存储器;

所述存储器用于保存用于进行数据通信的程序;所述用于进行数据通信的程序在被所述处理器读取执行时,进行如下操作:

确定第一计算机系统与第二计算机系统通信时,通过共享的硬件中的输入输出io设备建立通信通道;

基于所建立的通信通道,所述第一计算机系统与所述第二计算机系统进行通信。

其中,所述io设备可以是杂项设备或字符设备。

其中,所述通过共享的硬件中的输入输出io设备建立通信通道可以包括:

通过所述第一计算机系统中的设备驱动,以及所述第二计算机系统中的设备驱动,建立所述第一计算机系统中的io设备和所述第二计算机系统中的io设备之间的数据通信通道。

一种数据通信装置,应用于共享硬件的计算机系统之间的通信中,包括:

建立模块,用于当确定第一计算机系统与第二计算机系统通信时,通过共享的硬件中的输入输出io设备建立通信通道;

通信模块,用于基于所建立的通信通道,进行所述第一计算机系统与所述第二计算机系统之间的通信。

其中,所述io设备可以是杂项设备或字符设备。

其中,所述建立模块通过共享的硬件中的输入输出io设备建立通信通道可以包括:

所述建立模块通过所述第一计算机系统中的设备驱动,以及所述第二计算机系统中的设备驱动,建立所述第一计算机系统中的io设备和所述和第二计算机系统中的io设备之间的数据通信通道。

本申请至少一个实施例中,可以绕过网络通道进行网络通信;即使计算机系统的网络被关闭,也可以实现共享使用硬件的两个计算机系统之间的数据通信。

当然,实施本申请的任一产品并不一定需要同时达到以上所述的所有优点。

附图说明

图1是实施例一的数据通信方法的流程图;

图2是实施例一的例子的实现原理示意图;

图3是实施例三的数据通信装置的示意图。

具体实施方式

下面将结合附图及实施例对本申请的技术方案进行更详细的说明。

需要说明的是,如果不冲突,本申请实施例以及实施例中的各个特征可以相互结合,均在本申请的保护范围之内。另外,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

在一种配置中,进行数据通信的装置可包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存(memory)。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。内存可能包括一个或多个模块。

计算机可读介质包括永久性和非永久性、可移动和非可移动存储介质,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom),快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。

本文中,计算机系统中的设备一般是指和真实硬件对应的文件;比如在unix、linux等系统中,一个设备是/dev目录下的一个设备文件(或称设备节点);有些情况下,计算机系统中的设备也可能对应于伪设备(即不存在真实硬件)。

其中,计算机系统中的设备可以用访问文件的形式访问,比如可以进行打开(open)、读(read)、写(write)、关闭(close)等系统调用。可以将计算机系统中的设备看成一个文件。

实施例一、一种数据通信方法,应用于共享硬件的计算机系统之间的通信中,如图1所示,包括步骤s110~s120:

s110、确定第一计算机系统与第二计算机系统通信时,通过共享的硬件中的输入输出io设备建立通信通道;

s120、基于所建立的通信通道,所述第一计算机系统与所述第二计算机系统进行通信。

本实施例中,可以绕过网络通道进行网络通信;这样即使计算机系统的网络被关闭,也可以实现共享使用硬件的两个计算机系统之间的数据通信。

本实施例中,第一计算机系统和第二计算机系统、或其中任何一个计算机系统的网络可以是关闭的。在第一计算机系统和第二计算机系统的网络都打开的情况下,两个计算机系统虽然可以通过网络进行通信,但也不排除仍然使用本实施例的方法进行通信。

本实施例中,第一计算机系统和第二计算机系统共享硬件可以是指,两者是运行在同一个真实机器上,比如第一计算机系统和第二计算机系统可以分别是虚拟机及其宿主机,或同一台宿主机上的两个虚拟机。其中,虚拟机可以指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统;宿主机可以指安装虚拟机软件的计算机系统,虚拟机可以看成是宿主机上的客户机。

本实施例中,可以通过在第一计算机系统和第二计算机系统中增加代码,来实现上述步骤s110~s120。

一种实现方式中,第一计算机系统和第二计算机系统进行数据通信,可以但不限于是指第一计算机系统中的第一进程,和第二计算机系统中的第二进程进行数据通信。

本实现方式中,第一进程当需要和第二进程通信时,可以打开第一计算机系统中的io设备,比如在有数据待发送给第二进程时才打开第一计算机系统中的io设备;或者在发送数据给第二进程前的任何时间段,打开第一计算机系统中的io设备,比如第一进程必然需要和第二进程通信的情况下,可以是第一进程一启动就打开第一计算机系统中的io设备。

类似地,第二进程可以一启动或在执行过程中打开第二计算机系统中的io设备。

其它实现方式中,第一计算机系统和第二计算机系统进行数据通信,也可以是指第一计算机系统中的线程、或进程、或操作系统等,和第二计算机系统中的线程、或进程、或操作系统等进行数据通信。

本实施例中,第一、第二计算机系统中的io设备可以通过底层驱动交互、硬件连接(如芯片管脚相连)等方式实现同步。

一种实现方式中,所述io设备可以但不限于是面向流的io设备。

本实现方式中,面向流的io设备可以是指该io设备支持逐字符或逐字节的读写。

其它实现方式中,也可以采用其它种类的io设备。

一种实现方式中,io设备可以是指杂项设备(miscdevice)或字符设备(chardevice)。

其中,字符设备可以是指io传输过程中以字符为单位进行传输的设备;字符设备所对应的真实io设备可以包括键盘、打印机等。

其中,杂项设备可以看成是一种特殊的字符设备,对应于不好归类、不属于预先确定的字符设备范畴的真实io设备。

本实现方式中,对于第一、第二计算机系统而言,并不知道也无需了解杂项设备或字符设备中的数据是来自于真实硬件,还是来自于另一个计算机系统。

其它实现方式中,io设备也可以是其它种类的io设备。

一种实现方式中,第二计算机系统可以是虚拟机,第一计算机系统可以是该虚拟机的宿主机;

或者,第一计算机系统可以是虚拟机,第二计算机系统可以是该虚拟机的宿主机;

或者,第一计算机系统、第二计算机系统可以是同一个宿主机上的两个虚拟机。

本实现方式中,虚拟机中的进程可以在启动时就打开本虚拟机的io设备;宿主机中的进程可以在待发送数据给虚拟机中的进程时再打开本宿主机的io设备,在数据通信完成后关闭本宿主机的io设备。比如,宿主机中的进程可以设计成:在判断要通信的进程是虚拟机中的进程时,打开本宿主机的io设备;待和虚拟机中的进程通信结束后,关闭本宿主机的io设备。

本实现方式中,在虚拟机网络安全隔离的条件下,可以实现宿主机与虚拟机之间的数据通信通道,即:绕过网络实现数据通信。

一种实现方式中,通过共享的硬件中的输入输出io设备建立通信通道还可以包括:

通过第一计算机系统中的设备驱动,以及第二计算机系统中的设备驱动,建立第一计算机系统中的io设备和第二计算机系统中的io设备之间的数据通信通道。

本实现方式中,如果是第一计算机系统中的第一进程打开第一计算机系统中的io设备,第二计算机系统中的第二进程打开第二计算机系统中的io设备,则建立通信通道相当于将第一、第二计算机系统中打开io设备的进程进行绑定,使这两个进程之间能够通过各自计算机系统中的io设备和设备驱动进行交互。

本实现方式中,上述数据通信通道还可以包括第一、第二计算机系统中各自的io设备和各自的设备驱动之间的接口。

本实现方式中,当第一计算机系统或第二计算机系统为宿主机时,宿主机打开io设备,可以触发宿主机的设备驱动与虚拟机的设备驱动建立数据通信信道,从而同步第一、第二计算机系统中的io设备。

本实现方式中,第一、第二计算机系统的设备驱动之间可以同步第一、第二计算机系统中的io设备,从而可以将第一、第二计算机系统中的io设备的数据变化,分别体现在第一、第二计算机系统中的io设备中。

当本实现方式应用在linux环境中时,设备驱动可以是virtio设备驱动;其中,virtio是对虚拟化hypervisor中的一组通用模拟设备的抽象。第一、第二计算机系统之间进行数据通信,可以看成是第一计算机系统中的第一进程,和第二计算机系统中的第二进程进行数据通信;其中,第一、第二进程可以是用户态进程,设备驱动可以工作在内核态;其中内核态与用户态是操作系统的两种运行级别。

当本实现方式应用在linux环境中,且第一计算机系统或第二计算机系统为宿主机时,宿主机中的进程可以通过和qemu进程交互,从而和本宿主机中的设备驱动进行交互;其中,qemu是一种模拟处理器。

当本实现方式应用在linux环境中,且第一计算机系统和/或第二计算机系统为虚拟机时,虚拟机中的进程可以通过本虚拟机的io设备提供的虚拟文件系统api,和本虚拟机的io设备交互;io设备可以通过接口和设备驱动进行交互。

一种实现方式中,所述第一计算机系统与所述第二计算机系统进行通信可以包括以下一项或多项操作:

第一计算机系统或第二计算机系统,将待发送给对端计算机系统的数据,根据本计算机系统的io设备的文件句柄,写入本计算机系统中的io设备;

第一计算机系统或第二计算机系统,根据本计算机系统的io设备的文件句柄,从本计算机系统中的io设备中,读取对端计算机系统发送的数据;

其中,对端计算机系统是指已通过共享的硬件中的io设备,和本计算机系统建立通信通道的其它计算机系统。

比如对于第一计算机系统,对端计算机系统是第二计算机系统;对于第二计算机系统,对端计算机系统是第一计算机系统。

本实现方式中,当计算机系统中的进程打开本计算机系统中的io设备时,可以获得本计算机系统中io设备的文件句柄。

其中,文件句柄(filehandle)对于打开的文件(本实现方式中即指io设备)是唯一的识别依据;进程要访问io设备时,将访问请求和io设备的文件句柄一起发送给操作系统,由操作系统执行对io设备的访问,比如读或写。

下面用一个例子说明本实施例。本例中,第一计算机系统为宿主机,第二计算机系统为该宿主机上的虚拟机;io设备为杂项设备。

本例的实现原理如图2所示,本例中的虚拟机是基于linux操作系统的客户机(guest)。本例提供了一种在网络隔离的linux虚拟机环境中,通过杂项设备驱动实现宿主机和客户机之间的实时数据通信通道,进而绕过网络实现数据通信的方法。

本例中,假设虚拟机中的用户态进程已打开杂项设备/dev/name,其中设备名字name为任意符合命名规范的字符名字。

从客户机用户态进程的角度,实时数据通信通道的接口为上述杂项设备,打开该杂项设备进行读写便可以实现数据通信功能,即实时数据通信功能将通过读写该杂项设备实现。该杂项设备可以看成包含内核态的传输通道和传输接口,传输通道通过传输接口与虚拟机上基于virtio的杂项设备驱动交互。传输通道可以包括虚拟文件系统(virtualfilesystem)应用程序编程接口(applicationprogramminginterface,api)和传输通道协议接口。

其中,基于virtio的杂项设备驱动按照linux虚拟文件系统api对用户态进程提供设备文件操作api,即通常的文件相关操作:打开(open),关闭(close),读取(read),写入(write)。

虚拟文件系统api通过传输通道协议接口和传输接口,将虚拟机上用户态进程写入杂项设备的数据发送给基于virtio的杂项设备驱动(该数据将通过宿主机上的virtio设备驱动发送给宿主机上的用户态进程),从基于virtio的杂项设备驱动得到虚拟机上用户态进程要从杂项设备读取的数据。

在宿主机端,用户态进程通过进程间通信的方式与用户态的qemu进程交互,将写入杂项设备的数据放入qeumu进程的virtual-queue(虚拟队列)中,并从qemu进程得到从杂项设备读取的数据;qemu进程起到数据中转站的作用。宿主机上内核态的virtio设备驱动会将qemu进程的virtual-queue中的数据传输到客户机内核态的基于virtio的杂项设备驱动中去,并从客户机内核态的基于virtio的杂项设备驱动接收数据传输给qemu进程,由此形成一条数据通信通道。

在宿主机端或者客户机端,当用户态进程有与对端(客户机端或者宿主机端)的用户态进程进行数据交互的需求时,打开杂项设备将触发设备驱动与对端的杂项设备进行配对,从而形成一条数据交互通道。

通过该数据通道传输的数据可以定义成一定格式,即按照一定协议(protocol)进行传输,该协议可以自行设计或采用已有协议。

本例中,当第一计算机系统为宿主机(host),第二计算机系统是虚拟机时,一次通信过程包括如下步骤201~207:

201、虚拟机在启动后,虚拟机中的用户态进程a打开虚拟机中的杂项设备a,获得杂项设备b的文件句柄ah。

202、宿主机中的用户态进程b需要和虚拟机中的用户态进程a进行通信时,打开宿主机中的杂项设备b,获得杂项设备b的文件句柄bh;杂项设备b的打开会触发virtio设备驱动建立和杂项设备a之间的通信通道;

203、宿主机中的用户态进程b根据文件句柄bh对杂项设备b进行写操作,将要发送给用户态进程a的数据写入杂项设备b;该写操作会被virtio设备驱动同步到虚拟机的杂项设备a中。

204、虚拟机中的用户态进程a会监视到杂项设备a的数据增加,根据文件句柄ah对杂项设备a进行读操作,读取增加的数据,即宿主机中的用户态进程b发送来的数据。

205、虚拟机中的用户态进程a根据读取的数据进行操作,得到操作结果;根据文件句柄ah对杂项设备a进行写操作,将操作结果写入杂项设备a;该写操作会被virtio设备驱动同步到宿主机的杂项设备b中。

206、宿主机中的用户态进程b会监视到杂项设备b的数据增加,根据文件句柄bh对杂项设备b进行读操作,读取到操作结果。

207、通信完成后,宿主机中的用户态进程b可以关闭杂项设备b。

本例中,可以但不限于采用c语言对杂项设备驱动进行编程。

本例中,杂项设备也可以替换成字符设备,或其它的io设备。

实施例二、一种数据通信装置,应用于共享硬件的计算机系统虚拟机之间的通信中,包括:处理器和存储器;

所述存储器用于保存用于进行数据通信的程序;所述用于进行数据通信的程序在被所述处理器读取执行时,进行如下操作:

确定第一计算机系统与第二计算机系统通信时,通过共享的硬件中的输入输出io设备建立通信通道;

基于所建立的通信通道,所述第一计算机系统与所述第二计算机系统进行通信。

本实施例中,用于进行数据通信的程序可以是第一、第二计算机系统中运行的程序的组成部分;比如当第一、第二计算机系统之间进行数据通信,是指第一计算机系统中的第一进程,和第二计算机系统中的第二进程进行数据通信时,用于进行数据通信的程序可以分别是产生上述第一进程/第二进程的第一程序/第二程序的一个组成部分,比如但不限于可以是第一程序/第二程序中包含的子程序或函数。

本实施例中,处理器和存储器可以包括真实硬件,也可以包括虚拟机中的虚拟处理器和虚拟存储器。

一种实现方式中,io设备可以是杂项设备或字符设备。

一种实现方式中,第二计算机系统可以是虚拟机,第一计算机系统可以是所述虚拟机的宿主机;

或者,第一计算机系统可以是虚拟机,第二计算机系统可以是所述虚拟机的宿主机;

或者,第一计算机系统、第二计算机系统可以是同一个宿主机上的两个虚拟机。

一种实现方式中,通过共享的硬件中的输入输出io设备建立通信通道可以包括:

通过所述第一计算机系统中的设备驱动,以及所述第二计算机系统中的设备驱动,建立所述第一计算机系统中的io设备和所述第二计算机系统中的io设备之间的数据通信通道。

一种实现方式中,第一计算机系统与所述第二计算机系统进行通信可以包括以下一项或多项操作:

将第一计算机系统或第二计算机系统待发送给对端计算机系统的数据,根据本计算机系统(即:第一计算机系统或第二计算机系统)的io设备的文件句柄,写入本计算机系统中的io设备;

根据第一计算机系统或第二计算机系统的io设备的文件句柄,从本计算机系统中的io设备中,读取对端计算机系统发送的数据;

其中,对端计算机系统是指已通过共享的硬件中的io设备,和本计算机系统建立通信通道的其它计算机系统。

本实施例中,用于进行数据通信的程序在被处理器读取执行时,所进行的操作可以对应于实施例一的步骤s110~s120,其中实现细节可参见实施例一。

实施例三、一种数据通信装置,应用于共享硬件的计算机系统之间的通信中,如图3所示,包括:

建立模块31,用于当确定第一计算机系统与第二计算机系统通信时,通过共享的硬件中的输入输出io设备建立通信通道;

通信模块32,用于基于所建立的通信通道,进行所述第一计算机系统与所述第二计算机系统之间的通信。

本实施例中,数据通信装置可以分布于第一、第二计算机系统中。

一种实现方式中,所述io设备可以是杂项设备或字符设备。

一种实现方式中,第二计算机系统可以是虚拟机,第一计算机系统可以是所述虚拟机的宿主机;

或者,第一计算机系统可以是虚拟机,第二计算机系统可以是所述虚拟机的宿主机;

或者,第一计算机系统、第二计算机系统可以是同一个宿主机上的两个虚拟机。

一种实现方式中,建立模块通过共享的硬件中的输入输出io设备建立通信通道可以包括:

建立模块通过所述第一计算机系统中的设备驱动,以及所述第二计算机系统中的设备驱动,建立所述第一计算机系统中的io设备和所述和第二计算机系统中的io设备之间的数据通信通道。

一种实现方式中,通信模块进行所述第一计算机系统与所述第二计算机系统之间的通信可以包括以下一项或多项操作:

将第一计算机系统或第二计算机系统待发送给对端计算机系统的数据,根据本计算机系统的io设备的文件句柄,写入本计算机系统中的io设备;

根据第一计算机系统或第二计算机系统的io设备的文件句柄,从本计算机系统中的io设备中,读取对端计算机系统发送的数据;

其中,对端计算机系统是指已通过共享的硬件中的io设备,和本计算机系统建立通信通道的其它计算机系统。

本实施例中,建立模块和通信模块所进行的操作可以对应于实施例一的步骤s110~s120,其它实现细节可参见实施例一。

本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本申请不限制于任何特定形式的硬件和软件的结合。

当然,本申请还可有其他多种实施例,在不背离本申请精神及其实质的情况下,熟悉本领域的技术人员当可根据本申请作出各种相应的改变和变形,但这些相应的改变和变形都应属于本申请的权利要求的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1