vmware的vmnet-概念的解说

简介:
vmware本身实现了一个很不错的虚拟网络-vmnet,这个虚拟网络完全可以脱离vmware而存在,我个人十分看好这个虚拟网络架构,它实质上是在内核实现的一个虚拟的链路层网络,至于它还有没有其它的组网方式,值得研究。
1.几个概念:
1.1.Virtual Switch:这是一个虚拟交换机,存在于安装vmware的真实主机的操作系统内核当中,这个switch提供了多个“插口”,这个交换机是一个链路层交换机,也就是说,插到它上面的是“网卡”,可以是虚拟网卡,也可以是真实的网卡,也可以是用户态的假网卡,只要这些“网卡”可以收发链路层的帧就可以。
1.2.真实网卡:一个真实存在的物理网卡,拥有电气属性,一般是一块板卡或者是一个芯片;
1.3.虚拟网卡:仅仅实现了真实网卡的接口,上层看来它就是一块真实网卡,没有电气属性,然而在操作系统级别却可以看到,比如ifconfig就可以看到,比如vmnet1/8,tap0等;
1.4.假网卡:连网卡的操作接口都没有实现,仅仅可以构造链路层的数据并以自己的方式实现收发功能,在接触vmware的网络实现之前,tun驱动的字符设备实现是一个好例子。
1.5.虚拟网络:由虚拟交换机连接在一起的各个“网卡”组成了一个虚拟网络,这是一个三层网络(比如ip网络),因此每存在这样一个网络就会有一个虚拟交换机将网络上的节点(“网卡”)连接在一起。
1.6.“网卡”:带有以太帧写入和读出的接口的纯粹虚拟“卡口”,其对应的物理卡口是以太网卡和rj45线缆的连接口,只是后者流入流出的不是二层数据,而是物理层数据。它是真实网卡的卡口,虚拟网卡的卡口,假网卡的卡口的统称。
2.概念举例与引申:
2.1.虚拟交换机与虚拟网络:我们知道在vmware中,虚拟机的网卡有三种组网方式:bridge,nat,host-only。如果你的物理机器上有两块网卡,并且虚拟机里面的一块网卡选择了bridge,那么你自己必须指定bridge到哪一块物理机器的真实网卡,比如你指定的是物理机器的eth0,那么这个真实的eth0将连接到一个虚拟交换机上,另外就是一个用户态的假网卡(涉及到虚拟机的工作方式)连接到此虚拟交换机上。如果你还启用了nat的方式,那么将有许多“网卡”连接在一台虚拟交换机上:1.用户态实现的nat设备(之所以在用户态实现是为了不依赖操作系统的nat功能);2.一台虚拟的dhcp设备(为该网段分配ip地址,也在用户态实现);3.物理机器上的一个该网段的虚拟网卡(为了物理机和虚拟机的互通);4.虚拟机里面的一块虚拟出来的网卡(由于vmware使用monitor驱动将系统调用都重新转向了用户空间,因此此也在用户态实现)。如果是host-only的方式,则除了nat方式的nat设备不需要之外,其余的都和nat一样。因此和tun一样,在用户态存在一个字符设备接口,用于用户态的“网卡”接入,在内核中有一个虚拟网卡实现,用于虚拟网卡的接入,对于bridge模式,真实网卡直接接入,和tun驱动不同的是,tun驱动的虚拟网卡直接和字符设备交互,虚拟网卡发送的数据直接发送到字符设备,而vmnet则不同,它们通过Virtual Switch交互,也就是中间加了一个虚拟交换机来路由以太帧,故vmnet完全可以实现tun的组网方式
2.2.vmnet实现tun组网:由于vmnet有虚拟交换机的概念,那么完全可以实现tun的组网方式,也就是通过路由和iptables来控制数据包的转发而不是用户态的守护进程,比如vmnet-natd等。杀死vmnet-natd之后,nat方式的虚拟机里数据包应该不能和外部网络通信了,然而在物理机器上将ipforward打开,并且手工在真实网卡设置一个snat,然后在虚拟机内部将网关指向真实机器的对应虚拟网段的虚拟网卡,数据还是可以从虚拟机内部出来的。

3.总结:vmnet实际上在内核实现了一个交换网络(特指ip地址在同一网段的链路层网络)的机制,你可以在内核创建很多这样的网络,每一个这样的网络有一台虚拟交换机将所有节点连接在一起,这些节点就是“网卡”的卡口,可以来自用户态,可以来自内核的虚拟网卡,也可以来自内核的真实网卡,这样实现的一个网络非常灵活,不需要关注协议栈,只要在卡口发送或者接收以太帧就可以了,如果需要解析这些以太帧,要么通过操作系统本身的协议栈,要么在用户态自己解析,毕竟来自用户态的“网卡”卡口可以将数据收到用户态进程,然后你可以在用户态实现一个协议栈,甚至可以和scapy结合起来玩。至于说如何配置这个虚拟网络,vmware已经配好了三种,而且你可以自己配置自己的网络拓扑,前提是你得知道vmnet驱动提供的接口,这就需要看它的源代码了。



 本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1271131

相关文章
|
API 虚拟化
VMware 虚拟化编程(1) — VMDK/VDDK/VixDiskLib/VADP 概念简析
目录 目录 VMDK VDDK VixDiskLib VADP VMDK VMDK(VMware’s Virtual Machine Disk Format,VMware 虚拟磁盘格式):简单来说就是存储虚拟机虚拟磁盘数据的文件格式。
1862 0
|
存储 安全 虚拟化
|
虚拟化 网络架构 Windows
|
14天前
|
安全 虚拟化 数据中心
Xshell 连接 VMware虚拟机操作 截图和使用
Xshell 连接 VMware虚拟机操作 截图和使用
35 4
|
22天前
|
Linux 虚拟化
vmware虚拟机安装2024(超详细)
vmware虚拟机安装2024(超详细)
167 6