目录
关于MAC地址,拿我自己的笔记本电脑来举例子,是这样的B2-D1-6B-C3-46-F3
,一共12个字符,但是经常在书中被说成是48位的,这是为何?为什么这么说呢?每一个字符都代表4位,12乘以4正好是48位,为什么说一个字符代表4呢?这是怎么算的呢?是通过16进制算的,所谓的16进制就是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F
,其中每一个字符都可以通过四个二进制来表示,比如4,那就是0100,A是1010,F是1111。
MAC地址的前24位唯一标识符,也被称为OUI,通常这个这24bit可以判断网络设备厂商。
MAC地址分为三种:单播、广播、组播,如何区分呢?通过第二个16字符转换成内核之后的最后一位,如果最后一位如果是0的话,那就是单播,如果是1就是组播,如果全是1,那就是广播。
交换机的行为有三种行为:泛洪(flooding),转发(forward),丢弃(discrad)
交换机遇到广播报文时会直接泛洪,但面对单播数据帧时,就得视情况而定。当交换机收到的数据帧是源和目标mac一样时,这明显不合理,哪有自己给自己发数据帧的,交换机面对这种操蛋的行为会直接将此数据帧丢弃;很少有上述这种操蛋的数据帧,大多数都是正常的数据帧,交换机面对正常的数据帧时,会根据其目标mac查找mac地址表,如果表里面有对应的表项,则根据表项对应的端口转发,如果没有的话,就会泛洪。
MAC地址表相当于二层的路由表,是数据帧转发的依据,MAC地址表是物理接口与MAC地址的对应关系,此外,还有vlan信息,MAC地址的类型,如下所示:
<Huawei>dis mac-address MAC address table of slot 0: ------------------------------------------------------------------------------- MAC Address VLAN/ PEVLAN CEVLAN Port Type LSP/LSR-ID VSI/SI MAC-Tunnel ------------------------------------------------------------------------------- 5489-989e-2544 1 - - GE0/0/2 dynamic 0/- 5489-987d-5765 1 - - GE0/0/1 dynamic 0/- ------------------------------------------------------------------------------- Total matching items on slot 0 displayed = 2
1、交接机是通过源MAC地址进行学习的,原因也很简单,因为源MAC是确定的,而目的MAC是要通过泛洪才能找到的。
2、交换机学习MAC地址表往往是在正式通信之前,就是说,当我们ping某一个主机时,要先arp广播,在arp广播的过程当中,mac地址表就已经学习完成了。
3、一个交换机接口是可以学习多个MAC地址的,通常一个交换机的机连口学习到的MAC地址表比较多,我们可以通过查看接口下的MAC地址来判断下连了多少台主机,比如我就可以在我们公司的公网口查看一下,而且还可以通过端口安全做一个限制。
MAC地址表并不是无限大的,这一点很好理解,就像一个电脑,文件也不可能是无限大的,起码是受到硬盘和内存的限制。这一个电脑硬盘满了之后,还能继续向里面存东西吗?肯定是不能了。交换机也是这样,如果MAC地址表满了,那它还能继续学习吗?也不能了,不能了会发生什么现象呢?收到数据帧如何处理呢?倒是不会丢弃,面对这种未知单播包,交换机会泛洪呀,但是回复的数据包又无法学习到MAC地址表当中,因为已经满了,所以数据帧就无法转发出去,这就是二层泛红攻击的原理,我们可以通过端口安全,限制端口学习到MAC地址数量,这样MAC地址表就不会被打满。
MAC地址表默认是有老化时间的,默认是300s,这是可以调整的,所以想要二层泛红攻击有效的话得保证持续性,否则,MAC地址表内的地址失效了之后,之前的攻击效果也就没有了。
#老化时间的修改方法 mac-address aging-time 300
动态表项
动态表项是最常见的表项,就是动态学习到的表项,这个表项有什么特点呢?由于是动态的,所以它很不靠谱,有老化时间,而且down了之后,表项就消失了。
静态表项
静态表项是手工配置的,既然是手工配置的,那就不会老化,接口down或设备重启啥的还是会存在,也就是说手工配置的会写入到内存或内存当中。一条静态MAC地址只能绑定一个物理接口(验证一下),但一个物理接口可以绑定多个MAC地址(验证一下),这一点也很好理解。
[Huawei]mac-address static 5489-987D-5765 GigabitEthernet 0/0/1 vlan 1 [Huawei] Oct 14 2020 23:23:01-08:00 Huawei DS/4/DATASYNC_CFGCHANGE:OID 1.3.6.1.4.1.2011.5 .25.191.3.1 configurations have been changed. The current change number is 6, th e change loop count is 0, and the maximum number of records is 4095. #同样的MAC是不能绑定到其它接口上的,只能绑定在一个物理接口之上 [Huawei]mac-address static 5489-987D-5765 GigabitEthernet 0/0/2 vlan 1 Error: The same MAC address has been configured on another port. #通过dis mac-address可以查看上述做的配置 [Huawei]dis mac-address MAC address table of slot 0: ------------------------------------------------------------------------------- MAC Address VLAN/ PEVLAN CEVLAN Port Type LSP/LSR-ID VSI/SI MAC-Tunnel ------------------------------------------------------------------------------- 5489-98df-6666 1 - - GE0/0/1 static - ------------------------------------------------------------------------------- Total matching items on slot 0 displayed = 1 MAC address table of slot 0: ------------------------------------------------------------------------------- MAC Address VLAN/ PEVLAN CEVLAN Port Type LSP/LSR-ID VSI/SI MAC-Tunnel ------------------------------------------------------------------------------- 5489-988d-0dd0 1 - - GE0/0/10 dynamic 0/- 5489-9811-1111 1 - - GE0/0/4 dynamic 0/- ------------------------------------------------------------------------------- Total matching items on slot 0 displayed = 2
在某个接口上绑定了MAC地址之后,如果在其它接口上学到的话,就会丢弃,无论原接口是否是down的。
黑洞MAC
黑洞MAC其实十分简单,就是交换机一旦遇到我们配置黑洞MAC就丢弃,不转发
#必须得加上vlan信息,否则不生效 [Huawei]mac-address blackhole 5489-98DF-6666 vlan1 [Huawei]dis mac-ad MAC address table of slot 0: ------------------------------------------------------------------------------- MAC Address VLAN/ PEVLAN CEVLAN Port Type LSP/LSR-ID VSI/SI MAC-Tunnel ------------------------------------------------------------------------------- 5489-98df-6666 - - - - blackhole - ------------------------------------------------------------------------------- Total matching items on slot 0 displayed = 1 MAC address table of slot 0: ------------------------------------------------------------------------------- MAC Address VLAN/ PEVLAN CEVLAN Port Type LSP/LSR-ID VSI/SI MAC-Tunnel ------------------------------------------------------------------------------- 5489-98df-6666 1 - - GE0/0/1 dynamic 0/- 5489-988d-0dd0 1 - - GE0/0/10 dynamic 0/- -------------------------------------------------------------------------------
可以限制某个接口学习MAC地址的数量,而且还可以设置动作,当超过某个数量时如何处理,默认的处理的方法有丢弃和转发,默认是丢弃。
## 限制学习数量 mac-limit maximum 2 ## 处理动作,默认是丢弃 mac-limit acition {discard| forword} ## 还可以决定是否报警,默认是报警 mac-limit alarm {enable|disenable}
注意,如果数量已经到达上限,动作是转发时,会转发,但是不记录到MAC地址表项当中,以上配置当中的具休的MAC地址不会保存,超时就重新学习。
这个功能与port-limit是有冲突的,所以尽量不要同时存在,如果要同时存在的话,端口安全优先生效
int g0/0/1 port-security enable port-security max-mac-num 1 port-security port-action protect|restrict|shutdown
## 报警信息如下 [Huawei-GigabitEthernet0/0/1] Oct 17 2020 20:58:10-08:00 Huawei L2IFPPI/4/PORTSEC_ACTION_ALARM:OID 1.3.6.1.4.1 .2011.5.25.42.2.1.7.6 The number of MAC address on interface (6/6) GigabitEthern et0/0/1 reaches the limit, and the port status is : 1. (1:restrict;2:protect;3:s
解释一下动作,
还有一个补充功能,就是当地址因违规之后被down之后,过一段还能恢复
error-down auto-recovery cause port-security interval 30,30秒之后自动恢复,配置之后才生效,之前不生效。
注意:port-security所保存的mac地址,缺省不会被老化,但在接口down之后就会失效,怎么办呢?就出来了sticky功能,这个功能与上述功能相比,就是他将保存的安全MAC彻底保存下来了,接口断电重启之后,也不会失效。
int g0/0/1 port-security enable port-security max-mac-num 1 port-security mac-address sticky #可以手动在接口上通过sticky功能加MAC [Huawei-GigabitEthernet0/0/1]port-secur mac-add sticky 5489-98DF-6623 vlan 1
数据封装的过程
什么是BUM帧(BUM是广播、组播、未知单播的缩写),交换机遇到组播帧不一定会泛洪,如果配置了IGMP的相关配置,就可能不会泛洪。
MAC地址表满了收到数据帧怎么办呢?
报文的二层一定是封装MAC地址吗?不一定,只有以太网是这么做,二层除了以太网之外,还有ppp,还有帧中继、HDLC
IPV6的组播地址范围?
常见的组播MAC地址?常见的组播MAC:0180c2开头的,是生成树报文的MAC地址