[摘 要]交换机与集线器相比,交换机可以实现数据的单点转发,从而提高了网络传输速率和网络可利用带宽,交换机的单点转发主要依靠交换机对MAC地址表的维护和管理。本文从交换机MAC地址表的产生与管理角度,详细阐述交换机利用MAC地址表完成单点转发的实现。
[关键词]交换机 MAC地址 端口 老化时间 MAC地址表
1 引言
交换机能够判断数据帧的目的节点MAC地址,从而将数据帧从合适的端口发送出去,实现直接将数据帧发送到目的节点对应的端口,而不是像集线器那样以广播方式对所有端口发送数据。交换机的这种单点转发技术大大地提高了网络传输速率和网络可利用带宽。然而上述交换机对数据帧的单点转发是如何实现的呢?最关键的技术就是交换机通过对MAC地址的学习和MAC地址表的维护更新机制来实现。本文从交换机MAC地址表的产生与管理角度详细阐述交换机对数据帧单点转发的实现。
2 MAC地址表
交换机转发数据帧是根据数据帧的目的MAC地址进行转发的,交换机中存在一个MAC地址表,MAC地址表记录网络中MAC地址(MAC地址数量与交换机缓存有关)与端口的对应信息,某一数据帧需要转发时,交换机根据该数据帧的目的MAC地址查找MAC地址表[1],得到地址对应的端口,也即获知该MAC地址的设备是连接在交换机的哪个端口上,然后从该端口转发数据。交换机MAC地址表如表1所示,包含三项内容,交换机转发数据是根据这张MAC地址表进行转发的。
表1 MAC地址表

表中具体内容如下:
目的MAC地址:数据要发往的目的MAC地址;
交换机端口:MAC地址所在端口;
VLAN ID:端口所属VLAN(或MAC地址所属VLAN)。
3 交换机利用MAC地址表转发数据过程
如图1所示,计算机PC1(MAC地址为:70-71-BCAE-32-80,为方便书写简写为M1)要发送数据帧给PC3(MAC地址简写为M3),数据帧在交换机的转发过程为:

图1 交换机MAC地址表
PC1构造一个包含如下字段的数据帧(为了便于说明,省去数据帧中部分内容),如图2所示。

图2 简化的数据帧
M3表是PC3的 MAC地址,M1表示 PC1的 MAC地址,PC1将构造的数据帧发送到交换机,交换机接收到这个数据帧以后,读出该帧的目的MAC地址M3,并利用M3作为目标查找交换机MAC地址表,得到与M3匹配的端口号是E0/9(E表示以太端口,0表示第0个模块,9表示第9个端口),然后就将数据帧从E0/9发出去。
4 交换机MAC地址表的产生
交换机MAC地址表是交换机内部的MAC地址与端口信息的资料中心,那么交换机MAC是如何产生的呢?这主要是由交换机的地址学习功能[2]实现的。我们可以回想一下,当把计算机随意接在交换机的任意一端口上时,交换机的MAC地址表中并没有该计算机的MAC地址,此时并不能接收数据实现通信,过一会,该计算机就可以通信了。在这段时间里,交换机已自动学习该计算机的MAC地址,加入MAC地址表,配置好了通信条件。交换机对MAC的学习是基于源地址的学习。下面详细论述交换机的MAC地址学习过程。
当计算机刚联接交换机时最初交换机的MAC地址为空,如图3所示,如果有数据需要转发,例如主机PC1发送数据帧给主机PC3时,此时,在MAC地址表中没有记录,交换将向除E0/3(注意:PC1位于端口E0/3)以外的其它所有端口转发,在转发帧之前,它首先检查这个帧的源MAC地址M1,并记录与之对应的端口(E0/3),于是交换机生成(M1,E0/3)这样一条记录,并加入到MAC地址表内。如图4所示,正是基于上述情况,我们说交换机是通过识别数据帧的源MAC地址学习到MAC和端口的对应关系,并将其记录在MAC表中的。

图3 交换机初始MAC地址表为空

图4 基于系统日志的计算机网络用户行为取证分析系统模型
(2)随着时间推移,不断有数据发送,交换机的MAC地址表中不断加入新的MAC地址与端口的对应信息 [3]。直到MAC地址表记录完整为止。当MAC地址表形成后,如果主机PC1再次发送数据帧给主机PC3时,由于MAC地址表中已经记录了该帧的目的地址M3与对应端口号E0/7,交换机将直接将数据转发到E0/7端口,不再向其它端口转发数据帧。
综上所属,交换机MAC地址表产生及具体的数据转发过程如下:
①当交换机从某个端口收到一个数据帧,它先读取数据帧中的源MAC地址,这样它就知道源MAC地址的机器是连在哪个端口上的;
②再去读取数据帧中的目的MAC地址,并在地址表中查找相应的端口;
③如表中有与这目的MAC地址对应的端口,把数据帧直接复制到这端口上;
④如表中找不到相应的端口则把数据帧广播到所有端口上,当目的机器对源机器回应时,交换机就可以学习到目的MAC地址与哪个端口对应,在下次传送数据时就不再需要对所有端口进行广播了。
不断地循环这个过程,对于全网的MAC地址信息都可以学习到。
在上述过程,我们明白交换机通过将接收到的数据帧的源MAC地址及接收端口记录在地址表中来学习MAC地址。为了便于大家理解,上述过程中没有提及交换机在设置VLAN[4]情况下MAC地址的学习。交换机在配置VLAN后,MAC地址的学习有两种方式:
一种是共享VLAN学习,即SVL(Shared VLAN Learning)交换机将所有VLAN中的端口学习到的MAC地址表项全部记录到一张共享的MAC地址转发表内,从任意VLAN内的任意端口接收的数据帧都参照此表中的信息进行转发。
另一种是独立VLAN学习,即IVL(Independent VLAN Learning)交换机为每个VLAN维护独立的MAC地址转发表。由某个VLAN内的端口接收的数据帧,其源MAC地址只被记录到该VLAN的MAC地址转发表中,且数据帧的转发只以该表中的信息作为依据。
5 交换机MAC地址表的管理与维护
交换机MAC地址表的容量是有限的,交换机Buffer(缓存)容量的大小就决定了相应交换机所能记忆的MAC地址数多少。通常交换机只要能够记忆1024个MAC地址基本上就可以了,存储的MAC地址数量越多,那么数据转发的速度和效率也就就越高。
交换机为了实现对MAC地址表资源的有效利用,交换机提供了MAC地址老化功能。如果交换机在一段时间,设定的老化时间AGING TIME(s)从一个地址记录加入地址表以后开始计时,如果在老化时间内各端口未收到源地址为该MAC地址的帧,那么交换机就认为该设备已经离开网络,或者没有进行网络通信。这时,交换机会将这个设备的MAC地址从MAC地址表中删除,这样就实现了交换MAC地址表的及时更新。
6 结束语
上述自动生成的MAC地址表,都是指动态的MAC地址,是交换机通过自动学习获取的MAC地址,交换机通过自动学习新的地址和自动老化掉不再使用的地址来不断更新其地址表。
交换机的MAC地址表也可以手工静态配置,静态配置的地址是不会老化的MAC地址,别于一般的由端口学习得到的动态地址。由于MAC地址表中对于同一个MAC地址只能有一个记录,所以如果我们静态的配置某个目的地址和端口号的映射关系后,交换机就不能动态学习这个主机的MAC地址了,这对于某些相对固定的连接来说,可减少地址学习步骤,从而提高交换机的转发效率。配置静态地址可以实现MAC地址的受控接入,它能限制某个MAC地址在某个VLAN中只能在指定的端口接入,而在该VLAN中其它端口接入时将不能和网络通信。
交换机的MAC地址表和端口的相关信息,可通过交换机设置命令查询。