BGP GR,EOR(end of rib)

发布时间 2023-11-20 21:07:07作者: 学好声韵辩四声

通常当BGP会话重启时,所有BGP对等体检测到该会话失效,然后再正常。该“down/up”转换导致路由振动以及BGP路由的重计算,并且会让路由器产生更新与撤消消息。这样的振动可能会产生暂时的转发黑洞或暂时的转发环路。同样在路由器控制层面上会浪费大量的资源。如此这样的问题还会传递到整个网络。

定义的一种新的机制,当BGP重启的时候尽可能地减少BGP带来的负面影响。End-of-RIB标记可以被用作传达路由收敛信息。一种新的BGP能力,名字为:“Graceful Restart Capability”,该能力被定义为BGP Speaker可以保留转发状态当BGP重启的时候。最终,流程被定义为TCP重置而暂时保留路由信息。

GR用一段话总结一下就是:互为邻居的路由器,如果对端的路由器不幸牺牲了,请你先不要删除自己的转发项,保留一段时间,等到他起来后,会重新告诉你路由和VPN的信息,到时候你老化一下就可以了。
GR可以保证在控制平面不可用的时候,尽量保持数据平面的可达性。

End-of-RIB标记

一个不带有NLRI或者不带有撤消NLRI的Update消息被认为是End-of-RIB标记。该标记可以被用作标识邻居对等体在会话建立后完成路由初始更新。对于IPv4地址簇,End-of-RIB标记是一个最短长度的Update消息。对于其它地址簇,则是只包含不带有撤消消息的MP_UNREACH_NLRI属性的Update消息。

虽然End-of-RIB被表示为BGP Graceful Restart的用途,但需要说明通过该标记表明路由初始的完成可以提高对路由收敛的速度,因此推荐配置。

另外,如果BGP Speaker可以认识对等体所发出的End-of-RIB标记,不管在BGP重启时能力保留了转发状态,都可以很好的提高路由收敛速度。

新BGP能力字段组成

新BGP能力由“Restart Flags”字段,“Restart Time”字段,0或多个<AFI, SAFI, Flags for address family>字段组成:

+-------------------------------------------------------------------+
| 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

该字段包含关于Restart的标记比特

         0 1 2 3
        +-+-+-+-+
        |R|Resv.|
        +-+-+-+-+

最为重要的比特被定义为:Restart State (R)比特。主要是为了防止当多个相互对等体BGP Speaker重启,导致相互等待End-of-RIB标记的僵局所提出的。当R位被置1时,表明BGP Speaker重启,并且该对等体在宣告路由信息给对等体前不再等待该BGP Speaker发送的End-of-RIB标记。

保留字段被定义为全0。

Restart Time

这是一个以秒为单位的计时器,当计时器超时,BGP Speaker则主动建立BGP会话。这可以被用作对等体提高路由收敛,并防止BGP Speaker重启后没有建立连接。

Address Family Identifier (AFI):

这字段表示承载GR宣告路由的网络层协议ID。

Subsequent Address Family Identifier (SAFI):

该字段提供关于NLRI类型的额外信息

Flags for Address Family

这字段包含了地址簇信息的标记比特。

         0 1 2 3 4 5 6 7
        +-+-+-+-+-+-+-+-+
        |F|   Reserved  |
        +-+-+-+-+-+-+-+-+

该字段最为重要的一个比特被定义为:Forwarding State (F)位。F位被用作表示,在BGP重启前保留某地址簇的转发状态。当F位被置1时,表明转发状态被保留。

保留字段被定义全部为0。

GR操作过程

Restarting Speaker重启前

一个BGP Speaker宣告针对某地址簇信息的GR能力给对等体,确定当BGP重启时是否保留该地址簇的转发状态。另外,即使BGP Speaker不拥有该能力去保留相关地址簇的转发状态,但仍然推荐宣告该能力到对等体。首先,宣告这能力可以产生End-of-RIB标记,提高路由收敛速度;另外,表明该对等体支持GR,并希望执行GR。
当Restarting Speaker重启,如果设备条件允许应该保留转发状态并老化本地的Loc-RIB。
老化路由信息与普通路由信息没有任何区别,只是打上老化标记。

Restarting Speaker重启后

一但Restarting Speaker与Receiving Speaker重新建立BGP会话,Restarting Speaker将会接收并处理所有对等体发过来的BGP消息。Restarting Speaker会延迟路由选择过程,直到所有对等体的End-of-RIB (除接收到R位置1的Peer,以及不向外宣告GR能力的Peer的所有Peer)。
自BGP Speaker执行路由选择后,转发状态得到更新,并且之前的老化标记会被删除掉。Adj-RIB-Out会被宣告到对等体处。
另外当路由初始更新完成后,也会主动发送End-of-RIB标记。

Receiving Speaker操作过程

当Receiving Speaker检测到拥有GR能力的BGP会话的TCP连接重置后,保留并老化所有从该对等体收到的相关地址簇路由信息。当出现连续重启的情况,路由会删除带的老化标记的路由信息。
Receiving Speaker更新路由信息,删除老化标记。一旦收到相关地址簇的End-of-RIB,Receiving Speaker会马上删除老化标记。
如果会话在“Restart Time”时间内无法重新建立BGP会话,Receiving Speaker则删除带有老化标记的路由。
一旦BGP会话成功建立,接收到一个新的GR能力里,如果某地址簇的F位没有被置1,或者新的GR能力里不包含某地址簇信息,或者当BGP会话建立后,一直没收到新的GR消息,以上三种情况Receiving Speaker都会马上删除所有带老化标记的路由信息。