<BGP(Border Gateway Protocol)理论部分>
·BGP属于EGP,是高级DV协议,也被称为路径矢量协议,基于TCP 179端口。 ·现在使用版本BGP4。
第一次做完整更新,以后就只增量更新
·Autonomous Systems:运行同一种选路策略,由统一管理者管理。 1-64511 (公有) 64512-65535 (私有)
电信AS号:4134 网通AS号:9929
Bgp.potaroo.net 一个好的网站,可以了解到关于AS号的一些信息
Telnet route-server.ip.att.net这一地址可以看到公网上的路由条目数
·IGP支持的路由条目有限 运行IGP不利于管理, 做路由聚合、选路。
·BGP路由器只能将其使用的路由通告给他的邻居。 BGP用Open报文建邻居,用KL报文做日常联系
·Neighbor table :
List of BGP neighbors
·BGP forwarding table/database
List of all networks learned from each neighbor
Can contain multiple pathways to destination networks Database contains BGP attributes for each pathway ·IP routing table
List of best paths to destination networks
BGP表和路由表是独立的,同样遵循AD小的进入路由表。 BGP默认不做负载均衡
·Router-ID选举和OSPF一致。
四种报文:
Open ---includes holdtime and BGP router ID
(用于建立TCP连接后,发起BGP会话,每个邻居都用该消息来标识自己,并且规定自己的BGP运行参数)
Keepalive —
(用于保持BGP会话,每隔60秒发送一次,hold time为180S)
Update ---information for one path only (could be to multiple networks) ---Includes path attributes and networks
·一个UPDATE 消息一次只能通告一条路由,但它可以携带多个属性。 一个UPDATE 消息一次也可通告多条路由,但它的属性必须相同。 一个UPDATE 消息可以同时撤消多条路由。
BGP
1
Notification
---when error is detected
---BGP connection is closed after sent
(当检测到错误的时候就会发起Notification消息。通常会导致BGP连接的终止)
1,空闲状态:
BGP通常以空闲状态开始。在该状态下,它拒绝接收所有入连接。当一个开始时间出现的时候,BGP过程初始化所有的BGP资源,打开重试连接计时器、初始化到邻居的TCP连接,接听来自邻居的TCP初始化消息并将它的状态转到接连状态。开始事件是又一个操作者配置BGP的一个过程。
2,连接状态:
在这种状态下,BGP过程会等到TCP连接完成以后再决定后续的动作。如果连接建立成功,BGP连接将ConnectRetry清零,完成初始化过程,给邻居发送一个Open消息并转移到发送Open消息状态。如果TCP连接失败,BGP过程会继续监听由邻居发起的连接,重置ConnectRetry计时器并转移到激活状态。
3,激活状态:
在这个状态下,BGP过程试图与邻居建立一个TCP连接。如果连接建立成功,BGP连接将ConnectRetry清零,完成初始化过程,给邻居发送一个Open消息并转移到发送Open消息状态。如果在激活状态时,ConnectRetry计时器超时,该过程回到连接状态。
4,发送Open消息状态: 在这种状态下,已经发送了Open消息,BGP正在等待从邻居发来的Open消息。当收到一个Open消息后,检查该消息所有的字段。如果发现了差错,会给它邻居发送一个Notification消息并且将状态转移到空闲。如果在接收到的Open消息中没有发现差错,BGP给邻居发送一个Keepalive消息并且将Keepalive计时器置位。邻居之间协商一个Hold时间,它们会选用较小的值。如果协商的Hold时间是0,则没有启动Hold和keepalive计时器。根据对等的AS号,决定该连接是内部的还是外部的,并且将状态转移到Open消息确认。
5,Open消息确认状态:
在这种状态下,BGP过程会等待一个Keepalive或者Notification消息。如果收到了Keepalive消息,转移到建立状态,如果收到了Notification消息或者TCP断开消息,转移到空闲状态。
6,建立状态:
在这种状态之下,BGP对等之间的连接完全建立起来了。对等之间可以交换Update,Keepalive和Notification消息。如果收到了Update或Keepalive消息,重新启动Hold计时器 。如果收到Notification消息。状态会转移到空闲。
·ORIGIN属性
ORIGIN是一个公认必选的属性,它明确了路由更新消息的来源。当BGP有多条路由时,它会将ORIGIN当作一个决定较优路由的因素。它规定了以下几种源:
BGP
2
·IGP—一个IGP源会得到ORIGIN值中的最佳的选项。
·EGP—NLRI是从EGP学习到的。相对于IGP,EGP是第2选择。
·Incomplete—NLRI是通过其他手段学习到的。是ORIGIN最低的选择。
·AS-PATH属性
AS-PATH 是一个公认必选属性。它用AS号的顺序来描述AS间的路径或者到NLRI所明确的目的地的路由。AS-PATH属性的另外一个功能就是避免环路,如果BGP路由器从它的外部对端处收到了一条路由,而该路由的AS-PATH包含这个BGP路由器自己的AS号,于是该路由器就知道是条环路路由,从而将这样的路由丢弃掉。
R1(config)#route-map AS
R1(config-route-map)#set as-path prepend 7 8 9 设置虚拟的AS号 通常都会这样加set as-path prepend 4 4 4 加自已的AS号,不易搞混
·NEXT_HOP属性
NEXT_HOP是一个公认必选属性。描述了公布目的地的路径下一跳路由器的IP地址。由BGP NEXT_HOP属性所描述的IP地址不经常是邻居路由器的IP地址。要遵循下面的规则:
·如果正在进行的路由宣告的路由器和接收的路由器在不同的AS中,NEXT_HOP地址为正在宣告路由的路由器接口IP地址。
·如果正在进行宣告路由的路由器和接收的路由器在同一个AS里,并且更新消息的NLRI指明目的地是同一个AS内,那么NEXT_HOP就是已经宣告路由的邻居的IP地址。
·如果正在宣告的路由器和接收的路由器是内部对等实体,并且更新消息的NLRI指明目的地在不同的AS内。NEXT_HOP是外部对等的接口地址。
·LOCAL_PREF属性
LOCAL_PREF是公认自选属性。只用在内部网关对端之间的更新消息中。它不会传递给其他的AS。如果一个内部运行BGP的路由器收到了一个目的地的多条路由。它将这些路由的LOCAL_PREF进行比较,选择具有最高优先级的路由。它只能影响离开AS的业务量。
R1(config)#route-map WE
R1(config-route-map)#set local-preference 101
R1(config-router)#bgp default local-preference 101 会影响所有路由 打上这一命令后----
·对\传过来的路由\自己network的路由\起效,要show明细才能看到。 ·对\传过来的路由\不起效。
·MED属性
MED属性是一个任选非传递属性。这个任选非传递属性与EBGP的Update消息中携带,它允许一个AS将它的首选的入口点通知另外一个AS。如果其他参数都相同,则收到同一个目的地的多条路由的AS将这些路由的MED进行比较,具有最低MED值的路由为首选。这是因为将MED看成一个度量,并且最低的度量----最短的距离----是首选。
MED值只会传递给配置MED值的对端AS,从而使他们知道优先的路由,但是接收的AS不会在继续传递给下一个AS。
如果同一个目的地的两条路由来自两个不同的AS,也不进行MED值的比较。MED值只对单一的AS有意
BGP
3
义,当该AS有多个入口点时,它用来说明首选项的等级。 R1(config)#route-map MED
R1(config-route-map)#set metric 1
R1(config-router)#neighbor 24.1.1.4 route-map MED out
测试方法: 扩展ping / debug ip bgp updates
·默认比较从不同AS传来路由的MED。
R2(config-router)#bgp always-compare-med
·ATOMIC_AGGREGATE属性
ATOMIC_AGGREGATE属性是一个公认必选的属性,它用来警告下游路由器出现了路径信息丢失。当一个BGP路由器将更具体的路由聚合后,而且已经出现了路径信息丢失时,运行BGP的路由器必须将该属性附加到聚合路由中。任何一台下游路由器收到后,不能使这条NLRI信息更详细。并且当该路由公布给其他对端时,必须也附带该属性.
·AGGREGATOR属性
当设置了ATOMIC_AGGREGATE属性,运行 BGP的路由器可以选择附加AGGREGATOR属性。这个任选可透明传递属性包括发起聚合路由的路由器的AS号以及IP地址,从而提供了执行聚合的地点的信息。
·Community属性
COMMUNITY是一个人选可透明传递的属性。COMMUNITY属性标明一个目的地作为一些目的地团体中的一个成员,这些目的地共享一个或者多个共同的属性。
“可选”:BGP的所有邻居都有可能不识别社团属性。(是可选的,路由器默认不认识) R2(config-router)#neighbor 1.1.1.1 send-community
“传递”:社团属性只会传给指定的邻居,并只在此邻居上起效。
比如上例:就只传给1.1.1.1这一邻居,并只在它上面起效,不会再向后传
·no-advertise:携带此属性的路由不会通告给任何BGP邻居。
·no-export: 携带此属性的路由不会传出本AS外,只会传给IGP。(联邦中的小AS会传递)。 ·local-AS: 携带此属性的路由不会传出小AS。
R1(config-route-map)#set community no-advertise/no-export/local-AS
·Weight属性
Weight属性是Cisco私有的属性。只适用于一台路由器中的路由。该参数不会传递给其他的路由器。Weight值越高,优先级就越高。当一个路由有多条路径的时候,路由器选择Weight值最高的那条路由。由本地路由器产生的所有路由Weight值都是32768。
修改Weight---
R1同时从R3和R2学到同一条BGP路由,在R1上改: Neighbot 3.3.3.3 weight 1
BGP
4
R1(config)#route-map WE R1(config-route-map)#
R1(config-route-map)#set weight 8
R1(config-router)#neighbor 2.2.2.2 weight 8
·AS-SET属性
AS-SET属性的作用是在当路由聚合以后,NRLI信心产生了丢失,通过使用AS-SET属性,可以修复原来丢失的属性。如聚合后,路由经过的AS号丢失,通过使用AS-SET,可以还原原来丢失的AS号。防止环路的产生。
·BGP路径抉择的过程:
1, 首选具有最高Weight值的路由。
2, 如果Weight相同,那么选择具有最高LOCAL_PREF值的路由。
3, 如果LOCAL_PREF值相同,首选逻辑上在该路由器上发起的路由。也就是说,首选从同一个路由
器上起源于IGP学习到的路由。
4, 如果LOCAL_PREF值相同,而且没有逻辑上发起的路由,首选具有最短AS-PATH的路由。 5, 如果AS-PATH相同,首选具有最低ORIGIN CODE的路由,IGP 7, 如果MED相同值,在EBGP路由和联盟EBGP中,首选EBGP路由,在联盟EBGP路由和IBGP路由中首 选联盟EBGP路由。 8, 如果路由相同,首选到BGP下一跳最短的路径。 9, 如果路由相同,首选具有最低路由器ID的BGP路由。 10, 如果路由器ID相同,首选具有最低IP地址的接口地址的路由。 ·BGP路由黑洞的解决方法: 1)物理线路的Full Mesh (成本高,不可取) 2)BGP重分布进IGP(不可取) 3)BGP's Full Mesh IGP内所有路由器都运行BGP(不可取) 4)BGP's Partial Mesh (路由反射器/联邦) ·BGP's Split Horizon Rule: IBGP:从IBGP邻居收到的路由不再传给其他的IBGP邻居。 EBGP:不接收携带本AS号的路由更新。 EBPG之间用直连接口来建邻居 IBGP中用环回口建邻居 <Synchronization>同步。只针对IBGP邻居 BGP 的同步仅限于IBGP的邻居,BGP同步的默认情况下,AS内的一个路由器从IBGP学到一条路由,不使用也不传,除非是从IGP也学习到该路由。如果这个时候关闭BGP同步规则,就会产生一个路由黑洞。 BGP 5 例如: 假如同步关闭的情况下,IGP并不知道AS100和AS300的路由,当R1从AS100学过来一条路由,并且使用next-hop-self命令将下一跳改成自己的接口(EBGP默认学习过来的下一跳是对端路由器的接口)发布给IBGP邻居R4时,R4因为下一跳可达(IGP知道),所以将该路由加入路由表,并且发布给AS300,当AS300要去这个目的地时,它会将数据传给R4,R4收到这个数据包后,查看目的地址发现是去AS100的,它查看自己的路由表发现下一跳是R1的接口地址,于是继续查看路由表发现要去R1首先得经过R3,于是它把数据传送给了R3,由于R3运行的是IGP,并且它不知道AS100里的路由情况,所以它没有到达这个目的地的路由表,它会丢弃该路由,这样就造成了一个路由黑洞。 如果同步开启的情况下,R1收到了来自AS100的路由后,由于R1没有将BGP重发布进IGP,所以R1的IGP并不知道AS100里的路由情况,所以R1不会使用这一条路由,也不会传递给其他邻居。所以路由黑洞不会产生。 解决IBGP路由器收到更新不会转发给其他IBGP邻居的方法: <Reflector> ·打破IBGP的水平分割规则。 ·如果路由是从非客户的IBGP对等学习到的,只将它反射给客户。 ·如果路由是从客户处学习到的,将它反射给除了发起该路由的客户外的所有非客户及客户。 ·如果路由是从EBGP对等处学习到的,将它反射给所有的客户和非客户。 BGP 6 <Confederation> 联邦 联盟是控制大型IBGP对等的另一条途径。在联盟内的运行BGP的路由器和在同一个联盟AS内的对端之间使用IBGP,和其他联盟对端之间使用EBGP。给每个联盟分配一个联盟ID。对外部联盟内的对端来讲,这个联盟ID代表整个联盟AD号,外部对端看不到联盟的内部结构,只看到这些联盟所在的AS。 ·将大AS划分成若干个小AS,小AS之间是EBGP关系。 ·1、联邦中的所有路由器都必须用起小AS号。(Route bgp 小AS) R2#show ip bgp neighbor 12.1.1.1 adverised-routes ·2、联邦中的所有路由器都必须声明大AS号 R1(config-router)#bgp confederation identifier 1 ·3、连接小AS的边界路由器要互相指peers: 联邦中的小AS号(64512)不算作比较,只算作一个 R1(config-router)#bgp confederation peers 64512 (对端小AS号) ·联邦外路由器和联邦的边界路由器建立邻居关系时,neighbor大AS号。 在sh ip bgp中,小AS号会用括号括住,并且不算做一个进行路径比较的AS号 <BGP基础配置部份> R4(config)#router bgp 64512 R4(config-router)#bgp router-id 94.4.4.4 R4(config-router)#neighbor 24.1.1.2 remote-as 64513 (EBGP邻居) R2(config)#router b 64513 R2(config-router)#neighbor 3.3.3.3 remote-as 64513 (IBGP邻居) R2(config-router)#neighbor 3.3.3.3 update-source loopback 0 (更新源是环回口) R3(config)#ip route 5.5.5.0 255.255.255.0 serial 0 R5(config)#ip route 3.3.3.0 255.255.255.0 serial 0 R5(config-router)#neighbor 3.3.3.3 update-source loopback 0 R3(config-router)#neighbor 5.5.5.5 ebgp-multihop 2 (EBGP设置多跳,环回口才用得上) R5(config-router)#neighbor 3.3.3.3 ebgp-multihop (默认255) R2#show ip bgp summary (摘要的邻居邻居信息) R2#show tcp brief R2#show ip bgp neighbors (详细的邻居信息) R4(config-router)#network 4.4.4.0 mask 255.255.255.0 (严格按照IP地址掩码通告) R4(config-router)#network 100.0.0.0 (在auto-summary时,也可以主类方式通告) BGP 7 重发布BGP进入IGP 将BGP重发布进IGP的时候,只能发布EBGP学来的路由和自己宣告的路由进入IGP,从IBGP学来的路由不能发布进去,应为I BGP默认不转发给其他IBGP邻居,从发布进IGP的话就等于延长了传播,容易造成环路,而且IBGP的路由都在同一个AS类,推荐使用IGP来完成。如果要强行发布IBGP路由进入IGP,那么在BGP下打 Bgp redistribute-internal <Peer-Group> BGP为每个邻居都占用一个Buffer,使用Peer-Group可以使多个邻居共用一个Buffer。 针对多的邻居关系,减少配置量。 R1(config-router)#neighbor WOLF peer-group R1(config-router)#neighbor WOLF remote-as 64513 R1(config-router)#neighbor WOLF update-source loopback 0 调用:neighbor 2.2.2.2 peer-group WOLF R1,R2通过EIGRP 100和IBGP互联,EIGRP 100通告环回接口192.168.192-199段进入BGP。那么汇总的路由要发布给其他AS可以有下面的方法和问题。 1,使用静态路由聚合。 Ip route 192.168.192.0 255.255.248.0 null0 Router bgp 100 Network 192.168.192.0 mask 255.255.248.0 BGP 8 通过使用上面的配置来宣告汇总路由。这样不用将EIGRP重发布进BGP也能通告一个汇总路由给其他AS。 2,抑制更具体的路由。 Router bgp 100 Aggregate-address 192.168.192.0 255.255.248.0 summary-only Redistribute eigrp 100 在R1,R2上重发布EIGRP 100 进入BGP,要使用aggregate-address命令前提是bgp路由表里面必须得有需要聚合的路由详细条目。通过配置aggregate-address命令可以代替用静态路由方法通告汇总路由,后面如果跟summary-only命令的话,那么就会抑制具体的路由,只发布汇总后的路由。如果不加上一个summary-only的话就会连具体路由一起通告出去,这样对方AS会更方便的控制路由。 s> 192.168.192.0 0.0.0.0 0 32768 ? *> 192.168.192.0/21 0.0.0.0 32768 i * i 60.1.1.2 0 100 0 i s> 192.168.193.0 0.0.0.0 0 32768 ? s> 192.168.194.0 0.0.0.0 0 32768 ? s> 192.168.195.0 0.0.0.0 0 32768 ? s> 192.168.196.0 60.1.1.2 2297856 32768 ? s> 192.168.197.0 60.1.1.2 2297856 32768 ? s> 192.168.198.0 60.1.1.2 2297856 32768 ? s> 192.168.199.0 60.1.1.2 2297856 32768 ? 加上summary-only之后,在show ip bgp时会显示出以上表格,前面的S代表抑制后的路由。不会发给对方AS。 3,公布具体地址以及聚合路由。 在上面拓扑中,要满足将聚合路由和具体的地址通告给AS200,方便AS200控制具体的路由,又要满足AS300只能收到聚合的路由,可以通过以下几种方法来满足。 在R1上配置: Router bgp 100 Aggregate-address 192.168.192.0 255.255.248.0 Neighbor 10.1.1.2 route-map community out Neighbor 10.1.1.2 send-community access-list 101 permit ip host 192.168.192.0 host 255.255.248.0(精确匹配聚合路由) route-map community permit 10 match ip add 101 route-map community permit 20 set community no-export BGP 9 在R2上配置: Router bgp 100 Aggregate-address 192.168.192.0 255.255.248.0 Neighbor 20.1.1.2 route-map community out Neighbor 20.1.1.2 send-community Ip prefix-list 101 permit 192.168.192.0/21 Route-map community permit 10 Match ip add prefix-list 101 Route-map community permit 20 Set community no-export 通过使用community no-export命令,将社团属性通告给AS200,该属性的作用是将收到附带该属性的路由不发送给下一个AS,故AS300只能收到没有附带该属性的聚合路由。 *> 50.0.0.0 10.1.1.1 2169856 0 100 ? * i 20.1.1.1 2169856 100 0 100 ? *> 50.1.1.0/24 10.1.1.1 0 0 100 ? * i 20.1.1.1 0 100 0 100 ? *> 192.168.192.0 10.1.1.1 0 0 100 ? * i 20.1.1.1 2297856 100 0 100 ? *> 192.168.192.0/21 10.1.1.1 0 0 100 i * i 20.1.1.1 0 100 0 100 i *> 192.168.193.0 10.1.1.1 0 0 100 ? * i 20.1.1.1 2297856 100 0 100 ? *> 192.168.194.0 10.1.1.1 0 0 100 ? * i 20.1.1.1 2297856 100 0 100 ? *> 192.168.195.0 10.1.1.1 0 0 100 ? * i 20.1.1.1 2297856 100 0 100 ? *> 192.168.196.0 10.1.1.1 2297856 0 100 ? * i 20.1.1.1 0 100 0 100 ? *> 192.168.197.0 10.1.1.1 2297856 0 100 ? * i 20.1.1.1 0 100 0 100 ? *> 192.168.198.0 10.1.1.1 2297856 0 100 ? * i 20.1.1.1 0 100 0 100 ? *> 192.168.199.0 10.1.1.1 2297856 0 100 ? * i 20.1.1.1 0 100 0 100 ? 以上为R3的路由表,包括了聚合和具体的路由。 Network Next Hop Metric LocPrf Weight Path * 192.168.192.0/21 30.1.1.1 0 200 100 i *> 40.1.1.1 0 200 100 i 在AS300的路由表里,仅仅能看到聚合路由。 BGP 10 4,公布聚合路由和挑选出来的路由。 现在AS100需要公布聚合后的路由,已经经过挑选出来的路由发布给AS200,除了195和199的路由不发布之外,其他所有路由都发布给AS200。通过配置suppress-map抑制列表来满足抑制相应的路由发布给其他AS。 在R1上配置: Router bgp 100 Aggregate-address 192.168.192.0 255.255.248.0 suppress-map deny Access-list 1 permit 192.168.195.0 0.0.0.255 Access-list 1 permit 192.168.199.0 0.0.0.255 Route-map deny permit 10 Match ip add 1 在R2上配置: Router bgp 100 Aggregate-address 192.168.192.0 255.255.248.0 suppress-map deny Ip prefix-list 1 permit 192.168.195.0/24 Ip prefix-list 1 permit 192.168.199.0/24 Route-map deny permit 10 Match ip add prefix-list 1 R2#show ip bgp * i50.0.0.0 50.1.1.1 2169856 100 0 ? *> 0.0.0.0 2169856 32768 ? * i50.1.1.0/24 50.1.1.1 0 100 0 ? *> 0.0.0.0 0 32768 ? *> 192.168.192.0 50.1.1.1 2297856 32768 ? * i 50.1.1.1 0 100 0 ? *> 192.168.192.0/21 0.0.0.0 32768 i * i 50.1.1.1 0 100 0 i *> 192.168.193.0 50.1.1.1 2297856 32768 ? * i 50.1.1.1 0 100 0 ? *> 192.168.194.0 50.1.1.1 2297856 32768 ? * i 50.1.1.1 0 100 0 ? s> 192.168.195.0 50.1.1.1 2297856 32768 ? * i192.168.196.0 50.1.1.1 2297856 100 0 ? *> 0.0.0.0 0 32768 ? * i192.168.197.0 50.1.1.1 2297856 100 0 ? BGP 11 *> 0.0.0.0 0 32768 ? * i192.168.198.0 50.1.1.1 2297856 100 0 ? *> 0.0.0.0 0 32768 ? s> 192.168.199.0 0.0.0.0 0 32768 ? 在R2上show ip bgp 我们可以看到192.168.195.0 和192.168.199.0的路由条目前面带有S,表示被抑制后的路由,在AS200已经看不到这2条路由了。 5,改变聚合的属性。 因为192.168.192.0/21段的路由是从EIGRP 100重发布进BGP的,所以所有更具体的路由都有一个 incomplete的ORIGIN属性。但是聚合后的路由有一个IGP的ORIGIN属性,这是因为这条路由在R1,R2的BPG进程中发起的。假如我们希望把 R1,R3之间的链路用做主要的链路,R2,R4之前的链路用做备用的链路,那么可以通过attribute-map 命令来完成,也可以通过route-map 指定邻居来完成。 在R1上配置: Router bgp 100 Aggregate-address 192.168.192.0 255.255.248.0 attribute-map att suppress-map deny Route-map att permit 10 Set origin igp 在R2上配置: Router bgp 100 Nei 20.1.1.2 route-map att out Route-map att permit 10 Set origin incomplete R3的路由表: *> 50.0.0.0 10.1.1.1 2169856 0 100 i * i 20.1.1.1 2169856 100 0 100 ? *> 50.1.1.0/24 10.1.1.1 0 0 100 i * i 20.1.1.1 0 100 0 100 ? *> 192.168.192.0 10.1.1.1 0 0 100 i * i 20.1.1.1 2297856 100 0 100 ? *> 192.168.192.0/21 10.1.1.1 0 0 100 i * i 20.1.1.1 0 100 0 100 ? *> 192.168.193.0 10.1.1.1 0 0 100 i * i 20.1.1.1 2297856 100 0 100 ? *> 192.168.194.0 10.1.1.1 0 0 100 i * i 20.1.1.1 2297856 100 0 100 ? *> 192.168.196.0 10.1.1.1 2297856 0 100 i BGP 12 * i 20.1.1.1 0 100 0 100 ? *> 192.168.197.0 10.1.1.1 2297856 0 100 i * i 20.1.1.1 0 100 0 100 ? *> 192.168.198.0 10.1.1.1 2297856 0 100 i Network Next Hop Metric LocPrf Weight Path * i 20.1.1.1 0 100 0 100 ? 所有的路由都从R1过去,来自R2的路由属性是?,代表未知属性,那么只有当与R1连接失效的时候才会使用。 R4的路由表: Network Next Hop Metric LocPrf Weight Path *>i50.0.0.0 60.1.1.1 2169856 100 0 100 i * 20.1.1.1 2169856 0 100 ? *>i50.1.1.0/24 60.1.1.1 0 100 0 100 i * 20.1.1.1 0 0 100 ? *>i192.168.192.0 60.1.1.1 0 100 0 100 i * 20.1.1.1 2297856 0 100 ? *>i192.168.192.0/21 60.1.1.1 0 100 0 100 i * 20.1.1.1 0 0 100 ? *>i192.168.193.0 60.1.1.1 0 100 0 100 i * 20.1.1.1 2297856 0 100 ? *>i192.168.194.0 60.1.1.1 0 100 0 100 i * 20.1.1.1 2297856 0 100 ? *>i192.168.196.0 60.1.1.1 2297856 100 0 100 i * 20.1.1.1 0 0 100 ? *>i192.168.197.0 60.1.1.1 2297856 100 0 100 i * 20.1.1.1 0 0 100 ? *>i192.168.198.0 60.1.1.1 2297856 100 0 100 i * 20.1.1.1 0 0 100 ? 所有的路由都指向R3经过,R2与R4之间的链路作为备用链路。 BGP 13 6,和聚合一起使用AS_SET 图中AS100公布详细的地址给AS200,AS200公布详细的地址给另外2个AS,在AS300中配置聚合路由发送给AS400,同时在AS200里面配置路由过滤,拒绝掉AS400和AS300发回的聚合路由。在R4的路由表里显示如下: * 50.1.1.0/24 40.1.1.2 0 300 200 100 ? *> 60.1.1.1 0 200 100 ? *> 192.168.192.0 60.1.1.1 0 200 100 ? *> 192.168.192.0/21 40.1.1.2 0 0 300 i *> 192.168.193.0 60.1.1.1 0 200 100 ? *> 192.168.194.0 60.1.1.1 0 200 100 ? *> 192.168.195.0 60.1.1.1 0 200 100 ? *> 192.168.196.0 60.1.1.1 0 200 100 ? *> 192.168.197.0 60.1.1.1 0 200 100 ? *> 192.168.198.0 60.1.1.1 0 200 100 ? *> 192.168.199.0 60.1.1.1 0 200 100 ? 在R4上可以看到192.168.192.0/21会聚路由后面的AS只有300,这条路由实际上是指向AS100里面的目的地,聚合路由导致了路由信息的丢失,如果不进行过滤或其他措施,那么就会导致该路由条目又被通告回原来经过的AS,BGP判断环路是靠AS号,该聚合路由导致了AS号丢失,那么经过的AS就认为该路由没有经过他自己。 为了改进这个问题,除了公布AS_PATH属性中的AS_SEQUENCE以外,R5可以通过在aggregate-address命令中加上as_set命令来解决这个问题,(但是加上AS-SET也会引发之前具体通告的路由如果附带属性的话,会将该属性继承到聚合路由上,需要小心使用)当将R5配置成他的AS_PATH属性中包含AS_SET时,聚合路由的AS-PATH属性中包括了聚合路由的路径上的所有AS号。以下为R4的路由表: BGP 14 * 50.1.1.0/24 40.1.1.2 0 300 200 100 ? *> 60.1.1.1 0 200 100 ? *> 192.168.192.0 60.1.1.1 0 200 100 ? *> 192.168.192.0/21 40.1.1.2 0 0 300 200 100 ? *> 192.168.193.0 60.1.1.1 0 200 100 ? *> 192.168.194.0 60.1.1.1 0 200 100 ? *> 192.168.195.0 60.1.1.1 0 200 100 ? *> 192.168.196.0 60.1.1.1 0 200 100 ? *> 192.168.197.0 60.1.1.1 0 200 100 ? *> 192.168.198.0 60.1.1.1 0 200 100 ? *> 192.168.199.0 60.1.1.1 0 200 100 ? 7,基于选中的更具体路由的聚合路由。 在这个情况下,R2收到了来自AS100和AS400的所有路由同时它公布一条聚合路由给R3,R2公布了一个带有AS_SET属性的聚合路由,但是该聚合路由必须不能继承来自192.168.197.0/24的NO-EXPORT COMMUNITY属性。问题在于AS400公布了带有NO-EXPORT的团体属性192.168.197.0/24,当R2使用AS_SET选项时,聚合路由继承了NO-EXPORT属性,因为聚合路由中包括了192.168.197.0/24这条路由。通过在R2上show ip bgp community no-export命令可以看出: Network Next Hop Metric LocPrf Weight Path *> 192.168.192.0/21 0.0.0.0 100 32768 {100,400} ? s> 192.168.197.0 60.1.1.2 0 0 400 i BGP 15 为了解决这个问题,R2配置了如下命令: Router bgp 200 Aggregate-address 192.168.192.0 255.255.248.0 as-set summary-only advertise-map allow-route access-list 1 permit 192.168.197.0 route-map allow-route deny 10 match ip add 1 route-map allow-route permit 20 通过以上命令,R2在聚合路由的时候不会包括192.168.197.0/24这条路由,因此聚合的路由不会带有no-export属性,以下为R2 show ip bgp community no-export的输出: Network Next Hop Metric LocPrf Weight Path s> 192.168.197.0 60.1.1.2 0 0 400 advertise-map name 命令的作用是在聚合路由的时候,可以详细的匹配哪些精确的路由条目需要被加入聚合列表中的。但是这样话可能会出现一些问题,假如R1和R2之间的链路出现故障,而聚合路由只是由来自AS100里的路由条目形成的,不包括192.168.197.0。于是该聚合路由不会再公布,结果是AS200以后的其他AS没有收到该聚合路由,也没有收到192.168.197.0的路由条目,导致无法到达。 AS300和AS400都是AS200的客户,并接收AS200分配的地址块。AS 300的前缀块是172.16.1.0/24 AS400的前缀块是172.16.2.0/24。当向AS100通告时,AS200的路由器把它们的地址空间汇总为172.16.0.0/16。 由于在AS100中可能因为没有具体的路由导致路由存在次优路径,为了优化出口点,inject-map被使用在R4和R5上。 使用的具体作用为,当R4和R5上存在路由172.16.0.0/16这条路由时,各自被注入 172.16.1.0/24和172.16.2.0/24两条精确的路由,以方便进行路由最优路径选举,同时为了防止路由被反通告回AS200,还将该路由属性设置为no-export。 BGP 16 R4配置: Ip prefix-list inject permit 172.16.1.0/24 Ip prefix-list exist permit 172.16.0.0/24 Ip prefix-list source permit 40.1.1.1/32 Route-map inject permit 10 Set ip add prefix-list inject Set community no-export Route-map exist permit 10 Match ip add prefix-list exist Match ip route-srouce source Ip bgp-community new-format BGP 17 Router bgp 100 Bgp inject-map inject exist-map exist Nei R6 send-community Nei R7 send-community R5配置: Ip prefix-list inject permit 172.16.2.0/24 Ip prefix-list exist permit 172.16.0.0/24 Ip prefix-list source permit 50.1.1.1/32 Route-map inject permit 10 Set ip add prefix-list inject Set community no-export Route-map exist permit 10 Match ip add prefix-list exist Match ip route-srouce source Ip bgp-community new-format Router bgp 100 Bgp inject-map inject exist-map exist Nei R5 send-community Nei R7 send-community 通过AS_PATH过滤路由: BGP 18 以上拓扑,R1会收到来自AS300和AS400的路由条目,分别通过AS200发送到AS100中,如果R1想拒绝某个AS发起的路由条目,但是路由条目数量又比较多,使用过滤列表非常麻烦,可以通过使用AS-PATH列表来完成。R1现在过滤从AS400来的路由,通过使用AS-PATH完成。 R1之前的show ip bgp 输出: Network Next Hop Metric LocPrf Weight Path *> 192.168.192.0 0.0.0.0 0 32768 ? *> 192.168.193.0 0.0.0.0 0 32768 ? *> 192.168.194.0 0.0.0.0 0 32768 ? *> 192.168.195.0 0.0.0.0 0 32768 ? *> 192.168.196.0 10.1.1.2 0 200 400 i *> 192.168.197.0 10.1.1.2 0 200 400 i *> 192.168.198.0 10.1.1.2 0 200 300 i *> 192.168.199.0 10.1.1.2 0 200 300 i R1配置: Router bgp 100 Nei 10.1.1.2 remote-as 200 Nei 10.1.1.2 filter-list 100 in Ip as-path access-list 100 deny _400$ (拒绝AS起源为400的,并且前面有空格的,如200 400) Ip as-path access-list 100 permit .* (允许所有的) 用AS号过滤的路由 ^ : 匹配输入字符的开头 BGP 19 $ : 匹配输入字符的结尾 _ : 匹配一个字符(空格/逗号/左括号/右括号等) . : 匹配任何一个字符 * : 星号前的字符可重复0次或多次 100 : 只要AS中包括100都匹配 _100_ : 所有经过AS100的路由 _100$ : 起源于AS100的路由 ^100_ : 进入本AS之前的AS必须是100 ^100$ : 起源于AS100,并直接传入本AS 100$:起源的AS号其最后三位一定是100,例如:100,1100,2100都可以 .* : 所有路由 R1#show ip bgp regexp ^23$ 当R1从2个路由器接收到同一个路由条目的时候,默认情况下,如果其他都相同,它会选择路由ID最小的邻居为下一跳,也就是说,会选择ID为R3为下一跳。那么为了控制R1的路由选路策略,可以通过使用WEIGHT值来让R1做出选择,WEIGHT值是BGP选路策略中的第1条,选择WEIGHT值大的那一条路由进行传递。 BGP 20 以下是R1默认的输出: Network Next Hop Metric LocPrf Weight Path * 100.100.100.0/24 20.1.1.2 0 300 400 i *> 10.1.1.2 0 200 400 i 通过修改R1的WIGHT值,让R1通过R4走: R1配置: Router bgp 100 Nei 20.1.1.2 weight 100 Show ip bgp Network Next Hop Metric LocPrf Weight Path *> 100.100.100.0/24 20.1.1.2 100 300 400 i * 10.1.1.2 0 200 400 i 通过上面的输出,可以看到R4现在已经成为了R1的下一跳路由,应为R4的 weight值为100,而R3的Weight值为0。 <BackDoor> ·通过IGP学到某条路由,又从EBGP学到相同的路由。 由于EBGP AD=20,小于IGP的AD,所以会优先EBGP的路由, 但实际路径从IGP走更优化。 BGP 21 例如:R1和R4之间通过EBGP和RIP交流信息,但是2个路由器之间希望通过RIP来发送信息而不优先使用BGP,但是R1从R4学到的192.168.199.0 或R4从R1学到的192.168.198.0两条路由都是通过EBGP和RIP同时学习过来,由于EBGP的管理距离为20,优于RIP,所以会通过EBGP发送,为了解决这个问题,可以将R1和R4使用后门路由将BGP学到的路由的AD值提高,从20提高到200 R1: Router bgp 100 Net 192.168.199.0 mask 255.255.255.0 backdoor Net 192.168.198.0 mask 255.255.255.0 R4 Router bgp 400 Net 192.168.198.0 mask 255.255.255.0 backdoor Net 192.168.199.0 mask 255.255.255.0 因为R1和R4都会通过RIP学习来对方的路由,所以该两台路由器IGP路由表中都会有对方的路由,那么在该两台路由器上使用后门路由将路由以IBGP的形式发布,既不会通告给其他路由器,自己的路由表中该路由的管理距离又提高到了200。 当R1从2个路由器接收到同一个路由条目的时候,默认情况下,从IBGP学习来的路由本地优先级为100。如果没有IBGP,并且其他都相同,它会选择路由ID最小的邻居为下一跳,也就是说,会选择ID为R3为下 BGP 22 一跳。那么为了控制R1的路由选路策略,可以通过使用Local_prefrence值来让R1做出选择,Local_prefrence值是BGP选路策略中的第2条,选择Local_pref值大的那一条路由进行传递。 以下是R1默认的输出: Network Next Hop Metric LocPrf Weight Path * 100.100.100.0/24 20.1.1.2 0 300 400 i *> 10.1.1.2 0 200 400 i 通过修改R1的local-prefrence值,让R1通过R4走: R1配置: Router bgp 100 Nei 20.1.1.2 route-map pref in Access-list 1 permit 100.100.100.0 Route-map pref permit 10 Match ip add 1 Set local-prefrence 100 Route-map pref permit 20 Show ip bgp Network Next Hop Metric LocPrf Weight Path *> 100.100.100.0/24 20.1.1.2 100 0 100 300 400 i * 10.1.1.2 0 200 400 i 通过上面的输出,可以看到R4现在已经成为了R1的下一跳路由,因为从R4走的的 local-prefrence值为100,而R3的local-prefrence值为0。 〈BGP MED> BGP 23 MED是一个相对优先级较弱的属性,在BGP路由决定过程中,到同一个目的地的多条路由的权直,本地优先级,AS-PATH长度以及ORIGIN属性都优先于MED。但是,如果这些变量值都相同,将选择具有最低MED的路由。 在上图中,AS100希望AS200访问网络199.168.198.0/24的时候,通过R1和R3之间的链路来发送,访问199.168.199.0/24的时候,通过R2和R4之间的链路来发送。这时候通过使用MED值可以实现: R1: Access-list 1 permit 192.168.199.0 Route-map med permit 10 Match ip add 1 Set metric 200 Route-map med permit 20 Router bgp 100 Nei 10.1.1.2 route-map med out R2: Access-list 1 permit 192.168.198.0 Route-map med permit 10 BGP 24 Match ip add 1 Set metric 200 route-map med permit 20 router bgp 100 nei 20.1.1.2 route-map med out 以下为R3,R4的 show ip bgp 输出: R3(config)#do show ip bgp BGP table version is 4, local router ID is 60.1.1.1 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path * i192.168.198.0 20.1.1.1 0 100 0 100 i *> 10.1.1.1 0 0 100 i * 192.168.199.0 10.1.1.1 200 0 100 i *>i 20.1.1.1 0 100 0 100 i R4(config)#do show ip bgp BGP table version is 4, local router ID is 60.1.1.2 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path * 192.168.198.0 20.1.1.1 200 0 100 i *>i 10.1.1.1 0 100 0 100 i *> 192.168.199.0 20.1.1.1 0 0 100 i 关于BGP MED属性: 在收到bgp对等体(ibgp和ebgp)发送来的路由后,再向ebgp对等体发送的时候,会清除MED值。若是存在本身路由器宣告的一段路由已带有MED值,直接发给bgp对等体时会有MED属性。 在route-map下使用此命令 set metric-type internal/set med igp-cost(CRS-1)将MED值设置为下一跳地址的IGPmetric值。 在使用network或redistribute将IGP路由引入BGP中时,MED值会继承IGP的metric值。若为直连则MED值为0 MED值只会传递给一个AS,如 A----B----C这个环境中,A上面宣告一些IGP学习的网段且有MED值发送给B, B会收到MED值,若B还有其他的IBGP邻居,这些IBGP邻居也会学习到此路由的MED属性,但B发送给C的时候,会设置MED值为0 BGP 25 BGP的MED值在重发布进入OSPF的时候,不能附带进入OSPF,路由条目使用的是OSPF重发布BGP路由默认的值,为1. MED属性能够影响来自邻居的业务入流量,但是它不能影响更远的AS的路由决定。重复前面的拓扑图,通过使用AS-PATH prepend来将一条路由经过的AS增加,从而使该路由的优先选择降低。通过使用 AS-PATH来完成让R3要到网络192.168.198.0/24的时候经过R1和R3,要到192.168.199.0/24的时候经过R4和R2。R4要到网络192.168.199.0/24的时候经过R4和R2,要到网络192.168.198.0/24的时候经过R1和R3。 R3: Access-list 1 permit 192.168.199.0 Route-map as permit 10 Match ip add Set as-path prepend 100 100 100 Route-map as permit 20 Router bgp 200 Nei 10.1.1.1 route-map as In BGP 26 R4: Access-list 1 permit 192.168.198.0 Route-map as permit 10 Match ip add 1 Set as-path prepend 100 100 100 Route-map as permit 20 Router bgp 200 Nei 20.1.1.1 route-map as in R3#show ip bgp BGP table version is 13, local router ID is 60.1.1.1 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 192.168.198.0 10.1.1.1 0 0 100 i * i 20.1.1.1 0 100 0 100 i * 192.168.199.0 10.1.1.1 0 100 100 100 100 i *>i 20.1.1.1 0 100 0 100 i 在以上的图中,R3 R4 R5 运行OSPF,其他3个AS分别将BGP路由信息发送给AS300中的3台路由器,然后重发布 进OSPF,然后再在边界路由器重发布进BGP传递给对方。但是由于OSPF不能理解BGP的路径属性,所以会造成属性丢失,比如从AS100 和AS200 重发布来的BGP路由,在AS400中,只会发现他起源于AS300, BGP 27 之前的路径属性已经丢失。 这个问题有可能会让AS400中的路由器在有其他路径的情况下做出不精确的路由选择,为了解决这个问题,通过在将OSPF路由重发布进BGP的时候使用set AS-PATH tag 命令匹配route-map 来让丢失的AS属性进行还原。 例如R5: Router ospf 1 Redistribute bgp 300 Router bgp 300 Redistribute ospf 1 route-map TAG match internal external (BGP要重发布OSPF外部路由时需要添加) Route-map TAG permit 10 Set as-path tag 在配置之前的R6的IP路由表: net work nexthop metric locprf weight path *> 192.168.1.0 10.1.1.1 1 0 300 ? *> 192.168.2.0 10.1.1.1 1 0 300 ? 可以看到2条192.168的路由的发起AS信息已经丢失,R6可能会造成不精确的路由选择。 在配置之后的R6的IP路由表: net work nexthop metric locprf weight path *> 192.168.1.0 10.1.1.1 1 0 300 100 ? *> 192.168.2.0 10.1.1.1 1 0 300 200 ? Set as-path tag 命令在OSPF标记段中恢复AS-PATH信息,但是,自动加入到标记段的信息只有AS-PATH。在R6上,来自AS100和AS200的路由的ORIGIN为incomplete。根据R6是否有到AS100以及AS200的可替换的路由,ORIGIN是否会影响到BGP的决定过程,以上的情况可能是问题,也可能不是问题。可以通过 Set automatic-tag命令将BGP标记段加入了ORIGIN码。通过使用table-map 匹配使用。 例:R5 Router ospf 1 Redistribute bgp 300 Router bgp 300 Table-map TAG Redistribute ospf 1 route-map TAG Route-map TAG permit 10 BGP 28 Set as-path tag net work nexthop metric locprf weight path *> 192.168.1.0 10.1.1.1 1 0 300 100 i *> 192.168.2.0 10.1.1.1 1 0 300 200 i 〈BGP Advertise-map> BGP条件通告有2种形式,当其他一些前缀不存在的时候通告某些前缀,或者当它们存在的时候通告某些前缀。可以通过一个被称为non-exist-map的路由映射来定义不存在的条件,或者通过一个被称为exist-map的路由映射来定义存在的条件。 例:当通过某些前缀不存在的时候才通告一些前缀给邻居: AS200多宿主到AS300和AS400,与AS300的链路作为主链路,AS400备用。AS200的地址块是从AS300分配的,除非到AS300的链路中断,否则地址块200.200.200.200/32是不会被通告给AS400的。AS300发送100.100.100.100给AS200,该前缀被R3的non-exist-map跟踪。 BGP 29 R3配置: Router bgp 200 Net 200.200.200.200 mask 255.255.255.255 Nei R4 route-map as300 in Nei R5 advertise-map 200 non-exist-map 100 Ip prefix-list 100 permit 100.100.100.100/32 Ip prefix-list 200 permit 200.200.200.200/32 Route-map as300 permit 10 Set community 300:1 Route-map 200 permit 10 Match ip add prefix 200 Route-map 100 permit 10 Match ip add prefix 100 Match community 300:1 BGP 30 加上一个community是为了保证100.100.100.100/32前缀是从AS300收到的。当100.100.100.100失效的时候,通过debug ip bgp update看到输出: *Mar 1 00:39:38.931: BGP(0): net 200.200.200.200/32 matches ADV MAP 200: bump version to 8 *Mar 1 00:39:39.251: BGP(0): nettable_walker 200.200.200.200/32 route sourced locally *Mar 1 00:40:07.031: BGP(0): 10.1.1.1 200.200.200.200/32 matches advertise map 200, state: Advertise *Mar 1 00:40:07.039: BGP(0): 10.1.1.1 send UPDATE (format) 200.200.200.200/32, next 10.1.1.2, metric 0, path Local *Mar 1 00:40:07.043: BGP(0): 20.1.1.2 skip UPDATE 200.200.200.200/32 (chgflags: 0x0), next 0.0.0.0, path 当100.100.100.100/32恢复的时候,我们可以看到以下输出: *Mar 1 00:43:39.047: BGP(0): net 200.200.200.200/32 matches ADV MAP 200: bump version to 10 *Mar 1 00:43:39.375: BGP(0): nettable_walker 200.200.200.200/32 route sourced locally *Mar 1 00:43:48.047: BGP(0): 10.1.1.1 200.200.200.200/32 matches advertise map 200, state: Withdraw *Mar 1 00:43:48.051: BGP(0): 10.1.1.1 send unreachable 200.200.200.200/32 *Mar 1 00:43:48.055: BGP(0): 10.1.1.1 send UPDATE 200.200.200.200/32 -- unreachable *Mar 1 00:43:48.055: BGP(0): 20.1.1.2 skip UPDATE 200.200.200.200/32 (chgflags: 0x0), next 0.0.0.0, path 例:当通过某些前缀存在的时候才通告一些前缀给邻居: Router bgp 200 Net 200.200.200.200 mask 255.255.255.255 Nei R4 route-map as300 in Nei R5 advertise-map 200 exist-map 100 Ip prefix-list 100 permit 100.100.100.100/32 Ip prefix-list 200 permit 200.200.200.200/32 Route-map as300 permit 10 Set community 300:1 Route-map 200 permit 10 Match ip add prefix 200 Route-map 100 permit 10 Match ip add prefix 100 Match community 300:1 BGP dampening主要用于有多个邻居相连的路由器上,当某个邻居的一条路由出现了摆动,那么这个路 BGP 31 由器就必须得想其他所有邻居公布这个变化,会给网络造成很大的负担,如果在这个路由器上配置了BGP Dampening,那么他会对摆动的路由进行抑制,这样就不会对其他路由邻居公布这个消息。 Router bgp 100 Bgp dampening 10 1000 3000 15 以上命令的意思是说 dampening的半衰期为10分钟,也就是说路由每摆动一次,那么它的惩罚值就增加1000,直到增加到3000的时候,路由会被抑制,10分钟后,会自动降为1500,当降到1000的时候就恢复。如果惩罚值过大一直无法降至1000,那么在15分钟的最大抑制时间之后会自动恢复。 NO-EXPORT属性:该属性允许路由器将一个路由公布给一个EBGP对等路由器,但是不允许那个AS里的路由器将该路由公布给其他AS。 NO-ADVERTISE属性:该属性不允许对任何对端公布这条路由。 LOCAL-AS属性:该属性允许路由器在联盟中将一个路由公布给它的邻居,并允许这个邻居将这个路由公布给联盟AS内的邻居,但是不允许公布给联盟AS以外的其他联盟AS。如果没有联盟存在,那么该属性被看成和NO-EXPORT属性一样来对待。 None属性:该属性允许当路由器从邻居收到一条带属性的路由的时候,可以将该属性取消。 另外可以配置只具有自己定义的团体属性: 十进制格式:使用1---4294967200之间的数字 AA:NN格式:AA是1-65535之间的16比特的AS号,NN是1-65440之间的任意一个数。 自定义团体属性方便管理团体路由,使用方法如下:(AA:NN使用例子) R1配置: Ip access-list 1 permit 100.1.1.0 Ip access-list 2 permit 100.2.1.0 Route-map community permit 10 Match ip add 1 Set community 100:1 Route-map community permit 20 Match ip add 2 Set community 100:2 Router bgp 100 Nei 10.1.1.2 route-map community out Nei 10.1.1.2 send-community Ip bgp community new-format(使用AA:NN格式的时候必须打这条命令让路由器新格式) BGP 32 R2配置: Ip community-list 100 permit 100:1 Ip community-list 101 permit 100:2 Route-map community permit 10 Match community-list 100 Set local-pre 150 Route-map community permit 20 Match community-list 101 Set local-pre 200 Ip bgp community new-format(使用AA:NN格式的时候必须打这条命令让路由器新格式) 以上社团列表用于将之前路由器以定义的社团区分开来精确的控制。 社团列表:社团列表也分为标准的和扩展的两种格式,标准的号码为1-99,扩展的号码为100-199,两者之间的区别就是扩展的社团列表允许匹配新格式的社团列表(AA:NN)。 社团列表的用法: Ip bgp community-list 101 permit *:50 (匹配前面是任意数字,后面为50的) Ip bgp community-list 101 permit 100:50(精确匹配100:50的) Ip bgp community-list 1 permit 10(标准的社团列表只允许匹配十进制的) Ip bgp community-list 101 permit 100:50 200:50(匹配这2个种的任意一个或2个全都含有的) BGP 33 BGP联盟使大型AS分割成子自治系统,从而使大型AS更容易管理。BGP联盟根本上解决的问题是当一个EBGP路由器收到一个来自外部的路由条目后转发给它所有的IBGP邻居,但是这些IBGP邻居却不再将路由继续转发给它的IBGP邻居,通过使用联盟将这些IBGP邻居分割成一个一个小的AS,原来的不转发的IBGP邻居就变成了联盟EBGP邻居,从而打破了BPG水平分割的问题。 BGP联盟的配置: R3: Router bgp 65534 (BGP联盟AS号) Bgp confederation identifier 100(自治系统AS号) Bgp confederation peer 65535 (BGP联盟对等AS号,只有在联盟EBGP路由器上才会配置) Nei R1 remote-as 65535 (使用联盟AS指定邻居) Nei R4 remote-as 65534 Nei R5 remote-as 300 联盟BGP的一些特性: ·在联盟内部保留联盟外部路由的NEXT-HOP属性。 ·公布给联盟的路由的MED属性在整个联盟范围内予以保留。(将BGP联盟的AS看成单独的AS) ·路由的LOCAL-PREF属性在整个联盟范围内予以保留,(将BGP联盟的AS看成单独的AS) ·在联盟范围内,将成员自治系统的AS号加入到AS-PATH中,但是并不将它们公布到联盟的范围以外。 AS-PATH中的联盟AS号用于避免环路,但是当在联盟内选择一个最短的AS-PATH时,可以不用考虑联盟AS号。例如当一个路由器到达一个目的地有2条路由(65534 )(65533) 100和(65533) 100,他会忽 BGP 34 略联盟AS号,将这条路由看成同样的路径。在存在普通EBGP和联盟EBGP的情况下,BGP会优先选择普通E BGP,在存在联盟EBGP和联盟IBGP的情况下,BGP会优先选择联盟EBGP。如果两者都相同,那么会执行普通的BGP选择路由策略。 补充命令: Bgp deterministic-med:让路由器使用具有最低值的路径而不管该路径对于成员AS来讲是内部的还是外部的。 Bgp always-compare-med :会比较到同一个目的地的路径的MED,而不考虑这些MED是否是同一个AS公布的。 〈BGP Router-reflector> BGP路由反射器的作用和BGP联盟的作用相同,当一个EBGP路由器收到一个来自外部的路由条目后转发给它所有的IBGP邻居,但是这些IBGP邻居却不再将路由继续转发给它的IBGP邻居。使用路由反射器之后将邻居路由器配置为该路由器的反射客户端,路由器便会将这个路由转发给它的客户端邻居。 路由反射器配置: R1: Router bgp 100 Bgp cluster-id 10 Nei 10.1.1.2 remote-as 100 Nei 20.1.1.2 remote-as 100 Nei 30.1.1.2 remote-as 100 Nei 10.1.1.2 router-reflector-client Nei 20.1.1.2 router-reflector-client Nei 30.1.1.2 router-reflector-client 配置R1路由反射簇为10并将3个邻居作为它自己的BGP 路由反射客户端。 <Auto-Summary> ·当其他协议重分布进BGP时,默认会进行自动汇总。 ·将IGP重分布BGP中,会携带IGP中的Metric和Next-hop。 ·当从BGP邻居收到一条路由,发现下一跳是自己的直连接口地址,则拒收此路由。 在auto-summary情况下,将IGP重分布进BGP,不会携带原有的METRIC值 在no auto-summary情况下,会携带原有的METRIC值 R1(config-router)#no auto-summary (高版本IOS默认开启) R4(config-router)#network 4.4.4.0 mask 255.255.255.0 BGP 35 (在no auto-summary时,必须严格按照IP地址掩码通告) 在BGP中,network的特点是: 1、 必须精确宣告路由和掩码 2、 只起到宣告作用,不建邻居 3、 可宣告IGP学到的路由,并携带Metric和Next-hop Show ip bgp neighbors __ip___ advertised-routers查看我给这个邻居发了哪些路由 <BGP用loopback口建邻居,不要再通告此loopback> ·通过IGP(OSPF)学到对方loopback,用looback建EBGP邻居 ·又在BGP中通告此loopback。 此时路由表中会出B和O翻动的现象。 因为EBGP AD=20,所以路由表中会显示 但路由是2.2.2.2/32 Next-hop 2.2.2.2,路由表会有环路检测机制 将路由的网络位与下一跳的相应网络位比较,如果相同,就删除此路由。 把这条路由删除,所以又变成打O的。 <local-as> 如果在EBGP中,邻居指错了R2的AS号,可以在本地用以下方法解决: R2(config-router)#neighbor 12.1.1.1 local-as 3 (对方指错的AS号) Network Next Hop Metric LocPrf Weight Path *> 1.1.1.0/24 12.1.1.1 0 0 3 1 i (加入了指错的AS号) R2(config-router)#neighbor 12.1.1.1 local-as 3 no-prepend (在AS-path中去掉指错的AS号) <Dampening> ·为了防止路由频繁抖动。BGP利用Dampening机制,将这种频繁抖动的路由有条件的加以抑制。 ·BGP默认不启用Dampening,而且仅对EBGP邻居传来的路由启效。 ·一条路由up->down,默认惩罚1000,当达到start suppress值时,被抑制。 被抑制的路由不会传给本地,也不会传给其他EBGP邻居 ·Half-life Time : 15 m 半衰期 ·Reuse : 750 降到这个值以下,重新开始启用路由 ·Start Suppress : 2000 升到这个值以上,开始抑制 ·Max Suppress Time : 60 m (4×15) 最大抑制时间 R2(config-router)#bgp dampening(对所有从EBGP收到的路由启用Dampening) BGP 36 R2#show ip bgp 1.1.1.0/24 可查Dampening明细 1, (suppressed due to dampening) 12.1.1.1 from 12.1.1.1 (1.1.1.1) Origin IGP, metric 0, localpref 100, valid, external Dampinfo: penalty 2450, flapped 3 times in 00:11:40, reuse in 00:03:49 被惩罚的路由前面会打上 h *d 1.1.1.0/24 (打d的路由,不会进入本地路由表,也不会传给其他BGP邻居) R2#cle ip bgp dampening 针对一个邻居单独做dampening,针对一个邻居单独做了,就不要再在全局下做 R2(config)#ip prefix-list 1 permit 1.1.1.0/24 R2(config)#route-map DAMP R2(config-route-map)#match ip address prefix-list 1 R2(config-route-map)#set dampening 15 750 2000 60 <Next-hop-unchange> ·都用loopback建邻居 解法1: R3(config-router)#neighbor 1.1.1.1 next-hop-unchanged 当EBGP用直连接口建邻居时,或者IOS不支持unchaged命令时, %BGP: Can propagate the nexthop only to multi-hop EBGP neighbor 解法2: R1(config)#route-map NH R1(config-route-map)#set ip next-hop 12.1.1.2 R1(config-router)#neighbor 13.1.1.3 route-map NH in <Maximum-Prefix> neighbor 1.1.1.1 maximum-prefix 10 (1) neighbor 1.1.1.1 maximum-prefix 10 80 (2) neighbor 1.1.1.1 maximum-prefix 10 80 warning-only (3) neighbor 1.1.1.1 maximum-prefix 10 80 restart 20 (4) 10后面跟的数字是百分数,默认值为75 (1)针对Neighbor 1.1.1.1传过来的BGP路由, 如果>7条,则报警;如果>10条,则断开BGP连接。Idle(PfxCt) (2)如果>8条,则报警;如果>10条,则断开BGP连接。 (3)如果>8条,则报警;如果>10条,也只报警,不断开BGP连接。 (4)如果>8条,则报警;如果>10条,则断开BGP连接。 BGP 37 20分钟后重新连接,如果≤10条,则连接;如果仍然>10条,还是断开,(Neighbor会Up,然后Down). <Regular Expression> <1> R1(config)#ip as-path access-list 1 permit _1$ R1(config-router)#neighbor 13.1.1.1 filter-list 1 in (只允许起源于AS1的路由进入) <2> R1(config)#ip as-path access-list 1 permit _1$ R1(config)#route-map AS R1(config-route-map)#match as-path 1 R1(config-router)#neighbor 13.1.1.1 route-map AS in <Remove-Private-AS> R1(config-router)#neighbor 13.1.1.3 remove-private-AS Network Next Hop Metric LocPrf Weight Path *> 2.2.2.0/24 13.1.1.1 0 1 i BGP 38 BGP-multipath命令 基于上面的拓扑图,AS100,AS300,AS200都通告前缀到AS200中,在R3和R4上,去往AS100通告的前缀条目会有相同的选择结果,唯一能够区别出Best路径的条目就是拥有最小的下一跳Router ID. 除非使用BGP multipath 特性被激活,那么R3和R4将在2条链路上分担流量。同样,在R8上也会出现这样的情况。 R3和R4把这些接收到的前缀通告给整个AS200,AS200里的IBGP路由器上的路径选择都是基于到下一跳的IGP的度量的,这些下一跳是指建立BGP会话的接口。 set metric-type internal命令 AS300的情况有些复杂,R9接受到2条路径,看上去来自R6和R7的路径都是相同的,区别是Router ID 不同,这样会导致最后假设R6的Router ID最小,R9将R6作为Best下一跳,那么这时候可能出现一些情况。 R9将R6作为Best下一跳,假如这时候R9要去AS400中的一个目的地,流量会顺着R6然后经过R7再到达AS400,造成了次优路径。为了解决这个问题,如果通过使用BGP multipath命令的话,流量会成R6和R7分担,但是也不是非常完美的办法。通过提供每条前缀关联的拓扑信息给R9,可以解决这个问题,在R6和R7上配置 Route-map med permit 10 Set metric-type internal Router BGP 200 Nei R9 route-map med out 这样使得R9能智能的选择哪些流量发送到特定的出口路由器上,为流量提供了优化路由选择。这个解决方法可以同样用在AS100上,R1和R2去往AS200或者其他区域的路由通过在EBGP路由中加入IGP的MED直可以帮助EBGP路由器选择更优化的路径。 BGP 39 1, EBGP多跳解决办法,根据以上的图,在2台路由器之间使用单个EBGP会话,这个会话基于环回口地址,对每个 接口都配置了一条指向对方环回口地址的静态路由,通过BGP递归查找来负载均衡分担流量。 R1配置: Router bgp 100 Nei 2.2.2.2 remote-as 200 Nei 2.2.2.2 update lo 0 Nei 2.2.2.2 ebgp-multihop 2 Ip route 2.2.2.2 255.255.255.255 f0/0 Ip route 2.2.2.2 255.255.255.255 f1/0 Ip route 2.2.2.2 255.255.255.255 f2/0 R2配置 Router bgp 100 Nei 1.1.1.1 remote-as 100 Nei 1.1.1.1 update lo 0 Nei 1.1.1.1 ebgp-multihop 2 BGP 40 Ip route 1.1.1.1 255.255.255.255 f0/0 Ip route 1.1.1.1 255.255.255.255 f1/0 Ip route 1.1.1.1 255.255.255.255 f2/0 下面显示了R1的路由输出,可以看到去往AS200的路由经过3个接口负载均衡分担。 Router#show ip route 100.100.100.100 Routing entry for 100.100.100.100/32 Known via \ Tag 200, type external Last update from 2.2.2.2 02:19:07 ago Routing Descriptor Blocks: * 2.2.2.2, from 2.2.2.2, 02:19:07 ago Route metric is 0, traffic share count is 1 AS Hops 1 Router#show ip route 2.2.2.2 Routing entry for 2.2.2.2/32 Known via \ Routing Descriptor Blocks: * 10.1.1.2 Route metric is 0, traffic share count is 1 20.1.1.2 Route metric is 0, traffic share count is 1 30.1.1.2 Route metric is 0, traffic share count is 1 2, EBGP multipath解决办法,EBGP multipath提供了另一种在多条链路上负载分担流量的解决办法。两台路由器之间 的每一条链路都被配置了一个EBGP会话。这些EBGP会话通过接口物理地址建立,结果就是2台路由器接收到多条路径信息,每一条链路一条路径信息。除了路径是从不同的邻居地址接收到的以外,这些路径信息都是相同的。 R1配置: Router bgp 100 Nei 10.1.1.2 remote-as 200 Nei 20.1.1.2 remote-as 200 Nei 30.1.1.2 remote-as 200 Maximum-paths 3 R2配置: Router bgp 100 Nei 10.1.1.1 remote-as 100 Nei 20.1.1.1 remote-as 100 Nei 30.1.1.1remote-as 100 Maximum-paths 3 BGP 41 通过show ip route 可以看到2台路由器的负载均衡情况: Router(config-router)#do show ip route 100.100.100.100 Routing entry for 100.100.100.100/32 Known via \ Tag 200, type external Last update from 30.1.1.2 00:03:00 ago Routing Descriptor Blocks: * 10.1.1.2, from 10.1.1.2, 00:03:46 ago Route metric is 0, traffic share count is 1 AS Hops 1 20.1.1.2, from 20.1.1.2, 00:03:20 ago Route metric is 0, traffic share count is 1 AS Hops 1 30.1.1.2, from 30.1.1.2, 00:03:00 ago Route metric is 0, traffic share count is 1 AS Hops 1 BGP 42 提供商A给企业分配了一个100.16.0.0/20。企业通过BGP把这条路由通告给提供商A和B,提供商A把这条路由汇总成了100.16.0.0/16,而提供商B由于没有这条路由,进而不执行汇总。把 100.16.0.0/20直接通告给internet,这样结果就会导致internet中的路由器执行最长掩码的匹配,因此除了提供商A里的路由器会选择提供商A到达企业,其他的路由都会经过提供商B到达企业。 这个问题的解决方法就是在提供商A里将100.16.0.0/20这条路由和 100.16.0.0/16一起通告。这样就给企业提供了平衡的入境流量。 1, 流量流向需求 大部分流量应该把R1到AS100的OC-3链路作用首要链路。只有当R1的OC-3链路失效时候才能使用R2的DS3链路。到AS200的流量应该使用到AS200的DS3链路,而不是穿越任何可能存在于AS100和AS200之间的直接的或间接的对等连接。 2, 失效的情况 如果OC-3链路失效,流量应该相当均匀地被分布到两条DS3链路上。流量应该被优化地路由到某种程度,即去往AS200的流量不被发送到AS100,反之亦然。 如果某一条DS3链路失效,流量应该被继续发送到OC-3链路上,只有当AS100的OC-3链路失效的时候才使用AS100的DS3链路,如果到AS200的DS3链路失效,流量应该被切换到OC-3链路上。 入境流量策略: 初始配置没有提供入境流量的任何优先级。在决定使用AS100还是AS200的时候,流量根据AS_PATH属性来采取优化的路径进入企业网络。这可能导致AS200来的DS3链路过载,根据到下一跳地址的IGP度量,进入AS100的流量既可能采取DS3链路,也可能采取OC-3链路,这可能过载从AS100来的DS3链路。 R2通过在到AS100的DS3链路上使用set as-path prepend 方法来转换入境流量模式,使得从AS100来的流量只使用OC-3链路。 R3通过在到AS100的DS3链路上使用set as-path prepend 方法来转换入境流量模式,使得从AS200来的流量只使用OC-3链路。 现在所有的流量都经过OC-3链路进入,没有任何流量穿越DS3链路,这不是完全所期望的策略,源自AS200的流量应该从那条DS3的链路进入。查看了AS200的上游提供商之后,发现它与AS100有直接的对等连接并正在接收AS-PATH为300 100(R1发起的)的172.160.0.0/16前缀,这是优于AS-PATH 300 300 300 (R2 R3发起的)。 这时候可以在R3上设置从R3出去的前缀为团体200:120,并且通告团体属性给AS200里的路由器,AS200在对该属性的前缀设置本地优先级为120,这样AS200在接收到从R3来的前缀的时候会优先选择通过R3的DS3链路进入AS300,而不会选择从R1通告的前缀进入。 现在这时候网络基本已经达到预期的效果,现在检查链路失效时候会产生的情况: 因为没有流量沿着从R2的DS3链路上流进来,因此拆除这条链路不会产生任何影响。 BGP 43 关闭R3的DS3链路就会造成从R1的OC-3路径是唯一的,这也不影响网络 最后失效情况就是关闭R1的OC-3链路的时候,有可能会使某一条DS3链路负载,期望出现的行为就是流量经过两条DS3链路负载。在关闭了OC-3链路后,R3的DS3链路流量大约在35M左右,而R1的DS3链路上流量在12M左右。由于该2台路由器有相同的策略(都是set as-path prepend 300 300,对外路由器看到的都是 as-path 300 300 300)除了AS200里来的流量,但是由于AS200里的local-pref属性不会影响到其他的AS网络,排除该原因,看来是AS200比AS100有更好的internet连接造成的结果,意味着internet上大多网络到达AS200有着比到AS100更短的AS-PATH。根据这种假设我们把R2的set as-path prepend减少一次,然后让BGP策略重新生效。结果就是更多的流量从R2的DS3链路进入企业AS,从AS100来的大约有25M,AS200来的大约有22M。 R1的配置: Router bgp 300 Network 172.160.0.0 Nei 172.160.1.2 remote-as 300 Nei 172.160.1.2 update lo 0 Nei 172.160.1.3 remote-as 300 Nei 172.160.1.3 update lo 0 Nei 100.100.100.1 remote-as 100 No auto-summary R2的配置: Router bgp 300 Network 172.160.0.0 Nei 172.160.1.1 remote-as 300 Nei 172.160.1.1 update lo 0 Nei 172.160.1.3 remote-as 300 Nei 172.160.1.3 update lo 0 Nei 100.100.150.1 remote-as 100 Nei 100.100.150.1 route-map AS100_OUT out Route-map AS100_OUT permit 10 Set as-path prepend 300 R3的配置: Router bgp 300 Network 172.160.0.0 Nei 172.160.1.1 remote-as 300 Nei 172.160.1.1 update lo 0 Nei 172.160.1.2 remote-as 300 Nei 172.160.1.2 update lo 0 Nei 200.200.200.1 remote-as 200 Nei 200.200.200.1 send-community Nei 200.200.200.1 route-map AS200_OUT out Route-map AS200_OUT permit 10 BGP 44 Set as-path prepend 300 300 Set community 200:120 〈在路由反射环境中使用可比较的AS间度量〉 MED值是可以用来影响AS间路径选择的BGP度量,默认条件下,只在从同一个毗邻的AS来的路径中比较,因此,从不同AS来的MED是不可比较的。 默认条件下,路径被接收的顺序可能会影响最佳路径选择的结果。 1、不可比较的AS间度量。 前缀172.16.0.0/16被AS400通告给AS200和AS300,当前缀从R5到达AS100中的R2时,MED为10。在AS300中,R6把发送给R3和R4的前缀分别设为5和6。R1是路由反射,R2,R3和R4是它的客户。 R2,R3和R4分别对R1使用了Next-hop-self命令。 BGP 45 当更新开始后,最新接收到的路由条目被列在路由信息库中的最上面,最早接收到的被列在最下面,假设R3来的路径是最早接收到的,接着是从R2和R4来的。如: 一、这时候R1开始进行最佳路由比较,首先比较路径1和2。由于来自于不同的AS,所以不比较MED值,那么路径1的RID最小被选择为最佳路径。 二、接着比较路径1和3,由于来自于相同的AS,在MED的比较过程中,路径3被选择为最佳路径。 三、因为最佳路径是通过R3的,这时候R1向R3撤回从R2和R4接收到的路由条目反射,并且只把最佳路径反射给R2和R4。 四、当R4收到R1反射的最佳路有条目更新之后,他的路有表就有了2条路径,如: 通过比较,由于从第1条路由信息有更低的MED值,所以R4将第1条路由选择为最佳路径,并且撤回之前通告给R1的来自R6的路由条目。 五、当R1接收到撤回消息后,R1清楚了从R4来的路径条目,这时候R1只剩下2条路径,如: 因为被清除的路径不是最佳路径,所以BGP不会重新计算最佳路径。因此,路径2仍然是最佳路径。当BGP扫描器运行时,它启动了路径选择进程。因为R2具有更低的RID,所以路径1被选择为最佳路径。R1这时候向R2发送了撤回消息,并且将最佳路径通告给了R3和R4。 六、当从R1接收到新的更新消息后,R4就有了新的BGP RIB,如: BGP 46 因为路径2是EBGP邻居,所以它被选择为最佳路径,接着R4向R1发送了新的路径信息。 七、当R1收到R4通告的新的信息后,R1现在在它BGP RIB中有了3条路径,如: 于是R1进行最佳路径选择,然后把路径3选择为最佳路径,这时候就产生了一个路径选择僵持的收敛问题。导致了以下问题: ·BGP表的版本持续增加,只要最佳路径改变,BGP表的版本就会被增加。 ·IP RIB中,去往目的地的下一跳不断地改变。当BGP最佳路径改变时,新的下一跳就更新了RIB。 解决办法: 1, 使用全互联的IBGP。 2, 打开always-compare-MED 3, 打开deterministic-MED比较 4, 把MED值重置为0 5, 使用团体属性 <使用全互联的IBGP> 当使用全互联结构的IBGP时,所有的路由器就有了完整的路由选择信息,收敛环路也不会形成。然而,如果一开始就选择RR来增强扩展性,那么该选择也许不能被接受。 <打开always-compare-MED> 当在所有的邻接AS比较MED时,具有最低的MED值的路径总是胜出。以上同样的例子,R3总是胜出。不过这个选择有一些争议: ·从不同的AS来的MED值也许不总是可以比较的。做比较时需要紧密地协调所有的对等AS,以便用一致的和有意义的度量来与MED关联。 ·总是优选具有最低的MED值的路径也许并非最优化的,因为没有把AS间的拓扑考虑进去。比如,R4需要通过R1到R3转发去往172.16.0.0的流量,而不是直接发送给R6。 <打开deterministic-MED比较> 如果配置bgp deterministic-med,所有路径都将基于邻近的AS进行编组。在每个AS编组内,根据MED的大小对路径进行排序,最小的是该组的最佳路径。在不同编组的最佳路径再比较时,MED不在考虑之内。 以上的同样例子,1和3会被编在同一组,先进行比较,3优于1(MED值低),然后3和2(其它组)比较,由于不同邻居AS,MED不作比较,2的RID比较低而胜出。最佳路径是2. 如果同时也激活了bgp always-compare-med,那么对所有路径都比较MED,而不考虑是否来自同一个相邻的AS。由于deterministic-med配置了,所以会在上面的例子中编组后,每组的最佳路径再进行比较(这时MED被考虑)。所以3是最佳路径(MED低)。 BGP 47 <把MED值重置为0> 在路径选择中把MED的影响全部清除掉的一种常用的办法就是把入境的MED值重置为0。典型地,一般在网络的边缘做这些配置,这些配置会在从其他AS接收到更新消息的时候起作用。当在R2,R3和R4上将MED值重置为0的时候,R1有了一致的MED值,那么最小的RID将会胜出,在以上例子中,R4有着最小的ID。 R1会选择通过R4去往172.16.0.0,而R2和R3则因为从R4来的路由为IBGP路由而优先选择与自己相邻的EBGP路由。 <使用团体属性> <在路由反射环境中使用不适当的IGP度量> 在IBGP最佳路径选择过程中,IGP度量经常是打破平局的因素之一。在多簇RR的架构下应该以这样的方式来设置IGP度量,即簇内的度量要比簇间的度量更低,这使得RR可以优先选择簇内路径而不是簇间路径。不适当地设置IGP度量可能会导致僵持的收敛环路。 <不适当的IGP度量> BGP 48 一、AS100内的3台边界路由器使用next-hop-self通告了前缀172.16.0.0/16,一开始R1在它的BGP RIB中有两条路径, 如图: 在接收到R8发来的更新消息后,R1有了3条路径,为了确定最佳路径,R1比较路径 BGP 49 1和路径2,路径1胜出是因为它有更低的IGP度量。然后路径1和路径3比较,路径3胜出是因为它有更低的MED。 二、R1向R3发出了撤回消息,并且将最佳路径通告给所有邻居。R8的BGP RIB中,这时候有2条信息,如图: 路径2为最佳路径,因为它具有最低的MED值。这时候R8向R1发送了撤回消息,撤回从R4接收到的路由通告。 并且将最佳路由通告给R4。 三、R4接收到从R8通告来的最佳路由,它将进行一个最佳路径比较,如图: Next-hop As-path MED IGP metric 1 R3 300 400 5 31 2 R6 300 400 6 10 路径1被选择为最佳路径,因为它具有最低的MED值,这时候R4向R8发送了撤回消息,撤回从R6学习来的路 由通告,R8接着向R1撤回该路由条目,这时候R1的BGP RIB信息只剩下从R2和R3学习来的信息,如图: 路径1被选择为最佳路径,因为它具有最小的IGP度量,这时候R1向R2发送撤回路由,并且将最新的消息通告给R3和R8,R3由于自己从EBGP学到一条路由更新,所以选择EBGP路由条目,R8将该最佳路由条目发送给R4,这时候R4的BGP RIB如下: 路径2被选择为最佳路径,这时候R4又向R8通告最佳路由条目,R8将该路由条目通告给R1,由此产生了一个 IGP度量引起的收敛僵持问题。 BGP 50