• 文章搜索:
  • 目录

        • 分享到...

        • 新浪微博
        • 腾讯微博
        • 推荐到豆瓣 豆瓣空间
        • 分享到搜狐微博 搜狐微博
        • 分享到QQ空间 QQ空间
        • 分享到腾讯朋友 腾讯朋友
        • 网易微博分享 网易微博
        • 添加到百度搜藏 百度搜藏
        • 转贴到开心网 开心网
        • 转发好友 告诉聊友
    • 推荐
    • 打印
    • 收藏

    BGP Graceful Restart

    作者:  |  上传时间:2010-10-12  |  关键字:网络大爬虫,第三期,BGP专题

    /陈磊

    1   Graceful Restart简介:

    关于GR通用的基本概念,原理,以及作用,请参考《网络之路-OSPF专题讨论》中的文章《OSPF Graceful Restart》。

    该文对于GR的来源,作用和通原理做了详细的介绍,本文将跳过这方面,直接进入BGP GR实现的介绍。

    2   BGP Graceful Restart概述:

    2.1      GR中的角色:

    GR中完成的任务来看,分为GR Restarter(协议重起的设备)和GR Helper(协助完成协议重起的设备)两个角色。在本文中,将BGP GR过程中的GR Restarter称为Restarting SpeakerGR Helper称为Receiving Speaker

    2.2      GRBGP的要求:

    为了实现GRBGP必须满足以下几点:

    Ø         在邻居之间通告各自的GR能力;

    Ø         GR被触发后,通知邻居GR事件的发生;

    Ø         Receiving Speaker上,在与Restarting Speaker之间的BGP会话所依赖的TCP连接中断后或者重建过程中,需要保留并使用从Restarting Speaker学来的路由,并进行相应的标记和维护;

    Ø         GR正常结束时机的确定,以及异常退出的条件;

     

    为了做到以上几点,BGP引入了如下的变化:

    2.3      Marker for End-of-RIB

    定义:一个不包含任何NLRI,或withdrawn NLRI update被定义为Marker for End-of-RIB

    如:当一个BGP连接建立完成后,设备会向邻居发送自己的BGP路由。当所有路由发送完成后,会在最后一个Update后,再发送一个空的Update,这个空的Update就是Marker for End-of-RIB。被用作路由信息表结束的标志。

    End-of-RIB可以帮助设备确认已经学习到了邻居所有的路由,是GR正常结束的条件之一。

    2.4      Graceful Restart Capability

    GR引入的新BGP capability类型。该能力放在BGPOpen报文中携带,用来在邻居之间通告各自的GR能力;同时,在发生RPRoute Processor)切换事件后,通知对端GR状态的开始。

    CAP的定义如下:

    Capability code:64

    Capability length:可变长度

      Capability value:由Restart FlagsRestart Time,地址族编号组成。

                                 可以按照不同的地址族,分别通告其GR能力    

    Restart Flags (4 bits)       

    Restart Time in seconds (12 bits)   

    Address Family Identifier (16 bits)   

    Subsequent Address Family Identifier (8 bits)

    Flags for Address Family (8 bits)     

    ...    

    Address Family Identifier (16 bits)   

    Subsequent Address Family Identifier (8 bits)

    Flags for Address Family (8 bits)

                   

    Ø         Restart Flags:该Flag只使用了最高位的一个bit。当Restarting Speaker发生RP切换后,新的RP重新触发BGP邻居的建立,发送的第一个OPEN报文中,该flag会置位。用来告知Receiving Speaker邻居,本端的BGP开始GR

    Ø         Restart time:由Restarting Speaker告知Receiving SpeakerGR过程中,邻居关系建立需要的时间上限。

    Ø         AFISAFIFlags for Address Family:这三个字段组合,实现了GR能力的通告。AFI/SAFIMP-BGP中用来区分不同网络层协议的地址族编号。每个地址族都对应了一个Flags for Address Family,表示相应的地址族对于GR的支持能力。该Flag也只使用了最高位的一个bit。当Restarting Speaker发生重启,如果能够保证在重启过程中,相应地址族报文的转发不受影响,其发送的OPEN报文中,会将相应的AFIFlags for Address Family置位。

    2.5      Graceful restart capability实现GR能力通告的一些补充

    如果邻居的OPEN报文中含有Graceful restart capability,表示该邻居一定会在路由发送完成之后发送一个End-of-RIB marker。该标记可以帮助加速路由表的收敛。

    无论设备是GR restarter还是GR helper,都要求设备在Open报文中包含Graceful restart capability。以标识自己对于GR的支持。同时,也表示自己支持End-of-RIB marker,邻居可以通过该标志来判断自己路由表的结束。

    如果邻居的OPEN报文中的Graceful restart capabilitycapability value为空,表示邻居是一个GR aware设备:能够作为一个Receiving Speaker可以识别Restarting SpeakerGR发起信令,配合在Restarting Speaker重起期间,保留从Restarting Speaker学习到的路由转发表项;但是,该设备自己,没有在协议重启过程中,保持路由转发表项的能力,不能做GR.

    2.6      BGP路由的Stale状态

    Receiving Speaker设备在得知邻居进入GR后,会将从该邻居学来的BGP路由标记为Stale状态。标记为Stale状态的路由,在转发和选路方面,与其他路由没有区别。当GR结束后,Stale路由会根据新路由的学习情况被unmark stale状态或者被删除。

     

    3   BGP Graceful Restart过程的行为约束:

    3.1      GR的流程:

    RFC4724定义了BGP GR的详细流程,结合ComwareV5GR实现,如图1

     

                                                                1BGP GR流程图

    3.2      Restarting Speaker的行为约定:

    BGP邻居重新建立前:

    RP切换前:

    Ø         Restarting SpeakerReceiving Speaker之间在建立BGP邻居时,通过Open报文中的Graceful restart capability来交互两者对于GR的支持,同时,使用End-of-RIB marker来标识各自路由表的结束。

    RP切换后,新的RP开始启动BGP连接:

    Ø         保证GR相关地址族的转发表项不受影响,在重启过程中能够正常使用。-――Receiving Speaker转发过来的数据报文仍然能够正常转发。

    Ø         重启BGP连接时,发送的OPEN报文中,restart位置位;GR过程中转发不受影响的地址族的Flags for Address Family置位。-――通知Receiving Speaker GR开始,同时,告知其哪些地址族可以实现GR

    BGP邻居重新建立后(RFC4724):

    Ø         连接建立后,开始从邻居接收update信息,在此过程中,不进行BGP的路由选路,不向外发布路由。-――防止在路由收敛完成前发送了错误的路由导致环路或者路由黑洞

    Ø         等待Restarting Speaker收到了所有邻居的End-of-RIB marker(不包括restart位置位的设备和Open报文中没有Graceful restart capability的设备)。―――这里的所有邻居中,不包括restart位置位的设备,是为了防止当两台相邻的设备同时重启进行GR时,都等待对方的End-of-RIB marker导致死锁。

    Ø         再等待其他路由协议通知路由收敛完成,才恢复选路,刷新转发表,并向邻居发布路由。路由发布完成后,也需要发送End-of-RIB marker

    BGP邻居重新建立后(我司V5平台实现):

    Ø         连接建立后,开始从邻居接收update信息,在此过程中,不向外发布路由,但是,路由选路仍然进行,但是不刷新FIB

    Ø         Restarting Speaker等待收到所有邻居的End-of-RIB marker后,通知路由管理该地址族退出GR,此时,开始向FIB表刷新路由

    Ø         等待路由管理通知所有的路由协议都已经退出GR后,开启一个60s的定时器;

    Ø         这段时间用来等待路由管理完成路由的迭代,定时器超时后,开始向Receiving Speaker发送路由,路由发送完成后,需要发送End-of-RIB marker

    BGP退出GR的条件:

    Ø         按照上面的流程,正常结束退出GR

    Ø         定时器wait-for-rib超时,仍然没有收到所有邻居的End-of-RIB marker,则退出GR―――该定时器用户可配,用来限制Restarting Speaker学习路由的时间上限

    3.3      Receiving Speaker的行为约定:

    进入GR helper状态的条件:

    Ø         TCP层通知设备,与Restarting SpeakerTCP连接中断。―――被动开始

    Ø         收到Restarting Speaker发出的新的Restart置位的OPEN报文。―――主动开始

    侦测到GR事件后:

    Ø         重置与Restarting SpeakerBGP连接,重置过程中不发送NOTIFICATION报文

    Ø         标记从Restarting Speaker学到的相关地址族的路由为stale状态,当作正常的路由信息使用。―――使用stale标记进行区分,方便之后的路由管理

    Ø         Receiving Speaker设备的Restart位不置位,除非Receiving Speaker设备自己也进行GR―――这里指两端同时进行GR的情况

    连接建立后:

    Ø         Restarting Speaker发送路由,路由信息发送完成后,发送End-of-RIB marker。即使没有路由需要发送,也要发送End-of-RIB marker―――以告知对方路由表的完结。

    Ø         收到Restarting Speaker发送的路由后,需要使用这些路由刷新stale状态的路由

    Ø         当收到Restarting Speaker发送的End-of-RIB marker后,需要立即删除该邻居相关地址族的所有仍然处于stale状态的路由。

    GR helper状态的退出条件:

    Ø         收到Restarting Speaker发出的路由和End-of-RIB marker,刷新自己的stale路由,正常退出

    Ø         定时器Restart timer超时,与Restarting Speaker的邻居关系仍然没有建立,则退出GR helper状态,删除所有标记位stale的路由―――该定时器用户可配,用来控制GR过程的时间

    Ø         Restarting Speaker的邻居建立后,如果在其OPEN报文中没有Graceful restart capability,或者Graceful restart capability中没有某一个地址族,或者某个地址族的Flags for Address Family没有置位,则删除该邻居所有相关地址族的stale路由

    3.4      GR导致的安全问题:

    支持GR的设备上,一个新BGP连接的建立,会导致旧连接的中断。这使得设备有可能受到DOS攻击。

    解决方法是对BGP连接做认证。