NAT模式、路由模式、桥接模式的区别
NAT模式
NAT模式概述
NAT是“Network Address Translation”的缩写,中文意思是“网络地址转换”,它允许一个整体机构以一个公用IP(Internet Protocol)地址出现在Internet上。顾名思义,它是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术。
为什么要这样干呢?因为IP数据段由于字节数目一定,所以资源是有限的,如果为每一个设备分配一个IP地址,那么极其消耗IP资源,所以NAT起到的作用是,对外只暴露一个IP地址,当有内部连接要通讯的时候,通过NAT将内网IP转换成对外的IP,充当了网关的作用。
NAT在外部公网(internet)上正常使用可以使多台计算机共享Internet连接。通过这种方法,申请一个合法IP地址,就把整个局域网中的计算机通过NAT接入到了Internet中。这时NAT屏蔽了内部网络,所有内部网计算机对于公共网络来说是不可见的,而内部网计算机用户通常不会意识到NAT的存在。这里提到的内部地址,是指在内部网络中分配给节点的私有IP地址,这个地址只能在内部网络中使用,不能被路由(一种网络技术,可以实现不同路径转发)。
路由:
以太网交换机工作在第二层(数据链路层),用于在同一网络内部转发以太网帧。但是,当源和目的IP地址位于不同网络时,以太网帧必须发送给路由器。路由器负责在不同网络间传输报文,通过路由表来决定最佳转发路径。当主机将报文发送至不同IP地址时,由于主机无法直接与本地网络以外的设备通信,报文被转发至默认网关。默认网关就是数据流从本地网络路由至远端设备的目的地。它通常用来连接本地网与公共网。
IP地址中专门保留了三个区域作为私有地址,其地址范围如下:
10.0.0.0/8:10.0.0.0~10.255.255.255
172.16.0.0/12:172.16.0.0~172.31.255.255
192.168.0.0/16:192.168.0.0~192.168.255.255
NAT将这些无法在互联网上使用的保留IP地址翻译成可以在互联网上使用的合法IP地址。而全局地址是指合法的IP地址,它是由NIC(网络信息中心)或者ISP(网络服务提供商,比如常说的中国移动、中国电信)分配的地址,对外代表一个或多个内部局部地址,是全球统一的可寻址的地址。
NAT模式图示
NAT技术类型
NAT有三种类型:静态NAT(Static NAT)、动态地址NAT(Pooled NAT)、网络地址端口转换NAPT(Port-Level NAT)。
其中静态NAT设置起来最为简单和最容易实现的一种,内部网络中的每个主机都被永久映射成外部网络中的某个合法的地址。而动态地址NAT则是在外部网络中定义了一系列的合法地址,采用动态分配的方法映射到内部网络。NAPT则是把内部地址映射到外部网络的一个IP地址的不同端口上。根据不同的需要,三种NAT方案各有利弊。
动态地址NAT只是转换IP地址,它为每一个内部的IP地址分配一个临时的外部IP地址,主要应用于拨号,对于频繁的远程联接也可以采用动态NAT。当远程用户联接上之后,动态地址NAT就会分配给他一个IP地址,用户断开时,这个IP地址就会被释放而留待以后使用。
网络地址端口转换NAPT(Network Address Port Translation)是人们比较熟悉的一种转换方式。NAPT普遍应用于接入设备中,它可以将中小型的网络隐藏在一个合法的IP地址后面。NAPT与动态地址NAT不同,它将内部连接映射到外部网络中的一个单独的IP地址上,同时在该地址上加上一个由NAT设备选定的TCP端口号。
在Internet中使用NAPT时,所有不同的信息流看起来好像来源于同一个IP地址。这个优点在小型办公室内非常实用,通过从ISP处申请的一个IP地址,将多个连接通过NAPT接入Internet。实际上,许多SOHO远程访问设备支持基于PPP的动态IP地址。这样,ISP甚至不需要支持NAPT,就可以做到多个内部IP地址共用一个外部IP地址上Internet,虽然这样会导致信道的一定拥塞,但考虑到节省的ISP上网费用和易管理的特点,用NAPT还是很值得的。
NAT模式总结
我们知道家用路由器一般都是NAT模式,内网用户默认都是192.168.1.x网段,而路由器充当默认网关的角色,所有内网发出的包都将经过路由器,路由器在公网有唯一的IP,所有的包经过路由器修改其源IP都改为了公网IP了,并且会随机映射一个对外端口。当应答回到路由器时,路由器会根据此前的映射关系,将目标IP和PORT改为原先发送请求的内网用户的IP和PORT,这样对于内网用户来说是感知不到路由器的存在的,大家共用路由器的对外IP访问外网。当然,因为大家都在内网同一个网段(路由器基于DHCP分配),所以内网用户互相通讯也没有问题。
DHCP:
DHCP(动态主机配置协议)是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。
当NAT用在虚拟机领域的时候,原理是类似的。只不过一台PC上的若干虚拟机相当于若干内网用户,而宿主机PC充当路由器的角色,虚拟机会在PC上虚拟化一个网络环境:也就是每个虚拟机通过一个无形的网线连接到了无形的路由器上,仅此而已。每个虚拟机实例会通过PC上的虚拟路由器获取DHCP分配的局域网IP,但是这只是本机虚拟出来的局域网,并不是物理局域网。那么,现在虚拟机想访问外网,只需要配置默认网关为PC上虚拟路由器,那么数据包经过虚拟路由器的时候,会将源IP修改为PC的物理网卡的物理局域网IP,发送给物理路由器,之后的事情和之前描述的一样。
上面的虚拟路由器其实是宿主机上一张虚拟的网卡,而虚拟机则将默认网关指向了这张网卡,从而有机会进行IP篡改。
如果你理解了上面这段描述,那么我们可以分析出这样的结论:
- 1个PC上的若干虚拟机之间,可以互相通讯,中介就是虚拟路由器。
- 虚拟机可以访问外网,也可以访问物理局域网,但是无法访问其他PC上的虚拟机。
- 外人(物理局域网其他PC)无法直接访问虚拟机,这和物理路由器外网的用户无法直接访问内网用户一个道理。(反向进入内网需要DNAT)
- 虚拟机可以访问宿主机的物理IP,流程是先经过宿主NAT修改源IP和源PORT,通过物理网卡发出到局域网络中,又被物理网卡接收处理。
- 宿主机无法访问虚拟机,这是因为宿主机的物理网卡和内网其他网卡的角色一样,对于虚拟路由器来说都是”外人”,不可能进入到虚拟局域网的内网用户。
桥接模式
桥接模式简单说明
桥接模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立的主机,它可以访问网内任何一台机器。 在桥接模式下,你需要手工为虚拟系统配置IP地址、子网掩码,而且还要和宿主机器处于同一网段,这样虚拟系统才能和宿主机器进行通信。同时,由 于这个虚拟系统是局域网中的一个独立的主机系统,那么就可以手工配置它的TCP/IP配置信息,以实现通过局域网的网关或路由器访问互联网。
使用桥接模式的虚拟系统和宿主机器的关系,就像连接在同一个Hub上的两台电脑。想让它们相互通讯,你就需要为虚拟系统配置IP地址和子网掩码,否则就无法通信。
桥接模式图示
图示一
图示二
桥接模式总结
桥接和NAT可以说是大不相同,在图中的br0相当于虚拟交换机,物理网卡eth0和虚拟机网卡vnet0都通过虚拟的网线连接到br0上,这样eth0和vnet0之间可以互相交换数据。
我们把br0叫做桥,其实在宿主机上也是一张虚拟的网卡,作为虚拟交换机角色,而传统交换机本身就是按mac目标地址的将数据转发到正确的网线出口上,并不会做什么事情。
配置虚拟机采用桥接模式并指定br0后,数据从虚拟机的网卡vnet0发出到br0,br0会将数据转发给另一端的eth0,源mac是虚拟机的随机MAC地址,源IP是虚拟机的IP地址,桥并没有做中间修改,数据仅仅通过eth0网卡直接发到链路上,eth0只是充当一个发送的物理介质。
当应答回来的时候,物理网卡eth0会在混杂模式捕获包并交给br0处理,如果目标mac地址等于eth0或者vnet0,则进一步处理。如果是eth0的包那么直接宿主机处理,如果是vnet0的包则转发给虚拟机处理,整个过程无需对包做出修改,因为br0仅仅是一个交换机,而eth0和vnet0是连在上面的2个网卡而已。
更加简单的去理解的话,br0是一个交换机,eth0是连在br0交换机上某个插槽的另外一台特殊交换机(它在混杂模式工作,监听的是来自物理交换机发来的各类包),而vnet0是连在br0交换机上的一台普通服务器。
根据上述描述,可以得知:
- 无论是虚拟机还是物理机,大家都在一个网段里,都指向同一个默认网关(物理路由器)。
- 虚拟机通过桥,可以向物理路由器申请dhcp,分配得到局域网IP。
- 挂在桥上的虚拟机,可以直接被局域网其他用户访问,因为eth0混杂模式+桥可以转发到虚拟机。
- 混杂模式的网卡只是一个物理介质,它监听所有的包,只留下自己关注的包(比如目的mac地址是eth0h或者vnet0的包),也可以发送任意的包,无论包的源mac地址到底是不是物理网卡自身的(vnet0的假mac地址)
可见,桥接更加适合于虚拟机对外提供服务,因为它是可以被外部访问到的,和一个正常的局域网用户没有什么区别。
很多网络的结构图喜欢把一个局域网的用户关联到一条线上,体现出大家都在一个链路上的感觉,其实这是很大的误导,真实的局域网用户都是接在一个交换机上面的,交换机知道每个插槽上有哪些mac地址,一般来说一个插槽就一个mac地址,但是对于我们说的桥接就可能是多个,另外也可能是接了另外一个交换机,也就是交换机可以级联,仍旧是一个局域网
HOST-ONLY模式
host-only模式,也叫主机模式,在某些特殊的网络调试环境中,要求将真实环境和虚拟环境隔离开,这时就可采用Host-only模式,在Host-only模式中,所有的虚拟系统是可以相互通信的,但虚拟系统和真实的网络是被隔离开的可以利用Windows XP里面自带的Internet连接共享(实际上是一个简单的路由NAT)来让虚拟机 通过主机真实的网卡进行外网的访问虚拟系统的TCP/IP配置信息(如IP地址网关地址DNS服务器等),都是由VMnet1(Host-only)虚拟 网络的DHCP服务器来动态分配。
HOST-ONLY模式图示
HOST-ONLY总结
HOST-ONLY模式其实就是NAT模式去除了虚拟NAT设备,然后使用VMware Network Adapter VMnet1虚拟网卡连接VMnet1虚拟交换机来与虚拟机通信的,Host-Only模式将虚拟机与外网隔开,使得虚拟机成为一个独立的系统,只与主机相互通讯。
NAT模式、路由模式、桥接模式的区别的更多相关文章
- (转载)设置虚拟机桥接模式以及解决桥接模式上不了网以及ping不通主机的问题
解决问题的博客地址:设置虚拟机桥接模式以及解决桥接模式上不了网以及ping不通主机的问题 遇见的问题: 1.VMnet8无法设置为桥接模式 结论:只要主机网络可被桥接,VMnet8根本不需要设为桥接模 ...
- 设计模式-结构型模式,python桥接模式
桥接模式 桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化.这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦. 这种模式涉及到一个作为桥接 ...
- NET设计模式 第二部分 结构性模式(8):桥接模式(Bridge Pattern)
桥接模式(Bridge Pattern) ——.NET设计模式系列之九 Terrylee,2006年2月 概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维 ...
- 《JAVA与模式》之桥接模式
桥接模式是一种结构型模式,它主要应对的是:由于实际的需要,某个类具有两个或两个以上的维度变化,如果只是用继承将无法实现这种需要,或者使得设计变得相当臃肿. 桥接模式的做法是把变化部分抽象出来,使变化部 ...
- vmware为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式)。
原文来自http://note.youdao.com/share/web/file.html?id=236896997b6ffbaa8e0d92eacd13abbf&type=note 我怕链 ...
- vmware虚拟机Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式)详解
原文来自http://note.youdao.com/share/web/file.html?id=236896997b6ffbaa8e0d92eacd13abbf&type=note 我怕链 ...
- CentOS 6.8下网卡配置、桥接模式和NAT连接模式、VMware虚拟机克隆网卡配置
模式一:桥接模式: 1. 在VMware中安装好虚拟机后,虚拟机网卡设置:选择桥接模式 2. 查看本机的网络信息: 找到ip.子网掩码.网关.DNS等. 找一个没有使用的ip,例如:192.168.1 ...
- 虚拟机+桥接模式+Host-only模式 搭建完美的Windows下Linux开发环境
相信有很多鞋童和我一个样是一枚Linux码农(我现在还是嵌入式方向). 做Linux开发势必需要一个Linux环境, 大多数开发者会首先选择一个Linux发行版, 其中Ubuntu LTS版本应该是选 ...
- 虚拟机Linux桥接模式下设置静态IP
之前一直使用NAT模式,测试时android端远程访问虚拟机的mysql时发现无法连接,但是访问同学拷过来的虚拟机Linux的mysql却成功了,想了下原因是他设置的桥接模式.关于两种模式的区别,网上 ...
随机推荐
- matlab随机系数矩阵产生以及矩阵的可视化函数
clc; clear all; close all; n = 100;%所产生矩阵的大小 A= sprandsym(n,0.015,0.1,1);%产生系数矩阵函数: spy(A)矩阵图形化相当于im ...
- C# HTML帮助类 包括补全标签 截取HTML字符串包含标签
public static class HtmlHelper { /// <summary> /// 按文本内容长度截取HTML字符串(支持截取带HTML代码样式的字符串) /// < ...
- Java数组的三种打印方式
1.数组的输出的三种方式 一维数组: 定义一个数组 int[] array = {1,2,3,4,5}; (1)传统的for循环方式 for(int i=0;i<array.length;i++ ...
- Spring源码深度解析之Spring MVC
Spring源码深度解析之Spring MVC Spring框架提供了构建Web应用程序的全功能MVC模块.通过策略接口,Spring框架是高度可配置的,而且支持多种视图技术,例如JavaServer ...
- 有了它(powermock)再也不担心单元测试不达标了
为什么要写单元测试 优点:单元测试可以减少bug率,提升代码的质量.还可以通过单元测试来熟悉业务. 公司硬性要求:有些公司可能还会强制要求,每次新增代码.或者变更代码单测覆盖率要达到多少比例才能申请代 ...
- 进程描述符(PCB)
进程描述符(PCB) 概述 CPU作为计算机的核心部件,我们当然希望它能一直工作,充分提高它的使用效率.对于上层软件来说,我们不可能直接去操控CPU(我们没这能力也没必要),因为操作系统是夹在计算机硬 ...
- TurtleBot3 Waffle (tx2版华夫)(3)opencr系统安装
3. 1. 安装 Arduino IDE Opencr的安装环境的安装包,双击打开即可.进入安装的过程. 在这里你可以选择自己的安装位置. 安装已经完成,点击CLOSE 即可. 3.2. opencr ...
- app逆向万能的md5加密hook破解入参方法(其他加密用通用方法原理差不多,小白推荐)
一.原理 安卓开发调用md5加密时候都会调用到系统类java.security.MessageDigest 加密时候会会调用里面2个关键方法update以及digest 根据这个原理我们开始写代码吧 ...
- 【项目实践】SpringBoot三招组合拳,手把手教你打出优雅的后端接口
以项目驱动学习,以实践检验真知 前言 一个后端接口大致分为四个部分组成:接口地址(url).接口请求方式(get.post等).请求数据(request).响应数据(response).如何构建这几个 ...
- 如何不使用 overflow: hidden 实现 overflow: hidden
一个很有意思的题目.如何不使用 overflow: hidden 实现 overflow: hidden? CSS 中 overflow 定义当一个元素的内容太大而无法适应块级格式化上下文时候该做什么 ...