TCP/IP协议专栏——MAC地址详解——网络入门和工程维护必看

以太帧格式

在这里插入图片描述


在这里插入图片描述

  1. 前导同步符:共8字节,由7个字节的前同步信号和一个分界符开始字节构成。
  2. DA/SA:共6个字节,前3个字节代表供应商代码,后3个字节代表厂商序列号。
  3. TPID:标记协议标识符,2个字节,值位16进制的8100。
  4. TCI:标记控制信息,2个字节,包括3个Bits的用户优先级(IEEE802.1P),1Bits的规范格式标识符(CFI),用于标识MAC地址是否规范,12Bits的VID,表示该帧所属的VLAN。
  5. 类型/长度:为类型时,表示是Ethernet II帧结构,类型取值大于1536,为长度时表示IEEE802.3帧结构。
  6. 数据区:为第三层协议,不支持VLAN标记时,长度为46-1514字节,
    支持VLAN标记时,由于增加了4个字节,长度为50-1518字节。
  7. FCS:是帧校验。

MAC地址简介

1、MAC 地址是硬件标识(Media Access Control Address)。
2、MAC地址长度为:6字节:48bit
3、通常用12位16进制数表示,每两个数之间用冒号隔开。如:00:D0:D0:C0:3F:A0就是一个MAC地址,
前6位16进制数00:D0:D0代表网络硬件制造商的编号,由IEEE分配;
后6位16进制数C0:3F:A0代表该制造商所制造的某个网络产品(如网卡)的系列号。
每个网络制造商必须确保它所制造的每个以太网设备都具有相同的前六位以及不同的后六位。

MAC表分类

1、MAC表包括软件表和硬件表。
2、MAC地址表的表项由MAC地址和VLAN ID唯一标识。
3、只要MAC地址和VLAN ID部分相同,就认为是同一个表项。 4、交换机维护着一张MAC地址表,MAC地址和交换机的端口一 一对应

MAC模块性能指标

主要性能指标
1、学习速率:例如1500个/秒;
2、 MAC表容量:即MAC表最多支持写入多少条MAC
3、老化时间精度: 若老化时间为Tage,则要求在1~2Tage内老化掉无效MAC地址
4、冲突链长度:MAC表为HASH表,并且HASH冲突链是有限的。若HASH链过短,则即使MAC表未满,也可能出现MAC地址无法添加到MAC表中。不同设备冲突链长度不同。

MAC地址表–软件表:

MAC地址表一般包含:
MAC地址、端口号(此MAC地址对应的端口)、Vlan ID(MAC地址对应的VLAN ID)以及其它MAC地址的状态和操作的相关标志。 软件MAC地址表项的相关标志有以下几种:
port:此MAC地址对应的端口,如gei_4/20。
vid:MAC地址对应的VLAN ID,如1502。
stc:静态标志,表示是否是手工添加的静态MAC。
per:永久标志,表示是否是手工添加的永久MAC。
toS:to-Static标志,表示是否是被固化的MAC地址。
srF:源地址过滤标志,表示是否对源MAC为该地址的数据帧进行过滤。
dsF:目的地址过滤标志,表示是否对目的MAC为该地址的数据帧进行过滤。
Frm:源或目的地址过滤标志,表示是否对源MAC或目的MAC为该地址的数据帧进行过滤。
Time:时间标志,表示此MAC地址在交换机上存在的时长,以“天:小时:分:秒”的形式表示。

MAC表–硬件表

L2user-table存放一些特殊的MAC地址,二层转发时,先查找L2user表,找不着再查找L2表。

L2表主要包括VLAN ID,MAC地址,目的、源MAC的hit位,优先级,CPU标志(如果置1则交CPU处理),L3(置1的话转三层),static_Bit(静态标记),module_ID(对应的逻辑端口号),mirror(端口镜像)等。

MAC表的作用

1、MAC表就是二层转发表,二层转发是靠MAC表来实现的
2、三层转发表的建立也需要MAC表作基础,当通过路由协议查找到下一条的IP地址后,再通过查找ARP表就可以查找到IP地址对应的MAC地址,再通过MAC表就可以查找到对应的出端口,从而建立了三层转发条目。
3、因为MAC地址是硬件的唯一标示,
那么以某个MAC地址为源MAC地址的数据包从交换机的某个端口进入交换机的话,那么我们就认为该MAC地址所代表的设备就下挂在交换机的该端口下面,学习该MAC地址,就相当于将该MAC地址在交换机的这个端口下进行了一个注册。

如果有一个数据包的目的MAC地址是该MAC地址的话,根据刚才注册的结果,就可以查到该MAC地址对应的端口,将该数据包发到这个端口就实现了对数据包的转发。通过对端口的转发实现对MAC的转发。

MAC地址分类 —

MAC地址表中的MAC地址分为三类:

1、动态MAC地址

1.1、交换机在网络中通过数据帧学习到的,当老化时间到来时会被删除。
1.2、当设备所连接的交换机的端口发生变化时,MAC地址表中相应的MAC地址和端口的对应关系也会随之改变。
1.3、动态MAC地址在交换机关电重启后会消失,需要重新学习。

2、静态MAC地址

2.1、通过配置产生的,不会被老化掉。
2.2、不管设备所连接的交换机的端口发生怎样的变化,MAC地址表中MAC地址和端口的对应关系始终不会改变。
2.3、静态MAC地址在交换机关电重启后也会消失,需要重新进行配置。

3、永久MAC地址

3.1、永久MAC地址也是通过配置产生的,不会被老化掉。
3.2、不管设备所连接的交换机的端口发生怎样的变化,MAC地址表中MAC地址和端口的对应关系始终不会改变。
3.3、永久MAC地址在交换机关电重启后不会消失。

MAC地址分类 二

1、MAC地址分为广播地址、组播地址和单播地址。
2、广播地址只有一个,即FF:FF:FF:FF:FF:FF;
3、组播地址的第一个字节最后一位为1(大部分); 常用的有:0x01005E(表示IPv4地址映射的组播MAC地址)
0x3333FF (表示IPv6地址映射的组播MAC地址)
0x0180C2 01:80:C2:00:00:00 (STP协议使用)
01:80:C2:00:00:01 (MAC control的PAUSE 帧使用)
01:80:C2:00:00:02(Slow protocl,LACP,OAM 使用)
0xC1
4、单播地址:(已知单播,未知单播)
5、网卡接收这3种地址的数据包:地址全1的广播包、目的地址和自己网卡地址一致的数据包、或者目的地址为跟自己的组播地址范围相同的数据包(如果这个网卡支持组播)。
6、MAC地址的六个字节中的最高有效字节中的最低有效位(b1)用来标识 Unicast和Multicast,即单播和多播,
次最低有效位(b2)则用来标识 universally administered address 和 locally
administered address, universally administered address
是指烧录在固件中由厂商指定的地址,也就是大家通常所理解的MAC地址, locally administered address
则是指由网络管理员为了加强自己对网络管理而指定的地址, 由定义可知,locally administered
address的U/L位要设置成1.所以,要表示locally administered address的话,那MAC
地址的第一个字节应该是 0x02, 因此不能够把MAC地址改成其它已经被厂商占用的 universally administered
address了。

组播MAC地址计算

1、在IP分类中,D类IP地址用于组播MAC。
2、在TCP/IP中,最常用的v4组播MAC地址的前24位固定为01005e,第25位固定为0,后23位由IP地址的后23位复制得出。
3、在D类组播IP中有5位未用,也就是说组播IP和组播MAC的映射并不唯一, 4、每一个组播MAC最多可映射对应32个组播IP。
5、备注:映射涉及到2进制和16进制之间的转换:4位2进制对应一位16进制:000000001(二进制)——>01(16进制)

图:组播IP/MAC映射示意图

在这里插入图片描述

MAC地址学习

以下报文不学习源MAC:
源MAC为全F的报文
源MAC为组播MAC的报文
源目的MAC一致的报文
源目的MAC中存在全0的MAC的报文
源目的MAC中存在交换机自身MAC的报文

1、MAC地址学习只学习单播地址。
2、对于广播地址、组播地址和全0地址不进行学习,因为地址学习的目的是为了转发,这些地址对于转发来说是没有意义。
3、而且组播地址只能作为目的MAC地址不能作为源MAC地址。
4、MAC地址学习是学习的报文中的源MAC地址,而转发是根据的目的地址进行转发的。
5、之所以学习源MAC地址,是因为当报文从一个端口进来时,交换机主观上认为源MAC地址对应的网络设备与入端口当前是相通的,因此,从该端口出去的报文理应也可达该源MAC地址对应的网络设备。
6、在MAC地址学习时,它首先会判断报文类型是单播还是组播或广播地址,即判断源MAC地址的从低位到高位的第40位是否为1,如果为1,则为组播MAC地址,不学习,直接进入转发,否则继续判断。
如果是单播,首先,根据VLAN ID和源MAC地址查找MAC地址表,如果MAC地址表中没有该地址,则学习并将其添加到MAC地址表中;若匹配到,还需要判断入端口是否改变,若不变,则更新老化标志(老化时间),继续转发,若变化了,即发生了MAC地址漂移(station movement)。

交换机的源MAC地址学习分为CPU学习和芯片自学习两种方式。
芯片自学习的方式是芯片自己添加芯片的转发表。
CPU学习是指芯片判断出MAC是新MAC时不主动添加转发表,而只是将新的地址消息上报给CPU,由CPU来决定是否需要添加转发表。

现在的芯片都是具有处理速度很快的ASIC实现,芯片学习MAC地址快、效率高。
缺点是是可控性稍差,不好实现对MAC学习进行有效的控制。
CPU学习可以通过软件算法灵活控制,但受CPU速率和总线速率的制约,效率稍差。
注意:MAC地址学习是学习数据包的源MAC地址。

当打上VLAN标签后,芯片开始检查源MAC地址,如果有必要则开始执行学习操作。
首先,根据VLAN ID和源MAC地址查找MAC地址表,
如果MAC地址表中没有该地址,则将其添加到MAC地址表中;
如果地址表中有与所要查找{MAC+VLAN ID}匹配的表项,则进行端口迁移的检查。
如果匹配的表项中,端口不一致,则说明端口发生了漂移,否则为已知地址不予学习。
注意:端口迁移仅对动态MAC地址,如果是静态地址则丢弃并上报CPU。端口漂移是指VLAN
ID和MAC地址一样,而端口不一致时的情况。当成功学习到地址后需要更新老化标志位。

MAC 表同步

在整个交换系统中,MAC地址表存在于三个地方
1、主控板上CPU-MAC地址表
2、线卡上CPU-MAC地址表 (没有使用,因为线卡CPU处理速度有限,所以 没有启用,而以主控板CPU代替)
3、线卡上芯片MAC地址表

1、芯片MAC地址表通过MAC地址学习机制得到,
2、线卡CPU MAC地址表和主控板CPU MAC地址表之间依靠软件的同步机制与芯片MAC地址表来进行同步得到。
3、MAC地址的同步采取“先统一后分散”的方法, 即各线卡学习到的MAC地址发送到主控板,而后由主控板向各线卡同步。

一般的来说,交换机上有两个MAC表,一个是芯片MAC,一个是 CPU MAC表。
芯片的MAC表是为了进行快速二层转发用的。
CPU的MAC表的主要作用是为了建立三层转发表用的。

如果两者不同步:
1:MAC条目在芯片MAC表存在,CPU MAC表中不存在 会导致CPU向外发包不正确,同时也会影响三层转发表的正确建立,就会导致三层包不能转发,或者需要CPU进行软件转发,会增加CPU负担,同时也会影响转发效率。
2:MAC条目在CPU MAC表存在,芯片MAC表不存在 会导致CPU发包时会发向错误的端口,以及建立错误的三层转发条目,芯片会将三层包进行错误的转发。
对于分布式的交换机,MAC表的同步不仅是芯片MAC表和CPU MAC表的同步,同时还涉及到各个线卡的MAC表的同步。如果各个线卡之间不同步的话,可能导致二层转发出现问题,或者是不通,或者是需要在VLAN里做广播,相当于降低了带宽,影响转发效率。

MAC地址固化

MAC地址的固化就是通过控制命令将MAC表中已经存在的动态MAC地址全部转化成静态的MAC地址,并且允许其它的不存在的MAC进行继续学习。
其中芯片MAC地址表通过MAC地址学习机制得到, 线卡CPU MAC地址表和主控板CPU MAC地址表之间依靠软件的同步机制与芯片MAC地址表来进行同步得到。

MAC地址表中的每个表项一般有如下内容:

在这里插入图片描述


MAC ADDR:48位的MAC地址
VLAN ID:拥有该MAC地址的主机或设备所属的VLAN
PORT:该MAC地址所属的端口
HIT:用于MAC地址老化的标志
STATIC:是否静态MAC地址的标志(交换机的MAC一般标识为静态的)
SRC DIS(SOURCE DISCARD):是否源MAC地址过滤的标志
DST DIS(DESTINATION DISCARD):是否目的MAC地址过滤的标志
L3:是否进行三层转发的标志,L3=1进行三层转发,L3=0进行二层转发

MAC 地址保护

交换机MAC表可能遭受的两种常见攻击:

1:大量MAC地址瞬间涌入交换机,对CPU的处理能力和CPU的安全保护措施形成很大的冲击。同时还可能将MAC表的空间全部占用,导致MAC表的溢出,影响新的正常的地址的学习和影响数据帧的转发。

2:MAC欺骗。欺骗者在不同的端口发一个被欺骗者MAC地址为源地址的包,交换机认为是被欺骗者的MAC地址发生了正常的迁移而去学习,从而转发表中MAC和PORT的对应关系发生了改变。

MAC漂移

1、MAC漂移只针对动态MAC地址而言,发生的条件是相同的MAC地址,相同的VLAN,不同的PORT。
2、在MAC学习过程中学习到的MAC地址都是动态的,在MAC表中形成一个相应的表项。
3、表项中包含了MAC地址、VLAN ID和端口。
4、端口表明这个MAC地址是从哪一个端口学习到的,以及当这条表项被匹配到时,报文将从这个端口转发出去。
5、当某个MAC地址在一个端口出现并被学习之后,又在同一个VLAN的另一个端口出现,就会发生MAC漂移。

MAC添加

MAC老化

总结;
1、在老化时间设置外,学不到同一条MAC表项,则此MAC会老化,从MAC表项中删除。
2、在老化时间设置内,又学到同一条MAC表项,则此MAC在MAC表项的时间累加。

老化时间设置:
1、默认老化时间300s
2、0 为不老化
3、设置范围:60-450s

默认:MAC老化时间小于ARP老化时间
1、当主机上线后,到MAC老化时间后从表项老化消失
2、然后mac老化后会触发设备发送ARP单播请求报文,然后收到主机回应的ARP_Replay报文,ARP表项时间从0计时ARP表项更新,重新学到MAC,MAC表项时间从0计时,MAC表项更新。
3、设备收到ARP请求或应答会更新ARP表项时间从0开始计时,MAC
表项中时间累加(MAC未老化时),此时,MAC老化时间是从最后一次学习MAC然后经过老化时间后再老化。

如果设置 MAC老化时间大于ARP老化时间
1、ARP老化,触发设发送ARP请求,
2、设备收到ARP应答,重新学到同一条ARP,ARP时间从0计时,在MAC老化时间内又学到同一条MAC,MAC表项中的时间累计叠加

MAC过滤

1、SMAC过滤
2、DMAC过滤
3、双向MAC过滤
4、全0,全F 的过滤命令执行不了——不支持
5、MAC非法帧过滤:非法MAC:全0,全F ;特定MAC:0001:005e:0000;0002:005e:0000;前6位:0efc00的MAC
6、配置MAC过滤之前,去使能静态mac漂移:mac-static-move disable,过滤功能才能生效
7、对VLAN递增的MAC地址的过滤

MAC更新

MAC删除
MAC数量限制
非法MAC

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340