VLAN标准和对交换机的帧处理过程规则
日期:2013/01/13
博客:
http://blog.youkuaiyun.com/kernal_linux/article/details/8234653
文档目录
文档简介
第一章.VLAN知识介绍
第二章.GVRP协议
第三章.GMRP协议
文档简介
1.目的
在使用交换机芯片或带有交换机功能的CPU芯片时,肯定会碰到对帧处理流程的设置和VLAN,因此编写此文档,一方面是作为项目组成员间的知识交流,二是作为给芯片编程时建立各种C语言结构体的知识依据。
2.引用的资料
(1)《IEEE Standard for Local and Metropolitan Area Networks:VirtualBridged Local Area Networks》,IEEE Std 802.1Q-1998。这是主要资料,如果你认为该标准文档已经过时,那你直接跳过这份文档即可;
(2)“GVRP协议”这章内容完全来自H3C的“GVRP技术白皮书”,下面是其网页链接:
(3)“GMRP协议”来自这章内容完全来自“自学网”,下面是其网页链接:
http://www.3648.com/net/201204/1611.html
(4)参考了“百度文库”中的“VLAN学习理解”文档,该文档的链接如下:
3.使用说明
可免费使用和拷贝本文档,但必须注明该文档的原作者信息。如果你能做到这一点,请在我的博客上留下E-mail地址,我会将本PDF的的可编辑版本发给你。此外,如果本文档中有对知识点的理解错误或者翻译错误,请发邮件给我,谢谢。
4.感谢
感谢Homeplug项目开发组的老大---胡工,感谢他的大度,让我有时间写这份文档。
第一章:VLAN知识介绍
1.VLAN的目的和带来的好处
(1) 在共享的媒介LAN和点对点LAN中,支持所有的IEEE802 LAN MAC协议;
(2) 提供对终端逻辑分组的方便管理,就好像它们处于同一个LAN中。同时使得这些组中成员的移动,添加和改变更容易;
(3) VLAN间的通信量受到控制。Bridges发生的单播,多播,广播通信量只能在该通信量指定的VLAN中传播;
(4) 尽可能地与正存在的bridges和终端兼容;
(5) 如果所有bridges port都被配置为传送和接收untagged帧,bridges将会工作在ISO/IEC 15802-3“即插即用”模式中。这使得终端能通过该Bridged LAN进行通信。
2.VLAN的定性
VLAN是一种存在于局域网的一种过滤服务。它处于数据链路层,对所有能传输帧的设备,包括交换机和路由器,规定了帧在这些设备中的处理步骤和方式。
3.VLAN的结构概览
图1:VLAN的3层结构
配置层: VLAN配置的方式,VLAN配置参数的安排;
配置信息的发行:信息发布到Bridges的过程,使得Bridges能够决定某个帧将分类到那个VLAN;
中继:
(a)将接收到的每个帧分类到一个VLAN中(ingress rules);
(b)决定将接收到的帧将发往何处(forwardingrules);
(c)将帧通过合适的格式(VLAN-tagged或untagged),通过合适的出口映射出去;
(d)添加,修改,移除VLAN标签头,以与VLAN的格式一致;
4.VLAN的格式
4.1.标签头的格式
标签头由如下信息组成:
(a)TPID:标签协议识别符(Tag Protocol Identifier),表示MAC层方式,取值为Ethernet编码或SNAP(卫星)编码;若为Ethernet编码,则Ethernet编码值是0x8100,表示该帧是一个tagged帧;
(b)TCI:标签控制信息,由如下3部分组成:
(1) user_priority:表示该帧的传输优先级;
(2) CFI:标准格式指示符;该项的具体含义如下:
(a) 若TPID为使用802.3/Ethernet MAC方式的Ethernet编码的标签头,1表示E-RIF域存在,E-RIF的NCFI表示该帧的MAC数据中可能存在的MACAddress是否是标准或非标准格式;0表示不存在E-RIF,该帧的MAC数据中可能存在的MAC Address信息是标准格式;
(b) 若TPID为使用8802-5 MAC方式的SNAP编码的标签头,1表示该帧的MAC数据中可能存在的MACAddress信息是非标准格式;0与其相反;
(c) 若TPID为使用FDDI MAC方式的SNAP编码的标签头,则:当该帧使用source-routed形式(即该帧的源MAC地址的RII位是1,且该源MAC地址后紧跟着一个RIF),其含义与(a)中相同。E-RIF在这种情况下不存在;当该帧采用透明形式(即该帧的源MAC地址的RII位是1,源MAC地址后没有RIF),其含义与(b)中相同;
4.2.VID的格式
12-bit的VID(VLAN Identifier)唯一识别该帧所属的VLAN。
VID值 | 含义/用法 |
0 | Null VID。表示priority-tagged帧。该帧不能在任何Filtering Database表项中被配置,也不能在任何Management操作中使用 |
1 | 默认PVID,用于在该端口的ingress阶段分类帧。该值可被management操作改变 |
FFF | 为实现保留。该值不能在Filtering Database 表项中被配置,不能在Management操作中被使用,不能在标签头中传输 |
4.3.E-RIF的格式(EmbeddedSource-Routing Information Field)(可以不看,它不影响理解)
E-RIF由2部分组成:
(1)2个字节的Route Control Field(RC);
(2)0个或至多28个字节的RouteDescriptors,由RC决定;
4.3.1.RT值的含义(RoutingType)
RT值的含义与ISO/IEC 15802-3,C.3.3.2中定义的相同。X保留,且01X表示这是个透明帧。透明帧表明,除去NCFI例外情况,如果该帧使用8802-5 MAC方式,E-RIF的其余部分应被丢弃。因此透明帧不包含route描述符,因此只有2个字节长度。
如下的规则保证RT值的使用和解释,在VLAN-aware和non-VLAN-aware设备上都是无歧义的:
(a) 当从一个Token Ring/FDDI LAN中接收到一个untagged,source-routed帧,且将其作为一个tagged帧在802.3/Ethernet或在Token Ring/FDDI上中继时,如果RT值是0XX,则在该tagged帧的E-RIF或RIF中的RT的值应被转换成000(即任何01X被转换成000);
(b) 当从一个Token Ring LAN接收到一个untagged透明帧,并将其作为tagged帧在802.3/Ethernet或FDDI上中继时,该标签头携带的E-RIF的RT值应该是010;
(c) 在Token Ring/FDDI上的一个VLAN-aware终端,以source-routed形式生成source-routed,tagged帧(即,在source-routed帧中的RIF出现在正常位置,标签头中没有E-RIF),则该终端不会传输RIF中的RT值为010或011的帧;
(d) 在802.3/Ethernet或FDDI的一个VLAN-aware终端生成一个source-routed,tagged的透明形式的帧(即,在标签头中存在source-routing信息,但是在source-routed帧的正常位置处没有RIF),则该终端不会传输E-RIF中RT值为010或011的帧;
(e) “X”在这些规则中的意思是“收到被忽略,传输则为0”
4.3.2.LTH的含义(length)
该值的定义与ISO/IEC 15802-3,C.3.3.2定义相同,除了如下例外情况:如果E-RIF的RT值是01X,则表明这是个透明帧,则LTH的值应该是0
4.3.3.D的含义(DirectionBit)
该值的含义与ISO/IEC 15802-3,C.3.3.2中的定义相同
4.3.4.LF的含义(largestframe)
该值的含义定义在ISO/IEC15802-3,C.3.3.2,用于所有使用802.3/Ethernet或FDDI MAC方式传输的所有带有一个E-RIF的tagged帧,无论是source-routed或透明的。对于使用802.3/Ethernet MAC方式传输的帧,LF的值应表示最大的帧大小为1470字节或更小。
4.3.5.NCFI的含义(Non-canonicalFormat Indicator)
该项有如下含义:
(a)0表示该帧的MAC数据中可能存在的所有MACAddress信息是非标准格式;
(b)1表示该帧的MAC数据中可能存在的所有MACAddress信息是标准格式;
在Token Ring/FDDI MAC方式上的source-routed帧,该bit在RIF中被保留,其值在穿过Bridges时是不变的;正常情况下该值为0;
当从一个Token Ring/FDDI LAN接收到一个source-routed帧,并将其作为一个在802.3/Ethernet或FDDI上传输的的包含E-RIF的tagged帧时(即,对于一个source-routed帧而言,RIF信息被放在正常的位置,现在改变位置将其放在E-RIF位置处),接收到的NCFI值被N或C替换(C是canonicalformat的简称)。
当一个包含E-RIF的tagged帧以一个source-routed帧从一个802.3/Ethernet或FDDI LAN传输到一个Token Ring或FDDI LAN时(即,E-RIF携带的RIF被恢复到帧中的正常位置),当该帧被传输到目的LAN时,该NCFI被置为0。
5.VLAN对帧的处理流程
支持VLAN的设备对帧进行处理,处理的流程符合VLAN对帧处理流程的规定。802.1Q将支持VLAN的设备抽象成一个bridge,该bridge由如下部分组成:
(1) 至少2个port;
(2) 连接该bridge的port的MAC Relay Entity;
(3) 高层实体,至少包括BridgeProtocol Entity;
下面是该bridge的结构图:
Port:传送和接收帧;每个port都有一个MAC Entity,该实体对帧的发送和接收提供内部子层服务;
MACRelay Entity:在该bridge的port间传输帧,过滤帧,学习帧信息。它会
使用在每个port内提供的MAC Entity。
高层实体:处理Bridged LAN拓扑的计算和配置。这些实体的操作对象是每个
port,并需要使用每个port提供的MAC Entity的功能。
上面我们描述的VLAN桥接的结构,实现该结构的是设备。VLAN对帧的所有处理均在该设备内部进行。现在我们从VLAN的3层结构入手,从帧进入设备的port,再从该设备的另一个port出来,依次讲解VLAN对该帧的各个处理阶段。
5.1.port
Port是否能参与帧中继由port的状态决定。该状态可被2个外部因素改变:一是手动管理;二是Spanning Tree algorithm。第一个因素可以关闭该port,第二个因素可以在该port开启的情况下,将该port排除在帧传输功能之外。从这可以看出,该port的开启/关闭,由手动执行;开启后是否参与帧中继,第二种因素也可以参与。这2种情况之外,该port就是处于forwarding状态。
因此,在一个BridgedLAN中,所有处于forwarding状态的port,形成了一个通信路径的集合。Spanning Tree algorithm的功能就是在这个集合中,构建一个有效的拓扑结构,使得任何MAC Address对能够进行通信。
每个port可以接收的帧类型是下面二者之一:
(1) 只接收VLAN-tagged帧;
(2) 接收所有帧(默认)
如果该帧仍没有被丢弃,则被递交预处理阶段。
5.2.帧的预处理(如果该帧有错误,直接过滤)
该port有一个MAC Entity,根据该帧的内容形成多个参数,根据参数决定将该帧发送到何处:ingressrules, MAC Service users, 或者过滤掉。
发送到ingressrules的条件是:生成的frame_type和mac_action的值分别是user_data_frame和request_with_no_response。
发送到MACService user的条件是:1.frame_type的值是user_data_frame,且该帧的目的地是该Bridged port。这种帧,目的地址要么是该端口的单个MAC Address,要么是与该端口有关的组播地址。这种帧也可被提交给ingressrules。2.如果该帧的目的地是该port,且该帧来自同一个bridge(设备)的其它port,则该帧也应被提交给MAC Service user。
随后,该帧的user_priority被该帧的接收port的User Priority Regeneration Table重新生成。(该表可通过管理方式改变其值)。
前面说过,port只能接收VLAN-tagged帧或所有帧。在预处理阶段,会将该帧要么映射为null VID,要么映射为标签头中的VID。如果该port的EnableIngress Filtering被使能,则这个新生成的VID,如果该port不处于这个新VID中,则该帧会被丢弃。
5.3.ingress rules
在这个阶段,该帧被分类到唯一的一个VLAN中,分类规则如下:
(1) 如果该帧是null priority帧,则:
(a)除了port-based分类,其它的VLAN分类规则能够给该帧分配一个非0的VID,则使用该VID;
(b)否则,如果其它分类规则不能给该帧分配一个非0的VID,或者具体实现只支持port-based分类,则使用接收到该帧的port的PVID;
(2)如果该帧不是null priority帧,则使用该帧携带的标签头中的VID。
然后该帧被递交给ForwardingProcess和Learning Process。
5.4.Forwarding Process
从外部来看,该过程的结果是,帧从bridge的某个port被接收,然后从该bridge的一个或多个其余port中出来。下面是bridge内部对帧的处理流程:
阶段 | 解释 |
8.7.1 | Enforce topology restriction |
8.7.2 | Filter frames |
8.7.3 | Queue frames |
8.7.4 | Select queued frames for transmission |
8.7.5 | Map priorities |
8.7.6 | Recalculate FCS |
5.4.1.enforcing topology restriction
这一步是选择帧将传送到哪个port,选择port必须满足如下所有条件:
(1)该帧的接收port处于forwarding状态;(等于没说,否则这帧怎么能接收)
(2)该port处于forwarding状态;(即它可以参与帧传输)
(3)该port不是该帧的接收port;
(4)该帧的帧大小不超过该port可运输的帧大小;
上面的4条选择了一个或多个port,其余的port不会接收到该帧;
5.4.2.filtering frames
该阶段将在上一个阶段选择的所有port中,过滤该帧,结果是该port拥有该帧,或丢弃该帧。过滤决策取决于如下4个因素:
(1) 该帧的目的MAC地址;
(2) 该帧标签头中的VID;
(3) 过滤数据库中的该MAC地址和VID;
(4) 该port的Group filtering行为;(组播过滤)
后面我们详细介绍该阶段的(3)和(4)项。
5.4.3.queuing frames
每个bridge port可能有不止一个传输队列,该阶段将该帧放到该port的某个队列中,等待合适的机会将该帧提交给该port的MAC Entity(记得前面的VLAN的最低层的结构)以便传输。队列中的内容是如下二者之一:
(1)单播包;由(目的地址,源地址,user_priority)唯一识别;
(2)组播包,由(目的地址,user_priority)唯一识别;
如果有N个对列,则该帧会被放入其中一个队列中,选择队列的过程如下:
每个port有一个traffic class,它是一个表,将该帧的user_priority映射到队列编号为0至(N-1)中的一个,然后该帧将被放到该队列中。User_priority有8个值,因此traffic class也有8项,以映射user_priority的每个值。下面是推荐的该映射关系:
该帧从这个队列移走的情况,是如下几种之一:
(1) 该帧被递交给该port的MAC Entity以传输;
(2) 该帧的保存时间超过了队列的时限值,移走不传输;
(3) 保证该帧的传输时延不超过该队列的最大bridgetransit delay(即该队列在任何帧进入时,有一个最大的传输时延保证),移走传输;
(4) 该port不再处于forwarding状态(即不可用),移走不传输;
移走该帧不意味着该帧会被传输到其它port传输(根据该阶段的流程图,很容易看出这种结论的正确性)。
5.4.4.selectingframes for transmission
如下是所有bridge必须支持的选择帧的默认算法,当然其它算法也是可以的:
(1) 先传输traffic class高的队列,传完后再传输traffic class低的队列;
(2) 对于给定的队列,选择帧必须满足5.4.3的帧移走条件;
5.4.5.mapping priority
在“帧的预处理”阶段,已经修改了该帧的user_priority值;在此阶段,会根据下表,将user_priority映射为access_priority:
5.4.6. recalculating FCS(帧校验序列)
如下条件只要满足其中一个,就会重新计算FCS:
(1) 接收该帧的port和传输该帧的port,使用的FCS算法不同;
(2) 接收该帧的port和传输该帧的port,得到的FCS值不同;
(3) 改变了该帧的数据区;
前面我们已经改变了该帧的标签头中的user_priority的值。
5.5.egress rules
满足如下条件之一,则该帧会被丢弃:
(1) 在ingress rules中给该帧的VID区域填写了一个新的VID,如果该port不在该VID的成员集中,则此帧被丢弃;
(2) 下述阶段得到的include_tag参数值为False,且该bridges不支持将该帧标签头中CFI表示的嵌入的MAC Address转换为标签中请求MAC方式;
(2.a)如果ingress rules得到的此帧的VID,该port处于此VID的untagged 集合中,则include_tag参数值为False;否则
(2.b)include_tag参数值为True。
5.6.frame transmission
每个port都有一个MAC Entity,它接收MAC Relay Entity发来的帧并传输出去。该帧的来源有2个(参见前面的VLANBridged Architecture):
(1) 来自Forwarding Process;
(2) 来自该port的MAC Service user提供的LLC Protocol Data Units;这个数据体中的源地址域的的值是该port的individual MAC Address。
该帧从此port传输出去时,必须满足此port连接的由IEEE 802 LAN技术指定的MAC过程。
此外,如果此port提供的MAC Service LLCuser提供的请求附加在该帧之后,则该帧应被递交给MAC Relay Entity。
5.7.learning process
该帧来自ingress rules阶段。它将在过滤数据库中创建或更新动态表项,这些表项将在5.4.2中的(3)中被使用。
表项内容是(源MAC地址,接收该帧的port,该帧的VID)三者的组合,只有满足下述所有条件,才会创建或更新动态表项:
(1) 接收该帧的port允许学习(ISO/IEC 15802-3,8.4);
(2) 源MAC是单播地址(组播地址另外处理);
(3) 表项的个数没有超过过滤数据库的容量;
(4) 该帧的VID的成员集至少包含一个port;(在后面详细解释该项)
如果过滤数据库已满,则会删除某个已存的表项,为新来的表项腾出空间。
5.8.filtering database
它包含2中类型的过滤表项,如下:
(1) 静态表项;由管理方式配置(可能是手动或协议自动配置);
(2) 动态表项;由bridge操作(如5.7)和该bridge支持的协议写入;
静态表项分2种,一种是必须包含的Static Filtering Entry,它针对的是单播和组播地址;第二种是可能包含的Static VLAN Registration Entry。静态表项永远存在,只能通过管理手段进行更改,超时机制类的机制不起作用。
动态表项分3种,与静态表项相对应,一是Dynamic Filtering Entries,针对单播地址,由5.7创建和更新;二是Group Registration Entries,针对组播地址,由GMRP协议创建和更新;三是Dynamic VLAN Registration,指明该VLAN在哪个port上被动态注册,由GVRP协议创建和更新。
StaticFiltering Entries和Group Registration Entries表项的内容是(MAC地址,VID,port映射),port映射对于该bridge的每个port均有一个控制成员,控制该表项的MAC地址和VID的这种组合在该port是否可以输出。
DynamicFiltering Entries的表项内容是(MAC地址,FID, port映射),port映射用于MAC地址和FID中该MAC地址对应的VID的过滤。
Static和Dynamic VLANRegistration Entries的表项内容是(VID,port映射),port映射用于指定port对VLAN的映射。
802.1Q标准文档的附录A的PICS Proforma规定对给定的过滤数据库实现,需要指定如下信息:
(1)过滤数据库支持的所有表项的数目;
(2)所有这些表项中,VLAN RegistrationEntries的数目(静态或动态)。
5.8.1.static filtering entries
表项内容是:(MAC地址,VID,port映射),具体含义如下:
a)MAC地址:
1)单个单播地址;
2)单个组播地址
3)所有组播地址,在这种表项中这种地址是唯一的(可选,表示具体实现可以不支持该项)
4)所有没有注册的组播地址,在这种表项中这种地址是唯一的(可选)
b)VID:可以使用该过滤表项的VID
c)port映射:该bridge的所有port均在该项中有控制元素,控制着当一个帧满足该表项的MAC地址和VID时,该帧应该采取的操作(三选其一):
1)转发,这与该过滤数据库的任何动态过滤信息独立;
2)过滤,这与任何动态过滤信息独立;
3)转发或过滤,这需要参考动态过滤信息,如果该MAC地址的动态过滤信息不存在,则依据输出port的默认Group filtering行为
5.8.2.static VLAN registration entries
表项内容是:(VID,port映射),具体含义如下:
a)VID:可以使用该过滤表项的VID
b)port映射:该bridge的每个port均有一个控制元素,指定了如下行为:
1)GVRP协议的Registrar AdministrativeControl区域的值(发送出去时直接复制到对应区域),同时该值也直接影响该bridge的转发行为,该值可以是如下三者之一:(GVRP协议中有具体定义,参见即可)
i)Registration Fixed
ii)Registration Forbidden
iii)Normal Registration
2)表明帧从该port出去时,是VLAN-tagged还是untagged(该port支持这个属性的VLAN数目至少是一个)
Forwarding Process可以为每个VLAN创建一个带有清楚的port映射的static VLAN registration entries。
5.8.3.Dynamic Filtering Entries
(1)表项内容是:(MAC地址,FID, port映射),具体含义如下:
a)单播MAC地址
b)FID:由该MAC bridge分配的标识符,用来标示该MAC地址参与的所有VLAN的集合
c)port映射:满足上述MAC地址和FID的帧将转发到该bridge的哪个port;
一个FID表示一个VLAN集合,其中发生Shared VLAN Learning;任何FID对表示2个VLAN集合,其中发生Independent VLAN Learning。后面我们会讲述FID的分配方式。
(2)创建者和修改方式
该表项只能由上面讲述的learningprocess创建和更新,当上一次更新时间超过Ageing Time时,该表项就会被自动移除。Ageing Time可以被管理操作改变,它的推荐值如下表所示:
SpanningTree Algorithm和ISO/IEC15802-3,第8章指定的协议均包含一个过程,可以通知处于BridgedLAN中的所有bridges,告诉它们拓扑发生改变。它会指定一个Aging Timer,该值在任何拓扑发生后都会被强制执行(ISO/IEC15802-3,8.3.5)。如果拓扑没有发生改变,则这个过程允许正常的ageing过程在被寻址的终端自身没有生成帧时(可能是断电)延长一会儿,这样在自动配置发生后,Bridged LAN不会牺牲继续提供服务的能力。
5.8.4.group registration entries
(1)表项内容是:(MAC地址,VID,port映射),具体含义如下:
a)MAC地址可以是下列3者之一:
1)组播地址;
2)所有组播地址,这些地址不存在于staticfiltering entry;
3)所有没有注册的组播地址;这些地址不存在于staticfiltering entry;
b)VID:这个过滤表项适用的VID
c)port映射:满足上述的MAC地址和VID情况下,该bridge所有port对该帧的处理方式,要么是转发(注册的),要么是过滤(没有注册的)
(2)该表项由GMRP创建和修改
5.8.5.dynamic VLAN registration entries
(1)表项内容是:(VID,port映射),具体含义如下:
a)VID:这个过滤表项适用的VID;
b)port映射:该bridge的每个port均有一个控制成员,表示该VLAN是否在该port注册;
(2)forwarding process可以创建这种表项
5.8.6.组播地址过滤行为(默认)
数据链路层将网络设备的硬件地址分为3种:单播地址,组播地址,广播地址,其中单播地址用于厂商生产的设备,组播地址不作为终端设备的地址,它的用途很广,下面是802.1Q对组播地址帧的过滤方式。
组播地址过滤行为的管理,可以针对每个VLAN和每个port进行。给定组播帧的行为可以是如下几者之一:
1)转发所有组播帧:转发该帧,除非static filtering entry有表项指定说过滤该帧;
2)转发所有没有注册的组播帧:转发该帧,除非发生如下情况之一:
a)staticfiltering entry有表项指定说过滤该帧;
b)static filtering entry有表项指定说,根据动态过滤信息决定转发或过滤该帧,并且,存在一个适当的group registration entry,它指明过滤该帧;
c)不存在适当的static filtering entry,但存在一个适当的group registration entry,它说过滤该帧;
3)过滤没有注册的组播帧;除非发生以下情况之一:
a)存在一个static filteringentry说转发该帧;
b)存在一个static filteringentry说根据动态过滤信息转发或过滤该帧,并且,存在一个适当的group registrationentry说转发该帧;
c)不存在适当的static filteringentry,但存在一个适当的group registration entry说转发该帧;
对于只支持基本过滤服务的bridge,默认的组播过滤行为是转发该帧到bridges的所有port和VLAN。
对于支持扩展过滤服务的bridge,对每个VLAN的每个port,默认组播过滤行为根据过滤数据库中的如下信息决定:
1)static filtering entries中的任何满足该VLAN和该MAC的所有group address或所有unregistered group address;
2)group registration entries中的任何满足该VLAN和MAC的所有group addresses或所有unregistered group address;
这些信息是如何决定默认的组播过滤行为的,见下面2张表:
因此,通过运用合适的如下组合,“RegistrationFixed”,“Registration Forbideen”,“Normal Registration”,可以更改staic filteringentries表项中的port映射,这样就会影响到allgroup addresses和all unregistered group addresses,因此对于一个给定的port和VLAN,下面是可能的:
---将默认的组播过滤行为设置为上述3个行为之一;
---将过滤行为限制为上述3个行为的一个子集,然后让GMRP(或没有)决定最终选择哪一个;
---允许上述3个行为中的任何一个,以与通过GMRP接收到的注册信息一致;
5.8.7. VID划归到FID
FID出现在Dynamic Filtering Entries表项中,该表项的内容是(MAC地址,FID, port映射)。在一个bridge中,将多个VID分配到FID,意味着单播MAC地址信息会在多个VID中共享,它们会影响帧的转发/过滤决定。提出FID的目的是与传统的bridge功能兼容。
将VID分配到FID,需要根据如下信息:
(1) 该bridge中已经被配置的VLAN Learning Constraints的集合;
(2) 该bridge中已经被配置的VID到FID的固定映射(通过管理操作);
(3) 该bridge中的active VLANs的集合(即,转发帧时可能需要调用的行为的VLAN的集合)。一个VLAN是active的,当且仅当如下之一的条件满足:
a)该VLAN的成员集合中,至少有一个port处于forwarding状态,并且,该bridge的其它至少一个port,处于forwarding状态并关闭了ingress filtering。
b)该VLAN的成员集合中至少有2个或更多个port处于forwarding状态;
(4)该bridge可以支持的FID的数目,每个FID可以被分配的VID的数目;
一个VLAN Bridge可以支持1个至4096个FID(至少1个),FID的编号从1开始。然后VLAN Bridge必须支持给每个FID分配至少一个VID的能力,也可能支持给一个FID分配多个VID。
上面(1)中的VLAN Learning Constraints数目,由该VLAN Bridge决定。
5.8.7.1.固定的和动态的VID到FID的分配
这小节对应于上面的(2)。该bridge可能支持固定的一个VID到FID的映射表,该表可以通过管理操作来读写。对于该表能支持的每个VID,分配表的内容是如下之一:
(1) 该VID目前没有分配给任何FID;
(2) 该VID通过管理固定分配给了FID X;
(3) 该VID通过VLAN Learning Constraints动态分配给了FID X;
对于任何没有固定分配的VID,该bridge可以动态分配该VID到一个合适的FID中,以与当前的VLAN Learning Constraints一致。
5.8.7.2.VLAN Learning Constraints
A.目的
Learning Constraints的集合建立在整体的基础上,即所有VLAN-awareBridges配置有相同的约束集合(尽管单个的约束可能被不同的管理者/管理员很好的定义和分配)。某个约束Learning Constraints应用到该Bridged LAN中存在的所有VLANs上,因此任何bridge将根据该约束看到全部的VLAN图景,不管它们是否都应用到存在于该bridge上的所有VLAN中。
B.有2种VLAN Learning Constraints:
(1) 共享学习约束(或称S约束),表示该Shared VLAN Learning在某一对已识别的VLAN中发生,表达形式为{A S B},意为VID A 和VIDB 间发生了共享学习约束;
(2) 独立学习约束(或称I约束),表示给定的VLAN是某个Indepent VLAN Learning形成的VLAN集合的成员,表达形式为{A I N},其中A是一个VID,N是一个独立标识符集合(Independent Set Identifier),上式表示“独立学习约束”发生在由VLAN A组成的集合和带有相同的N的用I约束表示的其它VLAN间。
一个给定的VID可以在S约束和/或I约束中出现任意次(包括0次)。
将VIDs分配到FID应该是这样的,对于active VLANs集合中的所有成员:
(1) 一个给定的VID只能分配到一个FID中;
(2) 如果一个指定的VID出现在一个I约束中,则它只能分配到同一个FID一次,因为在一个I约束中的VID有相同的IndependentSet Identifier;
(3) 如果一个给定的VID出现在一个S约束中(或明显或暗示,由S约束的传递性质决定),则它可以多次分配到相同的一个FID,这个多次分配的VID有相同的S约束;
(4) 如果一个给定的VID没有出现在任何S约束或I约束中,则该bridge可以将其分配到任何一个FID中;
5.8.7.3.VLAN Learning Constraint inconsistencies and violations
上一节5.8.7.2指定的规则,还有任何VIDs到FIDs的固定分配,都会导致该bridge检测到Learning Constraint不一致或冲突(即,会导致VLAN LearningConstraints与固有分配这对组合的固有矛盾,或者该bridge自身的限制使得它不能满足加于其身的VLAN Learning Constraints的集合)。
在如下情况下,一个bridge检测到Learning Constraint inconsistency:
1)VLAN LearningConstraints,和任何VID到FID的固有分配,它们遇到了如下情况:如果任何给定的一对VLANs变成了active VLANs集合的成员,导致这2个VLANs都需要IndependentVLAN Learning和Shared VLAN Learning。这种不一致需要该bridge将同一个VID既分配给相同的FID,又分配给不同的FID(与VID分配到FID的规则冲突)。
当管理操作尝试设置一个新的LearningConstraint值,或者修改VID到FID的固有分配时,就会探测到Learning Constraint不一致。如果该操作带来的新的约束或分配与已经配置在该bridge的不一致,则不会执行该操作并返回一个错误。
在如下情况下,一个bridge会检测到一个Learning Constraint violation:
1)该bridge不支持将超过1个VID映射到任何FID中,但VLAN Learning Constraints要求这么做;或者
2)在该bridge中,对于active集合中的所有VLAN,满足VLANLearning Constraint和VID到FID的固有映射的FID的数目,超过了该bridge所支持的FID的数目;或者
3)当一个从来不是active VLAN集合中的一个VLAN成为active中的一员时(管理操作或者GVRP),导致该bridge不能够支持已经定义的约束集合和/或active VLAN集合的固有分配;或者
4)当其它的管理重配置行为,如定义一个新的LearningConstraint或VID到FID的固有分配,导致该bridge不再支持active VLAN集合中已经定义的约束集合和/或固有的分配。
一旦检测到一个violation,该bridge就会执行Notify Learning ConstraintViolation管理通知(就是给同一个VLAN中的成员发帧,帧中包含警告信息),以警告任何管理站该violation的存在。配置中的单个改变,可能会导致多个VLAN的该约束不可用,此时应发送多个通知。
5.9.permanent database
包含有固定数目的static filtering entries和static VLAN registration entries。当过滤数据库初始化时,必须从该数据库中读取信息。读取之后,该数据库的信息不再影响过滤数据库,除非过滤数据库重新初始化。
6.Shared and Independent VLAN Learning
这部分讲述的是VLAN间学到的单播MAC地址如何进行共享,以便用来做转发/过滤决策。有2种机制用于这点:
1)将学到的地址信息扩散到许多VLAN中;这被称作Shared VLAN Learning(SVL,共享VLAN学习);
2)将学到的地址信息仅用于一个VLAN,不用于多个VLAN,这被称作Independent VLAN Learning(IVL, 独立VLAN学习)。
利用前面提到的FID,一个SVL/IVL可以支持多个FID(等价于支持多个过滤数据库),VLAN可以使用每个FID。通过改变可以支持的FID数目和每个FID中可以共享地址信息的VLAN数目,可以创建如下的SVL/IVL简化模型:
1)仅支持SVL:具体实现只支持一个FID,因此所有的VLAN共享相同的MAC地址信息,无论该MAC信息是从哪个VLAN中学到的;
2)仅支持IVL:支持多个FID,但每个FID只支持一个VLAN,因此该VLAN只能使用在该VLAN中学到的MAC地址信息;
当然,更详细的内容如下(内容省略):
1)IVL和SVL所需要的基础设施;
2)Bridge如何使在某个VLAN中学到的MAC地址成为“共享”或“独立”;
3)在同一个Bridged LAN中,bridges间的不同MAC地址共享模型如何互操作;
7.VLAN术语
7.1.基本的VLAN概念
下图显示的是基于port-based VLAN的一个应用图,其中2个bridge间需要传递VLAN信息:
上图中,来自左侧VLAN A的帧需要传送到右侧VLAN A中,因此在2个bridge间需要传送带有VLAN标签的帧。下面我们依次讲解各个术语。
7.1.1.Trunk Links(中继连接)
即需要在多个bridge间仅传递VLAN信息,因为我们前面说过,从bridge出来的帧,要么是untagged,要么是VLAN-tagged,此时我们仅需要的是VLAN-tagged帧,因此该通信链路称为Trunk Link。相关的端口称为trunk端口。连接到Trunk Links的设备必须支持VLAN帧格式和VLAN成员关系,成为VLAN-aware。否则就是VLAN-unaware。
7.1.2.Access Links(接入连接)
将一个或多个VLAN-unaware设备连接到一个VLANbridge的端口上。在该连接上的帧,都是untagged帧。
7.1.3. Hybrid Links(混合连接)
上面我们说了,trunk link上的所有设备都是能够识别VLAN帧的,如果一个VLAN-unaware设备连接到该trunk link上,则该连接就变成了hybrid links。在这种连接上,可以传递VLAN-tagged帧和其它帧(untagged或priority-tagged)。切记,对于一个给定的bridge中的给定VLAN,该bridge输出的帧格式必须与hybrid links上对该帧的格式相同,即如下二者之一:
1)全部untagged;
2)全部tagged,带有相同的VID;
如上图所示,VLAN A和VLAN B上的帧都是tagged,但VLANC上的帧都是untagged。
7.2.与Port-basedVLAN模型的关系
7.2.1.三种连接的关系
一个Hybrid link如果传输的所有帧都是VLAN-tagged,则就变成了Trunk Link;如果所有帧都不是VLAN-tagged,则变成了Access Link。
7.2.2.使用其它VLAN种类
802.1Q只定义了port-based VLAN,port-based VLAN是所有其它类型分类的基础(最后手段)。但其它类型的对帧进行分类的方式也是允许的,可能包括如下规则:
1)基于MAC地址分类:将给定的MAC地址分配到指定的VLAN中去;
2)基于协议的分类:根据该帧携带的高层协议信息;
3)子网分类:基于该帧携带的IP子网地址信息
具体实现可能支持上述的一个或多个,因此这些分类规则形成了一个层次关系。如果高层分类指定了VID,则底层分类不起作用;只有所有分类都失败了,才会使用port-base VLAN(因此它是必须提供的)。上述分类规则,3)最高,2)次之,1)最低。
第2章:GVRP协议
GARP协议主要用于建立一种属性传递扩散的机制,以保证协议实体能够注册和注销该属性。GARP作为一个属性注册协议的载体,可以用来传播属性。将GARP协议报文的内容映射成不同的属性即可支持不同上层协议应用。例如,GMRP和GVRP:
l GMRP是GARP的一种应用,用于注册和注销组播属性;
l GVRP是GARP的一种应用,用于注册和注销VLAN属性。
GARP协议通过目的MAC地址区分不同的应用。在IEEE Std 802.1D中将01-80-C2-00-00-20分配给组播应用,即GMRP。在IEEE Std 802.1Q中将01-80-C2-00-00-21分配给VLAN应用,即GVRP。
本文仅介绍GVRP的相关知识。
如果需要为网络中的所有设备都配置某些VLAN,就需要网络管理员在每台设备上分别进行手工添加。如图1所示,Device A上有VLAN 2,Device B和Device C上只有VLAN1,三台设备通过Trunk链路连接在一起。为了使DeviceA上VLAN 2的报文可以传到Device C,网络管理员必须在Device B和Device C上分别手工添加VLAN 2。
对于上面的组网情况,手工添加VLAN很简单,但是当实际组网复杂到网络管理员无法短时间内完全了解网络的拓扑结构,或者是整个网络的VLAN太多时,工作量会非常大,而且非常容易配置错误。在这种情况下,用户可以通过GVRP的VLAN自动注册功能完成VLAN的配置。
1.2 技术优点
GVRP基于GARP机制,主要用于维护设备动态VLAN属性。通过GVRP协议,一台设备上的VLAN信息会迅速传播到整个交换网。GVRP实现动态分发、注册和传播VLAN属性,从而达到减少网络管理员的手工配置量及保证VLAN配置正确的目的。
2.1 概念介绍
在设备上,每一个参与协议的端口可以视为一个应用实体。当GVRP在设备上启动的时候,每个启动GVRP的端口对应一个GVRP应用实体,如图2所示。
图2 GVRP应用实体
2.1.2 VLAN的注册和注销
GVRP协议可以实现VLAN属性的自动注册和注销:
l VLAN的注册:指的是将端口加入VLAN。
l VLAN的注销:指的是将端口退出VLAN。
GVRP协议通过声明和回收声明实现VLAN属性的注册和注销。
l 当端口接收到一个VLAN属性声明时,该端口将注册该声明中包含的VLAN信息(端口加入VLAN)。
l 当端口接收到一个VLAN属性的回收声明时,该端口将注销该声明中包含的VLAN信息(端口退出VLAN)。
GVRP协议的属性注册和注销仅仅是对于接收到GVRP协议报文的端口而言的。
图3 VLAN的注册和注销
GARP应用实体之间的信息交换借助于消息的传递来完成,主要有三类消息起作用,分别为Join消息、Leave消息和LeaveAll消息。
1. Join消息
当一个GARP应用实体希望其它设备注册自己的属性信息时,它将对外发送Join消息;当收到其它实体的Join消息或本设备静态配置了某些属性,需要其它GARP应用实体进行注册时,它也会向外发送Join消息。
Join消息分为JoinEmpty和JoinIn两种,区别如下:
l JoinEmpty:声明一个本身没有注册的属性。
l JoinIn:声明一个本身已经注册的属性。
2. Leave消息
当一个GARP应用实体希望其它设备注销自己的属性信息时,它将对外发送Leave消息;当收到其它实体的Leave消息注销某些属性或静态注销了某些属性后,它也会向外发送Leave消息。
Leave消息分为LeaveEmpty和LeaveIn两种,区别如下:
l LeaveEmpty:注销一个本身没有注册的属性。
l LeaveIn:注销一个本身已经注册的属性。
3. LeaveAll消息
每个应用实体启动后,将同时启动LeaveAll定时器,当该定时器超时后应用实体将对外发送LeaveAll消息。
LeaveAll消息用来注销所有的属性,以使其它应用实体重新注册本实体上所有的属性信息,以此来周期性地清除网络中的垃圾属性(例如某个属性已经被删除,但由于设备突然断电,并没有发送Leave消息来通知其他实体注销此属性)。
GARP协议中用到了四个定时器,下面分别介绍一下它们的作用。
1. Join定时器
Join定时器是用来控制Join消息(包括JoinIn和JoinEmpty)的发送的。
为了保证Join消息能够可靠的传输到其它应用实体,发送第一个Join消息后将等待一个Join定时器的时间间隔,如果在一个Join定时器时间内收到JoinIn消息,则不发送第二个Join消息;如果没收到,则再发送一个Join消息。
每个端口维护独立的Join定时器。
2. Hold定时器
Hold定时器是用来控制Join消息(包括JoinIn和JoinEmpty)和Leave消息(包括LeaveIn和LeaveEmpty)的发送的。
当在应用实体上配置属性或应用实体接收到消息时不会立刻将该消息传播到其它设备,而是在等待一个Hold定时器后再发送消息,设备将此Hold定时器时间段内接收到的消息尽可能封装成最少数量的报文,这样可以减少报文的发送量。如果没有Hold定时器的话,每来一个消息就发送一个,造成网络上报文量太大,既不利于网络的稳定,也不利于充分利用每个报文的数据容量。
每个端口维护独立的Hold定时器。Hold定时器的值要小于等于Join定时器值的一半。
3. Leave定时器
Leave定时器是用来控制属性注销的。
每个应用实体接收到Leave或LeaveAll消息后会启动Leave定时器,如果在Leave定时器超时之前没有接收到该属性的Join消息,属性才会被注销。这是因为网络中如果有一个实体因为不存在某个属性而发送了Leave消息,并不代表所有的实体都不存在该属性了,因此不能立刻注销属性,而是要等待其他实体的消息。例如,某个属性在网络中有两个源,分别在应用实体A和B上,其他应用实体通过协议注册了该属性。当把此属性从应用实体A上删除的时候,实体A发送Leave消息,由于实体B上还存在该属性源,在接收到Leave消息之后,会发送Join消息,以表示它还有该属性。其他应用实体如果收到了应用实体B发送的Join消息,则该属性仍然被保留,不会被注销。只有当其它应用实体等待两个Join定时器以上仍没有收到该属性的Join消息时,才能认为网络中确实没有该属性了,所以这就要求Leave定时器的值大于2倍Join定时器的值。
每个端口维护独立的Leave定时器。
4. LeaveAll定时器
每个GARP应用实体启动后,将同时启动LeaveAll定时器,当该定时器超时后GARP应用实体将对外发送LeaveAll消息,随后再启动LeaveAll定时器,开始新的一轮循环。
接收到LeaveAll消息的实体将重新启动所有的定时器,包括LeaveAll定时器。在自己的LeaveAll定时器重新超时之后才会再次发送LeaveAll消息,这样就避免了短时间内发送多个LeaveAll消息。
如果不同设备的LeaveAll定时器同时超时,就会同时发送多个LeaveAll消息,增加不必要的报文数量,为了避免不同设备同时发生LeaveAll定时器超时,实际定时器运行的值是大于LeaveAll定时器的值,小于1.5倍LeaveAll定时器值的一个随机值。
一次LeaveAll事件相当于全网所有属性的一次Leave。由于LeaveAll影响范围很广,所以建议LeaveAll定时器的值不能太小,至少应该大于Leave定时器的值。
每个设备只在全局维护一个LeaveAll定时器。
2.1.5 注册模式
手工配置的VLAN称为静态VLAN,通过GVRP协议创建的VLAN称为动态VLAN。GVRP有三种注册模式,不同的模式对静态VLAN和动态VLAN的处理方式也不同。GVRP的三种注册模式分别定义如下:
l Normal模式:允许动态VLAN在端口上进行注册,同时会发送静态VLAN和动态VLAN的声明消息。
l Fixed模式:不允许动态VLAN在端口上注册,只发送静态VLAN的声明消息。
l Forbidden模式:不允许动态VLAN在端口上进行注册,同时删除端口上除VLAN 1外的所有VLAN,只发送VLAN 1的声明消息。
GARP协议报文采用IEEE802.3 Ethernet封装形式,报文结构如图4所示。
图4 GARP协议报文
各个字段的说明如表1所示。
表1 各个字段的说明
字段 | 含义 | 取值 |
Protocol ID | 协议ID | 取值为1,代表GARP协议 |
Message | 消息,每个Message由Attribute Type、Attribute List构成 | - |
Attribute Type | 属性类型,由具体的GARP的应用定义 | 对于GVRP,属性类型为0x01,表示属性取值为VLAN ID |
Attribute List | 属性列表,由多个属性构成 | - |
Attribute | 属性,每个属性由Attribute Length、Attribute Event、Attribute Value构成 | - |
Attribute Length | 属性长度(包括长度字段本身) | 2~255,单位为字节 |
Attribute Event | 属性描述的事件 | 0:LeaveAll Event 1:JoinEmpty Event 2:JoinIn Event 3:LeaveEmpty Event 4:LeaveIn Event |
Attribute Value | 属性取值 | GVRP的属性取值为VLAN ID,但LeaveAll属性的此值无效 |
End Mark | 结束标志、GARP的PDU的结尾标志 | 以0x00取值表示 |
下面通过一个简单的例子来介绍一下GVRP的工作过程。该例子分四个阶段描述了一个VLAN属性在网络中是如何被注册和注销的。
1. VLAN属性的单向注册
图5 VLAN属性的单向注册
在Device A上创建静态VLAN 2,通过VLAN属性的单向注册,将Device B和Device C的相应端口自动加入VLAN 2:
l 在Device A上创建静态VLAN2后,Port 1启动Join定时器和Hold定时器,等待Hold定时器超时后,Device A向Device B发送第一个JoinEmpty消息,Join定时器超时后再次启动Hold定时器,再等待Hold定时器超时后,发送第二个JoinEmpty消息。
l Device B上接收到第一个JoinEmpty后创建动态VLAN 2,并把接收到JoinEmpty消息的Port 2加入到动态VLAN 2中,同时告知Port 3启动Join定时器和Hold定时器,等待Hold定时器超时后向Device C发送第一个JoinEmpty消息,Join定时器超时后再次启动Hold定时器,Hold定时器超时之后,发送第二个JoinEmpty消息。Device B上收到第二个JoinEmpty后,因为Port 2已经加入动态VLAN 2,所以不作处理。
l Device C上接收到第一个JoinEmpty后创建动态VLAN 2,并把接收到JoinEmpty消息的Port 4加入到动态VLAN 2中。Device C上收到第二个JoinEmpty后,因为Port 4已经加入动态VLAN 2,所以不作处理。
l 此后,每当Leaveall定时器超时或收到LeaveAll消息,设备会重新启动Leaveall定时器、Join定时器、Hold定时器和Leave定时器。Device A的Port 1在Hold定时器超时之后发送第一个JoinEmpty消息,再等待Join定时器+Hold定时器之后,发送第二个JoinEmpty消息,Device B向Device C发送JoinEmpty消息的过程也是如此。
2. VLAN属性的双向注册
图6 VLAN属性的双向注册
通过上述VLAN属性的单向注册过程,端口Port 1、Port 2、Port 4已经加入VLAN2,但是Port 3还没有加入VLAN 2(只有收到JoinEmpty消息或JoinIn消息的端口才能加入动态VLAN)。为使VLAN 2流量可以双向互通,需要进行Device C到Device A方向的VLAN属性的注册过程:
l VLAN属性的单向注册完成后,在DeviceC上创建静态VLAN 2(将动态VLAN转换成静态VLAN),Port 4启动Join定时器和Hold定时器,等待Hold定时器超时后,Device C向Device B发送第一个JoinIn消息(因为Port 4已经注册了VLAN 2,所以发送JoinIn消息),Join定时器超时后再次启动Hold定时器,Hold定时器超时之后,发送第二个JoinIn消息。
l Device B上接收到第一个JoinIn后,把接收到JoinIn消息的Port 3加入到动态VLAN 2中,同时告知Port 2启动Join定时器和Hold定时器,等待Hold定时器超时后,向Device A发送第一个JoinIn消息,Join定时器超时后再次启动Hold定时器,Hold定时器超时之后,发送第二个JoinIn消息;Device B上收到第二个JoinIn后,因为Port 3已经加入动态VLAN 2,所以不作处理。
l Device A上接收到JoinIn之后,停止向Device B发送JoinEmpty消息。此后,当Leaveall定时器超时或收到LeaveAll消息,设备重新启动Leaveall定时器、Join定时器、Hold定时器和Leave定时器。Device A的Port 1在Hold定时器超时之后就开始发送JoinIn消息;
l Device B向DeviceC发送JoinIn消息。
l Device C收到JoinIn消息后,由于本身已经创建了静态VLAN 2,所以不会再创建动态VLAN 2。
3. VLAN属性的单向注销
图7 VLAN属性的单向注销
当设备上不再需要VLAN 2时,可以通过VLAN属性的注销过程将VLAN 2从设备上删除:
l 在Device A上删除静态VLAN2,Port 1启动Hold定时器,等待Hold定时器超时后,Device A向DeviceB发送LeaveEmpty消息。LeaveEmpty消息只需发送一次。
l Device B上接收到LeaveEmpty,Port 2启动Leave定时器,等待Leave定时器超时之后Port 2注销VLAN2,将Port 2从动态VLAN 2中删除(由于此时VLAN 2中还存在端口Port 3,所以不会删除VLAN 2),同时告知Port 3启动Hold定时器和Leave定时器,等待Hold定时器超时后,向Device C发送LeaveIn消息。由于Device C的静态VLAN 2还没有删除,Port 3在Leave定时器超时之前仍然能够收到Port 4发送的JoinIn消息,所以DeviceA和Device B上仍然能够学习到动态的VLAN 2。
l Device C上接收到LeaveIn后,由于Device C上存在静态VLAN 2,所以Port 4不会从VLAN2中删除。
4. VLAN属性的双向注销
图8 VLAN属性的双向注销
为了彻底删除所有设备上的VLAN 2,需要进行VLAN属性的双向注销:
l 在Device C上删除静态VLAN2,Port 4启动Hold定时器,等待Hold定时器超时后,Device C向DeviceB发送LeaveEmpty消息;
l Device B接收到LeaveEmpty消息后,Port 3启动Leave定时器,等待Leave定时器超时之后Port 3注销VLAN 2,将Port3从动态VLAN 2中删除并删除动态VLAN 2,同时告知Port 2启动Hold定时器,等待Hold定时器超时后,向Device A发送LeaveEmpty消息。
l Device A接收到LeaveEmpty消息后,Port 1启动Leave定时器,等待Leave定时器超时之后Port 1注销VLAN 2,将Port1从动态VLAN 2中删除并删除动态VLAN 2。
l 启用业务环回功能后GVRP报文发送不出去,所以GVRP功能与业务环回功能不可以同时应用。
l GVRP功能只能运行在MSTP的CIST实例上,并且在CIST实例上被MSTP阻塞的端口不能收发GVRP报文。
GVRP特性使得不同设备上的VLAN信息可以由协议动态维护和更新,用户只需要对少数设备进行VLAN配置即可应用到整个交换网络,无需耗费大量时间进行拓扑分析和配置管理。
图9中所有设备都使能GVRP功能,设备之间相连的端口均为Trunk端口,并允许所有VLAN通过。只需在Device A和Device G上分别手工配置静态VLAN 100~1000,那么,设备DeviceB~Device F就可以通过GVRP协议学习到这些VLAN,最后各设备上都存在VLAN 100~1000。
GVRP是一种VLAN的动态配置技术,在复杂的组网环境中应用GVRP,能够简化VLAN配置管理,减少因为配置不一致而导致的网络互通问题。此外,没有收到VLAN注册消息的端口不会加入动态VLAN,从而实现了VLAN的裁减,抑制了不必要的流量。随着GVRP支持MSTP多实例,在未来的组网应用中,GVRP将会得到更广泛的应用。
第3章:GMRP协议
gmrp(garpmulticast registration protocol,garp组播注册协议)是基于garp的一个组播注册协议,用于维护交换机中的组播注册信息。所有支持gmrp的交换机都能够接收来自其他交换机的组播注册信息,并动态更新本地的组播注册信息,同时也能将本地的组播注册信息向其他交换机传播。这种信息交换机制,确保了同一交换网内所有支 持gmrp的设备维护的组播信息的一致性。
当一台主机想要加入某个组播组时,它将发出gmrp加入消息。交换机将接到gmrp加入消息的端口加入到该组播组中,并在接收端口所在的vlan中广播该 gmrp加入消息,vlan中的组播源就可以知晓组播成员的存在。当组播源向组播组发送组播报文时,交换机就只把组播报文转发给与该组播组成员相连的端口,从而实现了在vlan内的二层组播。
交换机会周期性发送 GMRP 查询,如果主机想留在组播组中,它就会响应 GMRP 查询,在该情况下,交换机没有任何操作;如果主机不想留在组播组中,它既可以发送一个 leave 信息也可以不响应周期性 GMRP 查询。一旦交换机在计时器(leave all timer)设定期间收到主机 leave 信息或没有收到响应信息,它便从组播组中删除该主机。
IEEE 802.1p是流量优先权控制标准,工作在媒体访问控制(MAC)子层。它使得二层交换机能够提供流量优先级和动态组播过滤服务。IEEE802.1p标准也提供了组播流量过滤功能,以确保该流量不超出第二层交换网络范围。