理解BGP协议


前言

  AS的内部使用IGP来计算和发现路由,同一个AS内部的路由器之间是相互信任的,因此IGP的路由计算和信息泛洪完全处于开放状态,人工干预很少。
  不同AS之间的连接需求推动了外部网关协议的发展,BGP作为一种外部网关协议,用于在AS之间进行路由控制和优选。


BGP 基本概念

  IGP只作用于本地AS内部,而对其他AS一无所知。它负责将数据包发到主机所在的网段(segment),如OSPF,ISIS,RIP等。
  EGP作用于各AS之间,它只了解AS的整体结构,而不了解各个AS内部的拓扑结构。它只负责将数据包发到相应的AS中,余下的工作便交给IGP来做,如图所示AS之间邻居关系建立,之间路由优先、通告、路由控制等。
  BGP协议跨越多个路由器建立关系,如图所示,AS 65001与AS65002、AS65003建立邻居关系。
在这里插入图片描述

BGP邻居关系建立与配置

  1)、BGP协议是一种距离矢量(Distance vector)的路由协议,但是比起RIP等典型的距离矢量协议,又有很多增强的性能
  2)、BGP使用TCP作为传输协议,使用端口号179。在通信时,要先建立TCP会话,这样数据传输的可靠性就由TCP协议来保证,而在BGP的协议中就不用再使用差错控制和重传的机制,从而简化了复杂的程度,因此与IGP逐跳路由器建立邻居,BGP可以跨越多跳路由器建立邻居关系
  3)、BGP使用增量的、触发性的路由更新,而不是一般的距离矢量协议的整个路由表的、周期性的更新,这样节省了更新所占用的带宽。BGP还使用Keepalive来监视TCP会话的连接
  4)、BGP还有多种衡量路由路径的度量标准(称为路由属性),可以更加准确的判断出最优的路径

邻居关系建立

如图所示,状态机转换:
  Idle:空闲状态,BGP系统发出start事件(就是管理员配置BGP的过程),BGP初始化资源,复位连接计时器(32s),发起TCP连接,同时转入Connect状态。
  Connect:连接状态,BGP发起第一个TCP连接,如果TCP连接成功,就转入OpenSent状态,如果TCP连接失败,就转入Active状态。TCP连接失败两种情况:1.收到TCP参数协商失败的回复,则进入Active状态,2.对方长时间没有回复,超时,则保持在Connect状态。
  Active:BGP总是在试图建立TCP连接,如果连接计时器超时,就退回到Connect状态,如果TCP连接成功,就转入OpenSent状态,如果TCP连接失败,就继续保持在Active状态,并继续发起TCP连接。
  OpenSent:BGP也已经发送了第一个Open报文,BGP就在等待其对等体发送Open报文。并对收到的Open报文进行正确性检查,如果有错误,系统就会发送一条出错通知消息并退回到Idle状态,如果没有错误,BGP就开始发送Keepalive报文,并复位Keepalive计时器(180s),开始计时。同时转入OpenConfirm状态。
  OpenConfirm:BGP等待一个Keepalive报文,如果收到了一个Keepalive报文,就转入Established阶段。
  Established:BGP对等体交换update、keepalive、route-refresh报文。
  如果收到notification报文或者收到TCP拆除链接通知,BGP转至idle状态。
在这里插入图片描述
BGP报文有5种:
  Open报文:负责对等体建立连接,也是tcp建立连接后发送的第一个报文。
  Update报文:与对等体之间传递交换路由信息
  Notification报文:检测到错误的时候,就发送该消息给对等体,之后BGP连接会立即中断。
  Keepalive报文:BGP路由器会周期性的向邻居发出Keepalive报文,用来保持连接的有效性。
  Route-refresh报文:Route-refresh用于在改变路由策略后请求对等体重新发送路由信息。

BGP路由生成方式

Network宣告方式

在这里插入图片描述
  如图所示,RTA上存在100.0.0.0/24与100.0.1.0/24的两个用户网段,RTB上通过静态路由指定去往100.0.0.0/24网段的路由,通过OSPF学到去往100.0.1.0/24的路由。RTB与RTC建立EBGP的邻居关系,RTB通过network命令宣告100.0.0.0/24,100.0.1.0/24与10.1.12.0/24的路由,使对端EBGP邻居RTC学习到RTB路由表里的路由。

Import宣告方式

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

BGP通告原则与路由处理

IBGP和EBGP

  IBGP关系:在相同AS内建立的关系 建议大家通过loopback接口建立。
  EBGP关系:在不相同AS内建立的关系 建议大家通过物理接口建立 默认情况BGP报文TTL为1 可以修改。

BGP路由表

在这里插入图片描述

  Network:显示BGP路由表中的网络地址
  NextHop:报文发送的下一跳地址
  MED:路由度量值
  LocPrf:本地优先级
  PrefVal:协议首选值
  Path/Ogn:显示AS路径号及Origin属性
  Community:团体属性信息

BGP通告原则

  1)、存在多条有效路由时,BGP路由器只将自己最优的路由发布给邻居。
  2)、BGP路由器通过EBGP获得的最优路由会发布给所有的BGP邻居(包括EBGP邻居和IBGP邻居)。
  3)、BGP路由器通过IBGP获得的最优路由不会发布给其他的IBGP邻居(防环)。
  如图所示:如图所示,RTA将100.0.0.0/24的路由发布给RTB时,AS_Path属性不变,为空。如果RTB能将IBGP路由100.0.0.0/24发布给RTC,AS_Path依旧为空。则RTC也有可能将100.0.0.0/24的路由发布给RTA,因为AS_Path为空,RTA并不会拒收该IBGP路由,路由环路产生。因此,上述通告原则是为了防止在AS内部形成路由环路。
在这里插入图片描述

  4)、第四条:BGP和IGP的同步功能(华为默认关闭 并且大家开启不了这个功能)会产生路由黑洞问题。
  如图所示,当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的路由,于是将数据丢弃,形成“路由黑洞”。
在这里插入图片描述

黑洞解决方式:
  方法1:全互联方式(❤❤❤推荐)
  方法2:路由反射器(RR)(❤❤❤❤❤推荐)
  方法3:BGP联盟(❤❤❤推荐)
  方法4:将BGP路由引入到IGP当中,但是因为Internet上的BGP路由数量十分庞大,一旦引入到IGP,会给IGP路由器带来巨大的处理和存储负担,如果路由器负担过重,则可能瘫痪。(❤❤推荐)
  方法5:在R2和R4设备做VPN技术(❤❤❤❤推荐)

BGP反射

  作用:主要减少IBGP全互联的BGP关系(n(n-1)/2的关系数);
  方式:打破水平分割的限制;
  角色:反射器(Route Reflector),客户机(Client)、非客户机(Non-Client)

在这里插入图片描述

IBGP全连接
  如图所示,如果RTA优先选举最佳路由,RTB和RTA为对等体,RTA会将学到的路由传给RTB、RTC,但是RTC与RTB不会接收到对方学习到的路由,避免环路。

路由反射器
  指定RTC为反射器的,RTC收到来自RTA的路由信息,然后转发给RTB路由(类型OSPF邻居关系)

不同角色的对等体
  在AS内部路由反射器和它的客户机组成一个集群(Cluster),由反射器传递路由器信息,客户机之间不用建立全连接路由关系。IBGP(反射器)和EBGP(非客户机)必须要建立全连接的关系。

路由反射簇 (Cluster)
  当一个AS内存在多台RR为Client提供冗余时,RR间的路由更新很有可能会形成环路,为防止该现象,引入了Cluster的概念。
  一个Cluster里可以包括一个或多个RR;一个Client可以同时属于多个Cluster。

关系表

RR(反射器)clientnon-client
RR(反射器)建立IBGP全互连维护之间会话关系建立IBGP全互连
client维护之间会话关系不用建立关系建立IBGP全互连
non-client建立IBGP全互连不用建立关系建立IBGP全互连

反射器宣告原则

  1)、当RR收到BGP对等体发来的路由,首先使用BGP选路策略来选择最佳路由。
  2)、当从非客户机上获取的路由信息直接发送此反射器上的其他的客户机。
  3)、从客户机上学习到的路由信息,会传递给非客户机与其他的客户机。

路由反射环路防止机制 - Originator_ID

  1)、Originator_ID属性用于防止路由在反射器和客户机/非客户机之间产生环路。
  2)、Originator_ID属性长4字节,可选非过渡属性,属性类型为9 ,是由路由反射器(RR)产生的,携带了本地AS内部路由发起者的Router ID。
  3)、当一条路由第一次被RR反射的时候,RR将Originator_ID属性加入这条路由,标识这条路由的始发路由器。如果一条路由中已经存在了Originator_ID属性,则RR将不会创建新的Originator_ID。
  4)、当其它BGP Speaker接收到这条路由的时候,将比较收到的Originator_ID和本地的Router ID,如果两个ID相同,BGP Speaker会忽略掉这条路由,不做处理。

路由反射环路防止机制 - Cluster_List

  1)、Cluster_List属性用于防止AS内部的环路。
  2)、Cluster_List是可选非过渡属性,属性类型编码为10。
  3)、Cluster_List由一系列的Cluster_ID组成,描述了一条路由所经过的反射器路径,这和描述路由经过的As路径的AS_Path属性有相似之处,Cluster_List由路由反射器产生。
  4)、当RR在它的客户机之间或客户机与非客户机之间反射路由时,RR会把本地Cluster_ID添加到Cluster_List的前面。如果Cluster_List为空,RR就创建一个。
  5)、当RR接收到一条更新路由时,RR会检查Cluster_List。如果Cluster_List中已经有本地Cluster_ID,丢弃该路由;如果没有本地Cluster_ID,将其加入Cluster_List,然后反射该更新路由。

层次化路由反射

  路由反射减少了域中IBGP会话的总数。然而,因为RR相互之间必须全互连,在大型网络中,存在一种可能性,即RR之间仍然需要大量的IBGP会话。为了进一步减少会话数量,引入层次化的路由反射。
  层次化路由反射的层数可以按照需要逐步加深,但通常在现网中两层或三层已经足够了。
在这里插入图片描述

BGP联盟

联盟通过把大的AS分成多个更小的自治系统来解决IBGP全互连的问题,这些自治系统叫做成员自治系统或子自治系统。成员自治系统之间使用EBGP会话,因此它们不需要全互连。然而,在每一个成员AS中,仍然要求IBGP全互连。
在这里插入图片描述

联盟术语

  联盟通过把大的AS分成多个更小的AS来解决IBGP全互连的问题,这些自治系统叫做成员AS。因为成员AS之间使用EBGP会话,它们之间不需要全互连。然而在每一个成员AS中,IBGP全互连的要求仍然适用
  联盟中的EBGP会话和常规的EBGP会话有所不同。为了区分它们,这种类型的EBGP会话叫做联盟内的EBGP会话。与普通EBGP会话区别就发生在当通过会话传播路由的时候,联盟内的EBGP会话在一方面遵循路由通告的部分IBGP规则,在另一方面又遵循路由通告的部分EBGP规则。如:在发送更新的时候,NEXP_HOP、MED和LOCAL_PREF被保留,而AS-PATH被修改。
  对于外部邻居来说(联盟外的的对等体),成员AS拓扑是不可见的。也就是说,在发向EBGP邻居的更新消息中,已经剥去了联盟内被修改的AS_PATH。从其他的自治系统来看,联盟就像单个AS一样。
  每个成员AS中,IBGP全连接是需要的。路由反射也可以被部署。部署联盟的一个明显优势就是其成员AS不需要使用相同的IGP。每个成员AS不需要向其他成员AS通告自己的内部拓扑。不过,当使用不同的IGP时,每一个成员AS内必须保证BGP下一跳的可达性。
在这里插入图片描述

BGP路由聚合

[R1-bgp]aggregate 100.100.0.0 16 detail-suppressed
注意:后面的detail-suppressed参数是把明细给抑制,如果不加的话,会把明细路由和聚合路由都传过去。
 [R1-bgp]aggregate 100.100.0.0 16 as-set 
as-set信息在避免路由环路时很重要,因为它记录了被聚合路由所经过的AS。

BGP常用属性

在这里插入图片描述
  公认必遵:BGP的Update消息中必须包含的属性。
  公认任意:不必存在于BGP的Update消息中,可以根据需求自由选择的属性。
  可选过渡:BGP不能识别该属性,但可以接收该属性并将其发布给它的邻居的属性。
  可选非过渡:BGP可以忽略包含该属性的消息并且不向它的邻居发布。

BGP属性 - Origin

  含义:Origin属性定义路径信息的来源,标记一条路由是怎么成为BGP路由的。
在这里插入图片描述
  1)、(i)表明BGP路由通过network命令注入
  2)、(e)表明BGP路由是从EGP学来的,EGP协议在现网中很难见到,但可以通过路由策略将路由的Origin属性修改为e(了解即可)。
  3)、(?)即Incomplete(未知)表明BGP路由通过其它方式学到路由信息,如使用import命令引入的路由。
3种Origin属性的优先级为:i>e>Incomplete(?)

BGP属性 - AS_Path

  含义:公认必遵属性,该属性记录了路由经过的所有AS的编号;
  作用:
   1)、用于AS之间放环,如果发现该路由的AS_Path中包含自己的AS号,该路由则丢弃;
   2)、可用于BGP选路,规定AS_Path越短(记录AS编号越少),越优先;
  4种类型:
   1)、AS_SET: 由一系列AS号无序地组成,包含在UPDATE消息里;
   2)、AS_SEQUENCE:由一系列AS号顺序地组成,包含在UPDATE消息里;
   3)、 AS_CONFED_SEQUENCE:在本地联盟内由一系列成员AS号按顺序地组成,包含在UPDATE消息中,只能在本地联盟内传递;
   4)、AS_CONFED_SET:在本地联盟内由一系列成员AS无序地组成,包含在UPDATE消息中,同样只能在本地联盟内传递;

BGP属性 - Next_hop

  含义(公认必遵属性):BGP路由器将本端始发路由发布给IBGP邻居时,会把该路由信息的Next_hop设为本端建立邻居关系所使用的接口IP,BGP路由器在向EBGP邻居发布路由时,会把路由信息的Next_hop设置为本端与对端建立BGP邻居关系的接口IP BGP路由器在向IBGP邻居通告从EBGP学来的路由时,不改变该路由下一跳属性;
在这里插入图片描述
  如图所示,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邻居时并不修改下一跳,在一定程度上起到了防环作用。

BGP属性 - Local_Preference

  含义(公认任意的属性):Local_Pref属性仅在IBGP邻居之间有效,不通告给其他AS。它表明路由器的BGP优先级,用于判断流量离开AS时的最佳路由,值越大越优,其默认值为100;
在这里插入图片描述
  如图所示,AS 200内有一个200.0.0.0/24的用户网段,通过BGP发布给AS 100。AS 100内的管理员如何设置才可以实现通过高带宽链路访问200.0.0.0/24的网络?
  解决方案:在RTC上设置ip-prefix匹配200.0.0.0/24的路由,使用route-policy调用该ip-prefix,并设置Local_Preference为200,将策略应用在对RTA发布路由的export方向。

BGP属性 - MED

  含义(可选非过度属性):MED(Multi-Exit-Discriminator)属性仅在相邻两个AS之间传递,收到此属性的AS不会再将其通告给任何其他第三方AS,用于判断流量进入AS时的最佳路由;
  MED属性相当于IGP使用的度量值(Metric),它用于判断流量进入AS时的最佳路由 当一个运行BGP的路由器通过不同的EBGP邻居获得目的地址相同但下一跳不同的多条路由时,在其它条件相同的情况下,将优先选择MED值较小者作为最佳路由,其默认值为0;
在这里插入图片描述
  如图所示,AS 300内的管理员希望在AS 300内操作影响AS 200通过高带宽链路访问100.0.0.0/24,如何实现?
  解决方案:在RTE上设置ip-prefix匹配100.0.0.0/24的路由,再设置route-policy调用该ip-prefix,并设置MED为100,将策略应用在对RTC发布路由的export方向。

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/24的Community属性设置为No_Export;
  No_Advertise:收到此属性的路由后,不将该路由通告给任何其他的BGP邻居。如图,RTB上希望只将10.1.11.0/24的路由发布给RTC,并且不再通告给任何其他的BGP邻居,则可将10.1.11.0/24的Community属性设置为No_Advertise;
  No_Export_Subconfed:在联盟中使用,这里不做介绍。

扩展的团体属性用一组4字节为单位的列表来表示,路由器中扩展的团体属性格式为aa:nn或团体号:
  aa:nn中,aa通常为AS编号,nn是管理员定义的团体属性标识;
  团体号范围为0-4294967295,在RFC1997中,0-65535与4294901760-4294967295为预留值。
在这里插入图片描述
  如图所示,AS 10内有10.1.10.0/24的用户网段,AS 11内有10.1.11.0/24的用户网段。为了区分用户网段,AS 10内的10.1.10.0/24设置了10:12的Community,AS 11的10.1.11.0/24设置了11:12的Community,通过BGP发送给AS 12后,AS 12希望汇总后屏蔽掉明细路由再发送给AS 13,并且希望AS 13收到路由后不再传递给其他AS,如何实现?
  解决方案:在RTC上设置Community-filter,匹配Community为10:12和10:13的路由,再设置route-policy匹配Community-filter,将两条路由聚合成10.1.10.0/23的路由并调用route-policy。
  在RTC上设置route-policy,设置团体属性为no-export,在RTC通告给RTD的export方向调用该route-policy。

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

darkqaz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值