下面这篇短文是中兴的工程师给我的,重点是介绍ZTE二层交换机中的FID
==========
以太网交换机中FID的概念和作用
本文介绍以太网交换 机中的一个新的概念FID,首先我们回顾一下通过vlan进行端口隔离的配置,及存在的一个问题,最后通过FID的设置解决这个问题。
还 记得以前介绍的vlan端口隔离配置吗?
创建vlan1, 包含1, 24口
创建vlan2, 包含2, 24口
...
创 建vlan23, 包含23,24口
创建vlan100,包含1,2,...,23,24口
这样配置以后,端口1,2,...,23之间 是隔离的,不能互相访问,24口上行,可以和1-23通信
但实事证明存在这样一个问题,24口在转发用户下行数据时是广播方式转发到 1-23口。抓包可以发现端口1用户的下行数据在2-23口都能抓到包(上行未能抓到),说明隔离的是上行数据,下行却变成了一个HUB。
那么为什么会出现这种情况能?让我们来分析一下。
二层交换机有这样一张转发表:mac -> port,对于每个vlan而言,每个vlan都有一张这个表
当PC1(端口1下的PC)发出上行包后,交换机的vlan1学到如下的一个条目
vlan1 mac -> port
PC1-mac -> 1
当上行口三层设备(R1)回复PC1 的数据时,交换机的vlan100学到如下条目
vlan100 mac -> port
R1-mac -> 24
当它在vlan100中要转发给PC1时,vlan100转发表中只有这样的条目
vlan100 mac -> port
R1-mac -> 24
可见并没有满足PC1 mac地址的条目,于是它在vlan100里的端口(1-23口)广播。
当PC1第二个数据包发出后,下行时是否还会在1-23口广播 呢?答案是YES,重复上面的过程,始终无法在vlan100中形成PC1的mac条目,所以以后每次通信,下行是都会在每个端口广播。
于 是,我们以前用的用户端口隔离的配置,并没有真正意义上起到端口隔离的作用——仅仅上行数据隔离,下行就变成了一个HUB(其实上行也是广播方式,只不过 只广播到一个24口)。
那么怎样解决这个问题呢?先介绍一个新的概念——FID,即Filtering Database Identifier,是指相同FID的VLAN可以共享转发表的条目。
FID并不是新鲜事物,在交换机内部其实一直 都有fid,大多数厂家并不会提供fid的设置,而是缺省的让fid=vid。
在公司自研的以太网交换机中,提供fid的设置,现在用 2826E举例说明,fid的作用。
首先在2826E上配置端口隔离(注意先把缺省vlan1里的端口删掉)
set vlan 1 add port 1,24 untag
set vlan 2 add port 2,24 untag
...
set vlan 23 add port 23,24 untag
set vlan 100 add port 1-24 untag
!
set vlan 1 enable
set vlan 2 enable
...
set vlan 23 enable
set vlan 100 enable
!
set port 1 pvid 1
set port 2 pvid 2
...
set port 23 pvid 23
set port 24 pvid 100
此时show vlan可以看到每个vlan的fid都缺省的等于各自的vid。
这时通过sniffer抓包可以发现,1口的下行包,在2-23口都能被抓到, 也就如同之前一样,下行数据在1-23口广播。
我们再增加一条命令set vlan 1-23 fid 100,再抓包,发现1口的下行包,在2-23口都抓不到了,下行数据不再广播到每个端口了,是什么原因呢?这就不得不研究fid的作用了。
前面提到相同fid的vlan可以共享转发表的条目,那么又是如何实现的呢?请看
zte(cfg)#show fdb 可以看到这样一张表
MacAddress Fid PortId Type
----------------- ---- ------ -------
00.08.02.d7.a0.81 4 1 dynamic
...
排 除type不管,这张表由mac,fid,port构成
当PC1(端口1下的PC)发出上行包后,交换机学到如下的一个条目(此时 vlan1的fid已设为100)
mac, fid -> port
PC1-mac, 100 -> 1
数 据在vlan1广播,从24口出去
当上行口三层设备(R1)回复PC1的数据时,根据fid规则,交换机学到如下条目
mac, fid -> port
R1-mac, 100 -> 24
当它在vlan100中要转发给PC1时,fid相同 的vlan共享如下条目
mac, fid -> port
PC1-mac, 100 -> 1
R1-mac, 100 -> 24
于是从1口单播出去
PC1第二次发包,查找已经形成的fdb转发表,从24口单播出去,再由1口单播 回来。
到了这里,我突然想到,如果端口2的PC2发包,形成如下fdb表
mac, fid -> port
PC1-mac, 100 -> 1
PC2-mac, 100 -> 2
R1-mac, 100 -> 24
那么PC1和PC2还能隔离吗?
PC1的数据从端口1收到后,在vlan1里转发,虽然vlan1共享了 fid=100的转发表,但PC2所在的端口2不属于vlan1,所以仍然不会转发到端口2去。
回过头再看,fid缺 省时等于vid的情况,经过不断的学习,交换机内部最终形成这样一张fdb表
mac, fid -> port
PC1-mac, 1 -> 1
PC2-mac, 2 -> 2
...
PC23-mac,23 -> 2
R1-mac, 100 -> 24
由于fid不同,每个vlan都只享有与自己fid对应的一个条目,和本文最先说的每个vlan的转发表其实是一会 事。不管交换机是否可以设置fid,fdb这张表在交换机内部始终存在着的,而且交换机是依照这张表进行转发的。
通过 对fid的研究,我们对以太网交换机有了更深入的了解,让我们把fid的概念和作用总结一下:
1、RFC 802.1Q中关于FID的原文
Filtering Database ID (FID)
Addressing information that the device learns about a VLAN is stored in
the filtering database assigned to that VLAN. Several VLANs can be
assigned to the same FID to allow those VLANs to share addressing
information. This enables the devices in the different VLANs to
communicate with each other when the individual(个别的) ports have been
configured to allow communication to occur. The configuration is
accomplished using the Local Management VLAN Forwarding
Configuration screen. By default a VLAN is assigned to the FID that
matches its VLAN ID.
2、交换机内部存在这样一个数据库filtering database,存放着每个vlan的mac地址信息,fid是这个数据库的字段之一
3、相同fid的vlan共享着mac地址信息,使得个别 的端口可以和其它vlan的端口互相通信(即我们常做的vlan端口隔离的上行口,可以和其它端口通信)
4、每个vlan都有一个fid属性,缺 省情况下,vlan的fid和它的vid相同
5、在2826E等提供fid设置的交换机下,通过fid的灵活设置,真正意义上做到了vlan的端 口隔离,有效避免了在交换机端口的广播
6、Fid在上面的例子中,可以不等于100,经实验等于110或其它值也是可以的
到此, 我查阅了资料和通过实验对FID的概念和作用进行了一些研究,可能带有个人观点,不当之处请各位指出。