文章目录
1.简介及其应用
GARP(General Attribute Register Protocol),通用属性注册协议,用于属性的动态注册和注销,是一个通用协议的模板。目前的应用有GVRP和GMRP。下面基本都以GVRP举例。
GVRP(General Vlan Register Protocol),GARP应用于vlan的应用,设想一下如下图一个简单的拓扑。如果在Switch1上创建一个vlan,如果想要和Swicth5通信,那么需要分别在Switch3和Switch5上分别创建相同的vlan,如果拓扑更复杂,那么手动配置的Switch更多,一是容易出错,二是工作量有点大。如果用GVRP功能,那么是需要在Switch1上创建一个vlan,然后这个vlan属性就会传播,在Switch3和Switch5上被注册,这样Switch1到Switch5单向通信,同样如果再在Switch5上创建同样的vlan那么就实现双向通信。
2.封包结构、类型和差异
2.1 封包结构
说明:
(1)DA:不同的GARP应用取值不同,GVRP的组播mac是01-80-C2-00-00-21。GMRP是01-80-C2-00-00-20
(2)Protocol Id:1(0x0001)
(3)Attr Type:属性类型,GVRP是1表示vlan-Id
(4)End Mask:是0
(5)Length:属性长度,范围在2-255时间,GVRP是2(vlan-id范围是0-4095)
(6)Value:不同的应用定义的属性值的长度不同N也不同,GVRP中value就是vlanId,2个字节。如果event是LeaveAll,那么值无效
(7)Event:就是属性类型,包括Empty(5)、LeaveIn(4)、LeaveEmpty(3)、JoinIn(2)、JoinEnpty(1)和LeaveAll(0)六种属性
2.2属性类型和差异
(1)Empty:不对外声明此属性,是否有其他设备希望注册此属性。
(2)JoinEmpty:未注册此属性,但是向外公告希望被其他设备注册
(3)JoinIn:已经注册此属性,同时向外公告希望被其他设备注册
(4)LeaveEmpty:未注册此属性,但是向外公告希望其他设备注销此属性
(5)LeaveIn:以注册此属性,向外公告希望其他设备注销此属性
(6)LeaveAll:向外公告希望其他设备注册所有已经注册的属性。
区别:
(1)JoinEmpty和JoinIn的区别:
以GVRP来说,如果一个port接收到来自vlan的声明,那么这个port会加入这个vlan,那么如果他不是终端,那么他还会通过其他port传输该vlan,但是其他port并不属于这个vlan,那么其他port对外就发送JoinEmpty报文。如果自己已经属于这个vlan,并对外声明这个vlan,那么就发送JoinIn,比如手动创建一个vlan,并且配置port,那么这个port对外声明就发送JoinIn。
(2)LeaveEmpty和LeaveIn的区别:
和上面的类似。以GVRP来说,当手动删除一个静态vlan的时候,会发送leaveempty,因为vlan已经被删除,这个port不属于这个vlan了。如果port仍然属于这个vlan,对外发送这个vlan的leave,那么就发送leaveIn。
具体情况发什么封包还跟状态机有关,后面叙述。
3.属性注册和注销的过程
注册分为单向注册和双向注册,注销也一样。单向注册属性只能在一个方向上进行通信。
(1)单向和双向注册的过程,如下图:
描述:(1)(2)(3)是一个单向注册的过程,例如创建vlan2,那么单向注册过后p1,p2,p4都属于vlan2,那么Switch1和Switch可以通过vlan2进行通信。这里注意发送joinIn和JoinEmpty。在Swicth1上创建了vlan2,并配置了p1,那么p1是属于vlan2的。而p3不属于vlan2,只是对外公告vlan2属性。
加上(4)(5)(6)后就是一次双向注册的过程。需要创建和Switch1一样的vlan,否则还是属于一次单向注册。注册后的结果是p3属于vlan2,这样swicth3和switch1也可以通过vlan2通信。这里因为p2属于vlan2所以是发送joinIn。
(2)单向注销和双向注销的过程,如下图:
描述:通过上面的双向注册后,p1-p4都属于vlan2并且可以相互通信。(1)(2)(3)是一次单向注销的过程。Swicth1手动删除vlan2后,因为p1已经不属于vlan2,所以发送leaveEmpty,p3仍然属于vlan2所以发送leaveIn。单向后Switch3可以和Switch1通信。加上(4)(5)(6)后双向注销,vlan2的属性声明全部被注销。
4.三个定时器及其作用
GARP定义了三个定时器,join-timer、leave-timer和leave_all-timer。默认时间一次为200ms,600ms,10000ms.并有一下规定
可以手动配置三个定时器
- Leave-all_timer要大于leave-timer
- Leave-timer要大于join-timer*2
- join-timer和Leave-all_timer支持随机。join-timer随机不能大于配置的值。(配置的Leave-all_timer1)<Leave-all_timer的随机值<(配置的Leave-all_timer1.5)
- join-timer和Leave-all_timer是per-port的(也就是每个port设置一个)
- leave-timer是per-attribute和per-port的(也就是每个port的每个注册的属性设定一个)
三个定时器如下行为:
三个定时器之前的关系:
(1)leave-all-timer是在port up并且garp enable之后启动,当leave-all-timer过期后会启动join-timer,并且重启leave-all-timer,当join-timer过期后会向这个port发送leave-all封包,并为这个port的所有属性都启动一个leave-timer,如果此时有属性的join封包过来就停止leave-timer
(2)收到leave(leaveIn/leaveMt)后也会启动leave-timer,等到leave-timer过期后才删除。
5.收到event的行为
6.两个状态机(Applicant和Register)
(1)Register Machine
这个状态机表示注册属性的变化状态,包含三种状态:
- IN:已经注册了这个属性
- MT:此属性的声明已经全部被注销,初始化默认是这个状态
- LV:已经注册这个属性,但是由于leave-all-timer过期或者收到leave封包导致将要注销此属性。
状态转换图如下:
(2)Applicant Machine
这个状态机用来表示每个属性在状态变化以触发发送什么类型的封包出去。状态很多如下图。
- Anxious的等级:如上图,有Very Anxious,Anxious,Quiet,按照我的理解是对某个属性的信任程度,比如刚开始收到一个新的属性置为Very Anxious,如果再次收到就降一级为Anxious,如果第三次收到就是Quiet,表示不用担心的意思了。
- Member和Observer:我的理解是在GARP中扮演的角色,按照是否向外公告自己属性来区分。例如如果一个port向外公告了这个属性,那么这个属性就属于Member了,否则就是Observer。
- Active Member和Passive Member:Passive Member属于中间角色,在Active和Observer转换时候先经过Passive Member。
说明:
因为状态变化很多比较复杂,所有列举了主要的几个情况的状态变化,上图是对一个属性的不同状况发生的状态变化的描述。
(1)[1]号流程是一个p2收到join封包进行属性注册的过程。
属性注册之前初始化时VO状态,收到一次属性声明后变成AO,再收到一次就是QO,之后如果再收到一直都是QO状态。
因为p2的leave-all-timer会过期或者收到来自p1的leave封包(vlan被删除)此时状态转为LO,之后就有可能回到AO或者VO,条件如图。
(2)[2]号流程就是创建静态vlan后的状态变化(p1)。
初始化状态是VO,后面请求发送变成VP,随后连续发送两个join变成QA。
之后如果删除vlan属性的话状态变成LA。
(3)[3]号流程说的是一个port收到一个新的属性。
如果还有其他port那么就需要从其他port(p3)公告出去。对于其他port(p3)来说这个属性也会新的,初始为VO,之后请求发送到VP,连续两次发送join后变成QA。
注意这个之后p3就不会主动发送join封包,需要等待通知,这个通知事件就是收到(来自p4)这个属性的leave封包或者leave-all,一般都是收到leave-all(来自p4的),转成VP,之后再连续发送两次join。就这样实现循环发送。如果此时这个属性没了,也就是这个属性的join封包没有发送出去,等到leave-timer过期,那么属性就变成VO状态。
(4)[4]号流程说的是双向注册时候情况。
当vlan属性在Switch3创建的时候,属性从p4公告出去,注意这个时候p3的这个属性状态是可能是VP AA QA,这里讲述AA和QA(最有可能的状态)此时收到p4的join封包后如果是AA则到->QA,否则QA不变。
主要还是关注p2的属性状态变化,因为此时需要p2把注册属性公告出去,此时p2的这个属性状态最有可能出现的状态是AO或者QO,如箭头所示。如果是AO的话此时请求从p2发送此属性的join封包,变化到AP(因为此时要变成Member),发送出去join后变为QA。如果是QO先变成QP,需要等到p2的leave-all -timer过期后,才变成VP。之后的状态变化就和[3]号一样。
(5)[1]号情况对应单向注册的p2 p4,[2]号对应的是p1和双向注册的p4。[3]号是p3。[4]号对应的是双向注册的p2.
(6)要分清port的角色,是member还是observer。注意leave-all-timer的行为和作用
7.三种注册模式Normal
(1)FIXED:
只允许静态属性在此端口向外声明,不允许创建动态vlan。
(2)NORMAL:
允许注册动态vlan,并且向外声明静态和动态vlan公告
3)FORBIDDEN:
不允许动态vlan注册,只允许公告vlan1的消息。
文章说明
- 文章参考的是IEEE 802.1d 1998,IEEE 802.1d 2003和802.1q以及其他一些文档
- 特别是对最后一个状态流程的理解,有一些理解的不是很到位,如果后面理解还会补充
- 如果有什么问题,还请讨论一下,还在学习中
- 书写文档和标准文档会贴在文件中。需要学习的可以下载