设为首页 收藏本站
查看: 875|回复: 0

[经验分享] vmware的vmnet-概念的解说

[复制链接]

尚未签到

发表于 2016-1-5 14:47:02 | 显示全部楼层 |阅读模式
  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驱动提供的接口,这就需要看它的源代码了。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-160694-1-1.html 上篇帖子: vmware esx 虚拟机MAC 地址修改 下篇帖子: 怎样更改虚拟机vmware的硬盘大小
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表