BGP边界网关路由协议学习笔记(一)

本文讲述了BGP边界网关路由协议。分享给大家供大家参考,具体如下:

一、BGP

1. IGP和EGP的比较

2. BGP协议特点

3. BGP的数据包类型

1.open包

2.keepalive包

3.update包

4.notification包

5.Reflush

4.BGP状态机

4.1 BGP事件

4.2 BGP的有限状态机

4.3 BGP建邻失败的场景

5.BGP的工作过程

6. BGP邻居关系

7. BGP的路由黑洞

7.1 解决BGP路由黑洞

8. BGP的防环机制(水平分割)

9. BGP的配置

9.1 建立BGP邻居关系

9.2 手动宣告

10. BGP邻居关系重置

11. 自动汇总

12. 对等体组peer-group

13. BGP的认证

14. BGP后门路由

15. BGP的路由惩罚

二、BGP属性

1.Weight属性

2.Origin属性

3.AS_Path属性

4.Next-hop属性

5.Local_pref属性

6.Multi-Exit-Disc属性

7.Atomic aggregate属性

8.Aggregator属性

9.community属性

9.1 匹配设置

9.2 community子属性

10.Originator_id

11.Cluster_list


BGP:边界网关路由协议,无类别路径矢量路由协议,属于EGP协议,作用于AS于AS之间。用于AS与AS之间交互路由协议。

AS:自治系统。编号0-65535。公有1-64511,私有64512-65535

一、BGP

1. IGP和EGP的比较

  IGP需要:hop-by-hop收敛速度快,选择路径佳(防环),占用资源少

  EGP协议需要

  • 具有非常高的可控性,将IGP协议产生的路由转发到其他AS,不能精确选路,必须由管理员来干涉选路;
  • 具有非常高的可靠性,更新量庞大,但又只能做增量更新,基于TCP工作
  • AS-BY-AS:一个AS为一跳

BGP协议不生产路由,只是路由的搬运工。

TCP的特点:单播,非直连通信

路径矢量和距离矢量均选择共享路由表来收敛,但距离矢量基于一台路由器为一条,路径矢量基于一个AS为一跳

2. BGP协议特点

  • 无类别路径矢量(AS-BY-AS):距离矢量的升级版
  • 使用单播更新来发送所有信息,基于TCP179端口工作
  • 增量更新:仅触发无周期
  • 具有丰富的属性来取代IGP中度量进行选路
  • 可以在进项和出项对流量实施强大的策略
  • 默认不被用于负载均衡,通过各种选路规则仅仅产生一条最佳路径
  • BGP支持认证和聚合(汇总),一般是超网性汇总

3. BGP的数据包类型

所有的数据包均基于TCP工作,建立TCP会话(也可以非直连建邻)的前提是IP可达

EGP协议承载与IGP之上:

非直连建邻时,需要设备间IP可达,需要IGP协议来完成;

BGP实际传递的是IGP计算所得路由

1.open包

用于邻居关系的建立,携带Root ID。邻居发现由TCP的三次握手来完成。

2.keepalive包

如果路由器接受其邻居发送来的Open消息中指定的参数,则响应一条Keepalive消息。此后,Cisco在默认情况下每60秒发送一条Keepalive消息,或者以已协商一致的保持时间的1/3为周期发送Keepalive消息

3.update包

Update消息用于宣告可行路由、已撤销路由或两者

4.notification包

路由器只要检测到差错,就会发送Notification消息并关闭BGP连接

5.Reflush

更新BGP路由

4.BGP状态机

4.1 BGP事件

  • BGP开始
  • BGP结束
  • BGP传输连接打开
  • BGP传输连接终止
  • BGP传输连接打开失败
  • BGP传输致命差错
  • 重试连接计时器超时
  • 持续事件终止
  • keepalive计时器终止
  • 收到open消息
  • 收到keepalive消息
  • 收到update消息
  • 收到notification消息

4.2 BGP的有限状态机

  • Down

双方均没有发送数据包

  • Idle

配置了neighbor或重置了邻居。BGP初始化所有资源,打开connectRetry计时器,初始化邻居的TCP连接,监听来自邻居初始化消息并将它的状态转到connect状态

为了防止差错的持续出现造成BGP邻居的摆动,connectRetry计时器都会呈现级数级别的增加。第一次60s,下一次为前一次的2倍数(即120s),再下次240s….

  • Connect

BGP等到TCP连接完成后再决定后续的动作

1.如果TCP同步成功,BGP将connectRetry清零,完成初始化并发送一个Open消息给邻居并把状态置为Open

2.如果失败,BGP继续监听邻居发出的连接,重置connectRetry计时器并转移到active状态

3.如果connectRetry时间超时,计时器重新开始,在视图与邻居建立TCP连接,BGP保持connect状态,出现其他事件转让idel状态

  • Active

BGP试图与邻居建立一个TCP连接

1.如果TCP连接建立成功,BGP将connectRetry计时器清零,完成初始化,给邻居发送Open消息并将状态置为open,hold时间为240s

2.如果在active状态,connectRetry计时器超时回到connectRetry状态并重置connectRetry计时器

3.如果视图与一个未知IP建立TCP会话,同时connectRetry计时器重置,连接拒绝并保持active状态

4.任何一个事件都会导致重回idle

  • OpenSent

在此状态,已经发送了open消息,BGP等待邻居发送的open消息

1.收到open消息,如果发现差错,将给邻居发送一个notification消息并置为idle

2.如果收到open消息没错,将发送keepalive给邻居,并建立IBGP或EBGP状态置为openconfirm状态

  • OpenConfim

在此状态下BGP会等待一个keepalive消息或者notification消息

1.如果后收到一个keepalive消息状态置为establish状态

2.如果收到notification消息状态置为idle,断开TCP连接

3.如果hold计时器超时,检测到一个差错或者stop事件,BGP将给邻居发送一个notification并断开连接,状态置为idle

  • Established

此状态,BGP对等体间的连接已经完全建立,可以交换update、keepalive和notification消息,收到notification状态置为idle中断连接

4.3 BGP建邻失败的场景

  • neighbor 10.1.1.1 //代表向该地址发送tcp端口为179的数据,并且自己也需要在发出地址上打开tcp179的监听。该配置可以指定源地址也可以不指定源地址,不指定就是出接口地址(意味着得打开该接口关于tcp179的监听)。本端指的地址需要是对方的源地址,对方指的地址需要是本端的源地址
  • neighbor 10.1.1.1 remote-as XX。对端建立邻居的AS号不许和本段remote-as XX 号一致
  • 建立双方保障179端口能够发送,不丢失,不被拦截

5.BGP的工作过程

  • 启动配置完成后,邻居间使用TCP三次握手来进行TCP的会话;会话建立后,使用open包建立邻居关系,生成邻居表;--正常情况下,open报文仅收发一次
  • 建立邻居关系的设备间,使用update包来共享路由信息,BGP设备将所有本地发出及接收到的路由信息全部状态于本地的BGP表;默认选择接收到的最优路径,放置于路由表中;收敛完成,每隔1min,keepalive包保活一次TCP会话。
  • 结构突变

1.新增网段:使用update包告知

2.断开网段:使用update包告知

3.无法沟通:hold time超时,断开邻居关系和TCP会话;

注:BGP路由协议基本传递聚合路由。若明细路由发生新增或断开,不影响聚合条目。

6. BGP邻居关系

BGP协议中邻居可以非直连,故把邻居称为peer(对等体)

EBGP邻居关系:不同AS间设备建立的邻居关系。通过EBGP邻居学习的路由管理距离为20(EBGP)

IBGP邻居关系:同一AS内设备建立的邻居关系。通过IBGP邻居学习的路由管理距离为200(IBGP)

7. BGP的路由黑洞

考虑到成本和适用性,正常在一个AS内部不是所有的设备均运行BGP协议,故将出现路由可达,但实际数据在传输时,经过中间未运行BGP的路由器时,将会被丢弃,导致路由黑洞。

路由黑洞:控制层面可达,数据层面不可达。

  • BGP协议是基于TCP单播沟通,可以穿越中间设备(中间设备不会去看这个包,和中间设备是否运行BGP协议无关)来传递路由。
  • BGP的路由正常功能均需要递归多次到直连路由,运行BGP协议的路由基本都可以完成递归查表,认为是可达的,不关注下一跳设备是否由有路由,只要本地能到下一跳就行
  • BGP生成的路径是唯一的,但递归后流量可能可以多路径传输

7.1 解决BGP路由黑洞

  • 物理链路全连
  • 邻居关系全连:所有设备均运行BGP
  • 将BGP重发布到IGP(LAB环境下使用)
  • MPLS:多协议标签交换(最佳解法)

8. BGP的防环机制(水平分割)

  • EBGP水平分割:防止EBGP邻居关系下的环路

路由条目在BGP协议中传递时,存在一个叫AS path属性;该属性是记录经过的每一个AS编号;BGP协议拒绝接收存在本地AS编号的路由

  • IBGP水平分割:防止IBGP邻居关系下的环路

因为AS-BY-AS规则,一条条目在一个AS内部传递时,默认没有任何属性的变化;故很容易在IBGP邻居关系产生环路。

从一台IBGP邻居处学习到的路由条目不得传递给下一台IBGP邻居关系。该设计为实现路由的正常传递,必须进行两两建立IBGP邻居关系,配置量几何增长。有条件的打破IBGP水平分割:联邦、路由反射器

9. BGP的配置

BGP边界网关路由协议学习笔记(一)

9.1 建立BGP邻居关系

1)建立直连EBGP邻居关系

在BGP协议中邻居关系的建立于路由条目的宣告是分开进行的。双方均需配置

BGP边界网关路由协议学习笔记(一)

2)建立IBGP邻居关系

正常一个AS内部网络拓扑不会是直线型的,因此IBGP邻居关系间实际存在多条可达路径,建议使用环回接口来作为建立TCP会话的源、目IP地址。存在备份路径,同时基于多条路径通信。使用环回地址作为目标时,也必须将源IP地址改为环回。

BGP边界网关路由协议学习笔记(一)

3)EBGP邻居间存在多条路径

建议使用环回建立

1>IP可达:建议使用静态

2>建立BGP邻居关系

BGP边界网关路由协议学习笔记(一)

3>IBGP邻居关系建立的数据包TTL默认为255,EBGP邻居关系间为1;若使用环回建立EBGP邻居关系,必须修改TTL值

BGP边界网关路由协议学习笔记(一)

建邻配置完成后,邻居间先进行三次握手,建立TCP会话。正常建立2条会话后,自动断开一条

BGP边界网关路由协议学习笔记(一)

当TCP会话建立后,邻居间发送BGP的open报文,默认open报文仅收发一次,正常收发后,建立邻居关系,生成邻居表

R1#show ip bgp neighbors    #查看邻居表(详细列表),较大不易查看

BGP边界网关路由协议学习笔记(一)

末端的数字表示从该邻居处学习到的路由条目数量,若为单词不是数字,那么邻居关系还未建立

9.2 手动宣告

邻居关系建立后,必须手工宣告路由,才能向邻居发送路由信息;宣告携带原有度量和下一跳(作废),建议所有存在EBGP邻居的BGP设备均宣告本地AS路由条目

BGP边界网关路由协议学习笔记(一)

可控性:BGP协议可以宣告本地路由表的任意路由。宣告时条目必须和路由表中的内容完全一致;逐条宣告。

当本地进行宣告后,本地的BGP表中将加载该信息,同时该路由通过更新包发送到邻居处,邻居也将其加载到其BGP表中

BGP边界网关路由协议学习笔记(一)

路由状态:

*:表示可用,表示可以加到路由表

>:表示优,表示可以加到路由表,可以传递,传输给邻居

i:表示该条目通过IBGP邻居学习

在可用和优均成立的情况下,才可以将条目加载到路由表中,仅优即可传递

 

不可用的条件:*被r取代,r表示不装载,本地路由表中已经存在更好的路由

       *被s取代,s表示抑制(管理员手工限制该条目的传输)

 

可用的条件:同步问题:本地路由表中必须先通过IGP学习到该路由(在IOS版本11.2(8)T以上设备直接关闭该限制)

BGP边界网关路由协议学习笔记(一)

  

  下一跳可达问题:因为AS-BY-AS规则,条目在传递给IBGP邻居时,下一跳属性默认不修改。可以让设备将从EBGP邻居处学习到的路由传递给EBGP时,修改下一跳地址为本地

BGP边界网关路由协议学习笔记(一)

在BMA网络中,由于ICMP重定向技术,在传递路由时可以找到最佳的下一跳

注:将路由条目传递给其他EBGP邻居时,将修改下一跳属性为本地

10. BGP邻居关系重置

硬性重置:断开TCP会话连接,重新建立BGP邻居关系,针对所有实施策略都生效

BGP边界网关路由协议学习笔记(一)

软性重置:在不断开TCP会话的基础上实施策略,支持在in/out使用

BGP边界网关路由协议学习笔记(一)

R1#show ip bgp neighbors 12.1.1.2 received-routes       #仅查看本地从邻居12.1.1.2处接收到的路由

% Inbound soft reconfiguration not enabled on 12.1.1.2

默认本地没有专门存储接收路由的空间,若需要查看,必须先创建该空间,建议查看完成后删除该空间

BGP边界网关路由协议学习笔记(一)

BGP边界网关路由协议学习笔记(一)

 

11. 自动汇总

默认关闭,即使开启也对普通的BGP宣告路由无意义,仍为明细路由

当关闭自动汇总时,不能通告主类网络;当开启自动汇总时,可以通告主类网络,结果是所有明细路由和汇总路由同时通告,也可以仅仅通告明细路由。当开启自动汇总时,传递自身network的路由不会发生任何变化,将其他方式重发布进入BGP时,会进行自动汇总,同时不会携带外部路由参数(metric、下一跳),出现路由黑洞。

针对从IGP重发布到BGP的路由条目,宣告就是逐条的重发布,重发布就是批量的宣告;区别在于起源者属性不同,若在进行批量重发布时,开启了自动汇总,那么条目将不携带原有的源码(主类)、度量(0)、下一跳(0.0.0.0)

逐一宣告的起源者属性优于重发布(批量宣告)的起源者属性

12. 对等体组peer-group

通过一个组名和一套路由策略就可以在Cisco路由器上定义对等体组,之后就可以将对等体加入到对等体组中。此后,如果发生任何路由策略变化,都无需再逐一对每个对等体进行操作,而只需对对等体组进行操作。此外,对等体组对提高路由器的性能也非常有效,因为此时的路由器不再需要为每条发送给每个对等体的更新信息重复咨询策略数据库,路由器只要咨询一次策略数据库,创建单条Update消息,即可将多个拷贝分发给对等体组中的所有对等体。

创建peer-group名称

BGP边界网关路由协议学习笔记(一)

针对peer-group执行对应的指令

BGP边界网关路由协议学习笔记(一)

将邻居加入到peer-group内

BGP边界网关路由协议学习笔记(一)

13. BGP的认证

基于BGP报文的TCP报文字段中,密钥默认以MD5模式发送;service password-encryption为开启密码加密服务,在本地的running-config中,密码被加密

BGP边界网关路由协议学习笔记(一)

14. BGP后门路由


解决EBGP邻居之间使用非直连环回建立问题,防止将环回接口同时通告进入IGP和BGP导致BGP邻居关系翻滚,将对方环回接口接口路由在本地BGP中使用后门方式通告,确保EBGP学习的后门路由AD值为200

BGP边界网关路由协议学习笔记(一)

在EBGP邻居路由器上将对方环回设置为后门路由

BGP边界网关路由协议学习笔记(一)

BGP边界网关路由协议学习笔记(一)

15. BGP的路由惩罚

默认BGP的路由惩罚是关闭的;BGP路由惩罚仅仅针对EBGP邻居学习的路由。

路由每翻滚一次,惩罚值增加1000.

惩罚门限为2000;

重用门限:750;半衰期:默认15min;

最大惩罚时间:60min;

最大惩罚门限:12000(不可修改)

开启BGP路由惩罚

BGP边界网关路由协议学习笔记(一)

BGP边界网关路由协议学习笔记(一)

BGP边界网关路由协议学习笔记(一)

查看惩罚路由

BGP边界网关路由协议学习笔记(一)

BGP边界网关路由协议学习笔记(一)

 

二、BGP属性

1.Weight属性

  • 权重值,cisco私有。仅用于单个路由器内的路由,该数值不与其他路由器进行交换
  • 范围:0-65535,默认本地为32768,学习到的为0。权值越高,表示该路由越优
  • 仅仅在本路由器上生效,不可传递,只能用于in方向
  • 适用于一台路由器在多条路径下的选路,无视邻居属性

1.可以为学习自特定邻居的多条路由设置管理性权值,会修改该邻居传递改来的所有路由的weight值

R4(config)#router bgp 2
R4(config-router)#neighbor 34.1.1.3 weight 999

2.为单个路由设置管理性权值

R4(config)#ip prefix-list a permit 1.1.1.1/32
R4(config)#route-map a permit 10
R4(config-route-map)#match ip address prefix-list a
R4(config-route-map)#set weight 999
R4(config-route-map)#exit
R4(config)#route-map a permit 20
R4(config-route-map)#exit
R4(config)#router bgp 2
R4(config-router)#neighbor 34.1.1.3 route-map a in      

2.Origin属性

  • 起源属性,表示该路由的来源方式
  • 0表示宣告(i)
  • 1表示EGP学习€
  • 3表示其他手段学习(也就是重发布,?)
  • 优先级:i>E>?
  • 用于in或out方向均可
R4(config)#route-map org permit 10
R4(config-route-map)#match ip address prefix-list a
R4(config-route-map)#set origin incomplete
R4(config-route-map)#exit
R4(config)#route-map org permit 20
R4(config-route-map)#exit
R4(config)#router bgp 2
R4(config-router)#neighbor 34.1.1.3 route-map a in

3.AS_Path属性

  • 一条路由在传输过程中经历了哪些AS(不算自己)。顺序是最近经过的AS排前面。
  • 一个AS的路由器拒绝携带有自己AS的路由,可用于防环,也可用于选路。
  • AS_Path长度越短越优。
  • 一般在选路档中添加AS会重复添加已经历的AS,一般不会添加没有经历的AS。
  • 适用于任何邻居之间,in/out方向均可
R4(config)#route-map as_path permit 10
R4(config-route-map)#match ip address prefix-list a
R4(config-route-map)#set as-path prepend 2 3 4
R4(config-route-map)#exit
R4(config)#route-map as_path permit 20
R4(config-route-map)#exit
R4(config)#router bgp 2
R4(config-router)#neighbor 34.1.1.3 route-map as_path out

R4(config-router)#neighbor 34.1.1.3 allowas-in 1           //允许和具有自己相同的AS的路由进入本AS,在本路由器上使用

R4(config-router)#neighbor 34.1.1.3 as-override     //把具有和其他AS相同AS号的路由放入这个AS,在邻居路由器上使用

4.Next-hop属性

  • 下一跳属性,到达路由的下一跳路由器地址
  • IBGP之间next-hop不变,EBGP之间传路由next-hop修改为更新源地址。
  • next-hop为0.0.0.0的路由优于其他路径,in/out方向均可,邻居无所谓

5.Local_pref属性

  • 本地优先级,与Weight一样也是选路属性
  • 范围:0-2^32,默认100,值越大越优
  • 不能在EBGP邻居之间传递,可以在IBGP邻居之间传递
  • 用于限制离开本AS的流量,部署于AS边界的IBGP邻居之间
  • 常用于当本AS有多个出接口路由器时,选择拥有LP值大的路由器作为出口路由器。也可以是到达一个网段有多个出口路径时,选择LP值大的路径。

1.全局修改路由器的默认LP值,该路由器通告给IBGP邻居的路由都会携带修改后的LP值 ,影响本AS的所有IBGP邻居

R4(config)#router bgp 2
R4(config-router)#bgp default local-preference 120   //修改路由器默认的LP值

2.通过route-map修改某路由的LP值。EBGP只能在in方向,IBGPin/out均可

R4(config)#route-map lp permit 10 
R4(config-route-map)#match ip address prefix-list a
R4(config-route-map)#set local-preference 120
R4(config-route-map)#ex
R4(config)#route-map lp permit 20
R4(config-route-map)#exit
R4(config)#router bgp 2
R4(config-router)#neighbor 34.1.1.3 route-map lp in

6.Multi-Exit-Disc属性

  • 多出口鉴别属性,本质就是metric
  • 范围:0-4294967295,默认为0,越小越优先,没有即为0
  • 一般只能用于自同一个AS发出路由的不同路径metric值比较。
  • 可以在两个AS之间传递,不能传递给第三个AS
  • 在in/out方向均可。
  • 一般用于影响对方AS。若在本AS使用几乎等同LP。
  • 注:MED不能在路由器上修改默认值
R4(config)#route-map med permit 10 
R4(config-route-map)#match ip address prefix-list a
R4(config-route-map)#set metric 20
R4(config-route-map)#ex
R4(config)#route-map med permit 20
R4(config-route-map)#exit
R4(config)#router bgp 2
R4(config-router)#neighbor 34.1.1.3 route-map med in

1.MED 开启比较不同AS的MED

R4(config-router)#bgp always-compare-med

7.Atomic aggregate属性

  • 用来警告下游路由器路由聚合后产生的路由路径丢失.
  • BGP支持向BGP邻居传递重叠路由可以选择多种方式.
R4(config-router)#aggregate-address 10.0.0.0 255.0.0.0      //明细和汇总都公布
R4(config-router)#aggregate-address 10.0.0.0 255.0.0.0 suppress-map  //只公布明细
R4(config-router)#aggregate-address 10.0.0.0 255.0.0.0 summary-only as-set    //只工具没有重        
                                                                             叠的as-path
R4(config-router)#aggregate-address 10.0.0.0 255.0.0.0 summary-only    //聚合后工具聚合后的路由

8.Aggregator属性

  • 用来通告汇总路由的汇总路由器BGP ID
  • 公布汇总者的BGP_ID
  • As-set命令会使得该属性消失

9.community属性

  • 为了更好的标识BGP路由,标识格式为X:y.
  • 团体值的设置不能在EBGP之间,它的传递可以在IBGP之间也可以在EBGP之间

Neighbor kkk send-comminity both     //团体属性如果需要传递,必须开启该指令(both/standard/expanded)

Show IP bgp community   //该命令查可以查看所有具有团体值的路由

R4(config)#route-map com permit 10 
R4(config-route-map)#match ip address prefix-list a
R4(config-route-map)#set community 120
R4(config-route-map)#ex
R4(config)#route-map com permit 20
R4(config-route-map)#exit
R4(config)#router bgp 2
R4(config-router)#neighbor 34.1.1.3 route-map com in

9.1 匹配设置

R4(config)#ip community-list ?              //专用的community匹配工具
  <1-99>     Community list number (standard)
  <100-500>  Community list number (expanded)
  expanded   Add an expanded community-list entry
  standard   Add a standard community-list entry

Standard(做路由标识),expended(MPLS VPN),可读性好.

9.2 community子属性

  • internet:默认属性,可以给任何BGP发送,不对携带团体值的路由做任何限制
  • no_export:只能在一个AS内传送,可以在联盟内传送.该属性就是限制携带团体值的路由传递给EBGP邻居,联盟的EBGP除外.
  • no_adveritise:不在IBGP\EBGP邻居间传递,禁止传递给任何邻居
  • local-as:不向任何BGP邻居发送包括联盟在内的BGP邻居

10.Originator_id

ORIGINATOR_ID是一个由路由反射器创建的32bit数值,该数值是本地AS中路由发起方的路由器ID,如果发起方发现其RID在所接收到的路由的ORIGINATOR_ID中,那么就知道已经出现了路由环路,因而忽略该路由

11.Cluster_list

CLUSTER_LIST是一串路由传递所经过的路由反射簇(cluster)ID,如果路由反射器发现其本地簇ID在其所接收到的路由的CLUSTER_LIST中,那么就知道已经出现了路由环路,因而忽略该路由