在中小企业中,vlan的划分方式都是基于手动来创建,当局域网中交换机数量很多时,众多的vlan数量又发生数量变化,这种技术含量低且简单重复劳动应该要避免,这时vlan的开发者想到了了一种自动的注册方式——GVRP协议能实现vlan信息的注册和注销,s1700系列不支持。
从拓扑中看到三台交换机所连接的链路是 trunk链路,原因在于GVRP注册功能仅可在trunk端口类型上使能,终端用户连接的端口是不能通过GVRP功能自动加入到所需的vlan之中,需要采取手动配置。
建议做之前,每台交换机通过配置命令关闭日志提示信息,避免中途弹出干扰。
[s3]info-center source DS channel 0 trap state off log state off
所有参加gvrp的交换机的机联口的端口类型必须是trunk类型。(其余交换机的机联口也是这样配置)
[s2-GigabitEthernet0/0/24]port link-type trunk
[s2-GigabitEthernet0/0/24]port trunk allow-pass vlan all
视图模式下,每个交换机启用GVRP
[s1]gvrp
每个交换机下的机连接口下启用GVRP
[s1-GigabitEthernet0/0/24]gvrp
目前为止,gvrp配置完成,并且每个交换机只有默认vlan1
在任意一条交换机上创建一条vlan13
观察其他两台交换机(在其他交换机上创建结果测试也一样。),发现其他交换机上存在了一条vlan13
观察vlan 类型
common:共同(本地创建的)
dynamic :动态(学习到的)
vlan1是默认vlan,因此vlan1也属于common类型。
被斩首的GVRP
拓扑中,将s2交换机的g0/0/24号关闭。
[S2-GigabitEthernet0/0/24]shutdown
站在s1上就看不到s2的vlan15了,s1动态学习到的vlan15消失不见。
抹不掉GVRP的影子
当恢复端口之后,我站在s1上删除s2的vlan15,出现了如下提示
不能删除的根本原因就是该vlan是学习到的,不是本地建立的,只能在源头删除。
前文说过了,Gvrp就是Garp协议中一种应用,GARP作用传递属性,所以Gvrp就是用来传递vlan属性的!GVRP协议可以实现vlan信息的自动注册和注销!
深入剖析GVRP
对于GVRP是GARP的一种应用(GARP_通用属性注册协议),在抓取报文抓到GARP就不要奇怪了,IEEE规定了一个Mac地址0180-C200-0021
二层数据帧的目的mac如果是这个地址且交换机启用了GARP功能,交换机便可以通过这个地址来知晓vlanID。
GVRP的注册和注销
gvrp通过声明和回收声明来实现vlan信息的注册和注销
注意:GVRP协议的属性注册和注销仅仅是对于接收到GVRP协议报文的端口而言。
从这张图可以看出,s1学到s2的vlan15只在10号口中体现,15号口是压根没有vlan15的信息,但是s3有vlan15的信息,代表了s1向s3传播了vlan15的信息!
GARP消息类型
Jion消息、Leave消息、LeaveAll 消息。
jion加入消息分为两个消息:当一个GVRP应用实体希望其他设备注册自己的属性信息时,对外发送jion消息;当收到其他实体发来的jion消息,或本设备静态配置了某些属性,需要其他GARP应用实体进行注册时,也会向外发送jion消息。
jionempty消息:自己的vlan消息中,没有某一个vlan,新增vlan后,同步消息给其他交换机
jionin消息 (抓包无法抓取):其他交换价收到jion消息,得知新增vlan信息,若是自己没有,添加;若是本地存在,回应jionin消息
在抓取的报文的试验中,我用个最新版的c100的ENSP也没看到jion in的消息,在leavall 消息之后。连续出现了两个 jionempty的消息,属于ENSP模拟器的bug,从理论分析,第二个应该是jion in的消息,GARP工作原理,下文详细介绍。
Leave消息是删除vlan信息
leave all
每个应用实体启动后,将同时启动LeaveALL定时器,当该定时器超时后将对外发送leaveALL消息,用来注销所有属性,周期性清除网络中的垃圾属性(例如某个属性已经被删除,,由于设备宕机,并没有发送leave消息)如下图:保持精准的属性信息
GARP定时器
Garp协议中用到了jion 、hold、leave、leaveall4个定时器
gvrp工作原理试验拓扑
抓取s1的10号端口和15号端口,
在没有创建任何vlan之前,报文中可以看到周期性发送GARP报文的leavall 消息类型,但是不要被报文的表面所迷惑,这里面其实发送的是GARP报文,是通过vlan1发送的消息。
并且,GVRP消息中数据帧里的目的mac地址,就是之前提到的保留地址(IEEE规定)
在s1交换机上创建vlan15.
观察报文s2的10号端口报文发现,jion empty 消息中携带了vlan15的信息,要告诉给其他交换机,发送的同时启用jion,hold计时器(不是立马发送 jion empty消息,要等hold 计时器)
同样,在s1的15号端口中,也出现了报文消息类型
当你在s2交换机创建了vlan15的时候,你的24号口自动被加入到了vlan 15,我只做了vlan 15其他的并没有配置(只启用了gvrp,端口类型改为trunk,允许所有vlan通过)这个操作就是被gvrp完成。
站在s2交换机上,创建了vlan15,设备会启用jion/hold定时器,join定时器本身不发送任何消息(用于启动hlod定时器),具体逻辑关系如图
站在s1交换机上,设备的10和15号口被加入到了vlan15中,同样也是gvrp 做的!
那么收到的join empty消息后的交换机会做以下事情
按照拓扑:会继续传给其他交换机,以此类推,将创建好的vlan信息传遍整个网络。
注意一个问题,当都发送完毕之后,图中的中转的这台交换机10号口,可并没有加入到vlan15中。这里就是所谓的没有注册上。
这就需要下文继续分析返回确认的报文了
第一种返回确认方式
既然有发送的方向,那么分析下在动态学习完vlan信息后的交换机会做什么?
如图所示,以此类推,静默响应。
第二种返回确认方式:
不过图中s3启动hold和jion定时器的意义有了区别。
s3就从24号口发送jion in的消息
当交换机s2的15号口收到jion in 消息做的动作
1.s1收到s2发来的jion in消息
2.停止发送join empty消息给s2
leave 注销消息
我删除s1里的vlan15信息,抓到leave注销信息,而且只能有一个,
s1的10号口和15号口会启动hold定时器发送leave empty消息,通过vlan1发送(VID0x01),里边携带了vlan15号信息,端口从而在vlan15中注销。
当s1删除vlan15后,s2收到后一定会回复 jion in消息表示确认,因此在leave all 消息后出现连个 jion empty是不对的!
当我删除vlan时候,工作原理如下
不要担心对端收不到,因为会有leave all消息户更新vlan信息的,
因此在拓扑中,当s1创建好一个vlan后,抓取的报文中,会发现leave all消息后面会有两个jion empty的消息,红色箭头标注的报文不应该是jion empty,应该 是 jion in 消息,用于回复消息,不让对端在发送jion empty消息,符合gvrp工作原理
接口注册模式
试验拓扑
GVRP的接口注册模式
接口的注册模式是否有效果,一定要关注在哪个接口下产生。
[s1-GigabitEthernet0/0/15]gvrp registration
将s1的g0/0/10端口注册模式调整fixed模式:禁止该接口动态注册或注销vlan,只传播静态vlan,不传播动态vlan
[s1-GigabitEthernet0/0/10]gvrp registration fixed
s2交换机再次创建一个vlan20 [S2]vlan 20
查看s1交换机内,无法学到vlan20,
,vlan20对于s2来说是本地vlan ,对于s1来说是动态vlan,S1的10号口设置成fix,该端口就禁止注册,所以学不到s2的vlan20了,更何况s3交换机。
按照fix的属性,可以看出
s1本身的g0/0/10端口不存在注册一说,只存在撤销的概念,当s1的10号口注册模式变为fix ,s2的24号口本身不受影响,依旧加入了vlan20.
按照这个说法,保持该配置,我在s1上创建一个vlan 28,
[s1]vlan 28
在s2上观察vlan情况,发现s2上有了vlan 28,这就说明了对于S1来说,GVRP流入该10号端口后,才形成注册,但是s1的10号口根本不存在注册的概念,这个端口是存在于静态vlan之中的,而fix属性是可以传播静态vlan的
就是因为fix的属性不传播动态vlan ,因此s3是收不到s2本地的vlan 15的
forbidden
先undo掉s1的10号口,
[s1-GigabitEthernet0/0/10]undo gvrp registration fixed
设置s2的24号口
[S2-GigabitEthernet0/0/24]gvrp registration forbidden
查看,s1交换机,发现s2本地的vlan 15是没有,s3也一样,证明静态vlan没有被传播,
从以上试验结果可以说明端口注册模式的重要性,增加了安全性和效率。
GVRP定时器修改
[S2]garp timer leaveall ?
默认时间是1000厘秒,相当于10秒。
生产场景中,leavaeall 改为12000,两分钟
[S2]garp timer leaveall 12000
不要改太小的值,影响带宽。
在实际的组网中,GVRP定时器推荐设置:
[S2-GigabitEthernet0/0/24]garp timer
hold 默认10厘秒改为100厘秒。(1秒)
join 默认20厘秒改为600厘秒(6秒)。
leave 默认60厘秒改为3000厘秒。(30秒)
leaveALL 默认1000厘秒改为12000厘秒(2分钟)