注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

itoedr的it学苑

记录从IT文盲学到专家的历程

 
 
 

日志

 
 

BGP协议理解  

2013-08-20 09:29:41|  分类: 路由负载均衡 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

    BGP,边界网关协议.一种应用在大型网络上的协议,主要用来控制AS间通信,具有灵活的可控性,同时也是一种复杂的协议.类似距离矢量特性,BGP是一种路径矢量协议,每个AS作为一跳.它通过TCP协议运行,使用TCP 179端口通信,可靠性由TCP进行控制。
    因为BGP的路由表一般来说都很大,所以使用TCP利用窗口滑动技术可以提高传输效率,这一点不同于EIGRP、OSPF这样的IGP协议,后者使用1-1的确认方式,效率低下。BGP存活消息每隔60秒发一次,保持时间180秒。
  BGP必须手工指定邻接关系,BGP邻接关系分为内部邻居(处于同一AS中),内部邻居之间可以跨越多个路由器,默认TTL跳数为255,所以无需额外使用多跳属性;外部邻居(不同的AS中),一般来说外部邻居都是直连的邻居,因为这样通过直连或者静态路由就可以到达对方,如果不是直连,则需要有本地路由配合确保能够到达对方,而且必须明确设置多跳属性,因为外部BGP邻居默认跳为1跳,配置方法:neighbor ip ebgp-multihop num。
  BGP定义的属性
公认强制属性:
1.AS路径
2.下一跳 
3.源头 这些都是必须被传播的。
公认自由:
1.本地优先级
2.原子聚合(告诉邻接AS,始发路由器对路由进行了聚合)
可选船体:
1.聚合站
2.共同体
可选非传递:MED(多出口鉴别器)
   注:CISCO私有协议还多了一个:权重
  BGP使用AS路径属性,每个BGP路由都携带这样的路径列表,BGP拒绝列表中包含自己AS的路径,这样确保无环路。
下一跳属性:
  从EBGP学习到路由条目,在传播给IBGP时候,默认保持下一跳不变,这里的下一跳是进入下一个AS的边界路由器的接口IP,因此在AS内的路由,如果要到下一个AS,它就要首先查找BGP表,从BGP表里发现要通过的下一跳,所以IP路由表中必须要有到达下一跳的路由信息,否则下一跳不可达的BGP路由是不会被装入路由表的。如果AS内的路由器没办法获得到达下一跳的路径信息,那就应该使用next-hop-self属性(修改下一跳)。对于多路访问网络第三方下一跳会自动修正下一跳为最合适的接口(但是NBMA情况下,第三方下一跳有时会出问题)。

源头属性
定义路径信息的初始来源的源头,它可能为:
1.IGP,起始在AS内部,通过NETWORK宣告的。用i表示
2.EGP,早期的,现在已过时。
3.不完全,源头未知或者通过其他方法获悉的,例如被充分发到BGP中的,不完整的源头用?表示。
      本地优先级属性:
          只在AS内部有作用,只发送给内部BGP邻居,影响数据出去的方向。CISCO默认值100。可以使用在BGP进程下bgp default local-preference num来修改,越大越好。可以在neighbor ip  remote-as num后跟上route-map name in,在IN方向上对不同的外部网络设置不同的本地优先级,这样本地AS到达不同的外部网络时可以选择不同的出口。这里需要注意,为了影响自己AS到达外部网络,所以外部网络在从不同的外部邻居学习进来的时候就要在各自的IN方向设置本地优先级,这样本地BGP表里才会是通过不同的接口有不同的本地优先级别。
     权重属性:
           CISCO私有的,只对当前路由器有效,影响数据出方向,权重越大越好,可以使用neighbor ip remote-as num weight num让权重与外部邻居挂钩,从而让一个路由器有多个到外部AS出口时选择最大的一个。
    MED属性:
            在自己AS内定义,影响外部AS数据进来,这是唯一一个影响数据入方向的属性,正因为是影响数据入方向,所以MED作的工作是传播给邻接AS,让邻接AS根据不同的MED选择不同的出路。因此在使用route-map作为neighbor命令的参数时候要使用OUT方向(影响别人从而达到影响自己的目的)。全局修改MED在BGP进程下使用default-metric num.
BGP水平分割原则:
          从IBGP学到的不应该在传播给下一个IBGP(学习的IBGP除外)。正是由于此,IBGP之间需要进行全互连,这样才能确保各个IBGP都能学习到外部BGP路由。
BGP同步规则:
          BGP规定,BGP路由器不会将通过IBGP学习到路由发送给EBGP(但是会装入BGP表,但不是最优路径,所以不会发给别人),除非这个路由在IGP中有获悉,即只有当IGP与IBGP都有到达某个网络的路由时,这个BGP路由才能发送给EBGP(从外部学到的BGP路由必须在IGP中也存在对应的路由,这就要求将外部BGP重分发到IGP中,一般来说这种情况不可能,外部BGP路由太大了)。本来这个规则是为了防止路由黑洞的,但是却带来了一个麻烦,即一旦IGP里路由与BGP的不同步,路由就不能正常被使用。因此现在的ISP网络大都是在AS内实行全互连,且同时都运行BGP,这样就可以关闭同步。

指定BGP邻居的方法:

neighbor 邻居IP、对等体组名 remote-as AS号
设置对等体组方法:

neighbor 对等体组名 peer-group
加入对等体组方法:

neighbor 对等体IP peer-group 对等体组名
BGP对对等体独特要求:
          BGP的路由更新源地址一定要是和指定邻居中的IP一致。因此如果使用环回地址作为对等体IP,那么就需要配上neighbor 对等体IP(环回) remote-as update-source 环回地址.外部对等体最需要注意的就是多跳问题,见上面总结,同时也必须确保这个跳是可达的。

=============范例============
router bgp 65111
neighbor 1.1.1.1 remote-as 65111  (内部邻居,使用的对等体IP是个对方的环回地址)
neighbor 1.1.1.1 update-source loopback0 (指定更新源是自己的环回地址)
neighbor 1.1.1.1 next-hop-self (修改下一跳)
neighbor 2.2.2.2 remote-as 65222 (外部邻居,也使用对方环回接口)
neighbor 2.2.2.2 ebgp-multihop 2 (设置多跳,跳数2)
neighbor 2.2.2.2 update-source loopback 0 (指定更新源是自己的环回地址)
ip route 2.2.2.2 255.255.255.255  172.16.31.2(设置到达外部邻居环回接口的路由,否则邻居关系起不来)
重置BGP绘画,因为BGP一般运算很占资源,所以一般不能轻易使用clear ip bgp * ,一般应带上soft in或者soft out参数。
BGP邻居的状态:
1.IDLE
2.CONNECT
3.ACTIVE
4.OPEN SENT
5.OPEN CONFIRM
6.Established
只有在已建立状态后,路由器才相互发送路由信息。
空闲状态表示路由器还不知道如何前往邻居,如果一直是这个状态,要检查邻居配置以及1、2层连通性,检查有无到达对方的网络。
活动状态表明,它已经找到邻居,并发送了打开分组,但还未得到响应。如果长时间这个状态,检查邻居是配置了正确的邻接关系和检查链路是否是单向链路,或检查对方有无回来的路。
CISCO路由器对BGP条目的选择标准:(BGP只选一个最好的路径加入路由表)
1.权重最大的(当前路由器有效)
2.本地优先级最高的(AS内有效)
3.当前路由器通告的(next hop=0.0.0.0)
4.AS PATH最短的
5.源头编码最小的(igp<egp<不完全)
6.MED最小的
7.EBGP优先IBGP路径、
8.经由最近的IGP邻居的路径
9.最老的EBGP路径
10.BGP邻居中路由器ID最小的
11.邻居IP地址最小的
 
BGP的汇总特性:
关闭与否auto-summary对影响BGP控制重分来进来的路由汇总特性,若打开该功能,则重分发进来的子网会被自动汇总为相应的分类网络,关闭则保持分来而来的子网。新版本IOS对重分来的路由不再进行自动汇总。
network宣告规则:
1.如果命令中不带掩码且自动汇特性打开,要求宣告为对应的分类网络,此时要求路由表中必须存在至少该分类网络的一个子网路由,否则不会通告该分类网络到其他路由器的BGP进程。如果最后一个子网也消失了,那路由器将从所有其他路由器中撤回这个分类网络。
     如果命令中不带掩码且自动汇特性关闭,则需要IP路由表中有一条严格相同的路由存在.
case1:
    router bgp 1
    network 172.16.0.0
r3-2514#sh ip bgp
结果: 没有宣告进去.前提:未关闭汇总,宣告的是主类,IP表中无子网路由及精确一致路由.
=====================================================================
case2 :
    router bgp 1
     network 172.16.0.0
     ip route 172.16.10.0 255.255.255.0 null 0
r3-2514#sh ip bgp
BGP table version is 2, local router ID is 3.3.3.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
Origin codes: i - IGP, e - EGP, ? - incomplete
   Network          Next Hop            Metric LocPrf Weight Path
*> 172.16.0.0       0.0.0.0                  0         32768 i
结果:正常宣告.前提:未关闭汇总,宣告的是主类,IP表中有主类的子网存在.
===================================================================
case3:
   router bgp 1
   network 172.16.0.0
   ip route 172.16.0.0 255.255.0.0 null 0

r3-2514#sh ip bgp
BGP table version is 1, local router ID is 3.3.3.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
Origin codes: i - IGP, e - EGP, ? - incomplete
   Network          Next Hop            Metric LocPrf Weight Path
*  172.16.0.0       0.0.0.0                  0         32768 i
结果:宣告进去,(特殊:变成最优要等很长时间).前提:未关闭自动汇总,宣告的是主类,IP路由表有精确匹配,但无子网路由.
=================================================================
case4:
  router bgp 1
  network 172.16.10.0
r3-2514#sh ip bgp  
结果:宣告不进去, 前提:宣告172.16.10.0且不带MASK,没有配置子网路由和精确匹配.
=================================================================
case5:
   router bgp 1
   network 172.16.10.0
   ip route 172.16.10.0 255.255.255.0 null 0
r3-2514#sh ip bgp
结果:宣告不进去,前提:宣告172.16.10.0不带MASK,配置精确匹配.

==================================================================
case6:
   router bgp 1
   network 172.16.10.0
   ip route 172.16.10.0 255.255.255.252 null 0   
 
结果:宣告不进去.前提:宣告的是172.16.10.0 不带mask,IP路由表中有它的子网路由.
 
总结:未关闭自动汇总时,使用主类网络通告(不带MASK),同时IP表中存在至少一条子网路由(或精确匹配的).
=======================================================================
case7 :
    router bgp 1
    no auto-summary
     network 172.16.0.0
     ip route 172.16.10.0 255.255.255.0 null 0
r3-2514#sh ip bgp
结果:宣告不进去.前提:关闭自动汇总,宣告主类,有子网路由.
========================================================================
case8:
    router bgp 1
    no auto-summary
     network 172.16.0.0
     ip route 172.16.0.0 255.255.0.0 null 0
r3-2514#sh ip bgp
BGP table version is 2, local router ID is 3.3.3.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
Origin codes: i - IGP, e - EGP, ? - incomplete
   Network          Next Hop            Metric LocPrf Weight Path
*> 172.16.0.0       0.0.0.0                  0         32768 i
结果:正常宣告.前提:关闭自动汇总,宣告主类,IP路由表有完全匹配路由.
==========================================================================
case9:
   router bgp 1
   no auto-summary
   network 172.16.0.0或net 172.16.10.0
   ip route 172.16.10.0 255.255.255.0 null 0
r3-2514#sh ip bgp
结果:宣告不进去.前提:关闭自动汇总,宣告172.16.10.0或172.16.0.0,IP路由表有完全匹配路由.

===========================================================================
case10:
    router bgp 1
    no auto-summary
     network 172.16.10.0
     ip route 172.16.0.0 255.255.0.0 null 0
r4-2501#sh ip bgp
结果:宣告不进去.
总结:关闭汇总,只能通告分类网络(不带mask),且必须要求宣告的网络与IP路由表的条目要完全匹配.
============================================================================
2.如果命令中带掩码,那么IP路由表中必须存在有一条与该通告命令完全一样(网络号和掩码都要相同)的路由,否则不会通告该网络。
关于BGP宣告方面文章看这里:
http://www.cisco.com/en/US/tech/tk365/technologies_tech_note09186a00800945ff.shtml#topic1
利用network进行BGP的汇总:
其实本身network并不是汇总的命令,它是BGP宣告网络的方法,只是我们可以利用它在宣告的时候就宣告为汇总的网络。
从BGP的network宣告规则可以看出,要宣告一个汇总路由条目,前提是路由表中要已存在相同地址和掩码的路由条目,所以很多时候为了宣告汇总路由往往需要先手工指定一个相同地址和前缀的静态路由(指向NULL0接口),这样既可以保证宣告成功又能保证当没有具体子网时候数据被丢弃,防止路由黑洞。例如:
route bgp 65111
 network 192.168.0.0
 network 192.168.1.0
 network 192.168.2.0
 network 192.168.3.0
这样的宣告可以改成这样汇总:
ip route 192.168.0.0 255.255.255.252 null 0
router bgp 65111
network 192.168.0.0 255.255.252.0
利用aggregate-address汇总BGP路由:
这是汇总BGP表里路由的命令,它只聚合已经存在于BGP表中的网络。它在汇总后会自动增加一条指向空接口的路由到路由表中。
aggregate-address ip地址 掩码 summary-only|as-set
参数summary-only表示只通告汇总路由出去,默认是汇总+具体路由一起出去的。
as-set表示在聚合路由的的AS路径属性字段里填上所有具体路由中包含的那些AS号,否则只包含执行聚合的AS的号。



BGP的选路原则

1. WEIGHT值最高的路径优先。WEIGHT是CISCO专有的参数,且只对配置该参数的本地路由器有效,不能传递。缺省条件下,本地始发的路径具有相同的WEIGHT值(32768),所有其它的路径的WEIGHT值为0。

2. LOCAL-PREF值(本地优先级)。CISCO IOS中,LOCAL-PREF缺省值为100。该属性只能在本AS内传递。

3. 基于始发地(origination)评估路由,路由器本地始发的路径优先。依次降低的优先级顺序是:default-originate(针对每个邻居配置), default-information-originate(针对每种地址簇配置),network , redistribute , aggregate-address 。

4. 评估AS-PATH的长度,AS-PATH列表最短的路径优先。但可以通过配置 bgp bestpath as-path ignore (隐藏命令)来忽略这一步。

5. 评估路由的origin属性,origin属性值最低的路由优先。IGP:origin值=0;
EGP:origin值=1;INCOMPLETE:origin值=3

6. 评估MED。MED值最小的路径胜出。该属性可以传递出AS。缺省条件下,只有在两条路径的第一个AS相同的情况下才会进行比较。如果配置了:bgp always-compare-med,那么对于所有路径都将比较MED,而不考虑它们是否来自于同一个AS。

7. EBGP路径优先于IBGP路径。

8. BGP优先选择到BGP下一跳的IGP度量最低的路径。

9. 如果配置了maximum-paths[ibgp]n, n在2-6之间,并且存在多条等价成本的路径,那么BGP会在IP路由选择表中插入最多n条接收到的路径。这就激活了BGP多路径负载分担特性。如果没有使用可选关键字ibgp,则多路径特性就仅仅应用于ebgp路径。当不激活这一选项时,它的缺省值为1。

10. 当两条路径都是外部路径时,BGP将优先选择最先收到的路径(最老的路径)。

11. BGP优先选择来自于最低的路由器ID的BGP路由器的路由。

12. 如果多条路径的始发路由器ID或路由器ID相同,那么BGP将优选CLUSTER-LIST长度最短的路径。

13. BGP优选来自于最低的邻居地址的路径。
  评论这张
 
阅读(128)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017