程序员社区

交换机

交换机是局域网的重要组成部分,是分割冲突域、实现单播的关键,了解交换机的工作原理,就显得尤为重要

下面的内容全部不涉及vlan tag,vlan后续会讲

MAC地址表

前面的文章介绍过交换机的由来和作用,这里不再赘述。我们讲一下交换机最重要的一个东西-MAC地址表

MAC地址表

MAC地址表是交换机维护的,用来根据接收到的数据帧的destinationMAC,在MAC地址表内查找对应的端口号,然后把数据帧从这个端口号发送出去

在这里插入图片描述

交换机上电启动后,MAC地址表一片空白,无任何动态表项(可以利用断电擦除交换机的MAC地址表),好在交换机可以学习,如何学习呢?

MAC地址表学习过程

交换机的任意端口接收到以太网帧(不管是ARP、ICMP还是IP),首先学习帧头的源MAC

  • 如果源MAC地址在MAC地址表中不存在,就会把源MAC和此端口号记录到MAC地址表(必须保证MAC地址表还有空间,如果空间满了是不会存入的,也不会替代,这和ARP缓存表还不一样),并启动一个定时器

  • 如果源MAC在MAC地址表中存在,则会把旧的删除,添加新的mac-port,并启动一个定时器

  • 如果在定时器时间内没有任意端口接收到源MAC是此MAC的话,则该表项会被删除

切记:交换机是通过源MAC地址学习port

以太网帧转发过程

交换机的任意端口接收到以太网帧,交换机根据目的MAC地址,匹配MAC地址表

  • 匹配到MAC地址表的一个表项,把数据帧从对应的端口发出去

  • 没有匹配到表项,把数据帧从所有的端口(除了接收到此帧的端口)发出去,称为泛洪

  • 由于“FF:FF:FF:FF:FF:FF”是广播MAC,永远不会出现在源MAC字段(人为构造的数据帧是可以),也就不会被交换机学习到(为什么?因为交换机是通过源MAC学习的),所以目的MAC为“FF:FF:FF:FF:FF:FF”的数据帧无法被交换机匹配到,只能泛洪,此乃广播

切记:交换机是通过目的MAC地址转发数据帧的

泛洪报文与广播报文

广播报文

广播报文是源主机为了把数据帧发送给网段内的所有其他主机,利用交换机不会学习“FF:FF:FF:FF:FF:FF”的MAC地址,设置数据帧的目的MAC为“FF:FF:FF:FF:FF:FF”,以泛洪的形式发出去,“FF:FF:FF:FF:FF:FF”称为广播MAC地址

泛洪报文

泛洪报文是源主机想把数据帧单播给目的主机,但是交换机接收到此帧后,在MAC地址表内匹配不到此目的MAC,只能复制多份,从除了接收到此帧的端口以外的所有端口发出去。虽然其他主机都能收到,但是由于目的MAC未变,所以还是只有目的主机会接收,其他主机则丢弃

总结

  • 广播报文是源主机主观地,为了广播给所有除了主机以外的其他主机,利用交换机不会学习广播MAC地址“FF:FF:FF:FF:FF:FF”,以泛洪的形式从其他所有端口发出去。而所有收到的主机,由于目的MAC是广播MAC地址和目的IP是广播IP地址,也全部会接收处理

  • 泛洪报文是源主机知道目的MAC,为了单播给目的主机,但是交换机由于MAC地址表内没有匹配表项而造成地,被动地,以泛洪的形式从其他所有端口发出去。而所有收到的主机,由于目的MAC是目的主机的MAC地址,只有目的主机接收处理,其他主机则丢弃

  • 广播报文和泛洪报文都是利用交换机的泛洪形式,也都能实现源主机想要的结果(广播报文确实让所有其他主机接收并处理,泛洪报文确实让只有目的主机接收处理),但是,泛洪报文对于交换机是一个巨大的处理负担,这就是通常所说的“广播风暴”

  • 造成广播风暴的原因很多,网络拓扑不稳定,造成MAC地址表超时时间大大缩短,很多表项因而被删除,造成流量因为MAC地址表空而被迫广播泛洪,所以保持二层网络稳定也可以避免广播风暴

泛洪攻击

泛洪攻击原理

交换机的MAC地址表的空间是有限的,比如说能存1万条,当1万条存满后,就无法学习更多的MAC地址了。攻击者就是利用这一点,伪造大量的不同源MAC的数据包,迅速占满交换机的MAC地址表,这样交换机就没有空间去学习真正的MAC了

然后,所有的正常通信的包,因为无法学习和匹配到MAC地址,都只能泛洪,从所有端口发出

这样攻击者就可以收到,原本单独发给别人的包

防范方法

家用交换机没什么方法,企业级交换机一般都内置端口安全功能,可以设置每个接口允许学习的最大mac地址数量,一般每个接口只会连接一台主机,那么可以设置最大学习mac数为3,给点富余。这样攻击者最多也只能占据3条mac表项,由于企业级交换机都是以万条起步,不会对交换机造成什么威胁

交换机的MAC地址表的映射关系

换机的二层转发是基于MAC地址表,交换机端口在接收到数据帧时,把源MAC地址和端口号的信息存入MAC地址表中,形成映射关系,那么这种映射关系,是一对一,还是一对多,或者是多对一呢

交换机-主机

如果一台交换机的所有端口只和主机相连,那么一个MAC地址对应一个端口,且MAC地址和端口都不会有重复,因为端口号是不会有重复的,世界上的每块网卡都有唯一的标识ID,就是MAC地址(排除人为构造数据帧)

交换机-交换机

如果局域网内主机太多,可能需要多台交换机,避免不了交换机与交换机相连,那么和其他交换机连接的交换机端口,接收到数据帧时,会怎样学习MAC地址呢?

在这里插入图片描述

A和C通信,A首先会发广播ARP请求,ARP请求经过交换机1,广播给B和交换机2,交换机2再广播给C和D,交换机2的端口G2/0/1收到ARP请求时,会把源MAC和端口号存入自己的MAC地址表,如上图

C给A回单播ARP响应,ARP响应到达交换机2时,交换机2在MAC地址表内查找目的MAC地址为mac_A的条目,发现转发的端口是G2/0/1,然后,就把ARP响应从G2/0/1发出去,发到了交换机1,交换机1通过自己的MAC地址表单播发送给A

在这里插入图片描述

B和C通信,B首先会发广播ARP请求,ARP请求经过交换机1,广播给A和交换机2,交换机2再广播给C和D,交换机2的端口G2/0/1收到ARP请求时,会把源MAC和端口号存入自己的MAC地址表,如上图

C给B回单播ARP响应,ARP响应到达交换机2时,交换机2在MAC地址表内查找目的MAC地址为mac_B的条目,发现转发的端口是G2/0/1,然后,就把ARP响应从G2/0/1发出去,发到了交换机1,交换机1通过自己的MAC地址表单播发送给B

总结

  • 交换机与交换机连接并不会影响通信
  • 同一个端口号有可能对应不同的MAC地址
  • 同一个MAC地址只能映射一个端口号

一个MAC地址为什么只能映射多个端口号?人为在不同的端口发同一个源MAC地址的数据帧呢?

因为交换机转发是根据MAC地址查找端口号的,如果同一个MAC地址有多个端口,如何确定发给谁,如何实现单播

即使人为构造,当存入MAC地址表时,也会先查找MAC地址表是否已经存在这个MAC地址,如果存在,就会更新,而不会添加另一条相同MAC地址的条目,即使端口号不同


赞(0) 打赏
未经允许不得转载:IDEA激活码 » 交换机

相关推荐

  • 暂无文章

一个分享Java & Python知识的社区