动态路由BGP协议!
一.AS的概念
(1)自治系统(Autonomous System,AS),指的是在同一个组织管理下、使用相同策略的设备的集合。
(2)不同AS通过AS号区分,AS号取值范围1王65535,其中64512- 65535是私有AS号。
IANA负责AS号的分发。
(3)中国电信163AS号:4134。中国电信CN2 AS号:4809。·中国网通AS号:9929。
二.BGP概述
边界网关协议是一种实现自治系统AS之间的路由可达,并选择最佳路由的量性协议。
早期发布的三个版本分别是BGP-1(Rfc1105)、gp-2(rfc1163)bgp3(RfC1267),1994年开始使用BGP-4(RFC177)也是目前使用的版本,2006年之后单播v4网络使用的版本是BGP4(R4271),其他网络使用的版本是MP-bGP(RFC4760)。
BGP的特点
(1)BGP能等承载大批量的路由信息能够支撑大规模网络;
(2)BGP提供了丰富的路由策略,能够灵活的进行路由选路,并能指导邻居按策略发布路由;
(3)BGP路由器值发送增量的BGP路由更新,或进触发更新(不会周期性更新);
(4)BGP提供了路由聚合和路由衰减功能用于防止路由振荡,有效提高了网络的稳定性;
(5)两个建立BGP会话的路由器互为对等体(Peer)。BGP对等体之间交换BGP路由表;
(6)运行BGP的路由器被称为BGP发言者,或BGP路由器;
(7)BGP使用TCP作为其传输层协议,端口号为179,路由器之间的BGP会话基于TCP连接而建立.
三.BGP的路径矢量特征
(1)BGP通常被称为路径矢量路由协议(Path -Vector- Routing Protocol)每条BGP路由都携带着多种路径属性( Path attribute),在各种路径属性中,AS_Path属性是非常关键的一个,AS_Path属性记录了BGP路由传递过程中所经过的AS号,实际上它是一个AS号的列表
(2) BGP路由器不接受AS_Path中包含其自身AS号的路由更新ASPath属性值的长短(A号的个数)会作为一个比较的依据,影响BGP路由选择的决策。
BGP的防环机制
BGP路由器不接受AS-Path中包含其自身AS号的路由更新。
AS-Path属性值的长短(AS号的个数)会作为一个比较的依据,影响BGP路由选择的决策。
四.BGP协议特征
(1)BGP使用TCP为传输层协议,TCP端口号179。路由器之间的BGP会话基于TCP连接而建立。
(2)运行BGP的路由器被称为BGP发言者(BGP Speaker ),或BGP路由器。
(3)两个建立BGP会话的路由器互为对等体(Peer )。BGP对等体之间交换BGP路由表。
(4)BGP路由器只发送增量的BGP路由更新,或进行触发更新(不会周期性更新)。
(5)BGP具有丰富的路径属性和强大的路由策略工具。
(6)BGP能够承载大批量的路由前缀,用于大规模的网络中。
五.BGP的报文类型
其中:
Update:用于更新路由变化,记录到路由表当中,是增量更新;
keepalive:响应Open消息,用于保持邻居关系,没有携带什么消息及数据,默认情况下,发送报文周期60s发送一次,最长时间(老化时间)是180s,结束之后需要重新建立对等体关系。
六.BGP的状态机
七.BGP Peer
(1)BGP对等体也叫BGP邻居,基于直连接口建立。与OSPF、RIP等协议不同,BGP的会话基于TCP建立的,建立BGP对等体的两台路由器并不要求必须直连,只要路由可达即可。
(2)BGP存在两种对等体关系类型:
EBGP:外部边界网关协议,用于在不同的自治系统间交换路由信息,即AS号不同
IBEP:用于在相同的AS间交换路由信息,即AS号相同。
IBGP
IBGP ( Internal BGP ):位于相同自治系统的BGP路由器之间的BGP邻接关系。·两台路由器之间要建立IBGP对等体关系,必须满足两个条件:
①两个路由器所属AS需相同(也即AS号相同)。
②在配置BGP时,Peer命令所指定的对等体IP地址要求路由可达,并且TCP连接能够正确建立。
EBGP
EBGP (External BGP)∶位于不同自治系统的BGP路由器之间的BGP邻接关系·两台路由器之间要建立EBGP对等体关系,必须满足两个条件:
①两个路由器所属AS不同(也即AS号不同)。
②在配置BGP时,Peer命令所指定的对等体P地址要求路由可达,并且TCP连接能够正确建立。
八.传输AS中的黑洞问题
在传输AS (Transit AS ) 65102中,BCDE四台路由器运行了OSPF,确保AS内部路由实现互通。
B与E运行BGP,并且两者建立IBGP对等体关系(两者并非直连,但是对于BGP,这是允许的,仅需确保两者之间能够正确建立TCP连接即可)。C与D并未运行BGP。
解决方案1
将BGP路由引入到IGP,并关闭同步规则。
解决方案2
传输AS内所有路由器均运行BGP,实现BGP对等体关系的全互联,并关闭同步规则。
九.BGP同步
(1)若路由器从IBGP对等体学习到一条BGP路由,它不能使用该条路由,更不能将路由传递给自己的EBGP对等体,除非它又从IGP学习到该条路由,这就是BGP的同步规则。
(2)同步规则的存在,可以防止数据在传输AS内由于转发设备没有目标网络的路由而被丢弃的问题,也就是所谓的黑洞问题。
(3)为了使得BGP路由能够正常交互,我们就不得不在该传输AS内所有路由器上都运行BGP,且构建全互联的IBGP对等体关系;或者在AS边界上将BGP路由引入IGP。显然这两种方法各有利弊,尤其是后者,盲目地将BGP路由引入IGP是非常危险的。
(4)同步规则的存在意义是避免出现黑洞问题,而如果AS内路由问题已经解决,那么同步规则也就没有必要再开启了。华为路由交换产品缺省关闭同步规则。
十.BGP的水平分割
(1)BGP路由在AS之间的防环依赖于AS_Path路径属性,当路由器收到BGP路由后,发现该路由所携带的AS_Path属性中出现了其自己所处的AS号,则路由器认为出现了路由环路,它将忽略该条路由。
(2)AS_Path属性仅在路由离开AS时才会被更改,而BGP路由在AS内部传递时,路由的AS_Path属性值不会发生改变,如此一来,IBGP路由的防环就无法依赖AS_Path了。
(3)为了防止BGP路由在AS内部传递时发生环路,BGP要求:“路由器不能将自己从IBGP对等体学习到的路由再传递给其他IBGP对等体”,这就是IBGP水平分割规则。
(4)由于IBGP水平分割原则的存在,BGP要求AS内须保证IBGP对等体关系的全互联,因为只有这样,才能够确保每一个路由器都能学习到路由。
(5)考虑到IBGP水平分割规则的限制,为了使得AS内的路由器都能够正常学习到BGP路由,我们不得不建立一个全互联的IBGP对等体关系。
(6)然而在AS内的所有BGP路由器之间维护全互联的IBGP对等体关系是需要耗费大量资源的,网络的可扩展性、可维护性也非常差。
解决方案:①路由反射器②联邦
简而言之一句话:一个路由器不能将另外一个IBGP对等体中学习到路由。由于水平分割的存在,BGP要求AS内需保证对等体关系的全互联,因为只有这样,才能确保每个路由器都能学习到路由。
十一.BGP路由通告规则
(1)当存在多条路径,路由器只选取最优的BGP路由来使用;
(2)BGP只把自己使用的路由,也就是自己任务最优的路由传递对等体;
(3)路由器从EBGP对等体获得的路由汇传递给它所有的BGP对等体;
(4)路由器从IBGP对等体获得的路由不会传给给它的IBGP对等体;
(5)路由器从IBGP对等体获得的路由是否通告给它的EBGP对等体要是IGP和BGP同步的情况而定。
十二.BGP相关的几张表
十三.BGP基本配置
1.配置对等体
bgp 100 //配置bgp的AS号为100
router-id 1.1.1.1 //设备loopback接口的地址
peer 2.2.2.2 as-number 100 //配置对等体ip地址2.2.2.2进入到bgp 100
2.BGP引入IGP路由
需注意的是:BGP本身不发现路由,因此需要将其他路由引入到BGP路由表。
BGP引入路由时支持lmport和Network两种方式:
(1)lmport方式是按协议类型,将RIP、OSPF、ISIS等协议的路由引入到BGP路由表中。Import方式还可以引入静态路由和直连路由。
(2)Network方式是逐条将IP路由表中已经存在的路由引入到BGP路由表中。
BGP在引入IGP的路由时,可以使用路由策略进行路由过滤和路由属性设置。
3.指定更新源
一般而言在AS内部,网络具备一定的冗余性。在R1与R3之间,如果采用直连接口建IBGP邻居关系,那么一旦接口或者直连链路发生故障,BGP会话也就断了,但是事实上,由于冗余链路的存在,R1与R3之间的IP连通性其实并没有DOWN(仍然可以通过R5到达彼此)。
4.BGP的EBGP多跳
通常EBGP的对等体关系基于直连接口建立。
如果EBGP的对等体关系并非基于直连接口建立,而是基于Loopback接口,又或者EBGP对等体不是直连的(中间隔着其他设备) , 那么要注意EBGP多跳的问题:在EBGP之间,所发送的BGP报文默认的TL为1 ,因此如果EBGP对等体之间存在多跳,则需修改最大跳数限制。
十四.BGP路径属性
1.路径属性的分类
(1)公认属性Well-Known
①公认必遵属性Well-known mandatory
②公认自由决定属性Well-known discretionary
(2)可选属性Optional
①可选传递的Optional non-transitive
②可选非传递的 Optional non-transitive
2.属性的概念
(1)Preferred-Value:华为私有
① 路由的权重值,取值范围:0~65535;值越大,路由优先;
② 只能在路由器本地配置,而且只影响本设备的路由选择;该属性不会传播给任何BGP对等体;
③ 路由器本地实发的BGP路由默认的Preferred-Value为0,从其他BGP对等体学习到的路由默认Preferred-Value也为0。
(2)Local_Preference:本地优先级
① 本地优先级属性,是公认自决属性,用于告诉AS中的路由器,哪条路径是离开AS的首选路径;
② 属性值越大则BGP路由越优,缺省值为100;
③ 该属性只能被传递给BGP对等体,而不能传递给EBGP对等体。
Local_Preference注意事项
①Local_Preference属性只能在IBGP对等体间传递(除非做了策略否则Local_Preference值在IBGP对等体间传递过程中不会丢失),而不能在EBGP对等体间传递,如果在EBGP对等体间收到的路由的路径属性中携带了Local_Preference,则会触发Notifacation报文,造成会话中断;
②但是可以在AS边界路由器上使用Import方向的策略来修改Local_Preference属性值。也就是在收到路由之后,在本地为路由赋予Local_Preference。
③使用bgp default local-preference命令修改缺省Local_Preference值,该值缺省为100.
④路由器在向其EBGP对等体发送路由更新时,不能携带Local_Preference属性,但是对方接收路由之后会在本地为这条路由赋一个缺省Local_Preference值( 100 ),然后再将路由传递给自己的IBGP对等体
⑤本地使用network命令引入及重发布引入的路由,Local_Preference为缺省值100,并能在AS内向其他IBGP对等体传递,传递过程中除非受路由策略影响,否则Local_Preference不变。
(3)AS_Path
①该属性为公认必遵属性,是前往目标网络的路由经过的AS号列表
②作用︰确保路由在EBGP对等体之间传递无环;另外也作为路由优选的衡量标准之一
③路由在被通告给EBGP对等体时,路由器会在该路由的AS_Path中追加上本地的AS号;路由被通告给IBGP对等体时,AS-path不会发生改变。
AS_Path的重要作用之一便是影响BGP路由的优选,在上图中,R5同时从R2及R4学习到去往
10.1.1.0/24网段的BGP路由,在其他条件相同的情况下,R5会优选R2通告的路由,因为该条路由的AS_Path属性值较短,也即AS号的个数更少。
(4)Origin
①该属性为公认必遵属性,它标识了BGP路由的起源。如下表所示,根据路由被引入BGP的方式不同,存在三种类型的Origin。
②当去往同一个目的地存在多条不同Origin属性的路由时,在其他条件都相同的情况下Origin的下顺序优选路由:IGP >EGP > Incomplete。
(5)MED
① MED( Multi Exit Discriminator)是可选非传递属性,是一种度量值,用于向外部对等体指出进入本AS的首选路径,即当进入本AS的入口有多个时,AS可以使用MED动态地影响其他AS选择进入的路径。
② MED属性值越小则BGP路由越优。
③ MED主要用于在AS之间影响BGP的选路。MED被传递给EBGP对等体后,对等体在其AS内传递路由时携带该MED值,但将路由传递给其EBGP对等体时,缺省不会携带MED属性。
注意事项
① 缺省情况下,路由器只比较来自同一相邻AS的BGP路由的MED值,也就是说如果去往同一个目的地的两条路由来自不同的相邻AS,则不进行MED值的比较。
② 一台BGP路由器将路由通告给EBGP对等体时,是否携带MED属性,需要根据以下条件进行判断(不对EBGP对等体使用策略的情况下):
③ 如果该BGP路由是本地始发(本地通过 tnetwork或 import-route-命令引入)的,则缺省携带MED属性发送给EBGP对等体。
④ 如果该BGP路由是从其他BGP对等体学习过来的,那么将该路由通告给EBGP对等体时不携带MED
⑤ 在G对等体之间传递路由时,MED值会被保留并传递,除非部署了策略,否则MED值在传递过程中不发生改变也不会丢失。
①如果路由器通过IGP学习到一条路由,并通过network或import-route的方式将路由引入BGP,产生的BGP路由的MED值继承路由在IGP中的metric。例如上图中如果R2通过OSPF学习到了11.1.1.0/24路由,并且该路由在R2的全局路由表中OSPF Cost=100,那么当R2将路由network进BGP后,产生的BGP路由的MED值为100。
②如果路由器将本地直连路由通过network或import-route的方式引入BGP,那么这条BGP路由的MED为0,因为直连路由cost为0。
③如果路由器将本地静态路由通过network或import-route的方式引入BGP,那么这条BGP路由的MED为0,因为静态路由cost为0。
MED的默认操作
①如果路由器通过BGP学习到其他对等体传递过来的一条路由,那么将路由更新给自己的EBGP对等体时,默认是不携带MED的。这就是所谓的:“MED不会跨AS传递”。例如在上图中,R2将携带MED属性的BGP路由传递给R3,则R3将该路由传递给R4时,不会携带MED。
②可以使用default med命令修改缺省的MED值,default med命令只对本设备上用import-route命令引入的路由和BGP的聚合路由生效。例如在R2上配置default med 999,那么R2通过import-route及aggregate命令产生的路由传递给R3时,路由携带的MED为999。
(6)Next_Hop
① Next_Hop
该属性是一个公认的必遵属性,用于指定到达目标网络的下一跳地址
当路由器学习到BGP路由后,需对BGP路由的Next_Hop属性值进行检查,该属性值必须在本地路由可如果不可达,则这条BGP路由不可用
在EBGP及IBGP对等体场景中,Next_Hop的缺省操作是存在差异的。
② Next_Hop的缺省操作
路由器将BGP路由通告给自己的EBGP对等体时,将该路由的Next_Hop设置为自己的更新源IP地址
路由器在收到EBGP对等体通告的BGP路由后,在将路由传递给自己的IBGP对等体时,会保持路由的Next_Hop属性值不变
3. BGP路由的优先规则
(1)技术背景
①当BGP设备学习到去往同一个目的网络的多条BGP路由(路径)时,设备将这些路由都装载到BGP路由表,并在这些条目中进行路由优选,最终决策出最优(Best)的路由,将该BGP路由加载到全局路由表中,作为数据转发的依据。
②当存在多路径时,BGP只会将其选择出来的最优路由通告给其他对等体。
③BGP定义了一系列路由优选规则,从而使得设备能够在多条路由中选择出最优的路由。BGP在选择路由时严格按照先后顺序比较路由的属性,如果通过当前的属性就可以选出最优路由,BGP将不再进行后面的比较。
④BGP的选路规则与BGP路径属性及路由策略息息相关,它们使得BGP拥有了强大的路由操控能力。
(2)BGP路由表示例
关于100.0.1.0/24这个目的网络,存在两条BGP路由(路径),设备在这两条路由中进行决策选择出最优的路由,最优的路由将出现“>”符号,它将被加载到设备的全局路由表中。
在BGP路由表中的路由必须首先是可用的(Valid ),可用的路由在表项行首存在“*"号,可用意味着该BGP路由的Next_hop是路由可达的,设备在其全局路由表中查询到了去往该Hext_hop地址的路由,即认为该BGP路由可用。如果BGP路由不可用,则不会被优选。
(3)优选规则
优选具有最大的Preferred-vlue的路由
优选具有最大Local_preference的 路由
优选起源于本地的路由
优选AS_path最短的路由
Origin(IGP>EGP>Incomplete)
优选MED最小的路由
优选EBGP对等体所通告的路由
优选到Next_Hop的IGP度量值最小的路由
BGP路由负载分担
优选Cluster_List最短的路由
优选Router-ID最小的BGP对等体发来的路由
优选Peer-IP地址最小的对等体发来的路由