Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一文带你全面了解虚拟机的四种网络模型(图文并茂)

一文带你全面了解虚拟机的四种网络模型(图文并茂)

作者头像
架构师修行之路
发布于 2019-06-23 12:26:42
发布于 2019-06-23 12:26:42
9880
举报
文章被收录于专栏:架构师架构师

转载自:CloudDeveloper

ID:cloud_dev

010

阅读本文大概需要 4.8 分钟。

01 从物理网络到虚拟网络

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

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

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

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

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

  • 桥接(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、主机和内网模型。

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 架构师修行之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
One API本地开发环境搭建
本文介绍如何在本地搭建 One API 开发环境,包括安装 Go 语言和 GoLand IDE,以及如何新建项目和配置数据库信息。通过简明的步骤说明,帮助开发者快速完成基本的开发环境配置,方便进行二次开发和开源贡献。
千寻简
2024/09/26
3210
One API本地开发环境搭建
react开发环境搭建
要创建一个新的 React 项目,可以使用以下几种方法。以下是使用 create-react-app 工具的标准步骤,这是最常用的方法:
肥晨
2024/09/19
2190
react开发环境搭建
我的 Serverless 实战 — 云函数本地开发环境搭建
上一篇博客 我的 Serverless 实战 — 云函数与触发器的创建与使用 ( 开通腾讯云 “ 云开发 “ 服务 | 创建云函数 | 创建触发器 | 测试触发器 ) 中 , 在腾讯云平台上 , 创建了云函数与触发器 , 并对触发器进行了测试 , 通过 HTTP 访问触发云函数 ;
韩曙亮
2023/03/29
8050
我的 Serverless 实战 — 云函数本地开发环境搭建
PHP/Laravel 本地开发环境搭建:Mac 篇
在开始之前,我们先来介绍 PHP 全栈开发环境搭建,首先看看 Mac 环境如何搭建。
学院君
2020/05/27
3K0
React 搭建开发环境
本文记录了本人以及目前团队从无到有使用React的过程,我们将从webpack开始说起,一步一步展现React最基本的开发生态。在这里并不会介绍任何jsx或es6相关的语法,只聚焦于如何使用react生态搭建利于团队协作、有利于提升开发效率的开发环境。
随风溜达的向日葵
2018/07/25
1.6K0
React 搭建开发环境
半小时打造前端本地开发环境
最近和朋友聊天,发现我朋友调试前端页面的时候,都是上传svn或者git到测试服务器上调试,这样一来效率非常差,并且在多人的时候会频繁更新测试环境,然后我问我朋友,为什么不本地开发?然后我朋友说因为后端是java,所以本地要搭建java环境那些,很麻烦,也不会。
LamHo
2022/09/26
8150
半小时打造前端本地开发环境
从零搭建 Vue 开发环境
由于最近公司需要做H5页面,然后嵌入到微信公众号中去,从公众号菜单点击进入H5页面进行操作,需要使用 Vue 来做。之前由于部门中没有使用 Vue 做过任何下项目,所以我花了大概一周的时间来学习研究了 Vue 的语法,搭建开发环境,打包部署等,经历了从零开始学习 vue 到较为熟练开发的过程,所以在此记录下搭建过程。
Java技术编程
2020/05/25
3.2K0
PHP/Laravel 本地开发环境搭建:Windows 篇
本篇教程给大家介绍下 Windows 环境下 PHP/Laravel 本地开发环境的搭建,使用的 Windows 版本是 Windows 10 专业版(专业版才支持 Docker Desktop for Windows 安装)。
学院君
2020/05/27
3.9K0
webpack+vue开发环境搭建
首先安装一些必要的工具,由于npm的源都是在国外的地址,所以安装会比较慢,可以使用淘宝的国内镜像地址。 1,安装淘宝镜像的命令为:
xiangzhihong
2022/11/30
7160
vue开发环境搭建
首先,列出来我们需要的东西:  node.js环境(npm包管理器) vue-cli 脚手架构建工具 cnpm npm的淘宝镜像 vue的安装 1.vue的安装依赖于node.js,所以先安装过node.js。从node.js官网下载并安装node,安装过程很简单,一路“下一步”就可以了(傻瓜式安装)安装完成后可进入cmd编辑器,输入命令 node -v进行查看,如果成功安装node会出现 v 6.9.1 2.安装cnpm 在命令行中输入 npm install -g cnpm --regi
似水的流年
2018/04/23
9950
vue开发环境搭建
最全Vue开发环境搭建
一直想去学Vue,不过一直找不到一个契机。然公司手机端用到了跨平台开发apicloud,里边涉及到Vue组件化开发,例如header和footer的封装,以及apicloud自定义的frame等等,于是决定对Vue.js研究一番,当然开发环境搭建是少不了的第一步。俗话说,工欲善其事必先利其器!
yaphetsfang
2020/07/30
2.4K0
最全Vue开发环境搭建
SQL审核 | SQLE 二次开发环境搭建
就职于捷信消费金融有限公司,担任 DBA 工作。先后从事过 oracle 、mongo 、mysql 的 DBA ,以及大数据 ETL 的开发工作。对 NEWSQL 以及云原生分布式数据库具有浓厚的兴趣爱好。
爱可生开源社区
2022/04/06
1.1K0
SQL审核 |  SQLE 二次开发环境搭建
vue开发环境搭建(win7)
在这里,我选择64位windows安装包(.msi) 然后,根据提示“下一步”,完成node.js的安装。 安装成功后,打开docs管理工具,输入“node -v”,查看node.js版本,若显示成功,则代表安装成功,如下图所示:
全栈程序员站长
2022/09/27
1.2K0
vue开发环境搭建(win7)
angular开发环境搭建及新建项目
  最近一个星期准备学习一下angular前端框架,因为之前在学习abp框架的时候,都要求前端要掌握angular,所以不得不回来恶补一下了,学习的过程有时间的话会记录在这里,方便以后复习。
CherishTheYouth
2019/07/30
1.2K0
angular开发环境搭建及新建项目
windows以太坊私有链开发环境搭建
我们使用官方长期支持的8.10.0LTS版本,点击这个链接下载32位安装包,32位安装包即可用于32位系统,也可用于64位系统。 如果你确认你的系统是64位,也可以下载64位包装包。 下载后直接安装即可。安装完毕,打开一个控制台窗口,可以使用node了:
用户1408045
2018/05/17
1.6K0
Vue开发环境搭建
nodejs中集成了npm 因此需要安装nodejs,官方地址是https://nodejs.org/en/ 查看当前npm版本
羊羽shine
2019/06/15
1.1K0
gulp替换webpack
之前项目中使用的webpack进行前端代码的编译,但一直不太喜欢webpack的那种玩法。使用webpack编写编译脚本时就是按webpack的规则进行各种配置,必须完全遵守它的条条框框,明明是自己写nodejs代码进行编译,但完全可控感。之前就听说过gulp+browserify的组合,这次就尝试使用这个东东重写编译脚本。话不多说,直接上最后的成果。 前端依赖package.json package.json { "name": "ssm-scaffold-frontend", "version"
jeremyxu
2018/05/10
2.6K0
Linux的基本开发环境搭建
有的系统自带jdk,会导致运行java -version的时候查看版本号的时候提示
py3study
2020/01/02
2.8K0
WEEX跨平台开发环境搭建
大约两年前,为了写一本Weex的入门书籍,我花了几个月的时间学习了下Weex跨平台相关的知识。
xiangzhihong
2020/12/21
1.8K0
从​开发调试到部署运维 一套完整的Serverless项目开发经验分享
本文将从前端的角度来看Serverless是什么,Serverless的出现会给前端带来什么样的机遇和挑战,并以一个具体的项目为例说明如何基于Serverless实现项目功能。
腾讯云serverless团队
2019/07/16
1.7K0
从​开发调试到部署运维  一套完整的Serverless项目开发经验分享
相关推荐
One API本地开发环境搭建
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档