资讯专栏INFORMATION COLUMN

虚拟机网络模型详解,看这篇就够了(图文并茂)

frontoldman / 1972人阅读

摘要:所以,桥接网络一般也只适用于桌面虚拟机或者小规模网络这种简单的形式。总结虚拟机的四种网络模型桥接主机和内网模型。

本文首发于我的公众号 cloud_dev,专注于干货分享,号内有大量书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫。
01 从物理网络到虚拟网络

著名的「六度分隔定理」说到,世界上任何两个互不相识的人,只需要最多六个人就能够建立起联系。这个定理成立的前提就是依托于庞大的网络结构。

在虚拟化技术没出现之前,构成网络的元素都是实体的物理设备,比如交换机、路由器、网线等等,人们想要构建一个小型的局域网自己玩玩,都要买各种设备,成本高还不灵活。虚拟化技术普及之后,云计算开始大行其道,我们在自己的单机上就可以建各种虚拟机,想怎么玩就怎么玩。

随之而来的就是网络变得更复杂了,由以前看得见摸得着的物理网络一下变成玄乎的虚拟网络了,好不容易建了几台虚拟机,发现网络不通,或者网络通了,但并不知道是怎么通的,这难言的苦水哽在喉咙实在令人不适。

这篇文章就来说说虚拟机世界里的几种网络模型,我们主要以 VirtualBoxVMware Workstation 这两款目前最主流的桌面虚拟化软件作为例子。

总的来说,目前有四种常见的网络模型:

桥接(Bridge Adapter)

NAT

主机(Host-only Adapter)

内部网络(Internal)

这也是 VirtualBox 支持的四种模型,对于 VMware,则只有前三种。

下图显示了 VirtualBox 支持的几种网络模型:

02 桥接(Bridge Adapter)

虚拟机桥接网络模型就是使用虚拟交换机(Linux Bridge),将虚拟机和物理机连接起来,它们处于同一个网段,IP 地址是一样的。如下图所示:


图一

在这种网络模型下,虚拟机和物理机都处在一个二层网络里面,所以有:

虚拟机之间彼此互通

虚拟机与主机彼此可以互通

只要物理机可以上网,那么虚拟机也可以。我们来验证下:

桥接网络的好处是简单方便,但也有一个很明显的问题,就是一旦虚拟机太多,广播就会很严重。所以,桥接网络一般也只适用于桌面虚拟机或者小规模网络这种简单的形式。

03 NAT

另一种模型是 NAT,即网络地址转换(Network Address Translatation)。这种模型严格来讲,又可以分为 NATNAT 网络两种,我们看上面的图 1 也可以看到。

根据 NAT 的原理,虚拟机所在的网络和物理机所在的网络不在同一个网段,虚拟机要访问物理所在网络必须经过一个地址转换的过程,也就是说在虚拟机网络内部需要内置一个虚拟的 NAT 设备来做这件事。

但其中 NATNAT 网络 两者还有些许的不同:

NAT:主机上的虚拟机之间是互相隔离的,彼此不能通信(它们有独立的网络栈,独立的虚拟 NAT 设备)

NAT 网络:虚拟机之间共享虚拟 NAT 设备,彼此互通。

如下图,展示了两者细微的差别:

PS:NAT 网络模式中一般还会内置一个虚拟的 DHCP 服务器来进行 IP 地址的管理。

下面我们通过实验来验证一下两种模式的区别,首先是 NAT 模式:

访问外网没问题:

访问其他虚拟机:

可以看到,两个虚拟机由于有隔离的网络栈,所以它们的 IP 地址并不在一个网段,所以 ping 不通。

再来看 NAT 网络,访问外网同样没问题,我们来看下 VM 之间的互通:

可以看到,差别体现出来了,NAT 网络 虚拟机之间共享网络栈,它们的 IP 地址处于同一个网段,所以彼此是互通的。

总结一下,以上两种 NAT 模式,如果不做其他配置,那么有:

虚拟机可以访问主机,反之不行

如果主机可以上外网,那么虚拟机也可以

对于 NAT,同主机上的虚拟机之间不能互通

对于 NAT 网络,虚拟机之间可以互通

PS:如果做了 端口映射 配置,那么主机也可以访问虚拟机。

04 主机网络(Host-only Adapter)

主机网络顾名思义,就是只限于主机内部访问的网络,虚拟机之间彼此互通,虚拟机与主机之间彼此互通。但是默认情况下虚拟机不能访问外网(注意:这里说的是默认情况下,如果稍作配置,也是可以的)。

主机网络看似简单,其实它的网络模型是相对比较复杂的,可以说前面几种模式实现的功能,在这种模式下,都可以通过虚拟机和网卡的配置来实现,这得益于它特殊的网络模型。

主机网络模型会在主机中模拟出一块虚拟网卡供虚拟机使用,所有虚拟机都连接到这块网卡上,这块网卡默认会使用网段 192.168.56.x(在主机的网络配置界面可以看到这块网卡),如下是基本的拓扑图示:

默认情况下,虚拟机之间可以互通,虚拟机只能和主机上的虚拟网卡互通,不能和不同网段的网卡互通,更不能访问外网,如果想做到这样,那么需要如图中 红虚线 所示,将物理网卡和虚拟网卡桥接或共享。在主机上做如下设置即可:

通过以上配置,我们来验证一下,虚拟机可以访问主机物理网卡和外网了:

05 内部网络(internal)

最后一种网络模型是内部网络,这种模型是相对最简单的一种,虚拟机与外部环境完全断开,只允许虚拟机之间互相访问,这种模型一般不怎么用,所以在 VMware 虚拟机中是没有这种网络模式的。这里我们就不多说了。

06 总结

虚拟机的四种网络模型:桥接、NAT、主机和内网模型。

下面以一张表来描述它们之间的通信行为:

Model VM -> host host -> VM VM <-> VM VM -> Internet Internet -> VM
Bridged + + + + +
NAT + Port Forwarding - + Port Forwarding
NAT Network + Port Forwarding + + Port Forwarding
Host-only + + + - -
Internal - - + - -

参考:

https://technology.amis.nl/20...

https://blog.csdn.net/niqinwe...


我的公众号 cloud_dev,号内有大量书籍和视频资源,后台回复「1024」即可领取,分享的内容包括但不限于云计算虚拟化、容器、OpenStack、K8S、雾计算、网络、工具、SDN、OVS、DPDK、Linux、Go、Python、C/C++编程技术等内容,欢迎大家关注。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/11680.html

相关文章

  • 虚拟网络模型详解看这篇就够了图文并茂

    摘要:所以,桥接网络一般也只适用于桌面虚拟机或者小规模网络这种简单的形式。总结虚拟机的四种网络模型桥接主机和内网模型。 本文首发于我的公众号 cloud_dev,专注于干货分享,号内有大量书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫。 01 从物理网络到虚拟网络 著名的「六度分隔定理」说到,世界上任何两个互不相识的人,只需要最多六个人就能够建立起联系。这个定理...

    UsherChen 评论0 收藏0
  • java序列化,看这篇就够了

    摘要:序列化机制使得对象可以脱离程序的运行而独立存在。普通序列化接口是一个标记接口,不用实现任何方法。如果此对象已经序列化过,则直接输出编号即可。图示上述序列化过程。一、序列化的含义、意义及使用场景二、序列化实现的方式1、Serializable1.1 普通序列化1.2 成员是引用的序列化1.3 同一对象序列化多次的机制1.4 java序列化算法潜在的问题1.5 可选的自定义序列化2、Extern...

    Hydrogen 评论0 收藏0
  • 「码个蛋」2017年200篇精选干货集合

    摘要:让你收获满满码个蛋从年月日推送第篇文章一年过去了已累积推文近篇文章,本文为年度精选,共计篇,按照类别整理便于读者主题阅读。本篇文章是今年的最后一篇技术文章,为了让大家在家也能好好学习,特此花了几个小时整理了这些文章。 showImg(https://segmentfault.com/img/remote/1460000013241596); 让你收获满满! 码个蛋从2017年02月20...

    wangtdgoodluck 评论0 收藏0
  • Lombok 看这篇就够了

    摘要:注解在类上为类提供一个全参的构造方法,加了这个注解后,类中不提供默认构造方法了。这个注解用在类上,使用类中所有带有注解的或者带有修饰的成员变量生成对应的构造方法。 转载请注明原创地址:http://www.54tianzhisheng.cn/2018/01/07/lombok/ showImg(http://ohfk1r827.bkt.clouddn.com/blog/180107/7...

    LeanCloud 评论0 收藏0
  • Docker入门,看这篇就够了

    摘要:正因为如此我们的数据卷就出来了,用来解决这个问题,那么什么是数据卷呢我们用一句话来阐述就是数据卷是一个可供一个或多个容器使用的特殊目录。 Docker是怎么出现的 关于Docker的发展史,本文就不做介绍,有兴趣的小伙伴们可以查看这篇文章,挺有意思的。http://www.oschina.net/news/5... 什么是Docker?   在Docker之前,我们肯定要先了解Dock...

    import. 评论0 收藏0

发表评论

0条评论

frontoldman

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<