BGP路由协议详解

一、BGP的概况

BGP最新的版本是BGP第4版本(BGP4),它是在RFC4271中定义的;一个路由器只能属于一个AS。AS的范围从1-65535(64512-65535是私有AS号),RFC1930提供了AS号使用指南。

BGP的主旨是提供一种域间路由选择系统,确保自主系统只能够无环地交换路由选择信息,BGP路由器交换有关前往目标网络的路径信息。

BGP是一种基于策略的路由选择协议,BGP在确定最佳路径时考虑的不是速度,而是让AS能够根据多种BGP属性来控制数据流的传输。

1、BGP的特性

? BGP将传输控制协议(TCP)用作其传输协议。是可靠传输,运行在TCP的179端口上(目的端口)

? 由于传输是可靠的,所以BGP0使用增量更新,在可靠的链路上不需要使用定期更新,所以BGP使用触发更新。

? 类似于OSPF和ISIS路由协议的Hello报文,BGP使用keepalive周期性地发送存活消息(60s)(维持邻居关系)。

? BGP在接收更新分组的时候,TCP使用滑动窗口,接收方在发送方窗口达到一半的时候进行确定,不同于OSPF等路由协议使用1-to-1窗口。

? 丰富的属性值

? 可以组建可扩展的巨大的网络

2、BGP的三张表

? 邻居关系表

n 所有BGP邻居

? 转发数据库

n 记录每个邻居的网络

n 包含多条路径去往同一目的地,通过不同属性判断最好路径

n 数据库包括BGP属性

? 路由表

n 最佳路径放入路由表中

n EBGP路由(从外部AS获悉的BGP路由)的管理距离为20

n IBGP路由(从AS系统获悉的路由)管理距离为200

如下图所示。

BGP路由协议详解 - hkdog - HKdogs zone

? 邻居表,包含与之建立BGP连接的邻居

n 使用命令show ip bgp summary可以查看到

Router#sh ip bgp summary

BGP router identifier 11.1.1.1, local AS number 100

BGP table version is 8, main routing table version 8

5 network entries using 585 bytes of memory

6 path entries using 312 bytes of memory

4/3 BGP path/bestpath attribute entries using 496 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

BGP using 1417 total bytes of memory

BGP activity 5/0 prefixes, 6/0 paths, scan interval 60 secs

Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd

10.1.1.1 4 100 14 18 8 0 0 00:09:32 2

11.1.1.2 4 200 12 16 8 0 0 00:07:03 1

? 转发表,从邻居那里获悉的的所有路由都被加入到BGP转发表中。

n 使用命令show ip bgp可以查看

Router#sh ip bgp

BGP table version is 8, local router ID is 11.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

*> 10.1.1.0/24 0.0.0.0 0 32768 i

* i 10.1.1.1 0 100 0 i

*> 11.1.1.0/24 0.0.0.0 0 32768 i

*>i192.168.1.0 10.1.1.1 0 100 0 i

*> 192.168.2.0 0.0.0.0 0 32768 i

*> 192.168.3.0 11.1.1.2 0 0 200 i

? 路由表,BGP路由选择进程从BGP转发表中选出前往每个网络的最佳路由,并加入到路由表中。

n 使用命令show ip route bgp可以查看

Router#sh ip route bgp

B 192.168.1.0/24 [200/0] via 10.1.1.1, 00:13:11

B 192.168.3.0/24 [20/0] via 11.1.1.2, 00:11:19

3、BGP消息类型

? open:用来建立最初的BGP连接。(包含hold-time,router-id)

? Keepalive:对等体之间周期性的交换这些消息以保持会话有效。(默认60秒)

? Update:对等体之间使用这些消息来交换网络层可达性信息。

? Notification:这些消息用来通知出错信息。

所有的BGP分组共享同样的公有首部,在学习不同类型的分组之前,先讨论公共首部,如下图所示,这个首部的字段如下。

? 标记:这个16字节标记字段保留给鉴别用

? 长度:这个2字节字段定义包括首部在内的报文总长度

? 类型:这个1字节段定义分组的类型,用数值1至4定义BGP消息类型

BGP路由协议详解 - hkdog - HKdogs zone

打开消息:主要是利用此报文建立邻居,运行BGP的路由器打开与邻居的TCP连接,并发送打开报文,如果邻居接受这种邻居关系,由响应保活报文。打开报文格式如下所示。

BGP路由协议详解 - hkdog - HKdogs zone

? 版本:这个1字节字段定义BGP的版本,当前的版本是4

? 自治系统:这个2字节字段定义自治系统号。

? 保持时间:这个2字节字段定义一方从另一方收到保活报文或更新报文之前所经过的最大秒数,若路由器在保持时间的期间内没有收到这些报文中的一个,就认为对方是不工作的。

? BGP协议标识:这是2字节字段,这定义发送打开报文的路由器,为此,这个路由器通常使用它的IP地址中的一个作为BGP标识符。

? 选项长度:打开报文还可以包含某些选项参数,若包含,则这个1字节字段定义选项参数总长度,若没有选项参数,则这个字段的值为0

? 选项参数:若选项参数长度的值不是0,则表示有某些选项参数,每一个选项参数本身又有两个字段,参数长度和参数值,到现在已定义的唯一的选项参数是鉴别。

如下图是采用ethereal采集到的BGP的打开消息报文。

BGP路由协议详解 - hkdog - HKdogs zone

更新报文:更新报文是BGP协议的核心,路由器使用它来撤销以前已通知的终点和宣布到一个新终点的路由,或两者都有,应该注意:BGP可以撤销好几个在以前曾通知过的终点,但在单个更新报文中则只能通知一个新终点,如下所示。

BGP路由协议详解 - hkdog - HKdogs zone

? 不可行路由长度:这个2字节字段定义下一字段的长度。

? 撤销路由:这个字段列出必须从以前通知的清单中删除的所有路由

? 路径属性长度:这个2字节字段定义下一个字段的长度

? 路径属性:这个字段定义到这个报文宣布可达性的网络路径属性

? 网络层可达性信息:这个字段定义这个报文真正通知的网络。它有一个长度字段和一个IP地址前缀,长度定义前缀中的位数。前缀定义这个网络地址的共同部分。例如,若这个网络是123.1.10.0/24,则网络前缀是24而前缀是123.1.10。

下图为,是采用ethereal采集到的BGP的更新消息报文。

BGP路由协议详解 - hkdog - HKdogs zone

BGP路由协议详解 - hkdog - HKdogs zone

保活报文:是用来告诉对方自己是工作的,保活报文只包括公共首部,如下图所示。

BGP路由协议详解 - hkdog - HKdogs zone

下图为,是采用ethereal采集到的BGP的保活报文。

BGP路由协议详解 - hkdog - HKdogs zone

通知报文:当检测出差错状态或路由器打算关闭连接时,路由器就发送通知报文,如下图所示。

BGP路由协议详解 - hkdog - HKdogs zone

? 差错码:这个1字节字段定义差错的种类

? 差错子码:这个1字节字段进一步定义每一种差错的类型

? 差错数据:这个字段可用来给出关于该差错的更多的诊断信息

具体的差错码,如下表所示。

差错码

差错码说明

差错子码说明

1

报文首部差错

3种不同的子码:同步问题(1),坏的报文长度(2),坏的报文类型(3)

2

打开报文差错

6种不同的子码:不支持的版本(1),坏的对等AS(2),坏的BGP标识符(3),不支持的可选参数(4),鉴别失败(5),不可接受的保持时间(6)

3

更新报文差错

11种不同的子码:错误形成的属性表(1),不能识别的熟知属性(2),丢失熟知属性(3),属性标志差错(4),属性长度差错(5),非法起点属性(6),AS路由选择环路(7),无效的下一路属性(8),可选属性差错(9),无效的网络字段(10),错误形成的AS_PATH(11)

4

保持计时器截止期到

未定义子码

5

有限状态机差错

定义过程的差错,未定义子码

6

关闭

未定义子码

下图为,是采用ethereal采集到的BGP的通知报文。

BGP路由协议详解 - hkdog - HKdogs zone

4、建立邻居的过程

在两个BGP发言人交换信息之前,BGP都要求建立邻居关系,BGP不是动态地发现所感兴趣的运行BGP的路由器,相反,BGP使用一个特殊的邻居IP地址来配置的。

BGP使用周期性的Keepalive分组来确认BGP邻居的可访问性。

Keepalive计时器是保持时间(Hold Time)的三分之一,如果发给某一特定BGP邻居三个连续的Keepalive分组都丢失的话,保持时间计时器超时,那个邻居被视为不可达,RFC1771对保持时间的建议是90秒,Keepalive计时器的建议值是30秒。

按照RFC1771,BGP建立邻居关系要经历以下几个阶段,如下图所示。

BGP路由协议详解 - hkdog - HKdogs zone

? Idle在此状态下不分配网络资源,不允许传入的BGP连接。当在持续性差错条件下,经常性的重启会导致波动。因此,在第一次进入到空闲状态后,路由器会设置连接重试定时器,在定时器到期时才会重新启动BGP,思科的初始连接重试时间为60秒,以后每次连接重试时间都是之前的两倍,也就是说,连接等待时间呈指数关系递增。

? Connect:(已经建立完成了TCP三次握手),BGP等待TCP连接完成,如果连接成功,BGP在发送了OPEN分组给对方之后,状态机变为OpenSent状态,如果连接失败,根据失败的原因,状态机可能演变到Active,或是保持Connect,或是返回Idle。

? Active:在这个状态下,初始化一个TCP连接来建立BGP间的邻居关系。如果连接成功,BGP在发送了OPEN分组给对方之后,状态机变为OpenSent状态,如果连接失败,可能仍处在Active状态或返回Idle状态。

? OpenSentBGP发送OPEN分组给对方之后,BGP在这一状态下等待OPEN的回应分组,如果回应分组成功收到,BGP状态变为OpenConfirm,并给对方发送一条Keepalive分组,如果没有接到回应分组,BGP状态重新变为Idle或是Active。

? OpenConfirm这时,距离最后的Established状态只差一步,BGP在这个状态下等待对方的Keepalive分组,如果成功接收,状态变为Established,否则,因为出现错误,BGP状态将重新变为Idle。

? Established这是BGP对等体之间 可以交换信息的状态,可交换的信息包括UPDATE分组、KeepAlive分组和Notification分组。

connect和active都是TCP连接阶段,ACTIVE是发起方,connect是应答方。可以使用命令show ip bgp summary、debug ip bgp events、debug ip bgp来查看。

Router#debug ip bgp

BGP debugging is on for address family: IPv4 Unicast

*Jun 23 22:00:05.619: BGP: 11.1.1.2 went from Idle to Active

*Jun 23 22:00:05.627: BGP: 11.1.1.2 open active delayed 30128ms (35000ms max, 28% jitter)

*Jun 23 22:00:06.215: BGP: 11.1.1.2 passive open to 11.1.1.1

*Jun 23 22:00:06.219: BGP: 11.1.1.2 went from Active to Idle

*Jun 23 22:00:06.219: BGP: 11.1.1.2 went from Idle to Connect

*Jun 23 22:00:06.227: BGP: 11.1.1.2 rcv message type 1, length (excl. header) 26

*Jun 23 22:00:06.227: BGP: 11.1.1.2 rcv OPEN, version 4, holdtime 180 seconds

*Jun 23 22:00:06.231: BGP: 11.1.1.2 went from Connect to OpenSent

*Jun 23 22:00:06.231: BGP: 11.1.1.2 sending OPEN, version 4, my as: 100, holdtime 180 seconds

*Jun 23 22:00:06.231: BGP: 11.1.1.2 rcv OPEN w/ OPTION parameter len: 16

*Jun 23 22:00:06.231: BGP: 11.1.1.2 rcvd OPEN w/ optional parameter type 2 (Capability) len 6

*Jun 23 22:00:06.235: BGP: 11.1.1.2 OPEN has CAPABILITY code: 1, length 4

*Jun 23 22:00:06.235: BGP: 11.1.1.2 OPEN has MP_EXT CAP for afi/safi: 1/1

*Jun 23 22:00:06.235: BGP: 11.1.1.2 rcvd OPEN w/ optional parameter type 2 (Capability) len 2

*Jun 23 22:00:06.235: BGP: 11.1.1.2 OPEN has CAPABILITY code: 128, length 0

*Jun 23 22:00:06.239: BGP: 11.1.1.2 OPEN has ROUTE-REFRESH capability(old) for all address-families

*Jun 23 22:00:06.239: BGP: 11.1.1.2 rcvd OPEN w/ optional parameter type 2 (Capability) len 2

*Jun 23 22:00:06.239: BGP: 11.1.1.2 OPEN has CAPABILITY code: 2, length 0

*Jun 23 22:00:06.239: BGP: 11.1.1.2 OPEN has ROUTE-REFRESH capability(new) for all address-families

BGP: 11.1.1.2 rcvd OPEN w/ remote AS 200

*Jun 23 22:00:06.243: BGP: 11.1.1.2 went from OpenSent to OpenConfirm

*Jun 23 22:00:06.243: BGP: 11.1.1.2 send message type 1, length (incl. header) 45

*Jun 23 22:00:06.359: BGP: 11.1.1.2 went from OpenConfirm to Established

*Jun 23 22:00:06.363: %BGP-5-ADJCHANGE: neighbor 11.1.1.2 Up

5、建立IBGP邻居

IBGP运行在AS内部,不需要直连。IBGP有水平分割,建议使用Full Mesh,由于Full Mesh不具有扩展性,为了解决IBGP的Full Mesh问题,使用路由反射器(RR)和联邦两种方法来解决。主要减少了backbone IGP中的路由。

Neighbor后所指的地址可达。发起方不能是缺省路由,应答方不能是缺省路由。

可以使用下面两种方法来建立IBGP邻居:

? 邻居之间可以通过各自的一个物理接口建立对等关系,该对等关系是通过属于它们共享的子网的IP地址来建立的。

? 邻居之间也可以通过使用环回接口建立对等关系。

在IBGP中,由于假定了IBGP邻居在物理上直接相连的可能性不大,所以将IP分组头中的TTL域设置为255。

6、建立EBGP邻居

EBGP运行在AS与AS之间的边界路由器上,默认情况下,需要直连或使用静态路由,如果不是直连,必须指EBGP多跳,Neighbor x.x.x.x ebgp-multihop [1-255] 不选择为最大值,255跳。

可以使用下面两种方法来建立EBGP邻居:

? 邻居之间可以通过各自的一个物理接口建立对等关系。

? 邻居之间也可以通过使用环回接口建立对等关系。

7、neighbor ip-address remote-as number命令

例:neighbor 10.1.1.1 remote-as 100

指定对方属于哪一个AS。所指的10.1.1.1地址,必须在IGP中可达。

? 允许邻居用这个地址来访问我的179端口,但没有指明访问本路由器的哪个地址,只检查源地址。

? 本路由器以更新源地址去访问neighbor后面这个地址的179端口,是否可以建立TCP链接要看对方是否允许我的更新源来访问它。

示例:

BGP路由协议详解 - hkdog - HKdogs zone

R1/R2两台路由器运行RIPv2,都将环回口宣告进RIP。这时假如在两台路由器之间运行IBGP邻居关系:

R1neighbor 192.168.2.1 remote-as 1

R2neighbor 10.1.1.1 remote-as 1

双方都没有写更新源。(neighbor x.x.x.x update-source lo0代表本路由器的更新源为lo0口,BGP的包以这个接口的地址为源地址发送出去。)

一边指环回口,一边指直连接口。可以建立邻居。这里有2个TCP的session,其中只有R1去访问R2的环回口的179端口的TCP session可以建立。可以用show tcp brief查看。

Router#sh tcp brief

TCB Local Address Foreign Address (state)

65693960 10.1.1.1.51124 192.168.2.1.179 ESTAB

这时在R2上写上确定更新源命令:neighbor 10.1.1.1 update-source lo1,这时即可建立2条TCP session。可以使用命令Show tcp brief查看到2条TCP session在建立,当一条establish完成后,另一条过会即消失。

Router#sh tcp brief

TCB Local Address Foreign Address (state)

65693960 10.1.1.1.51124 192.168.2.1.179 CLOSED

65693E14 10.1.1.1.37992 192.168.2.1.179 ESTAB

Router#sh tcp brief

TCB Local Address Foreign Address (state)

65693E14 10.1.1.1.37992 192.168.2.1.179 ESTAB

注:路由器建立BGP邻居写两条正确的neighbor命令,是为了冗余。

8、IBGP的同步

? BGP同步规则指出,BGP路由器不应用使用通过IBGP获悉的路由或将其通告给外部邻居,除非该路由是本地的或是通过IGP获悉的。

? 同步开启意味着,从一个IBGP邻居学来的路由,除非从IGP中也同样学习到,否则不可能被选为最优。

? 如果IGP为OSPF,那么在IGP中,这些前缀的router-id也必须与通告这些前缀的bgp的router-id相匹配。才有可能被选为最优。

实例说明:如下图所示

BGP路由协议详解 - hkdog - HKdogs zone

R1、R2、R3同为OSPF area 0中路由器(每台路由器的router-id如上图所示),R2上一条路由3.3.3.0/24宣告进OSPF。

R1、R3运行IBGP,R1将3.3.3.0/24的前缀引入BGP,传给R3。这时R3既从OSPF area0中的R2学习到该前缀,又从IBGP对等体R1,学习到该前缀,如果R3的synchronizaion是开启的,检查同步,在R3的BGP转发表里:

R1

router ospf 10

router-id 2.2.2.1

log-adjacency-changes

network 10.1.1.0 0.0.0.255 area 0

network 11.1.1.0 0.0.0.255 area 0

!

router bgp 100

synchronization

bgp log-neighbor-changes

redistribute ospf 10

neighbor 11.1.1.2 remote-as 100

no auto-summary

R3

router ospf 10

router-id 2.2.2.3

log-adjacency-changes

network 11.1.1.0 0.0.0.255 area 0

!

router bgp 100

synchronization

bgp log-neighbor-changes

neighbor 11.1.1.1 remote-as 100

no auto-summary

R3#sh ip bgp

BGP table version is 30, local router ID is 11.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

* i3.3.3.3/32 10.1.1.1 11 100 0 ?

* i10.1.1.0/24 11.1.1.1 0 100 0 ?

r>i11.1.1.0/24 11.1.1.1 0 100 0 ?

R3#sh ip bgp 3.3.3.3

BGP routing table entry for 3.3.3.3/32, version 26

Paths: (1 available, no best path)

Not advertised to any peer

Local

10.1.1.1 (metric 20) from 11.1.1.1 (11.1.1.1)

Origin incomplete, metric 11, localpref 100, valid, internal, not synchronized

说明同步检查没有通过,当把R1的bgp的router-id改为2.2.2.2时,R3这时检查同步就可以通过了。

R1

router ospf 10

router-id 2.2.2.1

log-adjacency-changes

network 10.1.1.0 0.0.0.255 area 0

network 11.1.1.0 0.0.0.255 area 0

!

router bgp 100

synchronization

bgp router-id 2.2.2.2

bgp log-neighbor-changes

redistribute ospf 10

neighbor 11.1.1.2 remote-as 100

no auto-summary

R3#sh ip bgp

BGP table version is 37, local router ID is 11.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

r>i3.3.3.3/32 10.1.1.1 11 100 0 ?

r>i10.1.1.0/24 11.1.1.1 0 100 0 ?

r>i11.1.1.0/24 11.1.1.1 0 100 0 ?

R3#sh ip bgp 3.3.3.3

BGP routing table entry for 3.3.3.3/32, version 35

Paths: (1 available, best #1, table Default-IP-Routing-Table, RIB-failure(17))

Flag: 0x820

Not advertised to any peer

Local

10.1.1.1 (metric 20) from 11.1.1.1 (2.2.2.2)

Origin incomplete, metric 11, localpref 100, valid, internal, synchronized, best

? 关闭同步的条件

n 将EBGP的路由重分布进IGP

n 本AS不为其他AS提供穿越服务(末节的AS)

n 穿越路径上所有路由器都运行BGP

二、BGP属性

路由器发送关于目标网络的BGP更新消息,更新的度量值被称为路径属性。属性可以是公认的或可选的、强制的或自由决定的、传递的或非传递的。属性也可以是部分的。并非组织的和有组合都是合法的,路径属性分为4类:

? ――公认强制的

? ――公认自由决定的

? ――可选传递的

? ――可选非传递的

? 只有可选传递属性可被标记为部分的

公认属性

? 是公认所有BGP实现都必须能够识别的属性。这早些属性被传递给BGP邻居。

? 公认强制属性必须出现在路由描述中,公认自由决定属性可以不出现在路由描述中

可选属性

? 非公认属性被称为可选的,可选属性可以是传递的或非传递的

? 可选属性不要求所有的BGP实现都支持

? 对于不支持的可选传递属性,路由器将其原封不动地传递给其他BGP路由器,在这种情况下,属性被标记为部分的。

? 对于可选非传递属性,路由器必须将其删除,而不将其传递给其他BGP路由器

BGP定义属性

? 公认强制属性

? 公认自由决定

? 可选传递属性

? 可选非传递属性

BGP每条更新消息都有一个长度可变的路径属性序列<属性类型,属性长度,属性值>,如果第1比特是0,则属于是公认属性,如果它是1,则该属性是任选属性,如果第2比特是0,则该属性是不可传递的,如果它是1,则属性是可传递的,公认属性总是可传递的,属性标志域中的第3个比特指示任选可传递属性中的信息是部分的(值为1)还是完整的(值为0),第4个比特确定该属性长度是1字还是2字节,标志域其他4个比特总为0.属性类型代码字节含有属性代码。如下图所示。

BGP路由协议详解 - hkdog - HKdogs zone

1、AS路径属性(AS-path)

AS_PATH是一个公认必选的属性,它用AS号的顺序来描述AS间的路径或到NLRI所明确的目的地的路由。

当每个运行运行BGP的路由器发起一条路由――当它在自己的AS域内公布一个有关目的地NLRI――它将自己的AS号附加到AS_PATH中。当后续的运行BGP的路由器向外部的对端公布路由,它将自己的AS号附加到AS_PATH中。AS可以描述所有它经过的自治系统,以最近的AS开始,以发起者的AS结束。如下图所示。

BGP路由协议详解 - hkdog - HKdogs zone

只有将更新消息发送给在另一个AS域内的邻居时,BGP路由器才将它的AS号加到AS_PATH中,也就是说只有在两个EBGP对等体之间公布路由时,AS号才被附加到AS_PATH中。

可以通过使用AS附加改变其公布路由的AS_PATH来影响数据流的流向。

AS_PATH属性的另一个功能就是避免环路,如果BGP路由器从它的外部邻居收到一条路由,而该路由AS_PATH包含这个BGP路由器自己的AS号。于是该路由器就知道是条环路路由。如下图所示。

BGP路由协议详解 - hkdog - HKdogs zone

实例说明:如图所示。

BGP路由协议详解 - hkdog - HKdogs zone

可以将私有的AS号进行隐藏,如下配置所示。

BGP路由协议详解 - hkdog - HKdogs zone

下面是AS属性的另一个实例,如下图所示。

BGP路由协议详解 - hkdog - HKdogs zone

R1在发送更新的时候,剥除私有AS号;并且不将AS100的路由传播给其客户路由器R3,配置如下所示。

BGP路由协议详解 - hkdog - HKdogs zone

聚合后继承明细路由的属性,在大括号里面的as-path在计算长度时,只算一个。在联盟内小括号里面的AS号,在选路时,不计算到as-path长度里面。

增加as-path的长度,可以用route-map里面的set as-path prepend来做,如:

neighbor 1.1.1.1 route-map AS {in|out}

route-map AS

set as-path prepend 10 10

在neighbor的入向做as-path prepend。是在as-path靠近我的地方加长度,如:

10 10 2i 。10 10是新加的。

而在neighbor的出向做as-path prepend。是在AS起源的方向加path长度,如:

2 10 10i 。10 10是新加的。

在as-path prepend的后面还有一个参数,last-as,如:

route-map AS

set as-path prepend last-as ?

<1-10> number of last-AS prepends

意思是将离我最近的AS,将它的AS号在as-path里面再重复出现几次。这个10看起来可以和allowas-in里面的10对应起来。

假如as-path prepend 与as-path prepend last-as合用的时候,last-as先生效,然后prepend再生效。

减小as-path的长度,如用联盟和remove-private-AS等可以实现。

注意:Remove-private-as,如果在as-path里交替出现私有和公有的AS号,这样将无法将私有AS号去掉。在起源的时候,连续的时候才有效。

bgp bestpath as-path ignore(隐藏命令)这条命令可以使我们在选路时,跳过as-path的选路,直接往下继续选择最优路径。

2、源头属性(Origin)

源头是公认强制属性,它定义了路径信息的源头。

IGP:路由在起始AS的内部,使用network命令通过BGP通告路由时,通常属于这种情况,在BGP表中,IGP源头用i表示

EGP:路由是通过EGP获悉的,在BGP表中用e表示。

不完全:路由的源头未知或是通过其他方法获悉的,在BGP表中,不完整源头用?表示

如下示例所示。

BGP路由协议详解 - hkdog - HKdogs zone

2、下一跳属性(NEXT_HOP)

该为公认必选属性,描述了到公布目的地的路径下一跳路由器的IP地址。由BGP NEXT_HOP属性所描述的IP地址不经常是邻居路由器的IP地址,要遵循下面的规则:

如果正在进行路由宣告的路由器和接收的路由器在不同的自治系统中,NEXT_HOP是正在宣告路由器接口的IP地址,如下图所示。

BGP路由协议详解 - hkdog - HKdogs zone

如果正在进行路由宣告的路由器和接收的路由器在同一个AS内,并且更新消息的NLRI指明的目的地也在同一个AS内,那么NEST_HOP就是宣告路由的邻居的IP地址。如下图所示。

BGP路由协议详解 - hkdog - HKdogs zone

如果正在宣告的路由器和接收的路由器是内部对等体,并且更新消息的NLRI指明目的地在不同的AS,则NEXT_HOP就是学习到路由的外部对等实体的IP地址。如下图所示。

BGP路由协议详解 - hkdog - HKdogs zone

从上面图可以知道,在去往192.168.5.0的网段中会出现路径不可达的情况,解决这个问题的方法是保证内部路由器知道与两处自治系统相连的外部网络,可以使用静态路由的办法,但实际的做法是在外部端口上以被动模式运行IGP。但在某种情况下,该方法并不理想。

第二种方法是采用配置选项来做,这个配置选项被称做next-hop-self。

下面具体详述了下一跳的不可达的解决方法:

? 解决下一跳不可达的方法:

n 静态路由

n 在IBGP邻居所处的IGP中宣告

n 将与EBGP直连的网络重分布进IGP

n neighbor x.x.x.x next-hop-self(将指向EBGP邻居更新源的地址变为自己的更新源地址)(RR有的版本会将下一跳改变)

? 一般情况下,在本路由器上将直连的网络引入BGP,下一跳为0.0.0.0,本路由器聚合的路由的下一跳也为0.0.0.0。

? 在本路由器上将从IGP学来的路由引入BGP时,在本路由器上看BGP的转发表,下一跳为IGP路由的下一跳。在多访问网络环境中,用直连接口建立邻居关系,会产生第三方下一跳。

实例说明:如下图所示,

BGP路由协议详解 - hkdog - HKdogs zone

R2与R1是IBGP邻居,R1与R3是EBGP邻居,当用直连接口建邻居时,R2引入BGP的前缀172.16.2.0/24,在R3的bgp转发表里,将显示为R2的多访问网络接口地址(如:10.1.1.2)。产生第三方下一跳的现象。

n 如果R1、R2、R3全部用直连接口建邻居时会产生第三方下一跳。

n 如果R1、 R2用环回口而R1、R3用直连建立邻居时,会产生第三方下一跳。

n 如果R1、R2用直连而R1、R3用回环口时,不会产生第三方下一跳,如下所示配置。

n 如果R1、R2、R3都用环回口建立邻居,则不会产生第三方下一跳,如下配置所示。

R3#show ip bgp

BGP table version is 4, local router ID is 172.16.3.1

Status codes: s suppressed, d damped, h history, * valid, &gt; best, i - internal,

r RIB-failure, S Stale

Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path

*&gt; 172.16.1.0/24 10.1.1.1 0 0 100 i

*&gt; 172.16.2.0/24 10.1.1.2 0 100 i

*&gt; 172.16.3.0/24 0.0.0.0 0 32768 i

R1

router bgp 100

no synchronization

bgp log-neighbor-changes

network 172.16.1.0 mask 255.255.255.0

neighbor 3.3.3.3 remote-as 200

neighbor 3.3.3.3 ebgp-multihop 2

neighbor 3.3.3.3 update-source Loopback1

neighbor 10.1.1.2 remote-as 100

no auto-summary

R3

router bgp 200

no synchronization

bgp log-neighbor-changes

network 172.16.3.0 mask 255.255.255.0

neighbor 1.1.1.1 remote-as 100

neighbor 1.1.1.1 ebgp-multihop 2

neighbor 1.1.1.1 update-source Loopback1

no auto-summary

R3#sh ip bgp

BGP table version is 8, local router ID is 172.16.3.1

Status codes: s suppressed, d damped, h history, * valid, &gt; best, i - internal,

r RIB-failure, S Stale

Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path

*&gt; 172.16.1.0/24 1.1.1.1 0 0 100 i

*&gt; 172.16.2.0/24 1.1.1.1 0 100 i

*&gt; 172.16.3.0/24 0.0.0.0 0 32768 i

R1

router bgp 100

no synchronization

bgp log-neighbor-changes

network 172.16.1.0 mask 255.255.255.0

neighbor 2.2.2.2 remote-as 100

neighbor 2.2.2.2 update-source Loopback1

neighbor 3.3.3.3 remote-as 200

neighbor 3.3.3.3 ebgp-multihop 2

neighbor 3.3.3.3 update-source Loopback1

no auto-summary

R2

router bgp 100

no synchronization

bgp log-neighbor-changes

network 172.16.2.0 mask 255.255.255.0

neighbor 1.1.1.1 remote-as 100

neighbor 1.1.1.1 update-source Loopback1

no auto-summary

R3

router bgp 200

no synchronization

bgp log-neighbor-changes

network 172.16.3.0 mask 255.255.255.0

neighbor 1.1.1.1 remote-as 100

neighbor 1.1.1.1 ebgp-multihop 2

neighbor 1.1.1.1 update-source Loopback1

no auto-summary

R3#sh ip bgp

BGP table version is 10, local router ID is 172.16.3.1

Status codes: s suppressed, d damped, h history, * valid, &gt; best, i - internal,

r RIB-failure, S Stale

Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path

*&gt; 172.16.1.0/24 1.1.1.1 0 0 100 i

*&gt; 172.16.2.0/24 1.1.1.1 0 100 i

*&gt; 172.16.3.0/24 0.0.0.0 0 32768 i

第三方下一跳:收到路由更新的源地址与将要发出去的接口地址在同一网段的时候,路由的下一跳不改变,为原来路由更新的源地址。

? 有时虽然路由的下一跳可达,但会出现访问网络出现环路的现象。

实例说明:

BGP路由协议详解 - hkdog - HKdogs zone

R5、R3,R1、R2为EBGP邻居关系,R1、R3为IBGP邻居关系。那么R5通过BGP传给R3的路由(如10.1.1.0/24),R3通过IBGP传给R1,R1通过EBGP传给R2,这时R2访问10.1.1.0/24这个网络的下一跳就在R1上。这时R2去访问R5的时候,就会产生环路。

则R2(走下一跳)――R1(走物理链路)――R2,这样环路产生了。

解决方法:

? neighbor x.x.x.x next-hop-unchanged (此命令只能用在EBGP多跳的环境下,将路由的下一跳,从自己的更新源地址改变为从IBGP学来的下一跳地址)(这时路由的下一跳在路由表里将改变。)

? neighbor x.x.x.x route-map XX {in|out}然后在route-map里面set ip next-hop来改变前缀的下一跳。(在路由表里下一跳会改变。)

? 策略路由PBR,强制命令R2到10.1.1.0/24的时候走R3。(路由表里下一跳不会改变)

3、本地优先级属性(Local_preference)

本地优先级是公认自由决定的属性,它告诉AS中的路由器,那条路径离开AS的首选路径。本地优先级越高,路径被选中的可能性越大。本地优先级这种属性只能在同一个AS中的路由器之间交换,本是优先级只适用于内部邻居,用于内部对等体之间的Update消息。

本地优先级,可以在本AS和大联盟内传递。越大越优先。影响路由器的出站流量。默认情况下,local-preference为100。

BGP路由协议详解 - hkdog - HKdogs zone

使用下面的命令,如下图所示

BGP路由协议详解 - hkdog - HKdogs zone

是将路由器收到的所有外部BGP路由的默认本地优先级修改为指定值。对IBGP邻居路由器传过来的路由,不会改变它们的local-preference。如果将一个IBGP邻居传来的路由传给另外一个IBGP邻居,那我必须是RR。

实例说明:如下图所示。

BGP路由协议详解 - hkdog - HKdogs zone

未使用本地优先级操作路径,如下所示路由器C的BGP表。

BGP路由协议详解 - hkdog - HKdogs zone

在路由器A 上修改本地优先级,如下所示。

BGP路由协议详解 - hkdog - HKdogs zone

在使用本地优先操纵后的路径,查看路由器C 的BGP表。

BGP路由协议详解 - hkdog - HKdogs zone

4、原子聚合属性

原子聚合是一个公认自决的属性。类型代码为6,它告诉邻接AS,始发路由器对路由进行了聚合。可以使用下面的命令进行配置,

BGP路由协议详解 - hkdog - HKdogs zone

命令只聚合已经包含在BGP表中的网络,这与使用network来通告汇总路由要求不同,后者要求网络必须出 现在IP路由选择表中

配置命令aggregate-address后,一条与汇总路由对应的指向null0的BGP路由将自动被加入到IP路由表中。如下示例所示。

BGP路由协议详解 - hkdog - HKdogs zone

可以使用show ip bgp命令来查看

BGP路由协议详解 - hkdog - HKdogs zone

关于原子聚合的详细内容在以后的章节中详细说明。

5、权重属性

cisco私有的参数。本地有效。缺省条件下,本地始发的路径具有相同的WEIGHT值(即32768),所有其他的路径的weight值为0。越大越优选。影响路由器的出站流量。

权重只影响当前路由器,指定邻居的权重。使用下面命令来修改权重。

BGP路由协议详解 - hkdog - HKdogs zone

可以在neighbor的入向设置。范围0-65535。Neighbor 1.1.1.1 weight 10,从对等体1.1.1.1接收过来的所有路由的weight值都设置为10。

还可以用route-map来设定,可以将特定路由的weight值改变。如下所示:

Neighbor 1.1.1.1 route-map AA in

Route-map AA permit 10

Match ip address prefix AA

Set weight 10

Route-map AA permit 20

6、MED属性

MED属性也被称为度量值,是一种可选非传递属性。承载于EBGP的Update消息中。MED用于向外部邻居指出进入AS的首选路径,当入口有多个时,AS可以使用MED来动态地影响其他AS如何选择进入路径,在BGP中,MED是唯一一个可影响数据如何进入AS的属性。度量值越小,路径被选中的可能性越大。与本地优先级不同,MED是在自主系统之间交换的。MED影响进入AS的数据流,而本地优先级影响离开AS的数据流。如下图所示。

BGP路由协议详解 - hkdog - HKdogs zone

Metric和med:BGP的metric对IBGP同样有效。特指med:从EBGP收到的metric比较的时候才叫MED,MED是借用了BGP的metric在EBGP的时候进行比较。MED(多出口区分)比较EBGP的metric找到最优的出口。

MED相当于IGP路由的metric值,越小越优先。在新的IOS中,将IGP中的路由重分布进BGP,BGP将自动继承IGP路由的metric值。在老的IOS里,如果需要继承需要在重分布时加route-map,如:

Redistribute rip route-map RE

Route-map RE

set metric-type internal

默认情况下,只有在两条路径的第一个(邻近的)AS相同的情况下才会进行比较:任何联盟内的子自治系统都被忽略。任何多跳路径,只有在AS_SEQUENCE中的第一个AS相同的情况下,才会比较MED;任何打头的AS_CONFED_SEQUENCE都将被忽略。如果激活了bgp always-compare-med,那么对于所有路径都比较MED,而不考虑是否来自同一个AS。如果使用了这个选项,就应该在整个AS中都这样做,以避免路由选择环路。

实例说明:如下拓扑图

下面是一个使用策略路由来实现修改MED值的案例。

BGP路由协议详解 - hkdog - HKdogs zone

BGP路由协议详解 - hkdog - HKdogs zone

BGP路由协议详解 - hkdog - HKdogs zone

BGP路由协议详解 - hkdog - HKdogs zone

实例说明:如下图所示,此实例采用了本地优先级与MED属性

BGP路由协议详解 - hkdog - HKdogs zone

BGP路由协议详解 - hkdog - HKdogs zone

BGP路由协议详解 - hkdog - HKdogs zone

7、共同体属性

BGP团体是一组共享某些共同特性的目的地,用于简化路由策略的执行,一个团体并不被限制在一个网络或一个AS之中。是另一种过滤入站或出站BGP路由的方法。

COMMUNITY属性是一组4个8位组的数值,RFC1997规定,前2个8位组表示自治系统,后2个8位组表示出于管理目的而定义的标识符,格式为AA:NN,而思科的默认格式为NN:AA,可以使用命令ip bgpcommunity new-format将思科默认格式改为RFC1997的标准格式。

团体属性是一个可传递属性,类型代码为8。

? no_export――如果接收到的路由携带该数值,不通告到EBGP对等体。如果配置了联盟,则不能将此路由宣告到联盟之外。

? no_advertise――如果接收到的路由携带该数值,不通告给任何对等体,包括EBGP和IBGP。

? internet ――无任何值,所有路由器默认情况下都属于该团体,带此属性的路由在被收到后,应该被通告给所有的其他路由器

? local_as――带有此属性的路由在被收到后,应该被通告给本地AS域内的对等体,但不应该被通告给外部系统中的对等体,包括同一个联盟内其它自治系统中的对等体。

实例说明:如下图所示。

BGP路由协议详解 - hkdog - HKdogs zone

BGP路由协议详解 - hkdog - HKdogs zone

BGP路由协议详解 - hkdog - HKdogs zone

BGP路由协议详解 - hkdog - HKdogs zone

三、BGP路由汇总

BGP的汇总有2种:

A汇总summary

静态路由手工汇总指向null 0,再network引入BGP。

如果明细路由断了,汇总仍然会被引入,且缺乏灵活性。

BGP路由协议详解 - hkdog - HKdogs zone

命令network要求路由选择表中有与指定的前缀或掩码完全匹配的条目,为满足这种要求,可配置一条指向接口null0的静态路由,如果IGP执行汇总,则路由选择中可能已以有这样的静态路由。

命令network告诉BGP通告哪些网络,而不如何通告,仅当描写的网络号出现在IP路由选择中后,BGP才会通告它,如下图所示。

BGP路由协议详解 - hkdog - HKdogs zone

B聚合aggregate

聚合路由在本路由器上生成一条聚合路由,下一跳为0.0.0.0。

BGP路由协议详解 - hkdog - HKdogs zone

aggregate-address 172.16.12.0 255.255.252.0 ?

advertise-map Set condition to advertise attribute

as-set Generate AS set path information

attribute-map Set attributes of aggregate

route-map Set parameters of aggregate

summary-only Filter more specific routes from updates

suppress-map Conditionally filter more specific routes from updates

nlri

<cr>

? Advertise-map

n 只对advertise-map里面匹配的路由进行聚合。当advertise-map里面匹配的明细路由全部消失后,即使聚合路由范围内还有其他明细路由,聚合路由也将消失。当与as-set合用时,只继承advertise-map里面匹配的明细路由的属性。如果用summary-only,会将所有的明细包括没有在advertise-map里面匹配的路由一起抑制。

? As-set

n 聚合路由继承明细路由的属性,包括:as-path、local_preference、community、origin-code。与advertise-map合用,只继承advertise-map里面匹配的明细路由的属性。如果继承了as-path属性,继承的as-path如果没有在大括号{ }中显示,则有几个算几个AS;如果继承AS是在大括号中排列的,那么只算一个AS号。只关心AS的号码,不关心顺序。

? As-path、as-seq(as-path)原子聚合不带任何AS。AS-SET首先是区别于atomic-aggregate,产生了AS的序列,序列中无分先后顺序,这一点也不同于有明确顺序的AS-SEQEUENCE

? Attribute-map和route-map

? 这两个参数一样,可以将聚合路由的属性清除掉(除了as-path属性),添加自己需要添加的属性。Attribute-map 与 as-set的合用时,能否将聚合的路由的属性重置。(OK可以改)

? Summary-only将聚合路由所包括的所有路由都抑制掉,被抑制的路由在bgp的转发表里,显示为s,代表suppress的意思。发送更新时,只发送聚合路由。可以与

? neighbor 1.1.1.1 unsuppress-map XX合用,对特定邻居漏过特定的明细路由。

? Suppress-map,将suppress-map里面匹配的路由抑制掉,被抑制的路由在bgp的转发表里,显示为s,代表suppress的意思。发送更新时,只发送聚合路由和没有被抑制的明细路由。可以与

? neighbor 1.1.1.1 unsuppress-map XX合用,对特定邻居漏过特定的明细路由。

四、BGP路由决策

BGP的RIB包括三部分:

? Adj-RIBs-In:存储了从对等体学习到的路由理新中未经处理的路由信息,这些包含在Adj-RIBs-In中的路由被认为是可行路由。

? Loc-RIB:包含了BGP发言者对Adj-RIBs-In中的路由应用本地策略之后选定的路由

? Adj-RIBs-Out:包含了BGP发言者向对等体宣告路由。

BGP有三个部分既可以是3个不同的数据库,也可以是利用指针来区分不同部分的单一数据库。BGP路由决策通过对Adj-RIBs-In中的路由应用本地路由策略,且向Loc-RIB 和Adj-RIBs-Out中输入选定或修改的路由进行路由选择。其有三个阶段。

第一阶段:计算每条可行路由的优先级

第二阶段:从所有可用路由中为特定目的地选出最佳路由,并将其安装到Loc-RIB中。

第三阶段:将相应的路由加入到Adj-RIBs-Out中,以便向对等体进行宣告。

以下为BGP选路原则的13条:

(1)weight

cisco私有的参数。本地有效。缺省条件下,本地始发的路径具有相同的WEIGHT值(即32768),所有其他的路径的weight值为0。越大越优选。影响路由器的出站流量。

(2)local-preference

本地优先级,可以在本AS和大联盟内传递。越大越优先。影响路由器的出站流量。默认情况下,local-preference为100。

(3)本地起源

路由器本地始发的路径优先。在BGP的转发表里显示为0.0.0.0。依次降低的优先级顺序是:default-originate(针对每个邻居配置)、default-informaiton-originate(针对每种地址簇配置)、network、redistribute、aggregate-address。

(4)as-path

评估as-path的长度,as-path列表最短的路径优先。

聚合后继承明细路由的属性,在大括号里面的as-path在计算长度时,只算一个。在联盟内小括号里面的AS号,在选路时,不计算到as-path长度里面。

(5)起源代码

评估路由的origin code属性,有3个i<e&lt;?。i代表用network将IGP引入BGP的,或者是聚合等路由,e代表EGP,?代表重分布进BGP的路由。i为0,e为1,?为3。越小越优。

(6)MED

metric传递不能传出AS。例外:始发路由器可以metric传给邻居,可以是IBGP/EBGP,但是EBGP再传不出去。

MED相当于IGP路由的metric值,越小越优先。

(7)EBGP优于IBGP

这里EBGP>联盟内的EBGP&gt;IBGP。

(8)最近的IGP邻居

这里是指peer的更新源在我的路由表里显示,哪个最近哪个最优。

OSPF是否考虑O、OIA、OE1、OE2?只看cost不看O/OIA/OE。

(9)如果配置了maximum-path[ibgp]n,如果存在多条等价的路径,会插入多条路径。

BGP默认maximum-path=1,只能有一条最优路径,但可以通过命令来改变,如果没有IBGP参数,默认只能做EBGP的负载均衡。做负载均衡还有一个条件,就是上面的8条都比不出哪条最优的情况下,才有可能出现负载均衡。

做了BGP的负载均衡后,在BGP的转发表里还是一个最优,但在路由表里可以出现2个下一跳。

(10)最老的

与本端最早建立邻居关系的peer,被优选。因为它最稳定。但一般不考虑,会跳过这个继续往下选。

如果以下任一条件为真,这一步将会被忽略:

启用了bgp bestpath compare-routerid,多条路径具有相同的router-id,因为这些路由都是从同一台路由器接收过来的;当前没有最佳路径。缺乏当前最佳路径的例子发生在正在通告最佳路径的邻居失效的时候。

(11)最低的ROUTER-ID

BGP优选来自具有最低的路由器ID的BGP路由器的路由。Router-id是路由器上最高的IP地址,并且优选环回口。也可以通过bgp router-id命令静态的设定路由器ID。如果路径包含RR属性,那么在路径选择过程中,就用originator-id来替代路由器ID。

(12)多跳路径的始发路由器ID相同,那么选择CLUSTER_LIST长度短的,因为每经过一个RR,cluster-list会加上这个RR的router-id

如果多条路径的始发router-id相同,那么BGP将优选cluster-list长度最短的路径。这种情况仅仅出现在BGP RR的环境下。

(13)BGP优选来自于最低的邻居地址的路径。是BGP的neighbor配置中的那个地址,如果是环回口,则看环回口地址的高低。

BGP优选来自于最低的邻居地址的路径。这是BGP的neighbor配置中所使用的IP地址,并且它对应于与本地路由器建立TCP连接的远端对等体。

五、路由翻动(route flaps)和路由惩罚(route dampening)

路由翻动产生的原因有很多种比如:链路不稳定、路由器接口故障、ISP工程施工、管理员错误配置和错误故障检查等等都能造成路由翻动,由于路由翻动会造成每台路由器重新计算路由,从而消耗了大量的网络带宽和路由器的CPU资源。

BGP邻居的flaping

BGP路由协议详解 - hkdog - HKdogs zone

当R1与R2两台路由器运行IGP协议,并且建立EBGP的邻居关系,用环回口建立邻居关系。这时假如R1、R2将他们的更新源通告进了BGP,然后通过BGP传递给对方,这时由于从EBGP学到的路由的AD为20,大于IGP的默认AD,这时会产生邻居的flaping现象。

这时show ip bgp summary可以看到每经过60秒BGP table version is 1, main routing table version 1会改变一次。BGP转发表里变化了多少次。

用debug ip bgp、debug ip bgp update来查看BGP的flaping。

解决方法:

(1)EBGP建邻居时不要将环回口引入BGP。

(2)Network + backdoor

BGP路由下一跳的flaping

BGP路由协议详解 - hkdog - HKdogs zone

R1、R2、R3因为属于同一个AS,所以运行一个IGP,R2-R4,R3-R5之间的链路并没有通告进IGP中。R1、R2、R3 IBGP对等体关系,R3在指R1时,打了neighbor 1.1.1.1 next-hop-self;R4、R2 ,R5、R3 ,R4、R5为EBGP对等体关系,它们都拿直连接口建立邻居关系。

这时R4将它的环回口4.4.4.0/24和R2-R4的直连网络24.0.0.0/24引入BGP,这时在R1上就会产生路由下一跳flaping的现象。这时show ip bgp summary可以看到每经过60秒BGP table version is 1, main routing table version 1会改变一次。

解决方法:

(1)静态路由(R1上静态路由)

(2)在IBGP邻居所处的IGP中宣告

(3)将与EBGP直连的网络重分布进IGP

(4)neighbor x.x.x.x next-hop-self(R2指R1时输入)

路由惩罚(route dampening)由RFC2439描述,它主要由以下三个目的:

? 提供了一种机制,以减少由于不稳定路由引起的路由器处理负载

? 防止持续的路由抖动

? 增强了路由的稳定性,但不牺牲表现良好的(well-behaved)路由的收敛时间。

ROUTER BG 1

BG DAMP 15 750 2000 60 ---- 针对所有的路由。

BG DAMP ROUTE-MAP XXX

ROUTE-MAP XXX

MATIP ADD PREFIS XX

SET DAM 15 750 2000 60 ---DEFAULT

IP PREFIX XX PERMIT 1.1.1.0/24

SH IP BG 1.1.1.0

SH IP BG DAM PARA

Dampening为每一条前缀维护了一个路由抖动的历史记录。Dampening算法包含以下几个参数:

? 历史记录�D�D�D�D当一条路由flaping后,改路由就会被分配一个惩罚值,并且它的惩罚状态被设置为history。

? 惩罚值(penalty)�D�D�D�D路由每flaping一次,这个惩罚值就会增加。默认的路由flaping惩罚值为1000。如果只有路由属性发生了变化,那么惩罚值为500。这个值是硬件编码的。

? 抑制门限(suppress limit)�D�D�D�D如果惩罚值超过了抑制门限,改路由将被惩罚或dampen。路由状态将由history转变为damp状态。默认值的抑制门限是2000,它可以被设置。

? 惩罚状态(damp state)�D�D�D�D当路由处于惩罚状态时,路由器在最佳路径选择中将不考虑这条路径,因此也不会把这条前缀通告给它的对等体。

? 半衰期(half life)�D�D�D�D在一半的生命周期的时间内,路由的惩罚值将被减少,半衰期的缺省值是15分钟。路由的惩罚值每5秒钟减少一次。半衰期的值可以被设置。

? 重用门限(reuse limit)�D�D�D�D路由的惩罚值不断的递减。当惩罚值降到重用门限以下时,改路由将不再被抑制。缺省的重用门限为750。路由器每10秒钟检查一次那些不需要被抑制的前缀。重用门限时可以被配置的。当惩罚值达到了重用门限的一半时,这条前缀的历史记录(history)将被清除,以便更有效率的使用内存。

? 最大抑制门限/最大抑制时间�D�D�D�D如果路由在短时间内表现出极端的不稳定性,然后又稳定下来,那么累计的惩罚值可能会导致这条路由在过长的时间里一直处于惩罚状态。这就是设置最大抑制门限的基本目的。如果路由表现出连续的不稳定性,那么惩罚值就停留在它的上限上,使得路由保持在惩罚状态。最大抑制门限是用公式计算出来的。最大抑制时间为一条路由停留在惩罚状态的最长时间。默认为60分钟(半衰期的4倍)可以配置。

n 最大抑制门限=重用门限×2(最大抑制时间÷半衰期)

n 由于最大抑制门限为公式算出来的,所以有可能最大抑制门限≤抑制门限,当这种情况发生时,dampening的设置是没有效果的。如重用门限=750,抑制门限=3000,半衰期=30分钟,最大抑制时间=60分钟。按照这样的配置,算出来的最大抑制门限为3000,

n 与抑制门限一样,因为必须超过抑制门限,才能对路由进行dampening,所以这时dampening的设置没有效果。

BGP路由协议详解 - hkdog - HKdogs zone

BGP的dampening仅仅影响EBGP的路由。Dampening是基于每条路径的路由而操作的。如果一条前缀具有两条路径,并且其中一条被惩罚了,那么另一条前缀仍然是可用的,可以通告给BGP对等体。

命令:

bgp dampening [route-map XX] [{Half-life reuse-limit suppress-limit Maximum-time }]

如果挂了route-map,那么就在route-map里面匹配特定EBGP路由,来设置dampening值。

检查命令:

show ip protocol

sh ip bgp dampening ?

dampened-paths 只显示(清除)被抑制的路由。

flap-statistics 显示(清除)所有出现摆动的路由以及该路由出现摆动的次数。

parameters Display details of configured dampening parameters

show ip bgp neighbors 1.1.1.1 dampened-routes

show ip bgp neighbors 1.1.1.1 flap-statistics

六、路由反射器

由于IBGP的水平分割问题,所以IBGP需要Full Mesh。由于整个IBGP full mesh的话,需要建的session数为n*(n-1)/2。不具有扩展性。所以产生两种解决方法,路由反射器是其中一种,而另一种则是联邦。

路由反射器是被配置为允许它把通过IBGP所获悉的路由通告到其他IBGP对等体的路由器,路由器反射器与其他路由器有部分IBGP对等关系,这些路由器被称为客户。客户间的对等是不需要的,因为路由反射器将在客户间传递通告。 如下图所示。

BGP路由协议详解 - hkdog - HKdogs zone

其优点:减少AS内BGP邻居关系的数量,从而减少了TCP连接数;在AS内可以有多个路由反射器,即是为了冗余也是为了分成组,以进一步减少所需IBGP会话的数量。路由反射器的路由器可以与非路由反射器的路由器共存,所以配置更简单。

RFC1966中定义了3条RR用来决定要宣告哪条路由的规则,具体使用时取决于路由是如何学习到的。

? 如果路由学习自非客户IBGP对等体,则仅反射给客户路由器。

? 如果路由学习自某客户,则反射给所有非客户和客户路由器(发起该路由的客户除外)。

? 如果路由学习自EBGP对等体,则反射给所有非客户和客户路由器

路由反射器的客户并不知道自己是客户。客户和非客户经过路由反射器反射的路由更新将会带上cluster-list和originator,可用于IBGP防环。Cluster-id默认为路由反射器自己的router-id,可以通过命令bgp cluster-id 1.1.1.1来修改,cluster-id为32位的值,可以写成点分十进制,也可以写成十进制数;originator为IBGP内起源路由器的router-id。路由反射器是IBGP的特性,出了IBGP后,路由反射器所有的特性消失(即路由携带的cluster-list和originator全部消失)。

neighbor 1.1.1.1 route-reflector-client

可以通过这条命令来将IBGP的peer 1.1.1.1变为自己的客户。建议对每个IBGP邻居都打上。

当路由反射器的客户full mesh时,可以用no bgp client-to-client reflection禁止客户到客户的路由反射。可以减少路由更新。

如下图为路由反射器的基本配置。

BGP路由协议详解 - hkdog - HKdogs zone

BGP路由协议详解 - hkdog - HKdogs zone

七、BGP联邦

由于IBGP的水平分割问题,所以IBGP需要full mesh。由于整个IBGP full mesh的话,需要建的session数为n*(n-1)/2。不具有扩展性。所以产生两种解决方法,联邦是其中一种。

联邦既有EBGP的特性,又有IBGP的特性。

联盟是另一种控制大量IBGP对等体的方法,它就是一个被细分为一组子自治系统(称为成员自治系统)的AS。如下图所示。

BGP路由协议详解 - hkdog - HKdogs zone

联盟增加了两种类型的AS_PATH属性

AS_CONFED_SEQUENCE:一个去往特定目的地所经路径上的有序AS号列表,其用法与AS_SEQUENCE完全一样,区别在于该列表中的AS号属于本地联盟中的自治系统。

AS_CONFED_SET:一个去往特定目的地所经路径上的无序AS号列表,其用法与AS_SET完全一样,区别在于该列表中的AS号属于本地联盟中的自治系统。

由于AS_PATH发生被用于成员自治系统之间,因而保留了环路预防功能。将Update消息发送给联盟之外的对等体时,将从AS_PATH属性中剥离AS_CONFED_SEQUENCE和AS_CONFED_SET信息,而将联盟ID附加到AS_PATH中。

Local_preference和MED可以在联邦内传递。联盟内的小AS号,在as-path里显示在小括号里,在as-path计算长度时,不被考虑。下一跳在联邦内传递不会改变。

八、配置样例1

下面的示例中涉及到BGP的基本配置,涉及到一些基本的知识点,如EBGP多跳、更新源使用环回接口、路由映射发布团体属性等,如下图所示。

BGP路由协议详解 - hkdog - HKdogs zone

转:http://xuanbo.blog.51cto.com/blog/499334/465596

你可能感兴趣的:(BGP路由协议详解)