首页> 中国专利> 在网络环境仿真中采用虚拟网卡实现数据通信的方法

在网络环境仿真中采用虚拟网卡实现数据通信的方法

摘要

本发明公开了一种在网络环境仿真中采用虚拟网卡实现数据通信的方法,它涉及计算机网络环境仿真技术领域,目的是针对现有技术中的问题,用本发明解决网络环境仿真中的底层数据传输问题。首先设计虚拟网卡和虚拟HUB(集线器),用虚拟HUB连接虚拟网卡,按照数据通信规则进行虚拟网卡之间的数据通信,其过程为:封装数据包;将数据加入发送方虚拟网卡发送数据缓冲区;发送方虚拟网卡发送数据包给虚拟HUB;虚拟HUB接收数据包;虚拟HUB发送数据包给接收方虚拟网卡;接收方虚拟网卡将数据包加入接收数据缓冲区;对接收到的数据包进行拆封,还原以太帧和用户数据。本发明可用于计算机网络及网络安全领域的底层数据转发模拟仿真和网络环境模拟仿真。

著录项

  • 公开/公告号CN1777142A

    专利类型发明专利

  • 公开/公告日2006-05-24

    原文格式PDF

  • 申请/专利权人 西安电子科技大学;

    申请/专利号CN200510096382.3

  • 发明设计人 马建峰;杨力;杨延庆;

    申请日2005-11-21

  • 分类号H04L12/56(20060101);H04L29/06(20060101);

  • 代理机构61205 陕西电子工业专利中心;

  • 代理人韦全生;张问芬

  • 地址 710071 陕西省西安市太白路2号

  • 入库时间 2023-12-17 17:16:35

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2015-01-07

    未缴年费专利权终止 IPC(主分类):H04L12/56 授权公告日:20080220 终止日期:20131121 申请日:20051121

    专利权的终止

  • 2008-02-20

    授权

    授权

  • 2006-07-19

    实质审查的生效

    实质审查的生效

  • 2006-05-24

    公开

    公开

说明书

技术领域

本发明涉及计算机网络环境仿真技术领域,具体地说是一种在网络环境仿真中采用虚拟网卡实现数据通信的方法,它可以应用于计算机网络和网络安全领域的底层数据转发模拟仿真和网络环境模拟仿真。

背景技术

现有的物理网卡(Network Interface Card,简称NIC),也称网络适配器,是主机与网络相互连接的接口。无论是普通主机还是服务器,只要连接到局域网,就需要安装一块网卡。如果有必要,一台设备也可以同时配置多块网卡。主机或网络设备之间在进行相互通讯时,在底层是以帧的方式进行传输的。网卡的功能主要有两个:一是将主机和网络设备中的数据封装为帧,并将数据发送到网络上去;二是接收网络上传过来的帧,并将帧重新组合成数据,发送到所在主机和设备中。网卡接收所有在网络上传输的信号,但只接受发送到该主机设备的帧和广播帧,将其余的帧丢弃,然后传送到系统做进一步处理。当主机发送数据时,网卡等待合适的时间将分组插入到数据流中。接收系统通知主机消息是否完整地到达,如果出现问题,将要求对方重新发送。每块网卡都有一个世界唯一的ID号,也叫做MAC(Media Access Control)地址。MAC地址用于在网络中标识主机的身份,实现网络中不同主机之间的通信和信息交换。

在很多应用环境中需要对真实的网卡进行软件模拟,用软件的方法实现真实网卡的功能,称为虚拟网卡技术。现有的虚拟网卡技术主要有三类:网络仿真软件中的虚拟网卡、功能软件虚拟网卡和虚拟网络装置中的虚拟网卡。

网络仿真软件中的虚拟网卡主要是指网络仿真工具如OPNET、NS2等此类软件系统中的网络底层数据传输部分,但这部分不是独立的虚拟网卡设备,它们是用软件的方法在已经连接的两个节点之间进行仿真数据的传输,这些数据传输对用户是透明的,但是用户可以根据仿真的需要设置数据的相关属性。

功能软件虚拟网卡主要是单独的在某一个主机上运行软件模块,例如免费软件SoftEther(虚拟网卡)。它主要是模拟以太网卡的工作顺序,模拟集线器(HUB)功能tunnel特性,实现虚拟专用网(VPN)功能,使得系统把此软件完全无碍的识别成一块网卡,这样通过连接和配置就可以将公网(Internet)内的某些机器连接起来当作内网(LAN)来使用。

虚拟网络装置中的虚拟网卡主要是指一些专用通信系统中为了在设备内部传输数据的需要而模拟的网卡,这种方法一般是在通信设备的某些模块中模拟多块网卡用来提高设备内部和设备之间数据传输的速率和数据传输的效率等。

网络仿真软件中的虚拟网卡技术不足之处在于其虚拟网卡及其数据通信方法对用户是透明的,依赖特定的环境,扩展性差。功能软件虚拟网卡技术的不足之处在于它只能应用在单机中,不能纯粹的进行网络环境仿真之用。虚拟网络装置中的虚拟网卡技术的不足之处在于它依赖硬件设备,开放性差。

发明内容

本发明的目的是针对现有技术中存在的不足,提供一种在网络环境仿真中采用虚拟网卡实现数据通信的方法,解决网络环境仿真中的底层数据传输问题,应用在网络环境仿真中,不依赖于特定的硬件环境,扩展性、开放性好。

本发明的技术方案是:在单台计算机环境中,首先设计虚拟网卡和虚拟集线器(HUB),虚拟网卡的主要功能是发送、接收和缓存数据,用虚拟HUB将它们连接,按照数据通信的规则实现在网络环境仿真中的虚拟网卡之间的数据通信,该方法的步骤包括:

(1)设计虚拟网卡和虚拟HUB:

(2)进行数据包的封装;

(3)将数据加入到发送方虚拟网卡发送数据缓冲区;

(4)发送方虚拟网卡发送数据包给虚拟HUB;

(5)虚拟HUB接收数据包;

(6)虚拟HUB发送数据包给接收方虚拟网卡;

(7)接收方虚拟网卡将数据包加入接收数据缓冲区;

(8)对接收到的数据包进行拆封,还原以太帧和用户数据。

上述的在网络环境仿真中采用虚拟网卡实现数据通信的方法,所说的设计的虚拟网卡包含数据记录和功能调用接口,数据记录主要记录虚拟网卡的基本信息,包括虚拟网卡名称、MAC地址、IP地址、子网掩码、网关、混杂模式标志、接收数据缓冲区、发送数据缓冲区、接收状态标志、发送状态标志。功能调用接口提供给外界,负责对虚拟网卡的基本数据记录进行操作和修改。功能调用接口有:获取网卡名字、获取和设置MAC地址、获取和设置IP地址、获取和设置网关、获取和设置网卡混杂模式、获取和设置子网掩码。所说的设计的虚拟HUB是虚拟网卡之间通信的桥梁,在进行数据通信时,虚拟网卡之间要通过虚拟HUB连接在一起。虚拟HUB也包含数据记录和功能调用接口两个部分。其中数据记录有:HUB的名称、端口数目、数据缓冲区、互斥锁、网卡记录列表、已连接网卡数目、发送数据包网卡标志。功能调用接口有:获取HUB名称、获取端口数目、获取已连接网卡数目、添加和删除注册网卡。

上述的在网络环境仿真中采用虚拟网卡实现数据通信的方法,所说的进行数据包的封装,将用户数据或者应用数据封装为以太帧,再将以太帧封装为虚拟网卡和虚拟HUB处理的数据包的过程为:用户数据封装为以太帧遵循以太网上TCP/IP协议的标准,将用户数据按照TCP/IP协议族的有关协议数据进行封装,这些主要的协议类型有IP、TCP、UDP、ICMP、IGMP、ARP和RARP协议数据包。应用数据被封装为各协议层次的数据,以及最终封装为以太帧,其封装顺序为以太帧封装IP数据或者ICMP数据或者IGMP数据;IP数据封装TCP数据或者UDP数据;TCP数据和UDP数据封装用户数据。

上述的在网络环境仿真中采用虚拟网卡实现数据通信的方法,所说的将数据加入到发送方虚拟网卡发送数据缓冲区,其过程为:当数据包准备好以后交给发送方虚拟网卡进行发送,首先检查虚拟网卡的数据发送缓冲区的状态,如果发送缓冲区有存储空间并且其状态为空闲,则将准备好的数据加入发送缓冲区。如果虚拟网卡的发送缓冲区已满或者其状态为繁忙,则等待直到发送缓冲区有空间且其状态空闲为止。

上述的在网络环境仿真中采用虚拟网卡实现数据通信的方法,所说的发送方虚拟网卡发送数据包给虚拟HUB的过程为:虚拟网卡向虚拟HUB发送数据采取主动发送的形式,即虚拟网卡内的守护线程不断的检测发送缓冲区,一旦发现有数据就立即读取该数据并尝试着发送给虚拟HUB。另外,虚拟网卡仍采用回环形式,如果所发送的数据包的目的地址是自身的IP地址,则直接送入发送方网卡接收缓冲区,不向外部发送。首先,虚拟网卡从数据发送缓冲区中读取数据,准备发送给与之相连的虚拟HUB。接着,检查数据包的目的地址是否是自身发送的网卡,如果数据包的目的地址是自身,则将数据包直接发送到发送方网卡自身的接收数据缓冲区;否则,需要发送给虚拟HUB。然后,探测虚拟HUB的状态,如果虚拟HUB空闲,则直接发送;否则延迟设计的1、2、3、4…时间单位(时间单位可以根据需要设定,如秒、毫秒等)后再探测,一旦虚拟HUB空闲,则直接发送;否则继续延迟,直到虚拟HUB空闲。

上述的在网络环境仿真中采用虚拟网卡实现数据通信的方法,所说的虚拟HUB接收数据包的过程为:虚拟HUB接收来自虚拟网卡的数据采取被动的形式,即等到虚拟网卡发送的数据到来时,它才接收并存入数据缓冲区。虚拟HUB首先对数据缓冲区加锁,表明此时进行的是当前网卡送来的数据的缓冲区写入操作,使数据缓冲区形成互斥状态。由于虚拟HUB同时和多个虚拟网卡相连,并且其数据缓冲区为这几个虚拟网卡共用,所以需要在对数据缓冲区进行操作时加锁,避免多个网卡同时操作使数据缓冲区发生混乱。在数据缓冲区正确的写入数据包后,对数据缓冲区解锁。

上述的在网络环境仿真中采用虚拟网卡实现数据通信的方法,所说的虚拟HUB发送数据包给接收方虚拟网卡的过程为:虚拟HUB发送数据包时,首先检测接收端虚拟网卡的数据缓冲区是否空闲,如果忙,则等待;如果接收端数据缓冲区空闲则读取数据包准备发送。读取数据包时,首先对数据缓冲区进行加锁,然后再进行读取操作,读取到数据包后对数据缓冲区解锁。接着遍历在虚拟HUB里注册的所有虚拟网卡,源数据包网卡除外,依次向这些网卡发送数据,这是一个广播的过程。

上述的在网络环境仿真中采用虚拟网卡实现数据通信的方法,所说的接收方虚拟网卡将数据包加入接收数据缓冲区的过程为:虚拟网卡从虚拟HUB接收数据包时首先检查自身的混杂模式标志,如果虚拟网卡已设置为混杂模式,则无条件接收该数据包;如果虚拟网卡没有设置混杂模式则要对数据包的目的地址做出判断,如果该数据包的目的地址是接收端网卡的地址则接收数据包,否则将数据包丢弃。接着,检测接收数据缓冲区是否有空间,如果尚有空间则将数据直接写入;如果接收数据缓冲区已满则等待设计的单位时间后再进行检测,但是检测的次数不能超过三次,如果三次以内接收数据缓冲区已有足够的空间则接收该数据包并将其写入数据缓冲区,如果满三次还是没有足够的空间则丢弃该数据包。

上述的在网络环境仿真中采用虚拟网卡实现数据通信的方法,所说的对接收到的数据包进行拆封,还原以太帧和用户数据的过程为:应用程序从虚拟网卡接收缓冲区读取数据并进行拆封,拆封的处理过程正好与数据包的封装过程相反,其过程是利用接收到的数据包的偏移量获取到原始的以太数据帧,从标准的以太帧里可以解析出IP数据报或者同层次类型的数据,有了IP数据报就可以很容易得到TCP报文和UDP报文,从而除去TCP报文头或者UDP报文头而得到最终的用户数据。

本发明与现有技术相比的有益效果:本发明是对物理网卡的数据转发等基本功能和主要功能进行模拟,并形成网络环境仿真中的数据通信过程,它主要具有以下优点:

扩展性好:在本发明的基础上可以很方便的扩展为虚拟网络设备,基本的扩展思想是虚拟网络设备包含一块或者数块虚拟网卡,把虚拟网卡作为核心的底层数据通信模块,虚拟网络设备的其它功能由用户自己设定;通过虚拟网络设备的互联可以很方便的形成虚拟网络环境,从而对网络进行模拟仿真。

开放性好:本发明充分考虑到用户使用时进一步开发的需要,虚拟网卡和虚拟HUB的设计模块化,数据通信的过程和方法简单合理,可以为用户提供众多的功能调用接口,在此基础上可以进行开放性的开发。

通用性强,本发明充分考虑到网络底层数据传输的特性,使得以太帧和TCP/IP协议族的大部分协议数据包都能通过虚拟网卡系统进行传输,具有很强的通用性。

本发明可以应用在许多方面,例如计算机及网络的研究、计算机网络的仿真、特定网络环境的模拟、网络安全研究领域等。因此,本发明具有很好的社会效益和应用前景。

附图说明

图1是本发明虚拟网卡的逻辑结构示意图

图2是本发明虚拟HUB的逻辑结构示意图

图3是本发明虚拟网卡之间通过虚拟HUB连接进行数据通信的过程方框图

图4是本发明以TCP协议为例的数据包封装的过程示意图

图5是本发明虚拟网卡发送数据给虚拟HUB的流程图

图6是本发明虚拟网卡接收数据包流程图

具体实施方式

参照图1,它是本发明虚拟网卡的逻辑结构示意图,虚拟网卡包含数据记录和功能调用接口。数据记录主要记录虚拟网卡的基本信息,包括虚拟网卡名称、MAC地址、IP地址、子网掩码、网关、混杂模式标志、接收数据缓冲区、发送数据缓冲区、接收状态标志、发送状态标志。功能调用接口提供给外界,负责对虚拟网卡的基本数据记录进行操作和修改。功能调用接口有:获取网卡名字、获取和设置MAC地址、获取和设置IP地址、获取和设置网关、获取和设置网卡混杂模式、获取和设置子网掩码。接收数据缓冲区存储虚拟网卡从虚拟HUB接收来的数据。发送数据缓冲区存储准备发送给虚拟HUB的数据。虚拟网卡初始化时首先设置基本数据记录,如网卡名称、MAC地址、混杂模式标志等,接着向相连接的虚拟HUB进行连接登记。图中守护线程的设计是很必要的,它要实时的监测发送数据缓冲区,当虚拟网卡发送数据的条件和虚拟HUB接收数据的条件满足时,就从发送缓冲区读取数据然后把数据发送给虚拟HUB。

参照图2,它是本发明虚拟HUB的逻辑结构示意图,虚拟HUB包括数据记录和功能调用接口两部分。数据记录主要记录虚拟HUB的基本信息,其中数据记录有:HUB的名称、端口数目、数据缓冲区、互斥锁、网卡记录列表、已连接网卡数目、发送数据包网卡标志。功能调用接口提供给外界,负责对虚拟网卡的基本数据记录进行操作和修改。功能调用接口有:获取HUB名称、获取端口数目、获取已连接网卡数目、添加和删除注册网卡。虚拟HUB初始化时首先设置数据记录,其次对向其请求连接登记的虚拟网卡进行注册,将有关信息加入网卡记录列表,并更新网卡连接数目。虚拟HUB里设置一个数据缓冲区,而这一数据缓冲区面向已注册的多个网卡,因此可能同时有多个数据操作请求发生,所以对于此数据缓冲区要添加软件互斥锁,使得多个数据操作请求之间互斥。守护线程实时的监测数据缓冲区,当虚拟HUB发送数据的条件和虚拟网卡接收数据的条件同时满足时,就从数据缓冲区读取数据,然后把数据发送给与之相连的虚拟网卡。

参照图3,它是本发明虚拟网卡之间通过虚拟HUB连接进行数据通信的过程方框图,从图中可以看出,它是利用上述已设计的虚拟网卡和虚拟HUB连接起来组成的网络环境中实现数据通信的,其过程为:

(1)数据包的封装,将用户数据或者应用数据封装为以太帧,再将以太帧封装为虚拟网卡和虚拟HUB处理的数据包。用户数据封装为以太帧要遵循以太网上TCP/IP协议的标准,将用户数据按照TCP/IP协议族的有关协议数据进行封装,这些主要的协议类型有IP、TCP、UDP、ICMP、IGMP、ARP和RARP协议数据包。应用数据被封装为各协议层次的数据,以及最终封装为以太帧,其封装顺序为以太帧封装IP数据或者ICMP数据或者IGMP数据;IP数据封装TCP数据或者UDP数据;TCP数据和UDP数据封装用户数据。

参照图4,它是本发明以TCP协议为例的数据包封装的过程示意图,图的最上层是需要传输的用户数据,首先给用户数据添加用户数据Appl首部,添加了用户数据头的用户数据称为应用数据,应用数据再添加一个TCP首部就被封装为TCP数据包,TCP数据包添加一个IP首部就被封装为IP数据包,IP数据包分别添加以太网首部和以太网尾部就被封装为以太网帧,以太网帧是直接通过以太网卡在以太网中传输的数据形式。这里只描述了TCP数据的封装过程,UDP数据与TCP数据基本一致,唯一不同的是UDP传给IP的信息单元称作UDP数据报,而且UDP的首部长度为8字节。其它协议数据包封装也有类似的过程。然后是将以太帧再做进一步的封装,封装的方法是首先定义新的数据包,新的数据包分为包头部分和数据部分,将以太数据帧作为新的数据包的数据部分,新的数据包的包头部分记录以太数据帧在新的数据包中的偏移量等信息。利用偏移量可以准确地获得数据包里的以太帧,从以太帧能够很方便的获得各个协议层次的数据,这也为将来对数据进行拆封提供了便利。

新的数据包的构造有三种途径:

1)从空数据包构造:首先构造一个空的数据包,然后分别设置填充各个协议的协议头字段和数据部分。

2)从已有的以太帧数据构造:已经有一个以太层次的数据包,这时将此以太数据包暂存到数据缓冲区里,随后读取该以太数据包中所需要的数据成分构造新的数据包。

3)数据包拷贝:已有同类型协议的数据包,要构造一个新的数据包并具有相同的内容,只需将原数据拷贝到新的数据包。

(2)将数据包加入到发送端的虚拟网卡发送缓冲区,数据包准备好以后交给虚拟网卡来发送。首先检查虚拟网卡的数据发送缓冲区的状态,如果发送缓冲区有存储空间并且其状态为空闲,则将准备好的数据加入发送缓冲区。如果虚拟网卡的发送缓冲区已满或者其状态为繁忙,则等待直到发送缓冲区有空间且其状态空闲为止。

(3)发送方虚拟网卡将数据包发送给与之相连的虚拟HUB。

参照图5,它是本发明虚拟网卡发送数据给虚拟HUB的流程图,虚拟网卡向虚拟HUB发送数据采取主动发送的形式,即虚拟网卡内的守护线程不断的检测发送缓冲区,一旦发现有数据就立即读取该数据并尝试着发送给虚拟HUB。另外,虚拟网卡(同实际的网卡一样)仍采用回环形式,如果所发送的数据包的目的地址是自身的IP地址,则直接送入发送方网卡接收缓冲区,不向外部发送。首先,虚拟网卡从数据发送缓冲区中读取数据,准备发送给与之相连的虚拟HUB。接着,检查数据包的目的地址是否是自身发送的网卡,如果数据包的目的地址是自身,则将数据包直接发送到发送方网卡自身的接收数据缓冲区;否则,需要发送给虚拟HUB。然后,探测虚拟HUB的状态,如果虚拟HUB空闲,则直接发送;否则延迟设计的1、2、3、4…时间单位后再探测(时间单位可以根据需要设定,如秒、毫秒等),一旦虚拟HUB空闲,则直接发送;否则继续延迟,直到虚拟HUB空闲。

(4)虚拟HUB接收来自虚拟网卡的数据包,虚拟HUB接收来自虚拟网卡的数据采取被动的形式,即等到虚拟网卡发送的数据到来时,它才接收并存入数据缓冲区。虚拟HUB首先对数据缓冲区加锁,表明此时进行的是当前网卡送来的数据的缓冲区写入操作,使数据缓冲区形成互斥状态。因为虚拟HUB同时和多个虚拟网卡相连,并且其数据缓冲区为这几个虚拟网卡共用,所以需要在对数据缓冲区进行操作时进行加锁,避免多个网卡同时操作,使数据缓冲区发生混乱。在数据缓冲区正确的写入数据包后,对数据缓冲区解锁。

(5)虚拟HUB发送数据包给接收端虚拟网卡的接收缓冲区,虚拟HUB发送数据包时,首先检测接收端数据缓冲区是否空闲,如果忙,则等待;如果接收端数据缓冲区空闲则读取数据包准备发送。读取数据包时,首先对数据缓冲区加锁,然后再进行读取操作,读取到数据包后对数据缓冲区解锁。接着遍历在虚拟HUB里注册的所有虚拟网卡(源数据包网卡除外),依次向这些网卡发送数据,这是一个广播的过程。

(6)虚拟网卡接收来自虚拟HUB的数据包。

参照图6,它是本发明虚拟网卡接收数据包流程图,虚拟网卡从虚拟HUB接收数据包时首先检查自身的混杂模式标志,如果虚拟网卡已设置为混杂模式,则无条件接收该数据包;如果虚拟网卡没有设置混杂模式则要对数据包的目的地址做出判断,如果该数据包的目的地址是接收端网卡的地址则接收数据包,否则将数据包丢弃。接着,检测接收数据缓冲区是否有空间,如果尚有空间则将数据直接写入;如果接收数据缓冲区已满则等待单位时间后再进行检测,但是检测的次数不能超过三次,如果三次以内接收数据缓冲区已有足够的空间则接收该数据包并将其写入数据缓冲区,如果满三次还是没有足够的空间则丢弃该数据包。

(7)对接收到的数据包进行拆封处理。

应用程序从虚拟网卡接收缓冲区读取数据并进行拆封,拆封的处理过程正好与上述图4所描述的数据包的封装处理过程相反,其过程是利用接收到的数据包的偏移量获取到原始的以太数据帧,从标准的以太帧里可以解析出IP数据报或者同层次类型的数据,有了IP数据报就可以很容易得到TCP报文和UDP报文,从而除去TCP报文头或者UDP报文头而得到最终的用户数据。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号