第一篇:bgp综合实验总结
——————————————
BGP综合实验1
拓扑图
袁 月
拓扑说明:
如图,有R1-R5五台路由器
R1,R3,R4的S0/0、S0/
1、S0/2口通过FR连接,R1为hub,帧中继链路ip为10.10.134.0/24 R1,R2的F1/0口通过以太网连接,链路ip为10.10.12.0/24 R4,R5的s0/1口直连,网段10.10.45.0/24 每台路由器的环回0口ip为x.x.x.x/32 R1上有lo1-lo5,ip地址为192.168.1.1/24---192.168.5.1/24 R5上有lo1-lo5,ip地址为172.16.1.1/24---172.16.5.1/24 实验要求: 1.配置底层:
配置每台设备的接口ip,配置完成后确保直连可达 每个路由器的环回口是X.X.X.X/32 2.配置IGP 全网运行OSPF area0,仅宣告lo0口和链路ip进入ospf,NBMA区域任意处理
3.建立BGP邻居
BGP AS区域划分如图,按照如下规则建立对等关系.使用回环口建立邻居.R1 peer R2 R2 peer R1,R3 R3 peer R2,R4
R4 peer R5 R5 peer R4 4.BGP 路由宣告
邻居建立完成后,将R1和R5的lo0口宣告进入BGP,使用network命令
要求R1,R5使用适当的方式宣告各自的lo1-lo5 宣告完成后要求每台设备的bgp转发表可见这些路由 5.BGP路由控制
要求做出适当控制,达成下列条件,具体方法不限
1、使下列条目出现在R1的bgp表中
*> 172.16.1.0/24
2.2.2.2
0 255 2 3 i *> 172.16.2.0/24
2.2.2.2
255 10 20 2 3 ? *> 172.16.3.0/24
2.2.2.2
0
i *> 172.16.4.0/24
2.2.2.2
255 2 3 i *> 172.16.5.0/24
2.2.2.2
0 255 2 3 i
2、使下列条目出现在R5的bgp表中
*> 192.168.0.0/21
0.0.0.0
32768 2 1 i *> 192.168.1.0
4.4.4.4
0 2 1 i *> 192.168.2.0
4.4.4.4
0 2 1 i s> 192.168.3.0
4.4.4.4
0 2 1 i s> 192.168.4.0
4.4.4.4
0 2 1 i *> 192.168.5.0
4.4.4.4
0 2 1 i
3、完成后,R1,R5互相可PING通对方宣告的这些bgp路由
实验效果: R1上查看BGP表
R5上查看BGP表
BGP综合实验2
拓扑图
实验要求如下: R1与R2为EBGP
R2与R3、R4为EBGP
R3与R4为IBGP
R3与R4、R5为EBGP 每台路由器都有X.X.X.XX/32作为router-id
全网底层跑EIGRP 100 2 3
实验效果:
R3和R4上查看BGP表 R3、R4学到R1上的bgp路由下一跳必须为AS100的,R5上学到的R1和R3的路由,优走R3 在R1和R5上的回环口分别是20.20.20.0/24和30.30.30.0/24,都重分布到BGP中,使其相互学到并互相连通!
R5上查看路由表
R1和R5上的lo0互相ping通
BGP综合实验3
拓扑图
实验要求如下: 1 2 3 4 5 R4上有192.168.1.0/
24、192.168.2.0/
24、192.168.3.0/
24、192.168.4.0/24和100.100.100.0/24网段,R5上有172.16.1.0/
24、172.16.2.0/
24、172.16.3.0/
24、172.16.4.0/24和50.50.50.1/32网段 R1为DR,R2和R3不参与DR选举
每台路由器都有x.x.x.x/24做为router-id Ospf学到的是192.168汇总和172.16的汇总以及100.100的明细路由 EIGRP不能学到192.168的路由,能学到100.100的路由 R4为AS100 R2为AS200 R5为AS300 R4只与R2建立EBGP,R5只与R2建立EBGP,R4能学到50.50.50.1/32的路由,且可达!
第二篇:BGP 协议原理总结
BGP协议原理总结
BGP协议3:
边界网关路由协议(版本3)
RFC1267
王尚
201192339
名词解释:
1 AS(自治系统):在单一技术管理下的一系列路由器,他们使用一个内部网关,在AS内部路由数据包的共同标准,使用同一个外部网关协议来想其他AS传输数据包。因为这个经典的解释已经被扩展,所以对于一个单一的AS来说在内部使用多个内部网关协议和有时多个系列的标准已经很普遍了。(在这里使用的AS强调了这样的事实,即便多个内部网关协议和度量标准被使用,一个AS面向其他的AS的管理拥有一个单一的连贯一致的内部路由方案,并且展示一个始终如一的图片,什么的网络通过它可以到达。从外部的路由的观点来看一个AS可以被看做一个单片集成电路:)
图1 AS系统
IGP(内部的边界网关协议)专门用于自治系统中的网关间交换数据流转通道信息的协议
EGP(外部的边界网关协议)在自治系统间的相邻的网关主机间交换路由信息的协议。常用于在INTERNET主机间交换路由表信息。一个轮询协议,利用HELLO和I-HEARD-YOU消息的转换,能让每个网关控制盒接受网络可达性信息的速率,容许每个系统控制自己的开销,同时发出命令请求更新响应。路由表包括一组一知路由器及这些路由器的可到达地址及路径开销,从而选择最佳路由。每个路由器没个120或者480秒访问邻居一次,邻居发挥完整的路由表来响应。
IBGP(内部边界网关协议)EBGP(外部边界网关协议)EBGP对等体
BGP和IGP同步:一个BGP路由器不将从内部Peer得知的目的地通告给外部Peer,除非该目的地也能通过IGP得知。若一个路由器通过IGP得知该目的地,则可以认为路由能在AS中传播,内部通达已经可以得到保证。2 3
4 5 6 7
BGP协议概述
1 BGP协议是外部路由协议,用来在AS之间传递路由信息。2 是一种增强的距离矢量路由协议。具有以下特点:
① 可靠的路由更新机制 3 4 5 6 7 8 9 ②
丰富的Metric度量方法 ③
从设计上避免了环路的发生 可以为路由附带属性信息
支持CIDR(无类别域间路由)丰富的路由过滤和路由策略
使用的传输层协议是TCP协议,使用的端口号是179 无需周期性的更新
周期性的发送KEEPALIVE报文验证TCP连接的连通性 在进行路由更新时只发送路由增量
BGP路由通告原则
1 当存在多条路径时,BGPSpeaker只选择最优的给自己使用 2 BGPSpeaker只把自己只用的路由通告给邻居
3 BGPSpeaker从EBPG获得的路由会向他的所有BGP邻居通告(包括EBGP和IBGP)
4 BGPSpeaker从IBGP获得的路由不向它的IBGP邻居发送
5 BGP Speaker从IBGP获得的路由是否会通告给他的EBGP对等体要依从于IGP和BGP同步的情况来决定
6 连接一但建立,BGP Speaker将把自己所有BGP路由通告给新的邻居
IBGP全连接
① IBGP对等体物理意义上的全连接 ② IBGP对等体逻辑意义上的全连接
BGP报文种类
1 Open:在TCP会话建立之后,两个邻居都将发送Open消息,每个邻居都
利用该消息标识自己并指定BGP操作参数
2 KeepAlive:当路由器接受了由邻居发送来的Open消息中的指定参数。
它将响应一条KeepAlive消息,此后路由器每60秒发送一条KeepAlive消息,或是以协商的保持时间的1/3为周期发送KeepAlive消息。由于KEEPALIVE纯粹是一个通信知会,不需要携带什么信息,因此KEEPALIVE报文实际上是不带数据的BGP报文头。
3 Update:被用来宣告可行路由、撤销的路由 4 Notification:只要路由器检测到差错就会发送Notificat
ion消息并关闭BGP进程,随后我们将看到BGP邻居断开,然后试图重新建立BGP邻居。BGP报文头
BGP报文的格式都是一样的:BGP报文头+BGP报文体
其中BGP报文头格式如下:
图 2 BGP报文头 ⑴ Maker(16byte):全为1,否则标记值要使用认证机制来计算(认证机制是通过认证信息的一部分来指定的)。标记可以用来探测BGP对端的同步丢失,认证进入的BGP消息。⑵ Length(2byte)BGP报文的全长,长度值必须最少19个字节,最大4096个字节。可能更多,根据报文类型决定 ⑶ Type(1byte)1-Open
2-UPDATE
3—Notification
4KeepAlive
Open报文:
⑷ ⑸ ⑹ ⑺
图3 Open报文头
Version(1字节)当前BGP版本号为3 My Autonomus System(2字节):发射者自导系统号 HoldTIME(2字节):BGP的Hold time为180秒 BGPIDE NTIFIER(4字节):发送者的BGP route ID
⑻ AUTH.CODE
⑼ AUTHE NTICATIO NDATA
Update
图 4 Update报文头
⑽ TOTALPath AttributeSLE NGTH(2字节):总的路径属性长度 0代表在UPDATE消息中没有网络层可达信息域 ⑾ Path Attribute:路径属性,在一个UPDATE中可能存在多个路径属性对。每个路径属性对包括Attribute Flags,Attribute type code,Attribute Date Length 三个字段。Attribute Flags,Attribute type code 各占一个字节。
⒈ Attribute Flags的8位分别表示:
⒉ Attribute type code指明是什么属性。
图 5 Attribute type code属性
⑿ Network(4字节): INTER NET NETWOR K编码表明这个AS的路由由这个路径属性表明
③ KeepAlive报文
④ Notification报文
图6 Notification报文头 ⑴ ERRORCODE:(1字节)
⑵ Error Subcode(1字节)
⑶ Date用来诊断Notification的原因。依赖于错误码和错误子码。Message Length=21+data length
BGP协议中消息的使用
1 通过TCP建立BGP连接时,发送Open报文
2 连接建立后,如果路由需要发送或者路由改变时,发送Update报文告知对端路由信息
3稳定后此时要定时发送KeepAlive报文以保持BGP连接的有效性
4档本地BGP在运行中发生错误时,发送Notification报文告知BGP对端 BGP有限状态机
BGP会话共有6种状态,分别是: 1CONNECT 3OpenSENT
5ESTABLISHED
BGP会话共有13种事件,影响BGP的会话,分别是: 1BGPStop
3BGPTransport ConnectionCLOSED
5BGPTRANSPORTFATALERROR 7HoldTimerExPIRED
9ReceiveOPENMESSAGE
11ReceiveUpdateMESSAGES
13-ReceiveNOTIFICATIONMESSAGE 1 空闲状态 BGP通常以空闲状态开始。在该状态下,它拒绝接收所有入连接。当一个开始事件出现的时候,BGP初始化所有BGP资源,打开重试连接计时器(ConnectRetrytimer)、初始化到邻居的TCP连接、接听来自邻居的TCP初始化消息,并将它的状态转到连接状态。开始事件是由一个操作者配置一个BGP过程,或重置一个已经存在的过程,或者由路由器软件重置BGP过程引起的。一个差错的出现会将BGP过程的状态转为空闲状态。路由器可能会试图发起另外一个是事件。但是对于路由器如何完成这个过程应当加以限制——在具有持续差错的条件下,坚持不懈的试图重新开始会导致摆动。因此,在第一次转向空闲状态以后,路由器会启动重试连接计时器,当计时器终止后,路由器就会放弃重新开始BGP。下一次ConnectRetry时间是前一次的两倍,以此类推。2 连接状态
在这种状态下,BGP过程会等到TCP连接完成以后再决定后续动作。如果TCP连接成功,BGP连接将ConnectRetry清零,完成初始化过程,给邻居发送一个Open消息并转移到发送Open消息状态。如果TCP连接建立失败。BGP过程会继续监听由邻居发起的连接、重置ConnectRetry计时器并转移到激活状态。
如果再连接状态下,ConnectRetry计时器超时了,计时器将重新开始计时,并再一次试图与邻居建立一个TCP连接,BGP状态继续保持在连接状态。任何一个其他输入事件的出现都会导致BGP状态转向空闲。3 激活状态
在这个状态下,BGP过程试图与邻居建立一个TCP连接。如果TCP连接建立成功,BGP过程将ConnectRetry清零,完成初始化工作,给邻居发送一个Open消息并转移到发送Open消息状态。
如果BGP在激活状态时,ConnectRetry计时器超时,该过程回到连接状态并且重置ConnectRetry计时器。它同样也发起一个到对等的TCP连接并且继续监听来自对等得连接。如果邻居试图与一个未知的IP 地址建立TCP会话,那么ConnectRetry计时器会被重置,连接被拒绝并且本地过程保持在激活状态。任何一个输入事件(除了开始事件,在激活状态下该事件会被忽略)都会导致状态转移为空闲。
4 发送Open消息状态
在这种状态下,已经发送了Open消息,BGP正在等待从邻居发来的Open消息。当收到一个Open消息后,检查该消息的所有字段。如果发现了差错,会给它的邻居发送一个Notification消息并且将状态转移到空闲。
如果再接收到的Open消息种没有发现差错。BGP给邻居发送一个KeepAlive消息,并且将KeepAlive计时器置位。邻居之间协商一个Hold时间,他们会选用较小的值。如果协商的Hold时间是0,则没有启动Hold和KeepAlive计时器。根据对等的AS号,决定该连接是内部的还是外部的,并且将状态转移到Open消息确认。
如果收到了一个TCP断开消息,本地过程断开BGP连接,重置ConnectRetry计时器,开始监听将要由邻居发起的新的连接并将状态转移到激活。任何一个输入事件(除了开始事件,在激活状态下该事件会被忽略)都会导致状态转移为空闲。5 Open消息确认状态
在这种状态下,BGP过程会等待一个KeepAlive或者Notification消息。如果收到KeepAlive消息,转移到已建立状态。如果收到Notification消息或者TCP断开消息,状态转移到空闲。
如果Hold计时器超时,检测到一个差错或出现一个stop事件,BGP过程会给邻居发送一个Notification消息并且断开BGP连接,将状态转向空闲。6 已建立状态
在这种状态下,BGP对等之间的连接完全建立起来了,对等之间可以交换Update、KeepAlive、Notification消息。如果收到Update或者KeepAlive消息,重新启动Hold计时器(如果协商的Hold时间是非零)。如果收到Notification消息,状态会转移到空闲。任何其他的事件都会导致Notification消息的发送并将状态转移到空闲。
BGP建立邻居后,会通过相互发送类似hello包的数据来维持邻居关系,这个数据包称为KeepAlive,默认60秒发送一次,holdtimer为180秒,即到达180秒没有收到邻居的KeepAlive,便认为邻居丢失,则断开与邻居的连接。KeepAlive发送时间间隔的推荐值为Hold计时器值饿1/3,最小为3秒。
BGP Update 消息处理
Update消息仅仅在建立状态被接收。当一个UPDATE消息被接收,每一个域要有效性检查。
如果可选的非转发的属性不认识,默认丢弃。如果可选转发属性不认识,属性标志字节 设置部分位(第三个高位顺序位),保留属性公告到别的BGP Speaker。如果可选的属性被认识,而且值有效,要根据可选参数的类型在本地处理,保留,如果必要的话,更新广播到别的BGP发言者。
如果UPDATE消息包括非空的WITHDRAWNROUTES域,先前广播的路由如果目的地包括在这里面需要从Adj-RIB_IN中移出来。BGPSpeaker应该运行决策过程,原因是先前的公告路由不再可用。
如果UPDATE消息包括了一个可用的路由,应该放在相应的Adj-RIB_IN内部,同时做下面的步骤:
① 如果网络层可达信息(NLRI)和Adj-RIB_IN的路由一样,新路由应该替换老路由,这样明确撤销了老路由的服务。BGP发言者运行决策过程,原因是老路由不再存在。
②如果新的路由重叠包含在Adj-RIB-IN老路由内部,BGPSpeaker应该运行决策过程,因为更特殊路由使得原来的更不特殊路由的一部分不可用了。
③如果新路由有和Adj_RIB_IN内包含的路由同样的路径属性,并且更特殊。不需要做任何事情。
④如果新路由的NLRI不同于Adj-RIB-IN存储的任何路由,新路由应该放入。BGP发言者应该运行决策进程。如果新路由是更不特别的重叠路由,BGP发言者应该运行对更不特殊的路由运行决策进程。
Ⅰ 决策过程
决策过程选择路由用于下一步的通告,方法是应用本地策略信息库(PIB)的策略处理Adj-RIB-IN中的路由。决策过程的输出是广播到对端的路由集合;被选的路由存储在Adj-RIB-Out中。选择过程可以定义为一个函数,给定路由的属性作为参数,返回非负的整数指示路由的优 先级别。计算路由优先级别的函数不能把以下的情况作为输入:别的路由的存在,别的路由的不存在,或者别的路由的路径属性。路由选择对每一个可用路由运用优先程度算法,选择最高优先程度的路由。
决策过程操作Adj-RIB-IN包括的路由中,同时负责:-选择路由通告到本地的AS中别的BGP发言者-选择路由通告到邻居AS中的BGP发言者-路由聚合和路由信息简化
决策过程分三期,通过不同的事件触发。
⑴一期负责计算来自邻居AS的BGP发言者的每条路有的优先级,通告到在本地AS的 别的BGP发言者到每个确定的目的地的具有最高优先级的路由。⑵二期在一期完成的时候激活。负责从到达目的地的所有路由中选择最好的路由,同时安装每个选择的路由到相应的LOC-RIB。⑶在LOC-RIB修改后激活三期。负责发布LOC_RIB中的路由到邻居AS的每个对端。路由聚合和信息简约在这期可选的执行。PHASE1: 优先级的计算
无论何时本地的BGP发言者接受到邻居AS的对端的通告新的路由,替代路由,测销路由的UPDATE消息,都要激活一期决策过程,一期决策过程是独立的过程,当没有别的工作要做的时候就停止。一期决策功能在操作任何包含路由之前锁定Adj-RIB-IN,在操作完成所有新的或者不可用的路由之后,解开Adj-RIB-IN。每一个新收到或者替代的可用路由,本的BGP发言者应该确定一个优先级。如果路由是通过本地AS的BGP发言者学习到的,或者LOCAL-PREF值被当作优先级,或者本地系统应该根据预先配置的策略信息计算路由优先级。如果路由通过邻居AS中的BGP发言者学习,优先级的计算是根据预先配置的策略。策略信息的确切特性和相关计算是本地的问题。本的发言者应该云内部更新过程选择并且通告最佳路由。PHASE2: 路由选择
第二期决策函数在第一期完成后激活。第二期函数是独立的过程当没有更进一步的工作要做的时候就停止。第二期进程要考虑ADj_RIB_IN中的所有路由,包括从自己的AS中和邻居的AS中的BGP发言者接收的路由。当运行第三期决策函数,第二期决策函数可以阻塞。第二期距测函数应该在开始函数前锁定所有的Adj-RIB-IN,在完成后解开所有。
如果BGP路由的NEXT-HOP属性描述了一个地址,在本地LOC-RIB中BGP发言者没有路由,BGP发言者应该排除在第二期决策函数外面。
为了ADj_RIB_IN中的路由的每一个目的地集合,本地BGP发言者以确定路由: A)对同一个目的地集和,最高优先级的路由,或者 B)是唯一的到目的的地路由,或者 ⑶是第二期解扣规则的选择结果。
本地发言者应该安装路由到LOC-RIB中,替代LOC-RIB中保存的任何道相同目的地的路由。本地发言者必须根据选择路由的NEXT-HOP属性确定立即下一跳,通过查找IGP悬着IGP中的可能的路径。当安装选择路由在LOC_RIB中,立即下一跳必须被使用。如果NEXT-HOP属性描述的地址改变,路由选择应该按照上面的说明重新计算。不可用的路由应该从LOC-RIB中拿出,相应的不可用路由应该从Adj-RIBs-IN拿出。解扣
在Adj-RIBs-IN中一个BGP发言者可以有多个有相同的优先级的路由到同一个目的地。本的发言者可以选择包含在相应LOC-RIB中的一条路由。本地发言者认为所有的路由,不论是邻居AS的BGP发言者的路由,还是本地AS的BGP发言者的路由是一样的。
下面的解扣过程假设一个自治系统的所有AS的每一个候选路由能够确定到NEXT-HOP属性描述的地址的路径代价(内部距离)。根据下面的算法解扣。A)如果本地系统配置考虑MULTI_EXIT_DISC,候选路由的MULTI_EXIT_DISC属性不同,选择MULTI_EXIT_DISC属性值最小的。
B)否则,选择到路与欧的NEXT-HOP属性描述的入口的代价(内部距离)最小的。如果有几个路由有相同的代价,按照下面的过程解扣
-如果最少有一个路由是通过邻居AS的BGP发言者通告的,选择邻居AS的BGP发言者通告的鲈鱼哦,如果BGP的标示符的值是所有邻居AS的BGP发言者中最小的。-否则,选者BGP标示符最小的BGP发言者通告的路由。PHASE3: 路由分发
第三期路由决策过程可以被第二期的完成激活,或者下面的事件发生: A)LOC-RIB中的到本地目的地的路由改变。
B)当本地产生的通过BGP以外的方式学习的路由改变。C)当新的BGP发言者-BGP发言者连接建立。
第三期函数是独立的过程当没有进一步的工作去做的时候停止。第三期路由决策过程应该被阻塞,如果第二期决策过程在运行。
所有的LOC-RIB中的路由应该被处理到相应的到Adj-RIBs-Out的入口。路由聚合和信息简约技术可选执行。为了更好支持未来的AS间多播能力,参加AS间多播路由的BGP发言者应该通告他从外部对端收到的路由同时如果安装在Loc-RIB内,因该通告到接收路由的对端。对没有参加AS间多播路由的BGP发言者这个通告是可选的。如果做这样一个通告,NEXT-HOP属性应该被设置为对端地址。应用可以优化这个通告,组合AS-PATH属性的信息不但包括自己的AS号码而且通告路由的对端的AS号码(这个组合要求ORIGIN属性被设置为INCOMPLETE)。另外,应用不需要传递可选的或者自决的路径属性在这种通告中。
当Adj-RIBs-Out更新而且转发信息库(FIB)完成,本地BGP发言者应该运行外部更新进程 路由覆盖
BGP发言者可以传送具有重叠的网络层可达信息(NLRI)的路由到别的BGP发言者。NLRI重叠产生于一些列目的地对非匹配的多个路由是唯一的。由于BGP使用IP前缀对NLRI编码,重叠一般要展示子网关系。路由描述了更小范围的目的地(更长的前缀)称为更特别路由,路由描述了更大范围的目的地(更短的前缀)成为更一般路由。反之同样。这种优先关系有效分解了更一般路由为两部分: -一系列目的地,仅仅使用更一般路由描述。
-一系列路由,使用更一般和更特殊路由的重叠描述。当重叠路由发生在同样的Adj-RIB-IN,更特殊的路由应该有优先权,顺序是更特殊到更一般。重叠描述的目的地的集合表明一部分更一般路由是可用的,但是当前不可用。如果一个更特殊的路由后来撤销了,重叠描述的目的地的集合将可以使用更一般的路由到达。
如果BGP发言者接收了重叠路由,决策过程应该考虑重叠路由的语义。特别是,如果BGP发言者接收了同一个对端的更一般的路由同时拒绝了更特殊的路由,那末重叠表示的目的地可能不转发到路由的AS-PATH属性列出的AS那里。因此,BGP发言者可以由下面选择:
a)同时安装更一般和更特殊的路由 b)只安装更特殊的路由
c)只安装更一般路由的非重叠部分(这意味着解聚和)d)聚合着两条路由同时安装聚合路由 e)安装更一般的路由 f)都不安装
如果一个BGP发言者选择e),应该加入ATOMIC-AGGREGATE属性到路由中。承载ATOMIC-AGGREGATE属性的路由不能被解聚和。也就是说,路由的NLRI不能被是更特殊。向这个路由转发不保证IP 包实际沿着路由的AS-PATH属性列出的AS中转。如果BGP发言者选择A),必须不在通告更特殊的路由的时候通告更一般的路由。
ⅡUpdate发送过程
Update-SEND进程负责通告UPDATE消息到所有的对端。例如,他发布决策进程选择的路由到位于同样的自治系统或者邻居自治系统的BGP发言者。不同自治系统的BGP发言者之间信息交换的法则.相同自治系统的BGP发言者之间信息交换的法则. 在BGP发言者集合之间的路由信息的发布,所有BGP发言者如果在同一个自治系统,称为内部发布。内部更新
内部更新进程是发布路由信息到本地自治系统的BGP发言者。
当BGP发言者从在本地自治系统的别的BGP收到了UPDATE消息,接收BGP发言者不应该再分配UPDATE消息中的路由信息道别的本地自治系统的BGP发言者。当BGP发言者接收了邻居自治系统的BGP发言者的一条新的路由,如果下面的情况之一发生,应该使用UPDATE消息通告路由到本的自治系统的所有的BGP发言者:
1本地BGP发言者安排给新接收的路由的优先程度高于本地发言者已经安排的接受自邻居自治系统的别的路由的优先级
2没有接收到别的邻居自治系统的BGP发言者发送的路由 3新接收路由是几个最高优先级,同样目的的的路由解扣的结果,当BGP发言者受到了UPDATE消息,有非空的WITHDRAWNRJOUTES域,应该从Adj-RIB-IN里去掉所有的在这个域中(IP前缀表示)的目的地。发言者应该做下面的附加步骤:
1如果相应的可用路由先前没有被通告,不需要做更多的行动。2如果相应的可用路由先前被通告,那末:
I 如果被选择通告的新的路由和不可用路由有相同的网络层可达信息,本的系统因该通告替代路由。
II 如果替代路由不能用于通告,BGP发言者应该包括不可用路由的目的的(IP 前缀形式)在UPDATE消息的WITHDRAWNROUTES域,因该发送这个消息到先前通告了相应的可用路由的对端。所有的通告过的可用路由因该放入相应的Adj-RIBs-Out,所有不可用的但是通告过的路由应该被从Adj-RIBs-Out清除。解扣(内部更新)
如果一个本地的BGP发言者连接到邻居AS的几个BGP发言者,有多个Adj-RIBs-IN和这些对段相关联。这些Adj-RIB-IN可以包括到同一个目的的的多个等价优先级的路由,所有的路由要通告到邻居自治系统。本的BGP发言者应该根据下面法则选择其中一条路由:
A)如果候选路由的NEXT-HOP和MULTI-EXIT-DISC属性不同,本地系统配置中考虑了MULTI-EXIT-DISC属性,选择有最低的MULTI-EXIT-DISC属性的路由。
B)如果本的系统能够确定候选路由中T-HOP属性描述的实体的路径的成本,选择成本较低的路由。
C)在所有别的情况中,选择通告路由的BGP发言者具有较低的BGP标示符的路由。外部更新
外部更新过程和邻居AS的BGP发言者路由信息的发布有关。作为阶段3选择过程的一部分,BGP发言者更新他的Adj-RIBs-Out和转发表.所有新的安装的路由和所有新的没有替代路由的不可用的路由要通过UPDATE消息通告到邻居AS内部的BGP发言者。
任何位于LOC-RIB的路由,如果是不可用的应该被撤销。在自己的AS内部如果可达地址改变应该发送UPDATE消息。控制路由流量开销
BGP协议限制路由流量(也就是UPDATE消息),目的是减少通告UPDATE消息的带宽和消化UPDATE消息信息的决策过程的处理能力。⑴ 路由通告的频率
参数MinRouteAdvertisementInterval确定了BGP发言者到特定目的地的两个路由通告之间的最小时间。这个速率限制过程是基于单个目的地的,但是这个MinRouteAdvertisementInterval值是对每一个对端设置的。
从单个BGP发言者通告可用路由到目的地集合的来自BGP发言者的两个UPDATE消息必须至少分离MinRouteAdvertisementInterval.无疑, 只有精确保持目的地集合的计时器才能做到这一点。这是不现实的开销。任何保证BGP发言者接受自邻居AS通告的两个UPDATE消息之间时间间隔的技术通告可用路由到目的的地最小间隔是MinRouteAdvertisementInterval,也要保证大于间隔的一个常量是可以接受的。
由于需要在AS内部快速收敛,本过程不能用于从本AS中别的BGP发言者发来的路由。为了避免永久黑洞,本过程不能用于明确的撤销或者不可用路由(也就是,目的地(通过IP 前缀表示)在UPDATE消息中WITHDRAWNROUTEST域的路由)。这个过程不限制路由选择的速率,但是仅仅限制路由通告的速率。当等待MinRouteAdvertisementInterval溢出时,如果新的路由被选择多次, 在MinRouteAdvertisementInterval的最后最后选择的路由被通告.⑵ 路由产生的速率
参数MINASORIGINATIONINTERVAL确定了在BGP发言者本身的AS,中报告变化的UPDATE消息的连续通告的最小间隔 JITTER
为了减少给定的BGP发言者的BGP消息产生尖峰,jITTER应该被使用于MINASORIGINATIONINTERVAL, KeepAlive,MinRouteAdvertisementInterval计时器.给定的BGP发言者应该应用同样的jITTER数量,无论UPDATE被送到那个目的地;也就是说,jITTER不能被基于“每个对端” 使用。
引入的JITTER的数量使用相应的计数器的基本值乘以一个范围是0。75到1的随机因子。
路由信息的有效组织
选择将要广播的路由信息,一个BGP发言者可以采用几个方法,组织信息为一个有效形式。①信息简约
信息简约可以在策略控制的程度上使用简约-在信息崩溃之后,相同的策略在等价类上使用在所有的目的地和路径。
决策进程使用下面方法可选的减少放在ADj-RIB_Out中的信息数量: A)网络层可达信息(NLRI)
目的IP 地址可以被看作IP 地址前缀。若地址结构和在AS管理者控制下的系统能够达成一致,有可能减少UPDATE消息中NLRI的尺寸。B)AS_PATHS(AS路径): AS路径信息可以表达为顺序AS-SEQUENCE和无序AS-SET。S-SET可以用在路由聚合算法,描述在9。2。4。2中。他们减少了AS-PATH的尺寸,通过只列出每个AS号码一次,无论在聚合的AS-PATH上出现了几次。
一个AS-SET意味着NLRI列出的目的地能够通过由AS-SET中的部分AS组成的路径到达。AS-SET提供有效的信息来避免回环;然而使用他们可能会剪除一些潜在的有用路径,原因是一些路径不再被单独通过AS-SEQUENCE的方式列出。实际使用中这不是个问题,应为一旦IP 报到达AS组的边界,这个点上的BGP发言者更可能有更多的详细路径信息并能够区分到目的地的路径。②聚合路由信息
聚合是一个过程用来组合几个不同的路由来广播一个单独的路由。聚合作为决策的一个部分发生,这样可以减少放在AjD_RIBS_Out中路由信息的数量 聚合减少了BGP发言者存储并且和别的BGP发言者交换的路由。路由聚合使用下面的独立于期望类型的路径属性和网络层可达信息的过程。
有下面属性的路由不能被聚合。除非相应的属性是唯一的MULTI_EXIT_DISC, NEXT_HOP.具有不同类型码的路径属性不能被聚合在一起.一些类型码的路径能够被聚合,使用下面的规则: ORIGIN属性:如果最少一个被聚合路由它的ORIGIN指示INCOMPLETE,聚合路由ORIGIN的属性值是IMCOMPLETE.否则,如果最少一个路由的属性是EGP,聚合路由的属性是EGP.在所有别的情况下ORIGIN属性是INTERNAL.AS-PATH属性:如果路由聚合有单一的AS-PATH属性,聚合的路由有同样的AS-PATH属性.为了聚合路由属性,我们建模AS-PATH属性作为二元组<类型,值>,”类型”定义了路径段的属性(比如AS-SEQUENCE,AS_SET),”值”定义了AS号码.如果路由被聚合有不同的AS-PATH属性,聚合的AS-PATH属性应该满足:-所有在聚合AS-PATH的AS-SEQUENCE二元组应该在最早的路由集的AS-PATH中都出现.-在聚合的AS-PATH中AS-SET类型的所有的二元组应该出现在最少一个AS-PATH类型中(可以出现为AS-SET或者AS-SEQUENCE)。
-在聚合AS-PATH中任何类型AS-SEQUENCE的二元组X领先于Y,在初始的AS-PATH中,X在每一个AS-PATH中领先于Y,不论Y的类型。
-在AS-PATH中不能由同一个二元组具有相同值却出现了两次,不论二元组的类型。应用可以选择任何算法只要符合这些规则。最少的一个构造应用应该能够执行下埋嗯的算法来满足所有的条件。
-确定最长的对所有的聚合AS-PATH属性来说的二元组序列(如上定义)。把这个序列作为聚合后的派头AS-PATH属性序列。
-设置剩下的AS-PATH属性二元组为AS-SET,把他们加入到AS-PATH后面。-如果聚合AS-PATH属性有多个相同的二元组(不论二元组的类型),清除所有的,只留下一个通过去掉AS-PATH属性中的AS-SET类型。
ATOMIC_AGGREGATE: 如果最少一个路由有这个路径属性,那末聚合后的路由应该有这个属性。
AGGREGATOR: 聚合者属性应该被忽略。路由选择标准 总的来说,在几个可替代路由中比较路由的额外法则是在本文讨论问题之外的。有两个例外。-如果新路由中AS路径出现了本地AS,新路由不能被看作比别的路由更好的路由。如果使用这样的一个路由,路由环路会发生。
-为了成功实现发布操作,只有具有稳定可能性的路由被选择。这样,一个AS必须避免使用不稳定的路由,必须不使路由自发选择快速改变。前面句子中“不稳定”和“快速”的名词量化需要经验,但是原理是清楚的。产生BGP路由
一个BGP发言者可以通过某些方式(比如通过IGP)获得的注入BGP的路由信息产生BGP路由。BGP发言者产生BGP路由应该通过决策进程来安排路由的优先级别。这些路由可以被发布到别的在本地AS的BGP发言者作为内部更新进程的一部分。在一个AS内部决定是否发送非BGP获得的路由,取决于AS内部的环境(也就是IGP类型)而且可以通过配置来控制。
BGP路径属性
每个路径属性由1字节的属性标志位,1字节的属性类型,1或2字节路由属性长度和路径属性数据组成。
属性标志位:
位0:0表示此属性必选,1表示此属性可选。
位1:0表示此属性为非过渡属性,1表示此属性为过渡属性。
位2:0表示所有属性均为路由起始处生成,1表示中间AS加入了新属性。
位3:0表示路由属性长度由1字节指示,1表示由2字节指示。
位4至位7:未用置0
位0和位1标识了BGP的4类路由属性:
-(01)公认必选:BGP的UPDATE报文中必须存在的属性。它必须能被所有的BGP工具识别。公认必选属性的丢失意味着UPDATE报文的差错。这是为了保证所有的BGP工具统一于一套标准属性。
-(01)公认自决:能被所有BGP识别的属性,但在UPDATE报文中可发可不发。
-(11)可选过渡:如果BGP工具不能识别可选属性,它就去找过渡属性位。如果此属性是过渡的,BGP工具就接受此属性,并把它向前传递给其它BGP路由器。
-(10)可选非过渡:当可选属性未被识别,且过渡属性也未被置位时,此属性被忽略,不传递给其它BGP路由器。
路由属性类型:
⑴ORIGIN(TYPECODE = 1,公认必选属性)
指示此路由起始类型:
⑵AS_PATH(TYPECODE = 2,公认必选属性)
AS路径属性由一系列AS路径段(SEGMENT)组成。每个AS路径段为一三元组<路径段类型,路径段长度,路径值>。
路径类型有:
路径段长度用1字节表示AS号的数量,即最长为255个AS号。
路径值为若干AS号,每个AS号为2字节。
⑶NEXT_HOP(TYPECODE = 3,公认必选属性)
此属性为UPDATE消息中的信宿地址所使用的下一跳。
⑷MULTI_EXIT_DISC(TYPECODE = 4,公认自决属性)
简称MED属性。为一4字节无符合整数。它在AS区域间传播,用来帮助一个其它AS区域的BGP伙伴选择进入本AS区域的人口。
⑸LOCAL_PREF(TYPECODE = 5,公认自决属性)
本地优先级属性。为一4字节无符合整数。它在AS区域内传播,用来帮助一个本AS区域内BGP伙伴选择进入其它AS区域的出口。
⑹ATOMIC_AGGREGATE(TYPECODE = 6,公认自决属性)
元聚合属性。长度为零。它表示本地BGP在若干路由中选择了一个较抽象的(LESSSPECIFIC)路由,而没有选择较具体(SPECIFIC)的路由。
⑺AGGREGATOR(TYPECODE = 7,可选过渡属性)
聚合者属性。长度为6字节,分别为最后进行路由聚合的路由器的AS号(2字节)和IP 地址(4字节)。
第三篇:BGP学习心得
首先,照我的理解,在我司路由器当中有关BGP的路由表一共有三个,可以通过以下命令分别获取:
1: show ip bgp route;
2: show ip protocol routing;
3: show ip route(bgp);
这三条命令所看到的BGP路由表之间是怎样的关系呢?
首先,通过show ip bgp route所看到的路由就是实实在在通过BGP邻居学到的路由,包涵了该路由具有的所有属性:
ZXR10#sho ip bgp route
Status codes: *valid, >best, i-internal
Origin codes: i-IGP, e-EGP, ?-incomplete
Dest Next Hop Metric LocPrf RtPrf Path
*> 3.0.0.0/8 202.138.191.29 20 9497 10026 703 80 i
* 3.0.0.0/8 210.14.0.248 100 20 9299 2914 703 80 i
*> 4.0.0.0/8 202.138.191.29 20 9497 3356 i
* 4.0.0.0/8 210.14.0.248 20 20 9299 2914 3356 i
(注:210.14.0.248是通过multi hop建立的邻居关系,注意和下面的比较)
可以看到本路由器从两个邻居学到了相同的路由,其中可达,即有效的路由被标识为“ *”,而最优的路由被标识为“ >”,有关有效及最优,这牵扯到BGP路由的最优路由算法,这个将在后文中有详细介绍。
再看看通过show ip protocol routing我们看到了什么:
ZXR10#sho ip pro routing
Protocol routes:
status codes: *valid, >best,i-internal
Dest Next Hop RoutePrf RouteMetric Protocol
*> 3.0.0.0/8 202.138.191.29 20 0 bgp-ext
* 3.0.0.0/8 210.1.66.169 20 100 bgp-ext
*> 4.0.0.0/8 202.138.191.29 20 0 bgp-ext
* 4.0.0.0/8 210.1.66.169 20 20 bgp-ext
首先注意到的是所有BGP路由的属性都不见了,只是能通过protocl一项看到他们是通过EBGP学习到的。但实际上这个表和上面那个表还有一个最大的不同:NEXT HOP!请注意上面两个表中用红线表示的部分:由于210.14.0.248(AS9299)这个邻居是multi hop的,因此第一个表看到的实际是路由的NEXT HOP属性,而第二张表看到的才是真正的路由转发的下一跳。我个人理解,第二张表是BGP路由和IGP整合的结果,也就是说路由器在自己的IGP路由表中查找到的第一张表中BGP路由下一跳之后形成了第二张表中BGP路由的转发的下一跳。
接下来我们看看最后一张表,也就是全局路由表:
ZXR10#sho ip rout
IPv4 Routing Table:
Dest Mask Gw Interface Owner pri metric
3.0.0.0 255.0.0.0 202.138.191.29 fei_4/15 bgp 20 0
4.0.0.0 255.0.0.0 202.138.191.29 fei_4/15 bgp 20 0
这张表就是路由器进行转发的全局路由表了,和上面两张表最大的不同是到同一目的地址的路由只有一条了,也就是最优的那条了,这是因为路由器总会把最优的那条路由写进自己的路由转发表的。
需要注意的东东:
1:在我们自研的路由器上,虽然show ip protocol routing能看到所有的BGP路由(最优和非最优的),但是show ip protocl routing summary只能看到最优的路由条目数量,也就是实际写近路由转发表的路由总数。
2:show ip bgp route 命令还能看到本路由器上产生的路由,但下一跳属性是0.0.0.0,管理距离就是这些路由响应的IGP路由的管理距离,若本路由器上采用了路由聚合,那么会看到多出来一条路由,下一跳属性也是0.0.0.0,但这条通过聚合产生出来的路由,其管理距离为254,即无效路由。例如:
*> 203.92.8.0/21 0.0.0.0 1 i
*> 203.92.8.0/21 0.0.0.0 1 i
* 203.92.8.0/21 0.0.0.0 254 i
3:BGP中network命令的使用和OSPF大不相同,可以这么认为:BGP中network命令只是规定了一个可以通告出去的路由范围,在这个范围之内,如果本路由器上有相应的IGP路由,那么路由器就会生成相应的BGP路由并通告出去的。
下面我们看看BGP是如何抉择一条最优的路由的:
BGP选路的策略:
1)如果下一跳不可达,不考虑下一跳。
就是指两个BGP邻居之间交换路由信息的地址必须首先IGP可达,如果不可达就压根不会被BGP选路策略考虑!
2)优先选取有最大权重的路径。
这是思科的私有属性,我们不考虑!
3)如果多条路由有同样的权重,优先选取具有最高本地优先级的路由。
根据LOCAL PREFERENCE 决定,越大越优!
4)如果多条路由有相同本地优先级,优先选取源自于本路由器上B G P的路由。
是指这样一种情况,同一个AS内有两个运行BGP的路由器,他们同时通告本AS的路由给其他AS,且他们之间运行了IBGP,那么在其中任意一台路由器上关于本AS的路由就会有两条,一条是自己产生的,一条是通过IBGP学到的,这时候路由器会优先选择本路由器上产生的本AS路由。(其实这条规则对于路由器上全局路由表的产生和路由抉择没有任何意义,因为可被通告的BGP路由必是已经存在于IGP路由当中的,由于IGP的管理距离比IBGP要小,所以路由器肯定是先选择IGP的!但是仅仅对于BGP路由的抉择来说,这点还是有必要的,我们就接受它吧)
5)如果没有路由是源,优先选取具有最短A S路径的路由。
这条也好理解,由于AS-PATH属性是必遵属性,每条BGP路由都会携带这样一个属性,当收到的属性以上四点都相同时,就会比较那条路由经过的AS数量,越少当然就越好!在我们的路由器当中,这点也可以用来影响外部AS对于本AS的路由选择,例如:
如果我们的路由器连接了两个AS:AS9299和AS9479,那么在其中一个EBGP邻居(9479)上应用如下命令:
route-map todigital permit 10
match as-path 10
set as-path prepend 18009
ip as-path access-list 10 permit ^$ neighbor 202.138.191.29 remote-as 9497 neighbor 202.138.191.29 route-map todigitel out 这些命令的意思是在通告本AS路由给202.138.191.29(AS9479)这个邻居的时候,在AS PATH属性当中预先填好一个值18009,那么这时外部INTERNET上其他AS通过AS9299学到的我们AS的路由所包含的AS PATH 属性当中就会出现两个18009,而通过AS9299学到的我们AS的路由所包含的AS PATH属性当中则只有一个18009。(个人认为这种应用方法比MED属性对于外部AS的路由选择的影响更大,因为MED只能影响邻近AS对本AS的路由选择,而利用PREPEND这个命令可以影响更多的AS对于本AS的路由选择)。下面是互联网上的一个例子:
*> 8.6.240.0/24 202.138.191.29 20 9497 701 7911 31846 31846 31846 31846 31846 i * 8.6.240.0/24 210.14.0.248 20 20 9299 2914 7911 31846 31846 31846 31846 31846 i 6)如果所有路径具有同样的A S长度,优先选取有最低源编码,(I G P < E G P < I N C O M P L E T E)的路由。
这条就是比较路由是通过什么样的方式学习到的,通过IGP学习到的被认为是更加可靠的,其次是EGP,再其次是INCOMPLETE.其中,通过IGP学到是指:通过NETWORK命令宣告的路由(记住,通过NETWORK学习到的路由必须首先存在于本路由器的IGP路由表中,不管是通过OSPF等动态路由协议学到还是通过静态路由协议学到的);EGP现在基本用不到了,在BGP路由表中也很难看到起源是EGP的路由了,故此条可以忽略,呵呵;而INCOMPLETE则表示该路由是通过REDISTRIBUTE纯动态注入到BGP路由表中的)
7)如果源编码相同,优先选取具有最低多出口区分(M E D)的路径。
这个属性可以用来影响邻接AS对于本AS的路由选择(例如本AS和邻近AS中的两个路由器建立了EBGP关系,那么一旦我通告给其中一个路由器上的MED值比另外一个要小,那么很有可能将会引导那个AS出来的流量全部从MED值低的那个路由器上出来,之所以说很有可能是因为首先要比较以上的六个属性先),但要注意的是本AS通过两个不同的AS学到的相同路由是不会比较MED属性的,在我们的路由器上,可以通过在BGP配置模式下用bgp always-compare-med命令强制比较来自不同AS的相同路由的MED属性。
8)如果M E D都相同,外部路径比内部路径优先选取。
这条是指若从IBGP邻居和EBGP邻居学到了相同路由,且以上六个属性又相同,那么就会优先选取从EBGP邻居学到的路由。
9)如果M E D都相同,优先选取通过最近I G P邻居的路径。
这条是指若从两个BGP邻居学到的路由上面八个属性都相同,那么就看到那个BGP邻居所走的IGP路由最短。例如,若从两个EBGP邻居学到相同路由,且以上八个属性相同,但是其中一个EBGP邻居是多跳MULTI HOP的,而另外一个是直连的,那么本路由器肯定会先选择直连的那个邻居通告的路由; 10)如果M E D仍都相同,优先选取具有最低B G P路由器I D的路径。
如果以上九条都相同了,那么路由器就会比较两个邻居的路由器ID了,呵呵,再比较不出来就见鬼了。
要注意的东东:
1:目前我司自研的路由器GAR,GER和T64E,T128由于平台的原因会把第8条放到第3条首先进行比较,也就是说EBGP学到的路由比IBGP学到的路由牛!据朱磊磊说以后的版本会调整成和以上所说的选路策略一样的。
2:另外一点需要注意的是:以上只是BGP算法所要求的,即必须在所有学到的到同一目的网段的BGP路由当中选出一条最优的路由!不论他是否真的有实际的意义(如第四条就没有什么意义),是否会安装到全局路由表中。
3:以上所说的BGP最优路由抉择并不是最全的,思科上面讲的条件更多,但其实对于平时应用来说上面的十条已经足够了。
下面再说说我自己对于BGP同步的理解:
同步这个东东关注的是当一台路由器收到IBGP邻居所通告的路由时候会怎么处理:
1:默认情况下,我司的路由器同步是打开的,在这种情况下,路由器会检查本路由器中通过IGP学到的路由有没有和通过IBGP邻居学到的同样的路由条目:若有,则路由器会把这些IBGP路由放入自己的路由表中,并通告给存在的EBGP邻居(IBGP邻居之间不转发IBGP路由);若没有,则对这些路由不做任何处理,这时候在路由器上关于这些IBGP路由的信息只能在sho ip bgp route看到,而另外两张表中是没有的。
2:当通过no synchronization命令关闭同步的时候,不论路由器有没有通过IGP学到相应的路由,都会把这些路由添加近自己的路由表中(IBGP邻居最好配置next-hop self),并通告给自己存在的EBGP邻居。
下面是我在网上搜到的一个实例,觉的比较透彻:
实验理解BGP同步
BGP基本理伦:
1、由eBGP邻居学来的信息肯定会传给另外的eBGP邻居。
2、由eBGP邻居学来的信息肯定会传给iBGP邻居。
3、由iBGP邻居学来的信息不会再传给另外的iBGP邻居。
4、由iBGP邻居学来的信息:
1)如果同步关了,会传给eBGP邻居
2)如果同步开了,先查找自己的IGP。如果IGP里面有这个网络,就把这个网络传给eBGP;如果IGP里面没有这个网络,就不会传给eBGP邻居。
由实验来帮助大家理解:
初始状态:R1、R2、R3、R4 同步都是关闭的。在所有路由器上,BGP表、路由表都有所有网络。在R1启动同步后
#R3、R2 BGP表、路由表没有变。#R3、R2 BGP表、路由表没有变。
#R1 BGP表没有变,但路由表少了3.3.3.0/24及192.168.0.0/24。原因:R1收到R2(iBPG)的BGP信息,因而在R1BGP表没有少以上网络。由show run看得出,在整个AS 200内是走RIP V2(IGP),而且没有宣告192.168.0.0/24,而网络3.3.3.0/24与R1不是同一个AS,因而R1的路由没有以上网络。#R4 BGP表和路由表都没有192.168.0.0/24及3.3.3.0/24网络。说明R1没有把BGP信息宣告给R4。因为没有了BGP信息,因而R4的路由表肯定不会有以上网络。
再说说BGP的负载均衡
其配置命令是和OSPF一样的。但个人最初不理解的是既然BGP最优路由抉择是一定要选出一条最优的路由,那么怎么实现负载均衡呢。实际上判断能否进行负载均衡的策略是和选最优路由不同的。
我们自研的设备进行负载均衡的策略如下:
首先都是EBGP路由 路由学到的邻居AS相同 路由的origin相同
路由的本地优先属性相同
路由的as-path长度相同,其中每一个AS都对应相同
这和思科是不同的,大家如果有兴趣可以看看思科的相关文档。
第四篇:bgP后期教案
r2(config)#access-list 1 per 192.168.1.0 0.0.0.255
r2(config)#route-map aaa per 10 r2(config-route-map)#match ip add 1
r2(config)#router bgp 100 r2(config-router)#nei 1.1.1.1 route-map aaa in 只从1.1.1.1接受192.168.1.0的路由
access-list 1 deny
192.168.1.0 0.0.0.255 access-list 1 permit any
route-map aaa permit 10 match ip address 1
router bgp 200 aggregate-address 192.168.0.0 255.255.248.0 suppress-map aaa summary-only as-set
聚合过程中过滤,ACL的permit做聚合,deny不做聚合放行明细,即使加上summary-only也会放行192.168.1.0
access-list 1 permit 192.168.1.0 0.0.0.255
route-map aaa permit 10 match ip address 1
router bgp 200 aggregate-address 192.168.0.0 255.255.248.0 summary-only neighbor 4.4.4.4 unsuppress-map aaa 把我本地抑制的路由传给4.4.4.4邻居,且是active
!route-map aaa permit 10 set local-preference 120
router bgp 200 aggregate-address 192.168.0.0 255.255.248.0 summary-only attribute-map aaa 聚合中修改汇总路由属性,注意尽量不和ACL连用 注意:聚合时候route-map 和att…map是同一个意思
access-list 1 deny
192.168.1.0 0.0.0.255 access-list 1 permit any!route-map aaa permit 10 match ip address 1 set metric 66
router bgp 200 neighbor 4.4.4.4 route-map aaa out 不向4.4.4.4通告192.168.1.0,但通告其他的且同时修改metric为66
access-list 1 permit 192.168.1.0 0.0.0.255 router bgp 200 distribute-list 1 in 只允许192.168.1.0的路由进来
access-list 1 permit 192.168.1.0 0.0.0.255
router bgp 200 nei 4.4.4.4 distribute-list 1 in 只允许从4.4.4.4收满足ACL的permit流量路由
?????????????????????????????????? Access-list 1 per 172.168.1.0 0.0.0.255 Acess-list 1 per 172.168.2.0 0.0.0.255 Route-map aaa per 10 Match add 1 Aggregate-add 172.168.1.0 255.255.255.0 as-set advertise-map aaa 只通告ACL匹配的路由,且保留AS号码
?????????????????????????????????
Prefix-list过滤:
Ip prefix-list aaa se 5 per 192.168.1.0/24 ge小于等于 le大于等于 Router bgp 100
Nei 1.1.1.1 prefix-list aaa in/out
过滤优先级
出方向:route-map过滤-----filter-list----------prefix-list 进方向:prefix-list-------filte-list-------route-map
BGP过滤表达式
1、字和元字符特殊字符
一个典型的AS_PATH过滤器如下所示:
ip as-path access-list 83 permit ^1_701_(_5646_|_1240).*
在关键字permit后面的字符串是一个正则表达式。
2、表1 关于AS_PATH访问列表的正则表达式元字符特殊字符
元字符特殊字符
匹配内容
.任何单一字符,包括空格
[ ]
在方括弧中罗列的任何字符
[^]
除了在方括弧中罗列的字符外任何字符(^必须放置在字符列表之前)
internal,r RIB-failure, S Stale Origin codes: iEGP, ?-incomplete
Network
Next Hop
Metric LocPrf Weight Path *> 192.168.1.0
13.1.1.1
0
7777 100 i *> 192.168.2.0
13.1.1.1
0
8888 100 i r3(config)#
*正常route-map 下面可以同时match很多个条件在执行一个set语句
R1: Ip as-path access-list 1 per _200$ 路由源自于200 Ip prefix-list aaa per 0.0.0.0/0
我只收默认路由
Route-map aaa per 10 Match as-path 1 Match ip add prefix-list aaa Set weight 200
Route-map aaa per 20 Match ip add prefix-list aaa Set weight 100
Router bgp 213
Nei r2 route-map aaa in
Nei r3 route-map aaa in
温和刷新
R1:
Router bgp 1` Nei 1.1.1.1 soft-reconfig inbound-------从1.1.1.1学到的路由放进自己内存,确保内存够大,只针对EBGP邻居生效
Clear ip bgp nei 1.1.1.1------这时不去1.1.1.1要路由了,从自己内存拿出来即可
Show ip bgp nei 1.1.1.1发现有type=2(soft)type=128(老的硬清)
Nsf技术
控制层重启,数据转发层继续转发数据,我要重启前告诉对方这段时间我不给你发keeplive报文了,你把你我之间的TCP保持住
Router bgp 100 Bgp graceful-restart restart-time--------你等我多长时间,我在这个时间重启完成
NSR技术-----我制造假象让对方认为我控制层没有问题
SSO GRES
实现两块引擎热备
BGP优化
1,bgp的keeplive调整
router bgp 100 time bgp 10 30
2,如何确定收敛已完成
r3#show ip bgp nei 13.1.1.1 BGP neighbor is 13.1.1.1, remote AS 100, external link
BGP version 4, remote router ID 1.1.1.1
BGP state = Established, up for 00:01:19
Last read 00:00:19, last write 00:00:19, hold time is 180, keepalive interval is 60 seconds
Neighbor capabilities:
Route refresh: advertised and received(old & new)
Address family IPv4 Unicast: advertised and received
Message statistics:
InQ depth is 0
OutQ depth is 0
Sent
Rcvd
Opens:
Notifications:
0
0
Updates:
0
Keepalives:
Route Refresh:
0
0
Total:
Default minimum time between advertisement runs is 30 seconds
For address family: IPv4 Unicast
BGP table version 2, neighbor version 2/0-------如果相同则说明收敛完成
Output queue size: 0
Index 1, Offset 0, Mask 0x2 update-group member
Sent
Rcvd
Prefix activity:
----
----
Prefixes Current:
0
1(Consumes 52 bytes)
Prefixes Total:
0
Implicit Withdraw:
0
0
Explicit Withdraw:
0
0
Used as bestpath:
n/a
Used as multipath:
n/a
0
Outbound
Inbound
Local Policy Denied Prefixes:
--------
-------
Bestpath from this peer:
n/a
Total:
0
Number of NLRIs in the update sent: max 0, min 0
Connections established 1;dropped 0
Last reset never Connection state is ESTAB, I/O status: 1, unread input bytes: 0 Connection is ECN Disabled, Mininum incoming TTL 0, Outgoing TTL 1 Local host: 13.1.1.3, Local port: 59918 Foreign host: 13.1.1.1, Foreign port: 179 Connection tableid(VRF): 0
Enqueued packets for retransmit: 0, input: 0 mis-ordered: 0(0 bytes)
Event Timers(current time is 0x31D68): Timer
Starts
Wakeups
Next Retrans
0x0 TimeWait
0
0
0x0 AckHold
0x0 SendWnd
0
0
0x0 KeepAlive
0
0
0x0 GiveUp
0
0
0x0 PmtuAger
0
0
0x0 DeadWait
0
0
0x0 Linger
0
0
0x0 ProcessQ
0
0
0x0
iss: 368904907 snduna: 368905010 sndnxt: 368905010
sndwnd: irs: 257648202 rcvnxt: 257648357 rcvwnd:
16230 delrcvwnd:
154 16282
SRTT: 125 ms, RTTO: 1409 ms, RTV: 1284 ms, KRTT: 0 ms minRTT: 128 ms, maxRTT: 308 ms, ACK hold: 200 ms Status Flags: active open Option Flags: nagle IP Precedence value : 6
Datagrams(max data segment is 1460 bytes): Rcvd: 7(out of order: 0), with data: 4, total data bytes: 154 Sent: 7(retransmit: 1, fastretransmit: 0, partialack: 0, Second Congestion: 0), with data: 4, total d ata bytes: 102 Packets received in fast path: 0, fast processed: 0, slow path: 0 fast lock acquisition failures: 0, slow path: 0
r3#show int f0/0 FastEthernet0/0 is up, line protocol is up
Hardware is DEC21140, address is ca00.0c1c.0000(bia ca00.0c1c.0000)
Internet address is 13.1.1.3/24
MTU 1500 bytes, BW 100000 Kbit, DLY 100 usec,reliability 255/255, txload 1/255, rxload 1/255
Encapsulation ARPA, loopback not set
Keepalive set(10 sec)
Half-duplex, 100Mb/s, 100BaseTX/FX
ARP type: ARPA, ARP Timeout 04:00:00
Last input 00:00:54, output 00:00:05, output hang never
Last clearing of “show interface” counters never
Input queue: 0/75/0/0(size/max/drops/flushes);Total output drops: 0
Queueing strategy: fifo
Output queue: 0/40(size/max)-----如果都是0说明没有更新流量,收敛完成 5 minute input rate 0 bits/sec, 0 packets/sec minute output rate 0 bits/sec, 0 packets/sec
packets input, 3764 bytes
Received 7 broadcasts, 0 runts, 0 giants, 0 throttles
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
0 watchdog
0 input packets with dribble condition detected
packets output, 7439 bytes, 0 underruns
0 output errors, 0 collisions, 1 interface resets
0 babbles, 0 late collision, 0 deferred
0 lost carrier, 0 no carrier
0 output buffer failures, 0 output buffers swapped out
3修改MSS为1460,双方都要配置
Ip tcp path-mtu-discovery age-timer 30------得到的数值可以保留多久,没有这个参数默认10分钟
5,接口队列长度,防止ACK回来时候优于接口队列太小引起丢弃,接口丢弃5%的包,TCP性能下降50%,建议设置1000 Int f0/0 Hold-queue 1000 in Hold-queue 1000 out
6,bgp scanner扫描时间,每60秒检查下一条可达性,检查条件通告路由是不是满足条件,执行BGP惩罚机制,不建议修改
Rouer bgp 100
Bgp scan-time 50 r3(config)#do show ip bgp sum BGP router identifier 3.3.3.3, local AS number 200 BGP table version is 3, main routing table version 3 2 network entries using 240 bytes of memory path entries using 104 bytes of memory 3/2 BGP path/bestpath attribute entries using 372 bytes of memory 1 BGP AS-PATH entries using 24 bytes of memory 0 BGP route-map cache entries using 0 bytes of memory 0 BGP filter-list cache entries using 0 bytes of memory Bitfield cache entries: current 1(at peak 1)using 32 bytes of memory BGP using 772 total bytes of memory BGP activity 2/0 prefixes, 2/0 paths, scan interval 60 secs Neighbor
V
AS MsgRcvd MsgSent
TblVer InQ OutQ Up/Down State/PfxRcd 13.1.1.1
0
0 00:30:14
7,EBGP通告时间,如果bgp路由表很大尽量不要修改,虽然可以增加收敛,但是CPU很快耗尽;ibgp默认0秒,EBGP默认30秒
r3(config)#router bgp 200 r3(config-router)#nei 13.1.1.1 advertisement-interval 30
r3#show ip bgp nei 13.1.1.1 BGP neighbor is 13.1.1.1, remote AS 100, external link
BGP version 4, remote router ID 1.1.1.1
BGP state = Established, up for 00:02:31
Last read 00:00:31, last write 00:00:31, hold time is 180, keepalive inter
Neighbor capabilities:
Route refresh: advertised and received(old & new)
Address family IPv4 Unicast: advertised and received
Message statistics:
InQ depth is 0
OutQ depth is 0
Sent
Rcvd
Opens:
Notifications:
0
0
Updates:
Keepalives:
Route Refresh:
0
0
Total:
Default minimum time between advertisement runs is 30 seconds
For address family: IPv4 Unicast
BGP table version 3, neighbor version 3/0
Output queue size: 0
Index 1, Offset 0, Mask 0x2 update-group member
Sent
Rcvd
Prefix activity:
----
----
Prefixes Current:
1(Consumes 52 bytes)
Prefixes Total:
Implicit Withdraw:
0
0
Explicit Withdraw:
0
0
Used as bestpath:
n/a
Used as multipath:
n/a
0
Outbound
Inbound
Local Policy Denied Prefixes:
--------
-------
Bestpath from this peer:
n/a
Total:
0
Number of NLRIs in the update sent: max 1, min 1
Minimum time between advertisement runs is 600 seconds
Connections established 2;dropped 1
Last reset 00:02:33, due to User reset Connection state is ESTAB, I/O status: 1, unread input bytes: 0 Connection is ECN Disabled, Mininum incoming TTL 0, Outgoing TTL 1 Local host: 13.1.1.3, Local port: 45132
Foreign host: 13.1.1.1, Foreign port: 179 Connection tableid(VRF): 0
Enqueued packets for retransmit: 0, input: 0 mis-ordered: 0(0 bytes)
Event Timers(current time is 0x2A3D30): Timer
Starts
Wakeups
Next Retrans
0
0x0 TimeWait
0
0
0x0 AckHold
0
0x0 SendWnd
0
0
0x0 KeepAlive
0
0
0x0 GiveUp
0
0
0x0 PmtuAger
0
0
0x0 DeadWait
0
0
0x0 Linger
0
0
0x0 ProcessQ
0
0
0x0
iss: 665239953 snduna: 665240146 sndnxt: 665240146
sndwnd: 16192 irs: 3831860571 rcvnxt: 3831860764 rcvwnd:
16192 delrcvwnd:
192
SRTT: 182 ms, RTTO: 1073 ms, RTV: 891 ms, KRTT: 0 ms minRTT: 48 ms, maxRTT: 300 ms, ACK hold: 200 ms Status Flags: active open Option Flags: nagle IP Precedence value : 6
Datagrams(max data segment is 1460 bytes): Rcvd: 10(out of order: 0), with data: 5, total data bytes: 192 Sent: 8(retransmit: 0, fastretransmit: 0, partialack: 0, Second Congestion: ata bytes: 192
Packets received in fast path: 0, fast processed: 0, slow path: 0 fast lock acquisition failures: 0, slow path: 0 r3#
限制从邻居收到的路与条目:
r1(config-router)#nei 1.1.1.1 maximum-prefix 10000 warning-only
超过10000条告警一次
r1(config-router)#nei 1.1.1.1 maximum-prefix 10000 restart 5
超过10000条,断开邻居5分钟
r1(config-router)#nei 1.1.1.1 maximum-prefix 10000 70
默认收到75%告警一次
Peer group 加快收敛 简化配置
一个的边界连接多个邻居,使用统一的策略,如不用这个特性,IOS为每一个邻居做单个的update更新,建立一个group将多个邻居放进一个group,一个update可为peer group所有邻居生效
限制:出去的update是一致的
IBGP和EBGP不能合起来用
创建一份:属性值通告,update-source的IP地址,EBGP多跳,MED5认证,邻居的权重值,filter-list和前缀列表过滤,route-map策略集合,通告给邻居
R7:
Router bgp 100 Nei ebgp
peer-group Nei ibgp
peer-group
Nei 17.1.1.1 peer-group ebgp
Nei 27.1.1.2 peer-group ebgp
Nei ebgp remote 200
Nei ebgp route-map aaa out/in
Nei ibgp remote-as 100 Nei ibgp up lo 1 Nei ibgp next-hop-seif Nei 88.1.1.1 peer-group ibgp
第五篇:个人总结的BGP心得,包含大量实验环境和配置案例
<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
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 ·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 会影响所有路由 打上这一命令后----·对“EBGP传过来的路由”“自己network的路由”起效,要show明细才能看到。·对“IBGP传过来的路由”不起效。
·MED属性
MED属性是一个任选非传递属性。这个任选非传递属性与EBGP的Update消息中携带,它允许一个AS将它的首选的入口点通知另外一个AS。如果其他参数都相同,则收到同一个目的地的多条路由的AS将这些路由的MED进行比较,具有最低MED值的路由为首选。这是因为将MED看成一个度量,并且最低的度量----最短的距离----是首选。
MED值只会传递给配置MED值的对端AS,从而使他们知道优先的路由,但是接收的AS不会在继续传递给下一个AS。
如果同一个目的地的两条路由来自两个不同的AS,也不进行MED值的比较。MED值只对单一的AS有意
BGP 义,当该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
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 例如: 假如同步关闭的情况下,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 <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 重发布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 通过使用上面的配置来宣告汇总路由。这样不用将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 在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, iIGP, eincomplete 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, iIGP, eincomplete 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, iIGP, eincomplete 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 “bgp 100”, distance 20, metric 0 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 “static”, distance 1, metric 0 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 “bgp 100”, distance 20, metric 0 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 2 R6 300 400 路径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