GVRP简介

如果需要为网络中的所有设备都配置VLAN,就需要网络管理员在每台设备上分别进行手工添加。如图所示,RouterA上有VLAN2,RouterB和RouterC上只有VLAN1,三台设备通过Trunk链路连接在一起。为了使RouterA上VLAN 2的报文可以传到RouterC,网络管理员必须在RouterB和RouterC上分别手工添加VLAN2。

为网络中的所有设备都配置VLAN

对于上面的组网情况,手工添加VLAN很简单,但是当实际组网复杂到网络管理员无法短时间内了解网络的拓扑结构,或者是整个网络的VLAN太多时,工作量会非常大,而且非常容易配置错误。在这种情况下,用户可以通过GVRP的VLAN自动注册功能完成VLAN的配置。

GARP(Generic Attribute Registration Protocol)协议主要用于建立一种属性传递扩散的机制,以保证协议实体能够注册和注销该属性。GARP作为一个属性注册协议的载体,可以用来传播属性。将GARP协议报文的内容映射成不同的属性即可支持不同上层协议应用。
GVRP(Generic VLAN Registration Protocol)是GARP的一种应用,用于注册和注销VLAN属性。
GARP协议通过目的MAC地址区分不同的应用。在IEEE Std 802.1Q中将01-80-C2-00-00-21分配给VLAN应用,即GVRP。

如何快速部署和同步VLAN信息?

GVRP原理

1.基本概念

1.1 应用实体

在设备上,每一个参与协议的端口可以视为一个应用实体。当GVRP在设备上启动的时候,每个启动GVRP的端口对应一个GVRP应用实体,如图所示。.
GVRP应用实体

1.2 VLAN的注册和注销

GVRP协议可以实现VLAN属性的自动注册和注销:
•VLAN的注册:指的是将端口加入VLAN。
•VLAN的注销:指的是将端口退出VLAN。
GVRP协议通过声明和回收声明实现VLAN属性的注册和注销。
•当端口接收到一个VLAN属性声明时,该端口将注册该声明中包含的VLAN信息(端口加入VLAN)。
•当端口接收到一个VLAN属性的回收声明时,该端口将注销该声明中包含的VLAN信息(端口退出VLAN)。
GVRP协议的属性注册和注销仅仅是对于接收到GVRP协议报文的端口而言的。
VLAN的注册和注销

1.3 消息类型

GARP应用实体之间的信息交换借助于消息的传递来完成,主要有三类消息起作用,分别为Join消息、Leave消息和LeaveAll消息。
•Join消息 当一个GARP应用实体希望其它设备注册自己的属性信息时,它将对外发送Join消息;当收到其它实体的Join消息或本设备静态配置了某些属性,需要其它GARP应用实体进行注册时,它也会向外发送Join消息。
Join消息分为JoinEmpty和JoinIn两种,区别如下:
■JoinEmpty:声明一个本身没有注册的属性。
■JoinIn:声明一个本身已经注册的属性。
•Leave消息 当一个GARP应用实体希望其它设备注销自己的属性信息时,它将对外发送Leave消息;当收到其它实体的Leave消息注销某些属性或静态注销了某些属性后,它也会向外发送Leave消息。
Leave消息分为LeaveEmpty和LeaveIn两种,区别如下:
■LeaveEmpty:注销一个本身没有注册的属性。
■LeaveIn:注销一个本身已经注册的属性。
•LeaveAll消息 每个应用实体启动后,将同时启动LeaveAll定时器,当该定时器超时后应用实体将对外发送LeaveAll消息。
LeaveAll消息用来注销所有的属性,以使其它应用实体重新注册本实体上所有的属性信息,以此来周期性地清除网络中的垃圾属性(例如某个属性已经被删除,但由于设备突然断电,并没有发送Leave消息来通知其他实体注销此属性)。

1.4 注册模式

手工配置的VLAN称为静态VLAN,通过GVRP协议创建的VLAN称为动态VLAN。GVRP有三种注册模式,不同的模式对静态VLAN和动态VLAN的处理方式也不同。GVRP的三种注册模式分别定义如下:
•Normal模式:允许动态VLAN在端口上进行注册,同时会发送静态VLAN和动态VLAN的声明消息。
•Fixed模式:不允许动态VLAN在端口上注册,只发送静态VLAN的声明消息。
•Forbidden模式:不允许动态VLAN在端口上进行注册,同时删除端口上除VLAN1外的所有VLAN,只发送VLAN1的声明消息。

2. 工作过程

2.1 VLAN属性的单向注册


VLAN属性的单向注册
在RouterA上创建静态VLAN2,通过VLAN属性的单向注册,将RouterB和RouterC的相应端口自动加入VLAN2。
1.在RouterA上创建静态VLAN2后,Port1启动Join定时器和Hold定时器,等待Hold定时器超时后,RouterA向RouterB发送第一个JoinEmpty消息,Join定时器超时后再次启动Hold定时器,再等待Hold定时器超时后,发送第二个JoinEmpty消息。
2.RouterB上接收到第一个JoinEmpty后创建动态VLAN2,并把接收到JoinEmpty消息的Port2加入到动态VLAN2中,同时告知Port3启动Join定时器和Hold定时器,等待Hold定时器超时后向RouterC发送第一个JoinEmpty消息,Join定时器超时后再次启动Hold定时器,Hold定时器超时之后,发送第二个JoinEmpty消息。RouterB上收到第二个JoinEmpty后,因为Port2已经加入动态VLAN2,所以不作处理。
3.RouterC上接收到第一个JoinEmpty后创建动态VLAN2,并把接收到JoinEmpty消息的Port4加入到动态VLAN2中。RouterC上收到第二个JoinEmpty后,因为Port4已经加入动态VLAN2,所以不作处理。
4.此后,每当LeaveAll定时器超时或收到LeaveAll消息,设备会重新启动LeaveAll定时器、Join定时器、Hold定时器和Leave定时器。RouterA的Port1在Hold定时器超时之后发送第一个JoinEmpty消息,Join定时器超时后再次启动Hold定时器,再等待Hold定时器超时后,发送第二个JoinEmpty消息,RouterB向RouterC发送JoinEmpty消息的过程也是如此。

2.2 VLAN属性的双向注册


VLAN属性的双向注册
通过上述VLAN属性的单向注册过程,端口Port1、Port2、Port4已经加入VLAN2,但是Port3还没有加入VLAN2(只有收到JoinEmpty消息或JoinIn消息的端口才能加入动态VLAN)。为使VLAN2流量可以双向互通,需要进行RouterC到RouterA方向的VLAN属性的注册过程。
1.VLAN属性的单向注册完成后,在RouterC上创建静态VLAN2(将动态VLAN转换成静态VLAN),Port4启动Join定时器和Hold定时器,等待Hold定时器超时后,RouterC向RouterB发送第一个JoinIn消息(因为Port4已经注册了VLAN2,所以发送JoinIn消息),Join定时器超时后再次启动Hold定时器,Hold定时器超时之后,发送第二个JoinIn消息。
2.RouterB上接收到第一个JoinIn后,把接收到JoinIn消息的Port3加入到动态VLAN2中,同时告知Port2启动Join定时器和Hold定时器,等待Hold定时器超时后,向RouterA发送第一个JoinIn消息,Join定时器超时后再次启动Hold定时器,Hold定时器超时之后,发送第二个JoinIn消息;RouterB上收到第二个JoinIn后,因为Port3已经加入动态VLAN2,所以不作处理。
3.RouterA上接收到JoinIn之后,停止向RouterB发送JoinEmpty消息。此后,当LeaveAll定时器超时或收到LeaveAll消息,设备重新启动LeaveAll定时器、Join定时器、Hold定时器和Leave定时器。RouterA的Port1在Hold定时器超时之后就开始发送JoinIn消息。
4.RouterB向RouterC发送JoinIn消息。
5.RouterC收到JoinIn消息后,由于本身已经创建了静态VLAN2,所以不会再创建动态VLAN2。

2.3 VLAN属性的单向注销

当设备上不再需要VLAN2时,可以通过VLAN属性的注销过程将VLAN2从设备上删除。
1.在RouterA上删除静态VLAN2,Port1启动Hold定时器,等待Hold定时器超时后,RouterA向RouterB发送LeaveEmpty消息。LeaveEmpty消息只需发送一次。
2.RouterB上接收到LeaveEmpty,Port2启动Leave定时器,等待Leave定时器超时之后Port2注销VLAN2,将Port2从动态VLAN2中删除(由于此时VLAN2中还存在端口Port3,所以不会删除VLAN2),同时告知Port3 启动Hold定时器和Leave定时器,等待Hold定时器超时后,向RouterC发送LeaveIn消息。由于RouterC的静态VLAN2还没有删除,Port3在Leave定时器超时之前仍然能够收到Port4发送的JoinIn消息,所以RouterA和RouterB上仍然能够学习到动态的VLAN2。
3.RouterC上接收到LeaveIn后,由于RouterC上存在静态VLAN2,所以Port4不会从VLAN2中删除。

2.4 VLAN属性的双向注销


VLAN属性的双向注销
为了彻底删除所有设备上的VLAN2,需要进行VLAN属性的双向注销。
1.在RouterC上删除静态VLAN2,Port4启动Hold定时器,等待Hold定时器超时后,RouterC向RouterB发送LeaveEmpty消息。
2.RouterB接收到LeaveEmpty消息后,Port3启动Leave定时器,等待Leave定时器超时之后Port3注销VLAN2,将Port3从动态VLAN2中删除并删除动态VLAN2,同时告知
Port2启动Hold定时器,等待Hold定时器超时后,向RouterA发送LeaveEmpty消息。 3.RouterA接收到LeaveEmpty消息后,Port1启动Leave定时器,等待Leave定时器超时之后Port1注销VLAN2,将Port1从动态VLAN2中删除并删除动态VLAN2。

GVRP配置举例

1. 组网需求

如图所示,公司A、公司A的分公司以及公司B之间有较多的交换设备相连,需要通过GVRP功能,实现VLAN的动态注册。公司A的分公司与总部通过RouterA和RouterB互通;公司B通过RouterB和RouterC与公司A互通,但只允许公司B配置的VLAN通过。


2. 配置思路

采用如下的思路配置GVRP:
1.使能GVRP功能,实现VLAN的动态注册。
2.公司A的所有交换设备配置GVRP功能并配置接口注册模式为Normal,以简化配置。
3.公司B的所有交换设备配置GVRP功能并将与公司A相连的接口的注册模式配置为Fixed,以控制只允许公司B配置的VLAN通过。

3. 操作步骤

1.在RouterA上创建VLAN101~VLAN200

system-view
[RouterA] vlan batch 101 to 200

2.配置RouterA的GVRP功能

# 全局使能GVRP功能。
[RouterA] gvrp
# 配置接口为Trunk类型,并允许所有VLAN通过。
[RouterA] interface ethernet 2/0/1
[RouterA-Ethernet2/0/1] port link-type trunk
[RouterA-Ethernet2/0/1] port trunk allow-pass vlan all
[RouterA-Ethernet2/0/1] quit
[RouterA] interface ethernet 2/0/2
[RouterA-Ethernet2/0/2] port link-type trunk
[RouterA-Ethernet2/0/2] port trunk allow-pass vlan all
[RouterA-Ethernet2/0/2] quit
# 使能接口的GVRP功能,并配置接口注册模式。
[RouterA] interface ethernet 2/0/1
[RouterA-Ethernet2/0/1] gvrp
[RouterA-Ethernet2/0/1] gvrp registration normal
[RouterA-Ethernet2/0/1] quit
[RouterA] interface ethernet 2/0/2
[RouterA-Ethernet2/0/2] gvrp
[RouterA-Ethernet2/0/2] gvrp registration normal
[RouterA-Ethernet2/0/2] quit
RouterB配置与RouterA配置类似,这里不再赘述。

3.配置路由器RouterC

# 创建VLAN101~VLAN200。
system-view
[RouterC] vlan batch 101 to 200
# 全局使能GVRP功能。
[RouterC] gvrp
# 配置接口为Trunk类型,并允许所有VLAN通过。
[RouterC] interface ethernet 2/0/1
[RouterC-Ethernet2/0/1] port link-type trunk
[RouterC-Ethernet2/0/1] port trunk allow-pass vlan all
[RouterC-Ethernet2/0/1] quit
[RouterC] interface ethernet 2/0/2
[RouterC-Ethernet2/0/2] port link-type trunk
[RouterC-Ethernet2/0/2] port trunk allow-pass vlan all
[RouterC-Ethernet2/0/2] quit
# 使能接口的GVRP功能,并配置接口注册模式。
[RouterC] interface ethernet 2/0/1
[RouterC-Ethernet2/0/1] gvrp
[RouterC-Ethernet2/0/1] gvrp registration fixed
[RouterC-Ethernet2/0/1] quit
[RouterC] interface ethernet 2/0/2
[RouterC-Ethernet2/0/2] gvrp
[RouterC-Ethernet2/0/2] gvrp registration normal
[RouterC-Ethernet2/0/2] quit

4.验证配置结果

# 配置完成后,公司A的分公司用户可以与总部互通,公司A属于VLAN101~VLAN200的用户可以与公司B用户互通。
# 在RouterA上使用命令display gvrp status,查看全局GVRP的使能情况,结果如下:
display gvrp status
Info: GVRP is enabled.
# 在RouterA上使用命令display gvrp statistics,查看接口的GVRP统计信息,其中包括:GVRP状态、GVRP注册失败次数、上一个GVRP数据单元源MAC地址和接口GVRP注册类型,结果如下:
display gvrp statistics interface ethernet 2/0/1
GVRP statistics on port Ethernet2/0/1
GVRP status : Enabled
GVRP registrations failed : 0
GVRP last PDU origin : 0001-0001-0001
GVRP registration type : Normal
# RouterB和RouterC的查看方法与RouterA类似,这里不再赘述。