上一章我们组一个寝室局域网时,因为只需要一台交换机,所以不会有什么问题。但是,当我们将场景切换到办公室,我们常见的办公室大多是 一排排的桌子,每个桌子都有网口,一排就得几十个,一层楼就得成百上千,要是还算上各栋楼,就更多了。这就不是一台交换机可以解决的了。当需要多台交换机时,就会形 成相对复杂的拓扑结构。
我们先看看两台交换机的情况,两台交换机连着3个局域网,当需要跨局域网发包时,我们也需要知道另一个局域网中的机器的MAC地址,假设局 域网分为LAN1,LAN2,LAN3。LAN1的机器发起广播,LAN1的其他机器收到,但发现不是发给他们的,LAN1的交换机A最开始也不知道任何拓扑信息,交换机收到广播包后,除了 不发给来源网口,将会广播到其他机器和LAN2,但发现也不是他们的,同时交换机B也会收到,交换机B也没有拓扑信息,一个广播,到了某台机器,一看IP,发现是发给自己的, 于是主动上报自己的MAC地址,于是,一个跨LAN的ARP请求完成。上述过程会不断的更新交换机的信息,交换机也会越来越智能。看起来这样,两台交换机工作得也非常好,但是 随着办公室不断扩大,交换机越来越多,网线到处都是,拓扑越来越复杂,就会出现一些意料不到的情况,其中最常见的问题就是环路问题。
假设,两个交换机将两个局域网同时连接起来,也许你觉得这样会提高效率,但是却不幸的出现了环路,拓扑环路会出现什么情况呢?假设LAN1中 有两台机器M1和M2,当M1需要访问M2时,由于不知道M2的地址,所以M1发起一个ARP请求,M2会把MAC地址返回给M1,看起来没什么问题,但是,我们仔细想想,两台交换机都 连接了两个局域网,说明另一台交换机也会收到这个ARP广播包,然后找了一圈找到了,于是会出现,M2在交换机1的右边,在交换机2的左边。当包从交换机2到1时,怎么M2到 另一边了,交换机会认为肯定是机器换位置了,于是会更新刚才的记录,然后循环往复,不断更新,当包数量多的时候,信道就堵住了,谁也别想动了。
那么,如何解决拓扑环路的问题呢?STP协议。STP协议有一些难以理解的概念,我们先看一看。在数据结构中,有一个方法叫做最小生成树,有环的 我们称为图。将图中的环破坏,就生成了树。在计算机网络中,生成树的算法叫STP(Spanning Tree Protocol)。STP协议本身比较复杂,一开始我们可能难以看懂,我们先 用一些通俗的例子来比喻一下。我觉得最靠谱的比喻就像华山论剑,最终决定出谁是五岳盟主或天下第一的方式。在STP协议中,也有许多拗口的概念:
- Root Bridge:根交换机,可以比喻为掌门的交换机,是某棵树的老大,最大的大哥;
- Designated Bridge:指定交换机,可以比喻为小弟,对于树来说,就是子树,所谓的指定就是我拜谁做大哥,其它交换机要通过这个交换到达根交换机的交换机,也相当于 拜他为大哥,这里的子树一般不包括叶子,叶子一般是主机。
- Bridge Protocol Data Units(BPDU),网桥协议数据单元。可以比喻为“相互比较实力”的协议,行走江湖,比的是武功,拼得就是实力,当两个交换机碰见的时候,也就是 相连的时候,就需要比一比了,BPDU只有掌门能发,已经隶属于某个掌门的交换机只能传达掌门的指示。
- Priority Vector,优先级向量。可以比喻为实力,值越小越牛逼,那这个数是啥,其实就是一组ID数目,[Root Bridge ID,Root Path Cost,Bridge ID, and Port ID]. 一个一个按序比,只要有一个比对方小了,那就输了,后面的也就不比了。
那么,STP的工作过程是怎么样的呢?最开始,各种在各种的局域网,每个人都是掌门老大,每个人都有独特的ID,这个ID是管理员分配的,管理 员知道哪些交换机是更好的,所以管理员会给与很高的优先级,一出生就是乔峰级别的。既然谁都不服输,那当碰见的时候,就发BPDU比一比,一比就会发现,有的乔峰,有的 是慕容,赢的就是大哥,输的就只能当小弟了,于是,很多有天赋的人崛起创建宗门,收了很多小弟。然后,不断的纷争,不断的合并。这时会出现4种情况:
- 掌门遇到掌门:互相发送BPDU,同上,输的人带着小弟归顺。
- 同门相遇: 这个时候说明交换机拓扑中出现了环,但最开始掌门不知道,直接PK了一把,掌门发现这小伙子功夫还可以,职位不应该这么低,于是就收到门下自己带。 3.掌门与其它门派小弟相遇:小弟拿出掌门的BPDU,掌门输了,带着小弟投降,赢了,这个小弟会拜入新掌门,同时用新掌门的BPDU去拉通和自己连接的兄弟。 4.不同门的小弟相遇:各种拿出掌门的BPDU相比,输了弃暗投明,并逐渐拉拢自己的兄弟。
经过漫长的纷争,最终有一个人一统天下,天下太平。但是天下大势,合久必分,分久必合,天下一统的时间久了,也会有相应的问题。机器越来 越多,交换机也成倍增加,就算交换机比较智能,但还是有需要广播的时候,这个时候,相关的,不相关的,要广播一大堆机器,性能也就下来了。就像一家公司,创业之 初,一二十个人,坐在一个会议室,有事大家讨论一下,非常方便,但是如果人数到了50,再坐在一起的时候,就换吵得不行了。而且,有些事需要保密,全在一起,都被听到 了,怎么办呢,买楼分办公室。具体怎么分呢,一般有两种方式:
- 物理隔离,每个部门都会设置一个单独的会议室,对应到网络方面,每个部门就换有单独的交换机,配置单独的子网,这样部门之间的沟通就需要路由器了,路由器后面 再说,关键是每个部门的人数不一样,如果每个部门都有交换机,口多了浪费,人多了,又不够用。
- 虚拟隔离,就是我们常说的VLAN,也叫虚拟局域网。使用VLAN,一个交换机会连属于多个局域网的机器,但是交换机如何区分不同的局域网呢?我们只需要再二层的头 里面加一个TAG,里面有一个VLAN ID,一共12位,可以划分4096个VLAN。但是4096个VLAN就够了么?实际效果来说,再云计算中是完全不够的,后续会讲道。
如果我们买的交换机支持VLAN,当这个交换机把二层的头取下来,就能识别这个VLAN ID,这样只有相同VLAN的包,才会互相转发,不同VLAN的 是看不到的。这样广播问题和安全问题都能解决。有人会问交换机之间怎么连接呢,对于支持VLAN的交换机,有一种口叫做Trunk口,可以转发属于任何VLAN的口,交换 机就通过Trunk口互联。
基本到目前为止,多台机器连接的问题已经解决了,然而,这只是一般的场景,对于带宽,高可用什么的都没有太大要求,我们经常访问 的一些网站似乎不会挂掉,那是因为这些网站生活在一个叫做数据中心的复杂世界。