作者:乖乖狼
链接:https://www.zhihu.com/question/51675361/answer/263300150
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
我决定写一个长答案。悲催的是用心写的东西往往没啥人看,那边我随便抖个机灵好几千赞。
此文保留版权,转载请联系我。
问题:VLAN 划分与子网划分联系与区别?
VLAN划分是基于数据链路层进行划分,子网划分是基于网络层进行划分,技术层面而言这两种划分之间没有什么“联系”可言,区别大大的。如果一定要说两种划分之间有什么联系,联系就是实际运用时候需要对两种划分进行综合规划才能成功组网,规划了VLAN就必须要为每个VLAN规划相应的IP子网。
划分VLAN的目的是为了阻断VLAN之间的通讯,VLAN划分之后从逻辑链路上阻断了不同VLAN之间的通讯,可以理解为划分成多个互不关联的虚拟的交换机。那么本来挺好的多口交换机为啥要对端口进行划分并且阻断通讯呢?因为有一种通讯叫做广播,它太消耗资源了,本文后面会说。
划分IP子网的目的是为了便于IP协议选择数据包输送的路径,对目的地进行近邻和远程两级规划,减轻网关负担提高路由效率。划分子网的目的不是某个回答所说的为了阻断子网之间进行通讯,虽然结果上而言子网之间无法直接进行单播通讯。
我猜您一定会问,既然划分了VLAN完全阻断了,那VLAN之间还怎么通讯呢?答案是还需要把各个VLAN都接入网关,由网关进行有选择的转发,跨VLAN的数据经由网关进行通讯。*抬杠的答案是把它们之间用一根网线接起来,就像把两台交换机进行了级联,这样VLAN之间就可以通讯啦。*大雾,千万别在生产环境乱来啊!由此导致的交换机死机、全网瘫痪甚至设备冒烟啥的可别找我。
接下来简要介绍数据包发送的大概流程。本回答的例子需要简单了解一下IP路由和ARP解析就能看懂了。
网络层IP协议在进行单播数据包的发送之前会进行选路。路由就是选路的意思。怎么选路呢?终端设备选路的逻辑非常简单,若目的地是直连的网络邻居就把包直接送去,不是邻居就把包送给快递公司(网关)进行转发。(当然了,网关快递公司的选路逻辑非常复杂,复杂到可以写成好几本厚到可以砸死人的书。这些与本文无关。)
下面说ARP解析。它是把网络层IP地址和数据链路层MAC地址建立映射关系,因为以太网和无线局域网都是基于物理地址进行运作的链路层网络协议,设备必须拥有自己的MAC地址而且还要知道目的MAC地址才能正常工作,它们不认识不能处理IP地址。ARP会把已知的IP和MAC建立映射,当遇到不在映射表内的新地址咋整?发射二层MAC广播找人啊。广播:谁是IP:xxx?所有收到广播的人都会仔细听一听,B设备:啊,这个广播帧和我没关系,丢弃;C设备:啥,这个广播竟然是找我的?赶快回复:俺就是你要找的IP:xxx啊!俺的MAC是:xxxx!于是就成功建立了新的IP与MAC映射。
依据本地接口IP地址、本地接口子网掩码和目的IP地址三个参数,系统可以判定目的IP地址和自身是否位于同一个IP子网。如果目标和自己在一个IP子网,路由表把这种情况叫做直连的网络。
如果目的IP地址与本地接口是直连网络关系,则直接发给目标,直接ARP请求并解析成目的MAC地址。比如说你自己家电脑192.168.1.2要发包给自己家打印机192.168.1.3,ARP解析192.168.1.3的对应MAC并封装数据帧发送即可达成通讯。
如果目的IP地址与本地IP地址不是直连关系,比如说你自己家电脑192.168.1.2要发包给谷歌8.8.8.8,则需要用到传说中的IP转发。IP转发怎么实现呢?首先系统依据自己的子网掩码255.255.255.0判定自己(192.168.1.2)和谷歌(8.8.8.8)不是邻居,系统觉得太TM远了没法直接送达,决定把包发给网关。接下来ARP请求并解析成网关192.168.1.1的MAC地址,然后封装数据帧发送。特别注意,此处数据包目的IP没变仍然是8.8.8.8,但是数据帧目的MAC是网关(192.168.1.1)的MAC,不是最终目的地(8.8.8.8)的。网关收到发给自己的数据帧,解封成来源192.168.1.2目的地8.8.8.8的数据包,进行下一步处理,比如NAT什么的。
IP协议在进行广播数据包的发送时就无需路由了,既然是广播还选什么路,扯开嗓子喊就行,直接ARP成目的MAC:FFFFFFFFFFFF封装帧发射就完了。
现在回到开始时的疑问,不同VLAN之间是链路层隔离的,如何通讯?把各个VLAN都接入网关,由网关进行VLAN之间的路由转发。VLAN_1和VLAN_2之间的通讯原理和VLAN1与谷歌之间的通讯原理基本一致,区别是VLAN_1和VLAN_2之间只需要经过一个网关转发一次即可,到达谷歌服务器则需要途径几十上百个网关接力转发几十上百次。
由此可见,不同VLAN之间也应当是不同的IP子网,因为网关是依据数据包的目的IP地址进行转发。
另,有私信问,你一会路由器一会网关的,网关和路由器这俩玩意到底是啥关系,有区别吗?这么说吧,网关是抽象概念,指的是IP转发者这个角色,类似于“交通工具”这个词;路由器是具体概念,特指路由器这种东西,类似于“汽车”这个词。
网关不一定是路由器,还可以是三层交换机或者插了两块网卡的电脑;交通工具不一定是汽车,还可以是灰机或者拖拉机。
路由器不一定用来当网关使,还可以专门用于网络访问控制(ACL)等等老多本领了;汽车不一定用来当交通工具使,还可以用于震动什么的。
基础知识铺垫完毕,下面是实例
举例:
假设有PC_A_192.168.1.2/24和PC_B_192.168.2.2/24在同一个VLAN里面(或者接入了同一台傻瓜交换机)。注意,PC_A和PC_B位于同一VLAN但是不在同一个IP子网内!
情况1,广播:
PC_A发送了一个目的255.255.255.255:10086的广播数据包,本机的ARP解析后封装成目的MAC:FFFFFFFFFFFF的广播帧,走你~
因为在同一个VLAN,PC_B的网卡会收到这个帧,也会受理并解封成目的IP:255.255.255.255的包,转交给操作系统网络层。操作系统的网络层IP协议也会受理这个包,继续解封成目的端口10086的数据段向传输层转交。最终PC_B操作系统的传输层Socket发现这个数据段的目的端口10086与本机任何一个Socket进程的端口都不符,到这一步才进行丢弃。
如果恰好端口号10086相符呢?那么就会把数据整理完毕完整的送达给应用层的具体程序,然而PC_B的10086号程序不知道这些数据是啥意思,丢弃。好比说你收到了一封快递,它跨越千山万水七层分拣和传输机构送终于到了你手里,满怀惊喜的你激动的拆开,一看,卧槽,宣传法x功的,丢弃。真是浪费快递资源和个人感情啊。
相关设备浪费网卡资源、内存资源和处理器资源受理了这些和它无关的广播包。当这种数据包很多,网络性能以及所有联网的电脑性能都会受影响,这就是传说中的广播风暴。广播可以传输多大范围?绝不局限于一台交换机,在大一点的网络中,交换机之间都是进行树状级联的,可以有四五层,几十上百台交换机组网,广播会送达到这个网络的每一个角落每一台设备。知道风暴厉害了吧?于是才有了VLAN划分这种技术。如果就一台8口交换机的网络规模,你还把它分成四个VLAN,还得给准备网关以便互访,多折腾啊。
那么为啥不消灭广播这种不效率的通讯方式呢?因为绝大多数的网络都不仅仅是两台设备之间进行点对点通讯,多是星形拓扑多台设备组网的。在建立点对点握手通讯之前,广播搜索是不可避免的步骤。典型的例子是ARP请求广播、DHCP请求广播、PXE请求广播等等。你要找个媳妇也得先在村里吼一下让大伙知道你的需求不是,然后有单身女孩回复你,你们俩确定恋爱关系之后俩人之间才可以单播通讯嘛。
情况2,单播:
PC_A_192.168.1.2/24发送了一个目的192.168.2.2的单播数据,层层向下到了本机的网络层,IP协议检查本机路由表判断到目的地址不是直连路由,于是数据包被转发给网关,于是目的MAC被ARP解析成网关的MAC交给数据链路层,于是这个包被发给了网关路由器绕了一圈才送到,并没有直接被送达目的PC_B。若没有指定网关或网关设备不可用,则会报错。
可见,划分不同的子网但是却接入同一个VLAN,结果是没有网关的参与就无法正常单播通讯而且还不能隔离广播数据。
可见,若需要解决广播风暴的困扰,需要从数据链路层进行隔离,仅从网络层划分不同的子网是不行的。
继续穷举一下,VLAN和IP子网,各种划分,会有4种情形
1、A和B相同IP子网,相同VLAN:可以正常通讯,单播和广播通讯都会送达。
2、A和B不同IP子网,相同VLAN:需要路由器才能单播通讯,但是会有广播跨IP子网互相干扰。
3、A和B相同IP子网,不同VLAN:完全无法通讯,即使有路由器也不行。因为IP协议认为是发给近邻直连网络,数据不会路由给网关,会进行ARP请求广播,企图直接与目的主机通讯,可是由于B在另一个VLAN,网关不予转发ARP请求广播,B收不到ARP请求。结局是网络层ARP无法解析获得数据链路层需要的目的MAC,通讯失败。(除非:路由器上对两个VLAN之间进行桥接;或者路由器上进行静态NAT转换;或者用物理办法拿一条网线把俩VLAN连上强行让它俩接入同一个广播域,若生成树设置不当容易把交换机搞死千万别作)
4、A和B不同IP子网,不同VLAN:需要路由器才能进行单播通讯,不会有广播跨子网干扰。
情形1是常见的小型局域网;
情形2不应出现在正确配置的网络里,因为花了钱买路由器(三层交换机)但是钱白花了,没能隔离广播风暴;
情形3是常见的家庭WiFi路由器配置故障,一些运营商进户线路经过NAT是192.168.1.0/24的地址段,家用WiFi路由器恰好也用192.168.1.0/24这个地址段作为Lan口默认地址,路由器Lan端和WAN端冲突,傻掉了(可以这样理解:家用路由器的Lan端和WAN端分别处于两个不同的VLAN);
情形4是常见的企业局域网。
补充回答一下问题:“不用路由器隔离广播的原因有哪些?路由器一般用在哪个地方?而三层交换机应该用在什么地方?”
我猜题主的本意是问,不能仅凭划分IP子网实现隔离广播的原因,上面我已经详细说明了。路由器当然是能隔离广播的,不需要用路由器隔离广播的原因就是没必要呗,一般来说就是网络规模小,广播不太多,对大家都影响不大。
路由器用在哪个地方?路由器的常见角色是作为IP转发设备,判断数据包应该怎么转发,然后把数据包转发出去。稍微有一点规模的网络都离不开路由器,像是国际互联网这种规模的网络需要成千上万台路由器进行运作。
三层交换机用在什么地方?三层交换机最主要最擅长的应用就是进行VLAN之间的数据路由转发,这种应用场合下它的转发速度要远胜过专业路由器,它可以做到以二层帧交换的速度进行跨VLAN三层路由转发作业。但是通常来说它NAT效率不如专业路由器或防火墙,不能跨二层协议处理数据包,通常把它用在局域网网络核心节点。在局域网网络末节,比如说Internet接入处,通常都会再专设一台路由器或防火墙来进行链路层协议转换和NAT转换。可以这么简单的理解,三层交换机是一种只有以太网接口,只能处理以太网协议的路由器。(难道除了以太网还有别的?当然有,比如串行、PPP)虽然三层交换机和路由器在内部运作机制上不一样,对于用户而言,数据路由转发这个功能它俩都具备。