- 什么是MAC?
MAC全称Media Access Control,是设备的唯一标识符,是由各个厂商向IETF等机构申请的。它有48Bit,通常被表示为12位的点分十六进制数,每个MAC地址的前6位(点分十六进制)代表OUI(Organizationally Unique Identifier),后6位由厂商自己分配。
例如,48Bit的MAC地址000000001110000011111100001110011000000000110100,表示为12位点分十六进制就是00e0.fc39.8034。前面的00e0.fc是IEEE分配给华为公司的OUI,后面的39.8034是由华为公司自己分配的地址编号。
- MAC、MAC地址表项、MAC地址表的关系是什么呢?
- MAC地址表是由一条条的MAC地址表项组成。MAC地址表项是由MAC、VLAN和端口组成。所以这里所说的MAC地址学习不到,是指的MAC地址表项学习不到。
- MAC地址表项是怎么学习的呢?
MAC地址表项是在交换机收到数据帧时,解析出数据帧的源MAC地址和VLANID,然后和接收数据帧的端口组合成的。如下图所示就是一条MAC地址表项。
- MAC地址学习不到,会导致什么问题?
问题1:MAC地址是用来指导报文进行单播转发的。通过目的MAC地址在MAC地址表中查找不到的报文,就会进行广播,就会占用带宽,浪费网络资源了。
问题2:设备收到报文,才会进行MAC地址学习。MAC地址学习不到,很可能是设备没有收到报文。设备没有收到报文,就意味着设备间的通信是不通的哟。
好了,跟小编一起来看看“MAC地址学习不到问题”的定位步骤吧。
- 第一步:判断端口是否收到报文
- 查看方法:先在用户视图下执行reset counters interface GigabitEthernet3/0/0命令清空端口的计数,然后再在用户视图下执行display interface GigabitEthernet 3/0/0查看入报文的统计计数是否为0。
江湖小贴士:在场景比较复杂的情况下,端口入报文计数不为0不表示端口就收到了指定MAC地址的报文哟。在这种情况下可以根据源MAC地址做流量统计,判断端口是否收到了指定MAC的报文。呵呵,如果条件允许,也可以直接在使用抓包工具进行抓包,判断端口是否收到了指定MAC的报文哟。
- 第二步:查看设备配置是否正确
- VLAN是否创建并加入端口。
- 查看方法:任意视图下执行display vlan vlan-id命令,查看VLAN是否存在并加入端口。
- 端口下是否配置了MAC地址不学习功能。
- 查看方法:接口视图下执行display this命令,查看是否存在mac-address learning disable配置。
- 端口下是否配置了MAC地址学习限制数功能。
- 查看方法:接口视图下执行display this命令,查看是否存在mac-limit maximum配置。
- VLAN下是否配置了MAC地址不学习功能。
- 查看方法:VLAN视图下执行display this命令,查看是否存在mac-address learning disable配置。
- VLAN下是否配置了MAC地址学习限制数功能。
- 查看方法:VLAN视图下执行display this命令,查看是否存在mac-limit maximum配置。
江湖小贴士:接口视图下执行display this命令,会看到很多配置,是不是很烦呢。小编教你一招,可以使用display this | include mac-address快速查看命令中含有mac-address的命令的。
- 第三步:查看端口是否被阻塞
- 查看端口是否被生成树协议阻塞。
- 查看方法:任意视图下,执行display stp brief命令查看端口的状态。
- 查看端口是否被LBDT或LDT环路检测协议阻塞。
- 查看方法:任意视图下,执行display loop-detection命令查看端口是否被LDT阻塞。在任意视图下,执行display loopback-detect命令查看端口是否被LBDT阻塞。
江湖小贴士:端口被阻塞,是否正常呢?这就要各位大侠根据组网确认一下,该端口是否需要使能破环协议或者环路检测协议了,如果确认需要使能并且阻塞端口也是正确的,那这个端口学习不到MAC地址也是正常的哟。
光说不练假把式,根据现象找出问题并解决问题才是真本事。那么现在就和小编一起,来“定位两个MAC地址不学习”的问题吧。
典型问题一:端口没有加入VLAN,导致MAC地址学习不到。
- 组网说明
- PC1和PC2属于同一个网段,在同一个VLAN10内,通过两台交换机进行通信。
- 问题现象
- PC1 ping PC2不通
- 交换机Switch1学习到了PC1的MAC地址
- 交换机Switch2没有学习到PC1的MAC地址
- 定位和解决
- 第一步:判断Switch2设备的GE0/0/2端口是否收到报文
- 哦?通过上图,发现端口入计数都是0, 看来是GE0/0/2端口没有收到报文才导致MAC地址学习不到呀,那到底什么原因导致的呢?还得进一步定位了。
- 第二步:查看设备配置是否正确
- 判断VLAN是否创建,并且端口是否加入VLAN。
- 有上图可以看出,VLAN10已经创建,但是GE0/0/2端口没有加入VLAN 10。这就是导致MAC地址学习不到的根本原因了。那就把GE0/0/2端口加入VLAN 10,再ping一下看看呢。
- 哈哈,可以ping通了,我们再来查看一下MAC地址表项。
- 哈哈,MAC地址也学习到了,问题搞定了。
典型问题二:端口被生成树协议STP阻塞,导致MAC地址学习不到。
- 问题现象:在VLAN100内,GE3/0/0端口学习不到MAC地址00e-fc01-0001。
- 定位和解决
- 第一步:判断该端口是否收到报文。
通过上图可以看到,端口有收到报文,但是端口收到的报文中,是否有源MAC地址是00e0-fc01-0001的报文呢?通过基于源MAC地址进行流量统计来判断一下了。
- 配置流策略。
- 把流策略应用到GE3/0/0端口。
- 查看是否有统计计数。
- 通过上图可以看到,基于源MAC地址00e0-fc01-0001的流量统计计数不为0,可见端口收到了报文,那MAC地址学习不到的原因具体是啥呢?我们接着分析。
- 第二步:查看设备配置是否正确
- 查看配置第1项:VLAN是否创建并把端口加入VLAN。
- 通过上图可以看出,VLAN 100已经创建并且端口GE3/0/0也已经加入VLAN100。
- 查看配置第2项和第3项:查看端口下是否配置了MAC地址不学习和MAC地址限制数。
- 通过上图可以看出,端口下没有配置MAC地址不学习和MAC地址限制数的功能。
- 查看配置第4项和第5项:查看VLAN下的配置是否配置了MAC地址不学习和MAC地址限制数。
- 通过上图可以看出,VLAN下没有配置MAC地址不学习和MAC地址限制数的功能。
- 配置检查完了,没有发现问题,那就进行第三步。
- 第三步:查看端口是否被阻塞
- 判断端口是否被STP阻塞。
通过上图可以看出端口被阻塞了。这可能就是导致MAC地址学习不到的原因,那我们把端口去使能STP试试呢。
可以看到MAC地址可以学习到了。这样就可以确认是因为端口被环路block,导致MAC地址学习不到,问题定位了。
至于端口被STP阻塞是否合理,则需要根据组网判断了。如果确认端口被阻塞是正确的,那端口MAC地址学习不到,也就不是问题了哈。
OK,学习两个典型问题的定位过程,对MAC地址学习不到的问题是否有了思路呢。本期小编的讲解也结束了,下期小编再带你了解一下MAC地址漂移的前因后果,前世今生,敬请期待吧。