交换机转发原理

原理概述
MAC地址表是交换机的一个核心组成部分,交换机主要是根据MAC地址表来进行帧的转发的。交换机对帧的转发操作行为一共有3种:泛洪( Flooding)转发(Forwarding)和丢弃( Discarding)。关于这3种转发操作行为的具体含义在此不再赘述。


在不涉及VLAN的情况下,交换机的转发原理可以概括地描述为:

(1)如果进入交换机的是一个单播帧,则交换机会去MAC地址表中查找这个帧的目的MAC地址,如果查不到这个MAC地址,则交换机将对该帧执行泛洪操作;如果查到了这个MAC地址,则比较这个MAC地址在MAC地址表中对应的端口是不是这个帧进入交换机的那个端口,如果不是,则交换机将对该帧执行转发操作,如果是,则交换机将对该帧执行丢弃操作。

(2)如果进入交换机的是一个广播帧,则交换机不会去查MAC地址表,而是直接对该帧执行泛洪操作。

(3)如果进入交换机的是一个组播帧,则交换机的处理行为比较复杂。

每当IP模块收到上层应用的加入组播组的请求之后,IP模块就会向数据链路层通告,通告的时候携带了组播组的IP地址,于是数据链路层就会把IP地址进行适当的变换变换的结果就是一个组播MAC地址,于是数据链路层把这个组播MAC地址插入自己的接收列表里面,以后每当有数据帧到来的时候,数据链路层就会把数据帧的目的MAC地址跟接收列表里的每项内容进行比较,遇到任何匹配的一项就接收
下来,并向IP层传送。
数据链路层如何区分单播MAC地址跟组播MAC地址?一般情况下单播MAC地址的最高字节的最低比特为0,而组播MAC地址的最高字节的最低比特为1

数据链路层做一个IP地址跟组播MAC地址的影射,这个影射是怎样的?

比如

扫描二维码关注公众号,回复: 13113637 查看本文章

IP模块告诉数据链路层软件,自己加入了一个组播组224.10.10.10,则数据链路层形成一个MAC地址01--00--5E--0A--0A--0A(取组播IP地址低23位,高位为上面介绍的规则)并加入接收地址列表中,

交换机根据什么创建组播转发项,并对组播转发项的出口集合做出修改?

回忆单播的情况下,交换机是根据学习来获得单播转发表的,在组播情况下,学习能否奏效?其实在组播情况下,学习是不行的,因为在单播情况下的学习是针对数据帧的源MAC地址进行的,而组播MAC地址不可能出现在数据帧的源MAC地址位置上(组播MAC地址出现的唯一位置就是数据帧的目的MAC地址),所以根本无法学习。这时候我们必须想一些其他办法来解决该问题,这些办法就是二层组播协议(IGMP)。

交换机分析每个接收到的组播数据帧(IGMP加入消息是以组播方式发送的),看该数据是否是一个IGMP加入消息,如果是,则从消息中就可以知道发出该消息的主机想加入的组播组,根据该组播组的IP地址形成组播MAC地址,并把接收到该消息的端口加入出口列表,这样一个组播转发项就创建完成了。 完成之后,交换机把刚才拦截的IGMP消息在不加改变的转发出去。这样不停的窥探,交换机就可以掌握网络上的组播成员情况,并反映在自己内部转发表里,以后就根据创建的组播转发表来进行数据的转发

交换机具有转发帧的能力,同时还具有MAC地址学习能力。当一个帧进入交换机后,交换机会检查这个帧的源MAC地址,并将该MAC地址与这个帧进入交换机的那个端口进行映射,然后将这个映射关系作为一个动态地址表项存放进MAC地址表。MAC地址表是一张动态的表,每个表项在创建或刷新时,都会设定并维护一个默认是300s的生存期(也称为老化周期)。一个MAC地址表项如果超过了生存期,则该表项会立即被自动清除。MAC地址表中的表项分为动态表项和静态表项,前者是交换机通过动态学习过程创建的,后者是通过手工配置创建的。静态表项不存在生存期的概念,并且其优先级高于动态表项:对于一个特定的MAC地址,如果手工配置了关于它的静态表项,则MAC地址表中将不会再出现关于它的动态表项。


如果两台主机之间通过交换机相连,那么其中一台主机在向另一台主机发送数据帧的时候,会首先在自己的ARP缓存表中查找目标主机的MAC地址。如果ARP缓存表中不存在目标主机的MAC地址,则源主机会以广播帧的形式发送ARP请求报文来获取目标主机的MAC地址,目标主机接收到该ARP请求报文后,会以单播帧的形式回应一个ARP回复报文,告知自己的MAC地址。源主机在获取了目标主机的MAC地址后,一方面可利用该MAC地址向目标主机发起通信,另一方面会将目标主机的IP地址和MAC地址建立一个映射关系,并将此映射关系作为一个条目存放在自己的ARP缓存表中。ARP缓存表也是一张动态的表,关于其动态机制这里就不再赘述了。

猜你喜欢

转载自blog.csdn.net/Drizzlejj/article/details/113036050
今日推荐