一、二层交换机
本文所探讨的交换机均为二层交换机。二层交换机可以识别MAC地址,根据MAC地址进行转发。
二、自学习能力
二层交换机具有学习能力,比如一个交换机,计算机A连接交换机的口1,计算机B连接交换机的口2,计算机发消息给计算2,经过交换机,根据数据链路层的学习我们知道网络包最外层会封装MAC口,里面会有目的地址和源地址。这样交换机就知道计算机A可以在口1这边,然而它此时并不知道计算机B在哪,只能进行广播,等计算机B回包,交换机就知道计算机B在口2这边,并且知道计算机A在口1,就直接将消息从口1出去。
三、环路问题
拥有了自学习能力,包从哪里过来就表示网络设备在哪里,当没有查询到的时候,会走其他口进行广播,如果有环路,那么数据包会一直在网络中绕圈圈。如何解决环路问题呢,图论中有个很重要的概念,最小生成树,利用最小生成树,可以将图转换为树,因为树是不存在环路的,所以可以解决这个问题,比较著名的协议是STP协议(Spanning Tree Protocol)。有兴趣可以了解一下STP协议的原理。
四、VLAN
局域网之间如何进行安全和隔离呢?可以使用VLAN来解决。VLAN技术其实和计算机里面的namespace原理差不多,都是用于虚拟隔离,本质还是在一起的。交换机进行虚拟局域网隔离是通过交换机的网络接口实现的,分配一个vlan id,交换机之间发送和接收数据包的时候,将VLAN ID 作为TAG封装在二层头后面。如下所示:
最外面依然是MAC头,接着封装了一个VLAN TAG:
含义如下所示,其中最重要的就是VID,表示局域网的id。
| TPID | 2Byte | Tag Protocol Identifier(标签协议标识符),表示数据帧类型。 | 取值为0x8100时表示IEEE 802.1Q的VLAN数据帧。如果不支持802.1Q的设备收到这样的帧,会将其丢弃。 各设备厂商可以自定义该字段的值。当邻居设备将TPID值配置为非0x8100时, 为了能够识别这样的报文,实现互通,必须在本设备上修改TPID值,确保和邻居设备的TPID值配置一致。 |
|---|---|---|---|
| PRI | 3bit | Priority,表示数据帧的802.1p优先级。 | 取值范围为0~7,值越大优先级越高。当网络阻塞时,交换机优先发送优先级高的数据帧。 |
| CFI | 1bit | Canonical Format Indicator(标准格式指示位),表示MAC地址在不同的传输介质中是否以标准格式进行封装,用于兼容以太网和令牌环网。 | CFI取值为0表示MAC地址以标准格式进行封装,为1表示以非标准格式封装。在以太网中,CFI的值为0。 |
| VID | 12bit | VLAN ID,表示该数据帧所属VLAN的编号。 | VLAN ID取值范围是0~4095。由于0和4095为协议保留取值,所以VLAN ID的有效取值范围是1~4094。 |
五、VLAN工作原理
在谈论VLAN工作原理之前,先谈论一下交换机的几种网络接口。
| 网络接口 | 作用 |
|---|---|
| Access | 用于连接交换机和服务器的接口。 |
| Trunk | 交换机之间的接口。 |
| Hybird | 既可以连接交换机和服务器的接口也可以当作交换机之间的接口。 |

还有一个概念,如果一个数据包打上了VLAN TAG,我们称之为Tagged,否则成为Untagged。
每个口都能设置缺省的vid,称之为PVID
接下来讨论集中发包场景:
| 场景 | 交换机如何处理 |
|---|---|
| PC向Access口发送Untagged数据 | 交换机会查看Access口的vlan id ,然后将Tag打上,数据报变成Tagged |
| PC向Access口发送Tagged数据 | 交换机会查看Access口的vlan id,然后将数据报的vlan id 解析出来,查看是否一致,如果一致,那么就直接发包,如果不一致,就丢弃。 |
| 交换机从Access口向PC发送数据 | 交换机会从数据包中解析出vlan id,然后找到同一个vlan id 的access口,然后将TAG去除,变成Untagged数据包,然后转发。 |
| Trunk口接收Untagged数据包 | 交换机会打上默认的PVID,然后寻找能够接收PVID的口,然后进行转发。 |
| Trunk口接收Tagged数据包 | 交换机会从数据包中解析出vlan id,然后寻找相同的vlan id 进行转发。 |
| Trunk口发送Untagged数据包 | Trunk口不会发送Untagged数据包 |
| Trunk口发送的Tagged数据包和PVID一致 | 交换机会将Tag去除,然后再发送 |
| Trunk发送的Tagged数据包和PVID不一致 | 交换机会从数据包中解析出vlan id,然后查看在通行名单里,如果在就转发,否则就丢弃。 |
| Hybird接收Untagged数据包 | 将其打上PVID的Tag,然后,若PVID在接口允许通行的VLAN列表里则接收,否则丢弃。 |
| Hybird接收Tagged数据包 | 其VLAN-ID在接口允许通行的VLAN列表里则接收该帧,否则丢弃。 |
| Hybird口发送包 | 当该帧的VLAN-ID是接口允许通行的VLAN时,发送该帧,此时可以通过命令设置发送时是否携带Tag。 |
讲完所有口收发包的流程,我觉得交换机如何进行局域网隔离已经有了大体上的认知。
六、VLAN 弊端
vlan协议最大的弊端就是个数太少,可用的就4094个,而对于云厂商来说,客户远远不止4094,因此后面有个更吊的协议VXLAN,有机会探讨一下,如果学会了VXLAN,就懂VPN,还有隧道的原理了。
