本文首发于个人公众号 cloud_dev,专一于干货分享,号内有大量书籍和视频资源,后台回复 「1024」便可领取,欢迎你们关注,二维码文末能够扫。
著名的「六度分隔定理」说到,世界上任何两个互不相识的人,只须要最多六我的就可以创建起联系。这个定理成立的前提就是依托于庞大的网络结构。编程
在虚拟化技术没出现以前,构成网络的元素都是实体的物理设备,好比交换机、路由器、网线等等,人们想要构建一个小型的局域网本身玩玩,都要买各类设备,成本高还不灵活。虚拟化技术普及以后,云计算开始大行其道,咱们在本身的单机上就能够建各类虚拟机,想怎么玩就怎么玩。服务器
随之而来的就是网络变得更复杂了,由之前看得见摸得着的物理网络一下变成玄乎的虚拟网络了,好不容易建了几台虚拟机,发现网络不通,或者网络通了,但并不知道是怎么通的,这难言的苦水哽在喉咙实在使人不适。网络
这篇文章就来讲说虚拟机世界里的几种网络模型,咱们主要以 VirtualBox
和 VMware Workstation
这两款目前最主流的桌面虚拟化软件做为例子。工具
总的来讲,目前有四种常见的网络模型:云计算
这也是 VirtualBox
支持的四种模型,对于 VMware
,则只有前三种。spa
下图显示了 VirtualBox
支持的几种网络模型:.net
虚拟机桥接网络模型就是使用虚拟交换机(Linux Bridge),将虚拟机和物理机链接起来,它们处于同一个网段,IP 地址是同样的。以下图所示:code
图一视频
在这种网络模型下,虚拟机和物理机都处在一个二层网络里面,因此有:blog
桥接网络的好处是简单方便,但也有一个很明显的问题,就是一旦虚拟机太多,广播就会很严重。因此,桥接网络通常也只适用于桌面虚拟机或者小规模网络这种简单的形式。
另外一种模型是 NAT,即网络地址转换(Network Address Translatation)。这种模型严格来说,又能够分为 NAT
和 NAT 网络
两种,咱们看上面的图 1 也能够看到。
根据 NAT 的原理,虚拟机所在的网络和物理机所在的网络不在同一个网段,虚拟机要访问物理所在网络必须通过一个地址转换的过程,也就是说在虚拟机网络内部须要内置一个虚拟的 NAT 设备来作这件事。
但其中 NAT
和 NAT 网络
二者还有些许的不一样:
NAT
:主机上的虚拟机之间是互相隔离的,彼此不能通讯(它们有独立的网络栈,独立的虚拟 NAT 设备)NAT 网络
:虚拟机之间共享虚拟 NAT 设备,彼此互通。以下图,展现了二者细微的差异:
PS:NAT 网络模式中通常还会内置一个虚拟的 DHCP 服务器来进行 IP 地址的管理。
下面咱们经过实验来验证一下两种模式的区别,首先是 NAT
模式:
访问外网没问题:
访问其余虚拟机:
能够看到,两个虚拟机因为有隔离的网络栈,因此它们的 IP 地址并不在一个网段,因此 ping 不通。
再来看 NAT 网络
,访问外网一样没问题,咱们来看下 VM 之间的互通:
能够看到,差异体现出来了,NAT 网络
虚拟机之间共享网络栈,它们的 IP 地址处于同一个网段,因此彼此是互通的。
总结一下,以上两种 NAT 模式,若是不作其余配置,那么有:
NAT
,同主机上的虚拟机之间不能互通NAT 网络
,虚拟机之间能够互通PS:若是作了 端口映射 配置,那么主机也能够访问虚拟机。
主机网络顾名思义,就是只限于主机内部访问的网络,虚拟机之间彼此互通,虚拟机与主机之间彼此互通。可是默认状况下虚拟机不能访问外网(注意:这里说的是默认状况下,若是稍做配置,也是能够的)。
主机网络看似简单,其实它的网络模型是相对比较复杂的,能够说前面几种模式实现的功能,在这种模式下,均可以经过虚拟机和网卡的配置来实现,这得益于它特殊的网络模型。
主机网络模型会在主机中模拟出一块虚拟网卡供虚拟机使用,全部虚拟机都链接到这块网卡上,这块网卡默认会使用网段 192.168.56.x
(在主机的网络配置界面能够看到这块网卡),以下是基本的拓扑图示:
默认状况下,虚拟机之间能够互通,虚拟机只能和主机上的虚拟网卡互通,不能和不一样网段的网卡互通,更不能访问外网,若是想作到这样,那么须要如图中 红虚线 所示,将物理网卡和虚拟网卡桥接或共享。在主机上作以下设置便可:
经过以上配置,咱们来验证一下,虚拟机能够访问主机物理网卡和外网了:
最后一种网络模型是内部网络,这种模型是相对最简单的一种,虚拟机与外部环境彻底断开,只容许虚拟机之间互相访问,这种模型通常不怎么用,因此在 VMware
虚拟机中是没有这种网络模式的。这里咱们就很少说了。
虚拟机的四种网络模型:桥接、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++编程技术等内容,欢迎你们关注。