交换机是2层设备,应用在交换式的网络当中。它是根据数据帧上的硬件地址,来实现地址学习和帧转发的功能。交换机有六大工作原理,详细如下:
1、基于源MAC地址的学习
交换机是接收"帧"和转发“帧”的,而上层的IP包经过2层的封装之后形成帧。帧结构中有目的MAC地址和源MAC地址。目的MAC地址就是该帧要去往的主机的硬件地址,而源MAC地址就是封装该帧的设备的地址。由于初始的时候,交换机根本不知道对应的目的MAC地址要从哪个接口发出去,就只好向其他接口泛洪,但是每次都这样并不合适,会占用网络的带宽。所以,在每次收到一个数据帧的时候,交换机都会记录下收到该帧的接口和该帧中的源MAC地址,并将其对应起来。这样,交换机就知道哪个接口是对应哪个MAC地址的了,从而形成了MAC地址表。经过一段时间,MAC地址表就会稳定下来,那么到时候,收到一个数据帧的时候,看下帧中的目的MAC地址,再查找MAC地址表,就知道从哪个接口发送出去了。
2、基于目的MAC地址转发
就像上面所说的,得到了MAC地址表之后,收到一个帧,就查看目的MAC地址,再查找MAC地址表中该地址对应的接口,转发出去就行了。
3、同一接口可以学习到多个MAC地址
这种情况一时可能难以想象出来,看下下面的一个拓扑图:
当多个设备通过一个hub连接到交换机的时候,在这些设备之间转发数据,由于hub的简单特性,hub也会将数据发向交换机,那么在交换机的同一个接口,就有可能会学习到多个MAC地址了。这时,如果主机0和主机1通信的时候,交换机会收到源MAC地址是主机0,目的MAC地址是主机1的帧,这两个地址都是指向一个接口的,此时,交换机并不会转发此帧,因为,一个接口会学习到多个MAC地址,说明在这个交换机之前,两个设备已经是可以通信的了,并不需要通过交换机。
4、同一个MAC地址被多个接口学习到,选择后学习到的接口
我们再模拟一下同一个MAC地址被多个接口学习到的情况,拓扑图如下:
交换机有两个接口是连接到hub上的,所以,在这两个接口上都会学习到主机2和主机3的MAC地址,但是,在交换机的MAC地址表中不可能存在两个目的MAC地址表项,所以,交换机只会选择一个。为了及时更新,交换机会选择后学习到的那个接口作为转发接口。这可以用一种情况来考虑,就是如果一台主机是真的改变了物理位置,接到了交换机的另一个接口上,这时,就需要实时更新MAC地址表了。
5、收到广/组播帧,向本VLAN的其他所有接口转发
收到目的地址为广播或者组播地址的帧的时候,交换机会将帧从除了接收接口以外的所有接口泛洪出去,如果有部署vlan策略的话,就转发到所有属于同一个VLAN的接口。
6、对于没有目标MAC地址表项的帧,向本VLAN的其他所有接口转发
有些帧可能会没有目的MAC地址,此时,交换机的策略是将此帧按照广播或者组播帧的策略转发出去。
总结:作为2层设备的交换机,工作在数据链路层,负责对数据帧的转发。在转发的同时也会经历一个学习的过程,以便在后面的转发帧过程中能够有目的的转发。而不会一直使用泛洪的方式来浪费带宽。