1、GARP一般属性注册协议
GARP作为一个属性注册协议的载体,可以用来传播属性。将GARP协议报文的内容映射成不同的属性即可支持不同上层协议应用。例如GMRP和GVRP:
GMRP是GARP的一种应用,用于注册和注销组播属性;
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。
2、GMRP功能
GMRP(GARP Multicast Registration Protocol)是基于GARP的一个组播注册协议,用于动态维护二层交换机、端点设备中的组播注册信息。
GMRP在802.1D中定义,用于交换机(Bridge)和端点设备(end station)自动加入(注册)或离开(注销)某个组播组,使LAN知道网络中哪些地方有组播的接收者,这样组播树是spanning tree的一个子集,因为没有加入组播组的交换机和端点设备的路径被剪枝(prune)掉了。GMRP协议是LAN设备的一个可选特性,支持扩展过滤服务(Extended Filtering Servic)的条件下才支持GMRP。
端点设备通过注册、注销命令加入或退出组播组(命令格式见下文),同一个组播组的设备,有一个设备发出报文,交换机实现组内其他设备都可以接收到该报文,不在组内的设备无法接收到。
端点设备加入组播组的过程:通过向交换机发送加入命令,交换机收到命令后在交换机中注册该设备端口,并把注册申请转发到组播组内其他所有设备,其他设备都更新自己的组播端口列表。
路由器与二层交换机:
路由器把组播报文转发下来,在接入层边缘的二层交换机把组播报文转发给组播用户;传统二层交换机将组播报文 广播,浪费网络带宽,引起广播风暴;组播组动态变化,需要实时维护更新;组播用户数量增长,骨干网络带宽无需增加。
3、GMRP在自动化变电站的应用
目前变电站常用的多播报文技术有虚拟局域网(VLAN )、GMRP (GARP 多播注册协议)、静态多播地址表。
IEC 61850 标准是变电站自动化领域最为完善的通信标准,该标准将变电站自动化系统 分为三个层次,即站控层、间隔层、过程层。
站控层包括监控主机、操作员工作站、远动工作 站、工程师工作站、GPS对时装置等,形成全站监控管理中心;
间隔层包括继电保护装置、测 控装置等二次设备;
过程层包括变压器、断路器、隔离开关、互感器等一次设备及其所属的智能组件。
过程层网络上传输的大部分数据都是组播,GOOSE报文和SV报文不属于IP组播,只是二层的MAC组播。
4、帧格式
4.1 GMRP帧格式
1)目的MAC地址:组播地址固定0x01-80-C2-00-00-20;
2)源MAC地址:产生GMRP报文的设备MAC地址;
3)长度:整个GMRP的数据帧长度;
4)LLC逻辑数据链路:DSAP目的地址,SSAP源地址都使用地址为0x42的LLC服务接入点。Ctl控制字段取值0x03,表明无连接服务。
5)协议ID:所有GARP都使用0x0001的协议ID,便于与其他LLC服务相区别。
6)信息字段可以包含多个信息
a 、属性类型。0x01组成员属性,声明接收组播数据;0x02服务属性成员,兼容不支持GARP的设备。
b、 属性长度。
c、 属性事件
0x00 Leave all 定时器超时后,注销所有属性; (此处的属性即为 是否在组播组)
0x01 Join Empty 声明一个本身没有注册的属性
0x02 Join In 声明一个本身已经注册的属性;
0x03 Leave Empty 注销一个本身没有注册的属性;
0x04 Leave In 注册一个本身已经注册的属性;
0x05 Empty 不声明也未注册,单希望收到该属性 声明。通常用于监测报文的设备。
d、属性值 属性类型为组成员时,属性值为48位组播地址,010CCD010000~010CCD01FFFF间任意地址,通过此处地址区分不同的分组;
为服务属性时,属性值为0x00转发组播帧 、0x01转发所有未注册组播帧。
e、属性结束标志 0x00;
7) 报文结束标志 0x00。
4.2 定时器
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定时器。
4.3 GOOSE帧格式
1)目的MAC:010CCD010000~010CCD01FFFF间任意地址,此地址为组播地址,对应GMRP报文中的组成员属性的属性值;
2)源MAC。
3)TPID:0x8100;
4)TCI :0x4000;
5)以太网报文类型:0x88B8;
6)APPID:0x0000~0x3FFFF;
7)长度:8+M;
8)保留4字节:0x00000000;
9)ASDU:长度M。
4.4 SV帧格式
5 FPGA处理
FPGA可只完成MAC层数据封包、CRC校验发送,由CPU处理具体协议数据。
6 参考文献
《GMRP组播功能测试-万方数据知识服务平台》,有详细测试方法介绍。
《浅谈GMRP在变电站中的应用 - 智能电网 - 电子发烧友网》
《GVRP技术_printf_mylife的专栏-CSDN博客_gvrp》csdn博文,详述了加入、退出的详细过程,GMRP可参考GVRP的过程。