华为 RS BGP协议原理与配置学习笔记

BGP   Border Gateway Protocol,边界网关协议

AS内部使用IGP来计算和发现路由,如OSPFISISRIP等。

AS之间使用BGP来传递和控制路由。

 如上图所示,BGP可以跨越多跳路由器建立邻居关系。为实现路由按需求进行控制和优选,BGP设计了诸多属性携带在路由中。BGP协议被设计运行在AS之间传递路由,AS之间是广域网链路,数据包在广域网上传递是可能出现不可预测的链路拥塞或丢失等情况,因此BGP使用TCP作为其承载协议来保证可靠性。

BGP使用TCP封装建立邻居关系,端口号为179,TCP采用单播建立连接,因此BGP协议并不像RIPOSPF一样使用组播发现邻居。单播建立连接也使BGP只能手动指定邻居。

 

先启动BGP的一端先发起TCP连接,如图所示,RTB先启动BGP协议,RTB使用随机端口号向RTA179端口发起TCP连接。 

如果两台路由器同时启动BGP协议,同时向179端口建立连接,会选择 router id大的路由器建立起的连接。

BGP通过报文的交互完成邻居建立、路由更新等操作,共有Open、Update、Notification、Keepalive和Route-refresh 5 种报文类型,如下图所示,
Open报文 :是 TCP 连接建立后发送的第一个报文,用于 建立BGP邻居之间 的连接关系。 BGP 邻居在接收到 Open 报文并协商成功后,将发送 Keepalive 报文确认并保持连接的有效性。确认后, BGP 邻居间可以进行 Update Notification Keepalive Route-refresh 报文的交换。
Update报文 :用于在 BGP邻居之间交换路由信息 Update 报文可以 发布 多条属性相同的可达路由信息,也可以 撤销 多条不可达路由信息。
一条Update 报文可以发布多条具有相同路由属性的可达路由,这些路由可共享一组路由属性。所有包含在一个给定的 Update 报文里的路由属性适用于该 Update 报文中的 NLRI Network Layer Reachability Information )字段里的所有目的地(用 IP 前缀表示)。
一条Update 报文可以撤销多条不可达路由。每一个路由通过目的地(用 IP 前缀表示),清楚地定义了 BGP 路由器之间先前通告过的路由。
一条Update 报文可以只用于撤销路由,这样就不需要包括路径属性或者 NLRI 。相反,也可以只用于通告可达路由,就不需要携带撤销路由信息了。
Notification 报文:当 BGP 路由器 检测到错误状态 时,就向邻居发出 Notification 报文,之后 BGP 连接会立即中断。
Keepalive 报文: BGP 路由器会周期性的向邻居发出 Keepalive 报文,用来 保持连接的有效性
Route-refresh 报文: Route-refresh 用于在改变路由策略后请求对等体 重新发送路由信息
 
BGP路由器报文交互过程: Idle状态 BGP 初始状态。在 Idle 状态下, BGP 路由器 拒绝邻居发送 的连接请求。只有在收到本设备的 Start事件 后, BGP 路由器才开始 尝试与其邻居进行TCP连接 ,并转至 Connect状态

在Connect状态下,BGP路由器启动连接重传定时器Connect Retry),等待TCP完成连接。如果TCP连接成功,那么BGP路由器向邻居发送Open报文,并转至OpenSent状态。 如果TCP连接失败,那么BGP路由器转至Active状态。 如果连接重传定时器超时,BGP路由器仍没有收到邻居的响应,那么BGP路由器继续尝试与其邻居进行TCP连接,停留在Connect状态。在Active状态下,BGP路由器总是在试图建立TCP连接。如果TCP连接成功,那么BGP路由器向邻居发送Open报文,关闭连接重传定时器,并转至OpenSent状态。 如果TCP连接失败,那么BGP路由器停留在Active状态。 如果连接重传定时器超时,BGP路由器仍没有收到邻居的响应,那么BGP路由器转至Connect状态。在OpenSent状态下,BGP路由器等待邻居的Open报文,并对收到的Open报文中的AS号、版本号、认证码等进行检查。如果收到的Open报文正确,那么BGP路由器发送Keepalive报文,并转至OpenConfirm状态。 如果发现收到的Open报文有错误,那么BGP路由器发送Notification报文给邻居,并转至Idle状态。在OpenConfirm状态下,BGP路由器等待KeepaliveNotification报文。如果收到Keepalive报文,则转至Established状态,如果收到Notification报文,则转至Idle状态。

在Established状态下,BGP路由器可以和邻居交换Update、Keepalive、Route-refresh报文和Notification报文。

生成BGP路由的方式有两种:第一种是使用配置命令network,第二种是使用配置命令import。如图所示,RTA上存在100.0.0.0/24100.0.1.0/24的两个用户网段,RTB上通过静态路由指定去往100.0.0.0/24网段的路由,通过OSPF学到去往100.0.1.0/24的路由。RTBRTC建立EBGP的邻居关系,RTB通过network命令宣告100.0.0.0/24,100.0.1.0/2410.1.12.0/24的路由,使对端EBGP邻居RTC学习到RTB路由表里的路由。

 

 

通过display命令在RTC上查看是否学到 BGP发布的路由条目。 

 

 BGP本身并不会产生新的路由,不会自动去学习到路由,BGP就像一个大卡车,通过network或者是import的方式将IGP产生的路由装载出去,进行传递。

lImport命令是根据运行的路由协议(RIPOSPFISIS等)将路由引入到BGP路由表中,同时import命令还可以引入直连和静态路由。

 

 RTA上存在100.0.0.0/24100.0.1.0/24的两个用户网段,RTB上通过静态路由指定去往100.0.0.0/24网段的路由,通过OSPF学到去往100.0.1.0/24的路由。RTBRTC建立EBGP的邻居关系,RTB通过import命令宣告100.0.0.0/24,100.0.1.0/2410.1.12.0/24的路由,使对端EBGP邻居学习到本AS内的路由。为了防止其他路由被引入到BGP中,需要配置ip-prefix进行精确匹配,调用route-policyBGP引入路由时进行控制。

BGP通告原则之一 : 仅将自己最优的路由发布给邻居,当存在多条有效路由时,BGP路由器只将自己最优的路由发布给邻居。

BGP通告原则之二 : 通过EBGP获得的最优路由发布给所有BGP邻居 

BGP通告原则之三 : 通过IBGP获得的最优路由不会发布给其他的IBGP邻居 ,在某种程度上,有一定的防环作用

BGP通告原则之四 : BGPIGP同步(华为的设备已经将这个功能关闭了,开启不了

如上图所示,RTA 上存在一个 100.0.0.0/24 的用户网段,通过 EBGP 发布给 RTB RTB RTD 建立了 IBGP 邻居关系, RTD 通过 IBGP 学习到该 BGP 路由,并将该路由发布给 EBGP 邻居 RTE 。当RTE 访问 100.0.0.0/24 的路由时,查找路由表,发现到达 100.0.0.0/24 路由的下一跳是 RTD RTE 查找出接口后,将数据包发送给 RTD RTD 收到数据包后,查找路由表,发现到达 100.0.0.0/24 路由的下一跳是 RTB ,出接口是 RTD 上与 RTC 相连的接口,于是将数据包发给 RTC RTC 查找路由表,发现没有到达 100.0.0.0/24 的路由,于是将数据丢弃,形成“路由黑洞”。
BGP 的通告原则:一条从 IBGP 邻居学来的路由在发布给一个 BGP 邻居之前,通过 IGP 必须知道该路由,即 BGP IGP 同步。如图所示,RTD 在收到 RTB 发来的 IBGP 路由之后,如果要发布给 BGP 邻居 RTE ,则在发布之前先检查 IGP 协议(即 OSPF 协议)能否学到该条路由。如果能,则将 IBGP 路由发布给 RTE 。在华为路由器上,默认是将BGP IGP 的同步检查关闭的,原因是为了实现 IBGP 路由的正常通告。但关闭了 BGP IGP 的同步检查后会出现“路由黑洞”的问题。因此,有两种解决方案解决上述问题:将BGP 路由引入到 IGP ,从而保证 IGP BGP 的同步。但是,因为 Internet 上的 BGP 路由数量十分庞大,一旦引入到 IGP ,会给 IGP 路由器带来巨大的处理和存储负担,如果路由器负担过重,则可能瘫痪。
解决方案:IBGP路由器必须是全互联,确保所有的路由器都能学习到通告的路由。这样可以解决关闭同步后导致的“路由黑洞”问题
 
BGP 的丰富属性
 
公认属性 :所有BGP 路由器都必须识别并支持的属性。 所有厂商都需要支持的属性
公认必遵: BGP Update 消息中必须包含的属性。
公认任意:不必存在于 BGP Update 消息中,可以根据需求自由选择的属性。
可选属性:不要求所有的BGP路由器都能够识别的属性。
可选过渡: BGP 不能识别该属性,但可以接收该属性并将其发布给它的邻居的属性。

            可选非过渡:BGP可以忽略包含该属性的消息并且不向它的邻居发布。

 

 

如图所示, AS 200 内运行 OSPF 协议, 200.0.0.0/24 网段宣告到 OSPF 中。 RTB 通过 network 方式将 200.0.0.0/24 的路由变为 BGP 路由通告给 RTA RTC 通过 import 方式将 200.0.0.0/24 的路由变为 BGP 路由通告给 RTA
BGP AS 之间传递信息,承载大量的路由。如果到达同一目的 IP 有多条路径,且 BGP 学到这些路由通过不同的方式,则 Origin属性是决定最优路径的一个因素,用于标明路由的起源。
Origin 3 种属性:
i表明BGP路由通过network命令注入;
e 表明 BGP 路由是从 EGP 学来的, EGP 协议在现网中很难见到,但可以通过路由策略将路由的 Origin 属性修改为 e
? 即Incomplete表明BGP路由通过其它方式学到路由信息,如使用import命令引入的路由。
3 Origin 属性的优先级为: i>e>Incomplete(?)
 
 
BGP 针对环路以及选择路径的问题 ,设计了 AS_Path属性,该属性记录了路由经过的所有AS的编号:
如上图中 RTA RTB 收到 100.0.0.0/24 的路由时, AS_Path 为( 2 4 ), RTA RTC 收到 100.0.0.0/24 的路由时, AS_Path 为( 3 5 4 )。规定 AS_Path 越短(记录的 AS 编号越少),路径越优,因此 RTA 会优选从 RTB 收到的 100.0.0.0/24 的路由。
p RTE 为例,通过 BGP 发布 100.0.0.0/24 的路由,路由可能通过 RTE->RTB->RTC->RTD->RTE 形成环路。为了防止环路的产生, RTE 在收到 RTD 发来的路由时会检查 AS_Path (该路由携带的)属性,如果发现该路由的 AS_Path 中包含自己的 AS 号,则丢弃该路由。
AS_Path 4 种类型:
AS_Sequence(有序的);
AS_Set(无序的);
AS_Confed_Sequence(应用于联盟);
AS_Confed_Set(应用于联盟)。
 
 

 

BGP 路由器将本端始发路由发布给 IBGP 邻居时,会把该路由信息的 Next_hop 设为本端建立邻居关系所使用的接口 IP
如上图所示, RTA 100.0.0.0/24 的网段发布给 RTB 时,如果 RTA RTB 使用直连接口建立 IBGP 邻居,则 Next_hop RTA 上与 RTB 直连的接口 IP ;如果 RTA RTB 使用 Loopback 接口建立 IBGP 邻居,则 Next_hop RTA Loopback 接口 IP
BGP 路由器在向 EBGP 邻居发布路由时,会把路由信息的 Next_hop 设置为本端与对端建立 BGP 邻居关系的接口 IP
如上图所示, RTB 100.0.0.0/24 的网段发布给 RTC 时, Next_hop RTB 上与 RTC 直连的接口 IP
BGP 路由器在向 IBGP 邻居通告从 EBGP 学来的路由时,不改变该路由下一跳属性。
特例:如上图所示,RTA从RTB学到RTC发布的200.0.0.0/24的网段时,Next_hop为RTD的出接口IP,因为RTB与RTD在同一网段,RTC通告给RTB的Next_hop为RTD的出接口IP。
对于上述三种情况的解释:
EBGP 邻居之间一般采用直连接口建立邻居关系, EBGP 邻居在相互通告路由时会修改 Next_hop 为自己的出接口 IP
IBGP 邻居通常采用 Loopback 接口建立邻居,当路由是本路由器起源的,在发送给邻居之后 Next_hop 改为自己的更新源地址,这样即使网络中出现链路故障,只要 Next_hop 可达,同样可以访问目的网段,提高网络稳定性;
相对于 IGP ,如 RIP 在发布路由时,每经过一个路由器都会 修 改 下一跳,发布路由的路由器都宣称自己能够到达目标地址,并采用逐跳传递的方式将数据包发送给目标网络,但网络中的路由器并不知道谁是真正的始发路由器,因此会造成环路。 BGP EBGP 之间传递时才修改 Next_hop IBGP 发送从 EBGP 学来的路由给 IBGP 邻居时并不修改下一跳,在一定程度上起到了 防环作用

 如果在EBGP环境下,使用环回口(逻辑接口loopback)来建立BGP邻居关系,则需要在通告路由的时候,需要修改下一跳。

 

Local_Pref属性仅在IBGP邻居之间有效,不通告给其他AS。它表明路由器的BGP优先级,用于判断流量离开AS时的最佳路由。

MED(Multi-Exit-Discriminator)属性仅在相邻两个AS之间传递,收到此属性的AS不会再将其通告给任何其他第三方AS,用于判断流量进入AS时的最佳路由。 

BGP的Community属性的两个作用:

1.限定路由的传播范围。

2.打标记,便于对符合相同条件的路由进行统一处理。

Community属性分为两类:一类是公认团体属性,另一类是扩展的团体属性。

公认团体属性分为4类:

Internet:缺省属性,所有路由都属于Internet,此属性的路由可以通告给所有BGP邻居;

No_Export:收到此属性的路由后,不将该路由发布到其他AS。如图,RTB上希望10.1.11.0/24的路由发布给AS 12之后,不再发布给其他AS,则可将10.1.11.0/24Community属性设置为No_Export

No_Advertise:收到此属性的路由后,不将该路由通告给任何其他的BGP邻居。如图,RTB上希望只将10.1.11.0/24的路由发布给RTC,并且不再通告给任何其他的BGP邻居,则可将10.1.11.0/24Community属性设置为No_AdvertiseNo_Export_Subconfed:在联盟中使用

扩展的团体属性用一组4字节为单位的列表来表示,路由器中扩展的团体属性格式为aa:nn或团体号:aa:nn中,aa通常为AS编号,nn是管理员定义的团体属性标识;团体号范围为0-4294967295,在RFC1997中,0-655354294901760-4294967295为预留值。

BGP路由器将路由通告给邻居后,每个BGP邻居都会进行路由优选,路由选择有三种情况:

该路由是到达目的地的唯一路由,直接优选。
对到达同一目的地的多条路由,优选优先级最高的。
对到达同一目的地且具有相同优先级的多条路由,必须用更细的原则去选择一条最优的。
 
一般来说, BGP 计算路由优先级的规则如下:
丢弃下一跳不可达的路由。
优选 Preference_Value值最高 的路由(私有属性,仅本地有效)。
优选 本地优先级(Local_Preference)最高 的路由。
优选 手动聚合>自动聚合>network>import>从对等体 学到的。
优选 AS_Path短 的路由。
起源类型 IGP>EGP>Incomplete
对于来自同一 AS 的路由,优选 MED值小 的。
优选从 EBGP 学来的路由( EBGP>IBGP )。
优选 AS内部IGP的Metric最小 的路由。
优选 Cluster_List 最短的路由。
优选 Orginator_ID 最小的路由。
优选 Router_ID最小 的路由器发布的路由。
优选具有 较小IP地址 的邻居学来的路由。

 

使用静态路由配置路由聚合的思路:
使用静态路由将明细路由聚合成 10.1.8.0/22 ,下一跳指向 NULL 0 ,因为聚合路由并不是具体的地址,发送给 AS 200 时只是明细路由的替代,为了防止路由环路,所以将下一跳指向 Null 0
由于使用静态路由,路由表中产生了一条 10.1.8.0/22 的路由,下一跳为 Null 0 。使用 network 命令将 IP 路由表中的 10.1.8.0/22 路由变为 BGP 路由,并通告给对端 BGP 邻居,达到聚合的目的。

 

自动聚合方式,在bgp的视图下,通过  summary automatic命令进行自动聚合路由信息 

手动聚合方式:在bgp的视图下,通过配置aggregate 10.1.8.0 255.255.252.0  detail-suppressed

detail-suppressed用来抑制明细路由的优先级

BGP路由聚合带来的问题 - 潜在环路 ,如下图所示,被聚合的路由丢失了原来的属性,会有环路的风险,

 

路由聚合解决了两类问题,一是减轻了设备传输和计算路由所需资源的负担,二是隐藏了具体的路由信息,减少了路由震荡的影响。但是路由聚合后,AS_Path属性丢失,存在产生环路的风险。 

为了解决 BGP 路由聚合带来的问题,设置了两个 AS_Path 属性:
Atomic-Aggregate :公认任意属性,用于警告下游路由器出现了信息丢失,如图所示, AS 200 内设置了路由聚合的路由器在聚合后发生了路径丢失的现象,此时该路由器通过 Update 报文携带该属性通知自己的邻居发生了路径丢失。
Aggregator :可选过度属性,该属性包含发起聚合的路由器的 AS 号和 Router-ID ,表明发生聚合的位置。
AS_Path 属性有两种类型:
AS_Sequence :表示 AS_Path 内的 AS 号是一个有序的列表。
AS_Set :表示 AS_Path 内的 AS 号是一个无序的列表。
AS_Path 本身是一个有序的列表,因为 AS_Path 每经过一个 AS 都会将 AS 号添加到 AS_Path 中,并且按经过的顺序从左到右排列。
如上图所示, AS 400 AS 300 通告聚合路由时, AS_Path 属性(大括号的除外)表示该聚合路由依次经过了 AS 200 AS 400
当发生聚合后,如果需要聚合路由携带所有明细路由经过的 AS 号来防止环路,则在配置聚合的命令后添加 as-set 参数。
如上图所示, AS 200 内发生了聚合并配置了 as-set 参数,则聚合路由会将明细路由的 AS_Path 信息用一个 AS-Set 集表示(放在中括号里的 AS 号信息,该集合的 AS 号没有先后顺序),携带在聚合路由后用以防止环路。
 
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值