VID就是VLAN ID,这个意思很明白.
PVID就是PORT VID,当一个PORT属于多个VLAN时,当它收到不带TAG的数据时,
它 就给数据加上TAG,其中VID=PVID.
FID就是FILTERING ID.在SHARE LEARNING环境中,共享地址学习的VLAN用一个FID来标识.

下面这篇短文是中兴的工程师给我的,重点是介绍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的概念和作用进行了一些研究,可能带有个人观点,不当之处请各位指出。

fid解释的更多相关文章

  1. matlab fscanf用法

    matlab fscanf用法 matlab中的fscanf的用法如下: A=fscanf(fid,format)[A, count]=fscanf(fid,format,size) [A, coun ...

  2. Drupal 7.31 SQL注入漏洞利用具体解释及EXP

     有意迟几天放出来这篇文章以及程序,只是看样子Drupal的这个洞没有引起多少重视,所以我也没有必要按着不发了,只是说实话这个洞威力挺大的.当然.这也是Drupal本身没有意料到的. 0x00 首 ...

  3. 详解MySQL中EXPLAIN解释命令

    Explain 结果解读与实践   基于 MySQL 5.0.67 ,存储引擎 MyISAM .   注:单独一行的"%%"及"`"表示分隔内容,就象分开“第一 ...

  4. Linux tcpdump命令具体解释

    简单介绍 用简单的话来定义tcpdump,就是:dump the traffic on a network,依据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump能够将网络中传送的数据 ...

  5. Nutch的nutch-default.xml和regex-urlfilter.txt的中文解释

    nutch-default解释.xml <?xml version="1.0"?> <?xml-stylesheet type="text/xsl&qu ...

  6. server.htaccess 具体解释以及 .htaccess 參数说明

    .htaccess文件(或者"分布式配置文件")提供了针对文件夹改变配置的方法. 即.在一个特定的文档文件夹中放置一个包括一个或多个指令的文件, 以作用于此文件夹及其所有子文件夹. ...

  7. ZIP压缩算法详细分析及解压实例解释

    最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据 ...

  8. 说说BPM数据表和日志表中几个状态字段的详细解释

    有个客户说需要根据这些字段的值作为判断条件做一些定制化需求,所以需要知道这些字段的名词解释,以及里面存储的值具体代表什么意思 我只好为你们整理奉上这些了! Open Work Sheet  0 Sav ...

  9. 【完全开源】知乎日报UWP版:项目结构说明、关键源代码解释

    目录 说明 项目结构 关键代码 演示视频 说明 上一篇博客将源码放出来了,但是并没有做过多的介绍,所以如果自己硬看可能需要花费很长的时间,尤其这些代码并不是自己写的.项目不算复杂但是也不算简单,这篇文 ...

随机推荐

  1. Nowcoder Hash Function ( 拓扑排序 && 线段树优化建图 )

    题目链接 题意 : 给出一个哈希表.其避免冲突的方法是线性探测再散列.现在问你给出的哈希表是否合法.如果合法则输出所有元素插入的顺序.如果有多解则输出字典序最小的那一个.如果不合法则输出 -1 分析 ...

  2. unittest详解(七) 自动生成测试报告

    用例执行完成后,执行结果默认是输出在屏幕上,其实我们可以把结果输出到一个文件中,形成测试报告. unittest自带的测试报告是文本形式的,如下代码: import unittest if __nam ...

  3. 原生Js_制作简易日历

    javascript制作简易日历,月份信息已经放在一个数组中,在<script>...</script>中编写代码实现其功能 实现步骤 a) 获取需要操作的dom对象 b) 在 ...

  4. bootstrap editable有默认值

    function listEditor(data,productCode) { $('#tab1').bootstrapTable('load', data); $('#tab1').bootstra ...

  5. C++入门经典-例3.7-用条件运算符判断数的奇偶性

    1:条件运算符是一个三目运算符,能像判断语句一样完成判断.例如: max=(iA>iB) ? iA:iB; 意思是先判断iA是否大于iB,如果是,则max取iA的值,如果不是则取iB的值. 如果 ...

  6. 【转】如何在Oracle中复制表结构和表数据

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  7. spark中使用的内存文件系统-Tachyon FS 简介

    转自:http://blog.csdn.net/u014252240/article/details/41810849  发布人:南京大学PASA大数据实验室顾荣 1. Tachyon是什么 Tach ...

  8. 初始化EPT

    struct eptp_bits { unsigned memory_type :; /* 0: UC uncacheable, 6: WB writeback */ unsigned pagewal ...

  9. golang 通过reflect反射修改值

    不是所有的反射值都可以修改.对于一个反射值是否可以修改,可以通过CanSet()进行检查. 要修改值,必须满足: 可以寻址 可寻址的类型: 指针指向的具体元素 slice的元素 可寻址的结构体的字段( ...

  10. leetcode 75颜色分类

    两趟扫描,由于排序变量的特殊性,使用计数排序方法可以明显降低至O(n)time O(n) space 关于计数排序:https://mp.weixin.qq.com/s/WGqndkwLlzyVOHO ...