GARP学习总结

来源:互联网 发布:淘宝订单处理的流程 编辑:程序博客网 时间:2024/06/01 10:41


    GARP(Generic Attribute Registration Protocol)通用属性注册协议,802.1D中定义的用来在参与者(Participant)之间注册属性。GARP是一个通用的协议框架,本身并没有规定注册何种属性,我们可以利用GARP协议来注册某种具体的协议,也就是GARP的实例化。802.1D定义了一个实例,GMRP(Generic Muliticast Registration Protocol),用来注册组播属性,在802 LAN中建立组播树。802.1Q定义了另一个实例,GVRP(Generic Vlan Registration Protocol),用来注册vlan属性,将端口加入某个vlan中,也就是通过协议添加vlan端口成员。


GARP协议架构 


     GARP参与者是GARP协议通信和处理的主体,它是基于端口(Port)的,端点设备(end station)和交换机(bridge)的每一个端口都有一个参与者,参与者包括两个逻辑单元:应用单元(Applicant)和GID(GARP Information Declaration,GARP信息声明单元)。交换机的多个参与者(端口)之间通过GIP(GARP Information Propagation,GARP信息传播单元)连接和通信,端点设备由于只有一个端口,所以没有GIP。

     应用单元处理GARP应用相关的功能,具体的有:

    1)属性类型和属性值,以及他们的语法和具体编码。

        GMRP定义了两种属性类型:Group MAC Address和Group Service Requirement,Group MAC Address的属性值就是48bit的组播地址

    2)参与者通信的组播地址

        GMRP参与者通信的目的mac地址为01-80-C2-00-00-20

        GVRP参与者通信的目的mac地址为01-80-C2-00-00-21

    3)GARP状态机的要求


    应用单元处理的是应用的信息,处理属性相关的内容,GARP协议的处理和通信功能则主要有GID来实现,GID为了每个属性值的注册和声明的维护了一个工作状态机,状态机的状态和输入事件(event)决定了GARP的注册和声明行为,具体如下:

     1)Applicant State Transition Table

     2)Registrar State Transition Table

     3)Applicant and Registrar state machines

    4)处理服务原语(service primitive)

     声明(Declaration)原语:

     GID_Join.request (attribute_type, attribute_value)

     GID_Leave.request (attribute_type, attribute_value)

     Applicant state machine根据当前状态,动作,下一跳状态和Applicant State Transition Table的事件确定下一个状态和动作

    GID接收GIP和应用单元的声明原语,产生属性声明数据帧从端口发送出去。


    注册(Registration)原语:

   GID_Join.indication (attribute_type, attribute_value)

    GID_Leave.indication (attribute_type, attribute_value)

   Registrar state machine根据当前状态,动作,下一跳状态和Registrar State Transition Table的事件确定下一个状态和动作:注册和注销(de-registration)

   GID向GIP和应用单元的发出注册原语,应用单元将属性进行注册或注销。GIP连接的另一端GID则将注册或注销信息从端口发送出去,这样注册信息就在网络中传播


   GIP

   GIP向GIP发送注册原语,GIP则向另一端的GID产生声明原语。在规定的GIP背景(GIP context)下,如果端口状态为forwarding,如果为注册信息,则向端口发送GARP注册数据帧,如果是注销信息,而且发送注册原语的端口是唯一注册到这个属性值的端口则发送GARP注销GARP PDU,如果还有其它端口注册到了这个属性值,则不发送。例如如果端口1和2都加入到了某个组播组,即端口1和2有接收这个组播组的数据设备,那么端口1注销时,其它端口不发送注销数据帧。

   GIP context

   目前有两种GIP context:base spanning tree(STP或RSTP建立的转发树和端口状态)和multiple spanning tree(MSTP 建立的转发树和端口状态)



属性在网络中的传播过程

                                     


    上图是GARP属性属性信息的传播过程,交换机和端点设备都可以产生属性声明GARP PDU,一般情况下是端点设备发起属性声明,如端点设备加入某个组播组或某个vlan。端点设备的GARP参与者的应用单元向GID发送声明原语,GID产生属性声明GARP PDU,由MAC层提供的服务将GARP PDU从端口发送出去。交换机端口接收到GARP PDU后,MAC检查GARP PDU的DMAC为GARP group address,则将GARP PDU交给端口的GID处理,GID向端口的应用单元产生注册原语,应用单元则将当前接收端口注册到属性注册表项中(只有接收GARP的端口才会注册到属性表中,其余的只将属性传播到其它的交换机和端点设备);GID同时向GIP产生注册原语,这条注册原语被GIP转成声明原语传递给其它端口的GID,在规定的GIP context下,如果端口状态为forwarding,GID则请求MAC服务,将声明GARP PDU从端口发送出去。如果是其他状态(如RSTP端口的状态为block和disable),则不发送。其它的交换机和端点设备接收到传播的GARP声明帧后进行同样的注册和传播处理,直到GARP属性信息传播到网络中所有的交换机和端点设备。


                                       


    上图是其它设备向注册属性的设备发送数据时的数据传播路径,路径与注册的路径相同,只是数据流动的方向相反。如某个设备向组播组发送数据,由注册到这个组播组的端点设备接收

GARP PDU数据结构

     GARP PDU链路层采用802.2定义的LLC封装

      LLC封装:

     1)PDU的目的mac地址如下表所示(目前定义了2个,表中其它的暂时保留):

           支持GARP的设备接收到目的MAC地址为下表中的地址的帧,则不进行转发。不支持GARP的设备则向其它所有的端口广播。

          

     2)SMAC为发送端口的mac地址

     3)源和目的LLC地址和STP的LLC地址一样,为0x42

           mac层根据目的mac和协议ID(Protocol Identifier)区分GARP PDU和BPDU。GARP PDU的协议ID=1

   GARP PDU :    

   BNF形式定义的GARP数据结构

          GARP PDU ::= Protocol ID, Message {, Message}, End Mark
          Protocol ID SHORT ::= 1
          Message ::= Attribute Type, Attribute List

         Attribute Type BYTE ::= Defined by the specific GARP Application
         Attribute List ::= Attribute {,Attribute}, End Mark
         Attribute ::= Ordinary Attribute | LeaveAll Attribute
        Ordinary Attribute ::= Attribute Length, Attribute Event, Attribute Value
        LeaveAll Attribute ::= Attribute Length, LeaveAll Event
        Attribute Length BYTE ::= 2-255
       Attribute Event BYTE ::= JoinEmpty | JoinIn | LeaveEmpty | LeaveIn | Empty
       LeaveAll Event BYTE ::= LeaveAll
      Attribute Value ::= Defined by the specific GARP Application
      End Mark ::= 0x00 | End of PDU
       LeaveAll ::= 0
       JoinEmpty ::= 1
    JoinIn ::= 2
    LeaveEmpty ::= 3
    LeaveIn ::= 4
    Empty ::= 5




     




















































原创粉丝点击