二层交换机可以直接根据帧中的目的MAC地址把数据发送给相应端口上连接的主机。在二层交换机中也有用于数据帧转发的MAC地址与端口的映射表
(CAM表),列出了哪个MAC地址连接的是哪个端口。当 在映射表中没有数据帧中对应的目的MAC地址时才进行“泛洪”(以复制方式在除源端口外的其他
所有端口上进行转发)。但是要注意,交换机缓存空间毕竟有限,可以存储的MAC地址和端口映射表也有限,所以当网络比较大时交换机中的缓存空间就
不能保存网络中所有节点MAC地址与交换机的映射关系了。
1.CAM表的建立
交换机的这张CAM表可以通过多种方式获得,比如静态配置、动态学习,针对多播还可以通过各种多播协议,比如 IGMP嗅探、 GMRP协议等方式
(注意,多播转发不能通过学习获得,而且多播转发项跟普通转发项不同,跟其对应的出口不止一个,而是一个出口集合)。
在进行数据转发的同时,交换机还有一个学习的过程,它包括两个方面:
a.交换机在接收到数据帧时会把其中的源MAC地址提取出来,查询CAM表,看CAM表中是否有针对该MAC地址的转发项,如果没有就把该MAC地址和
接收到该MAC地址的端口绑定起来,插入CAM表项,这样当接收到一个发送到该MAC地址的数据帧时,就不需要向所有端口广播,而仅仅向这一端口
发送即可。
b.在接收到的数据帧中目的MAC地址未知情况下,通过向交换机上其他所有段口进行广播,接收广播帧的节点应答广播帧后,便获知了原来数据帧中
对应目的MAC地址所连接的端口,这时交换机又会把该MAC地址与所连端口的对应表项插入到CAM表中。
注意:数据帧的转发是依据目的MAC地址查询CAM表,而CAM表的学习则是以源MAC地址为依据的。但要注意的是,交换机动态学习的CAM表项并不是
一成不变的,而是启动一个定时器,当该定时递减到零时,该CAM表项被删除。每使用一次该CAM表项进行转发,就恢复定时器初始值。
上述接收是在没有考虑VLAN(虚拟局域网)的情形下阐释的,现在的交换机一般都实现了VLAN,所以CAM表就有了变化,由原来的两项对应关系(MAC
地址与所连接的交换端口)变成了三项对应关系(MAC地址,VLAN ID,交换机端口),这样当接收到一个数据帧的时候,交换机就要同时根据数据帧的目的
目的MAC和VLAN ID两项来查询CAM 表,找到接口后把该数据帧转发出去。
如果交换机根据MAC地址和VLAN ID查询CAM表失败,即没有改MAC和VLAN ID的对应关系,则交换机把该数据帧对该VLAN包含的(除接收端口以外的)
所有端口进行广播。但如果只根据CAM表确定一个VLAN包含哪些端口,则必须遍历整个CAM表,这样如果CAM表的规模非常大,则查询的效率非常低,
所以一般的交换机上在实现VLAN时,还会创建另一张表,即VLAN配置表。该表包含了VLAN ID和交换机上所有端口的对应关系,即只要根据VLAN ID
查询该表就可以找到该VLAN包含的所有端口,这样在进行VLAN内广播的时候,就非常容易了。
2.二层交换原理
因为交换机有多个端口,可直接连接主机或其他交换机。当数据帧发送到交换机所连接的主机时,交换机就可以根据帧中的目的MAC地址直接把数据从
对应的端口上发送到所连接的主机上。如果数据发送到本交换机所连接的其他交换机上的主机时,则本交换机先把该数据帧发送到连接对应交换机的端口上,
然后再由那台交换机根据目的MAC地址从对应端口上发送到目的主机上。
总体来说,二层交换原理和网桥的数据交换原理查不多,具体见下图。不同的只是现在的交换机端口通常不是连接集线器,而是直接 交换机和主机,所有在
每个端口所连接的物理网段中也采用数据交换方式,而不是采用集线那样的复制类型的广播方式。下面进行具体的解析。
1)当交换机从某一个端口受到一个数据帧后,先读取帧头部的源MAC地址,并与自己缓存中的映射表 (CAM表)进行比较,如果没有
找到,则在CAM表中添加一个该源MAC地址与发送该帧的源端口映射表项。这就是交换机的MAC地址自动学习功能。
2)如果在CAM表项查到了帧中源MAC地址,则继续查看是否有帧中目的MAC地址所对应的映射表项。如果有,则直接把该帧转发
到目的MAC地址节点所连接的交换机端口,然后由该端口发送到目的主机。
3)如果在交换机CAM表中没有找到帧中目的MAC地址所对应的表项,则把该数据帧向源端口外的其他所有端口上进行泛洪。
4)当MAC地址与帧中目的MAC地址的主机接收了该数据帧后就会向源主机产生一个应答帧,交换机获取该应答帧后从其中的源MAC地址
中获取了对应的MAC地址和所连接端口的映射关系,并添加到CAM表中。这样下次再有MAC地址为这个MAC地址的帧发送时交换机就可以直接
从CAM表中找到对应的转发端口,直接转发,不用再泛洪了。