最近有几个学生粉丝后台私信我,让我说说交换机与 VLAN。我在阅读这几个粉丝私信中发现一个有趣的现象,那就是吐槽大学计算机网络课程的晦涩枯燥,而不是去深层次解释协议出现的原因或者用来去解决什么问题。
帅天今天就和大家聊聊交换机与 VLAN 到底是为何而来,是为了解决什么问题而出现的。在说这个之前,大家首先可以想想前一章提到的 Hub 集线器,仔细的思考一下 Hub 有什么巨大的缺点?
Hub 的问题
使用 Hub 这种组网的方法,一旦机器数目增多,问题就出现了。因为 Hub 是广播的,不管某个接口是否需要,所有的 Bit 都会被发送出去,然后让主机来判断是不是需要。
这种方式路上的车少就没问题,车一多,产生冲突的概率就提高了。而且把不需要的包转发过去,纯属浪费。看来 Hub 这种不管三七二十一都转发的设备是不行了,需要点儿智能的。因为每个口都只连接一台电脑,,这台电脑又不怎么换 IP 和 MAC 地址,只要记住这台电脑的 MAC 地址,如果目标 MAC 地址不是这台电脑的,这个口就不用转发了。
交换机工作原理
二层交换机的出现就是为了解决这个问题。我们结合下图看一下二层交换机的工作原理:
如上图所示,两台交换机连接着三个局域网,每个局域网上都有多台机器。如果机器 1 只知道机器 4 的 IP 地址,当它想要访问机器 4,把包发出去的时候,它必须要知道机器 4 的 MAC 地址。
- 机器 1 发起广播,机器 2 收到这个广播,但是这不是找它的,所以没它什么事。交换机 A 一开始是不知道任何拓扑信息的,在它收到这个广播后,采取的策略是,除了广播包来的方向外,它还要转发给其他所有的网口。于是机器 3 也收到广播信息了,但是这和它也没什么关系。
- 交换机 B 也是能够收到广播信息的,但是这时候它也是不知道任何拓扑信息的,因而也是进行广播的策略,将包转发到局域网三。这个时候,机器 4 和机器 5 都收到了广播信息。机器 4 主动响应说,这是找我的,这是我的 MAC 地址。于是一个 ARP 请求就成功完成了。
在上面的过程中,交换机 A 和交换机 B 都是能够学习到这样的信息:机器 1 是在左边这个网口的。当了解到这些拓扑信息之后,交换机会维持一个转发表,用来记录。
当机器 2 要访问机器 1 的时候,机器 2 并不知道机器 1 的 MAC 地址,所以机器 2 会发起一个 ARP 请求。这个广播消息会到达机器 1,也同时会到达交换机 A。根据之前记录的转发表信息,这个时候交换机 A 已经知道机器 1 是不可能在右边的网口的,所以这个广播信息就不会广播到局域网二和局域网三。
当机器 3 要访问机器 1 的时候,也需要发起一个广播的 ARP 请求。这个时候交换机 A 和交换机 B 都能够收到这个广播请求。交换机 A 当然知道机器 1 是在左边这个网口的,所以会把广播消息转发到局域网一。同时,交换机 B 收到这个广播消息之后,由于它知道机器 1 是不在右边这个网口的,所以不会将消息广播到局域网三。
当交换机作为一个关卡一样,过了一段时间之后。就有了整个网络的一个结构了。这个时候,基本上不用广播了。全部可以准确转发。当然,每个机器的 IP 地址会变,所在的口也会变,因而交换机上的学习的结果,我们称为转发表,是有一个过期时间的。
交换机环路问题
随着办公室越来越大,交换机数目肯定越来越多。当整个拓扑结构复杂了,这么多网线,绕过来绕过去,不可避免地会出现一些意料不到的情况。其中常见的问题就是环路问题。
看下面一张图,当两个交换机将两个局域网同时连接起来的时候。你可能会觉得,这样反而有了高可用性。但是却不幸地出现了环路。出现了环路会有什么结果呢?
我们再想象一下机器 1 访问机器 2 的过程。一开始,机器 1 并不知道机器 2 的 MAC 地址,所以它需要发起一个 ARP 的广播。广播到达机器 2,机器 2 会把 MAC 地址返回来,看起来没有这两个交换机什么事情。
但是问题来了,这两个交换机还是都能够收到广播包的。交换机 A 一开始是不知道机器 2 在哪个局域网的,所以它会把广播消息放到局域网二,在局域网二广播的时候,交换机 B 右边这个网口也是能够收到广播消息的。交换机 B 会将这个广播息信息发送到局域网一。局域网一的这个广播消息,又会到达交换机 A 左边的这个接口。交换机 A 这个时候还是不知道机器 2 在哪个局域网,于是将广播包又转发到局域网二。左转左转左转,好像是个圈哦。
每台机器都会发广播包,交换机转发也会复制广播包,当广播包越来越多的时候,按照上一节讲过一个共享道路的算法,也就是路会越来越堵,最后谁也别想走。所以,必须有一个方法解决环路的问题,怎么破除环路呢?
在计算机网络中,有一种协议叫 STP ,它就是为解决交换机环路问题而设计的。
我们知道,在数据结构中,有一个方法叫作最小生成树。有环的我们常称为图。将图中的环破了,就生成了树。在计算机网络中,生成树的算法叫作STP,全称Spanning Tree Protocol。可以简单理解为,通过比较权重大小从多个交换机中选举出五岳盟主的方式。为了给大家一个感性的认知,可以看下图,通过 STP 算法,网络拓扑最终形成了类似的树结构。
STP 选举过程比较复杂,不是专门从事网络工程师的童鞋理解只需了解即可。
交换机的安全问题和广播问题
一般几千人的公司,部门很多,人也很多,机器多了,交换机也多了,就算交换机比 Hub 智能一些,但是还是难免有广播的问题。同时,公司有一些部门是需要保密的部门,比如财务部。由于在同一个广播域里面,很多包都会在一个局域网里面飘啊飘,碰到了一个会抓包的程序员,就能抓到这些包,如果没有加密,就能看到这些敏感信息了。
为了解决这问题,我们可以使用虚拟隔离技术,也就是常说的 VALN,或者叫虚拟局域网。使用 VLAN,一个交换机上会连属于多个局域网的机器,那交换机怎么区分哪个机器属于哪个局域网呢?
如上图所示,我们只需要在原来的二层的头上加一个 TAG,里面有一个十二位的 VLAN ID。
如果我们买的交换机是支持 VLAN 的,当这个交换机把二层的头取下来的时候,就能够识别这个 VLAN ID。这样只有相同 VLAN 的包,才会互相转发,不同 VLAN 的包,是看不到的。这样广播问题和安全问题就都能够解决了。
有人会问交换机之间怎么连接呢?将两个交换机连接起来的口应该设置成什么VLAN 呢?对于支持 VLAN 的交换机,有一种口叫作 Trunk。它可以转发属于任何 VLAN 的口。交换机之间可以通过这种口相互连接。
总结
这一章先从 Hub 转发任何数据包带来的效率极低情况出发,引出了交换机。交换机有一张转发表用来提高寻址的效率。接着指出交换机存在的环路问题,并提出了 STP 生成树协议的解决方案。最后为了解决交换机的安全问题,介绍了 VLAN 虚拟局域网技术。
如果喜欢这篇文章,请点个关注,你的关注是我最大的动力。