一、二层交换机

本文所探讨的交换机均为二层交换机。二层交换机可以识别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封装在二层头后面。如下所示:
image.png
最外面依然是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 既可以连接交换机和服务器的接口也可以当作交换机之间的接口。

image.png
还有一个概念,如果一个数据包打上了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,还有隧道的原理了。