ccie理论bgp

ccie理论bgp
ccie理论bgp

BGP路由选择协议

BGP是一种路径矢量路由协议,用于传输自治系统间的路由信息,BGP在启动的时候传播整张路由表,以后只传播网络变化的部分触发更新,它采用TCP连接传送信息,端口号为179,在Internet上,BGP需要通告的路由数目极大,由于TCP提供了可靠的传送机制,同时TCP使用滑动窗口机制,使得BGP可以不断地发送分组,而无需像OSPF或EIGRP那样停止发送并等待确认

使用BGP一般有如下情况:

1. 一个AS允许包穿越它,到达其他的AS

2. 一个AS连接多个AS

3. 必须对数据流进入和离开AS进行控制

不使用BGP一般有如下情况:

1. AS只有一个出口

2. AS的所有出口均为1个ISP

3. 路由性能不高,内存较小,CPU较慢,带宽不大

对于如右图的多ISP连接,需要注意:

1.必须劝说最初供应商通告将他的CIDR块打一个洞,通告一条更精细的路由

2.必须劝说第二个供应商公布属于不同供应商的地址空间

3.两个供应商必须在用户公布这块地址上愿意紧密合作

4.如果用户地址空间小于/19一些骨干ISP不会接受此路由

注:一般前缀小于/19的地址称为全球路由可达地址,因为骨干ISP通常为了控制骨干级路由表大小,仅接受/19或更小的前缀。但由于用户的抱怨,此限制逐渐放松

BGP简介

BGP是路径矢量协议,它使用一个AS号列表,数据包必须通过这些AS才能到达目的,同时对产生的AS-path 做一定的策略。AS-Path对于路由环路非常容易检测到,如果路由器接受到一条含有本地AS号的AS-path,说明出现环路。 BGP没有给出每个AS域内的拓扑结构,因此BGP只能看到AS树,而IGP只能看到AS域内拓扑结构.

当某个特殊目的网络有并列的,等开销的路径时,Cisco缺省执行EBGP只选择一条路径,但可以使用maximum-paths改变并行路径缺省的最大数目,但仅对EBGP有效。

BGP消息类型

BGP具有4种消息类型

1. Open

2. Keepalive

3. Update

4. Notification

Open Message

TCP对话建立以后,两个邻居都要发送一个Open消息,每个邻居都用该消息来标示自己,并规定自己的BGP 运行参数

BGP version

它明确了发起者正在运行的BGP版本号(2,3,4),可以通过neighbor version修改,缺省版本号为4。如果版本号不相同,路由器将自动降低版本号重发Open消息,直到版本一致

AS number

发起会话路由器的AS号,用于确认EBGP或者IBGP会话

Hold time

路由器必须收到一个keepalive或者更新消息之前允许经过的最大秒数。Holdtime必须是0(在这种情况下,必须是没有发送Keepalive)或者至少3s。Cisco默认的holdtime为180s,如果两个邻居间holdtime不一致,

选较短的那个做为两者可接受的时间

BGP router-ID

选取方式和OSPF相同,使用数值最大的loopback口地址,没有loopback则使用物理接口上数值最大的地址Optional parameters 用于一些可选功能的支持.例如鉴别,多协议支持及路由刷新等

Keepalive Message

如果路由器接受了他在邻居的Open消息中的参数,它就会发送一个应答的Keepalive消息。默认情况Keepalive间隔 60s,或者是达成一致的保持时间的1/3

Update Message

Update message用来公布可用的路由,撤销的路由或者两者兼顾

Network Layer Reachability Information (NLRI) 用来公布IP地址前缀和前缀长度的字节组,例如

<19,198.24.160.0>

Path Attributes 该属性为BGP提供了选择最短路径,检查到路由环路以及决定路由策略的信息

Withdrawn Routes 用来描述已经变成不可达并正从业务中撤销的目的地址字节组(长度和前缀) 注:虽然NLRI字段可以包含多个前缀,但每一个更新消息只描述一条BGP路由(因为路径属性只描述一条路径,但该路径可能会到达多个目的地)

Notification Message

当检测到差错的时候就会发送Notification消息,通常会导致BGP连接终止,例如使用Notification消息进行BGP版本的协商

BGP的状态:

Idle State

a) BGP通常以Idle State开始(此时拒绝接收所有入连接)。当一个开始事件出现,BGP过程初始化所有BGP 资源,打开重试连接(ConnectRetry)计时器,初始化到邻居的TCP连接,接听来自邻居的TCP初始化消息并将它的状态转到Connect状态.

b) 开始事件是由一个操作者配置一个BGP过程,或者重置一个已经存在的过程或者路由器软件重置BGP过程引起

c) 一个差错的出现会将BGP过程的状态转为Idle.路由器可能会试图发起另外一个开始事件.为了防止在持续差错条件下导致的摆动,在第一次转回到空闲状态后,路由器会自动开启

重试连接计时器,当计时器终止后,路由器就会放弃重新开始BGP.重试计时器第一次的时间为60s,下一次为前一次的2倍120s,成指数形式增加

Connect State 此状态下BGP过程会等到TCP连接完成以后再决定后续的动作.

1. 如果TCP连接建立成功,BGP连接将ConnectRetry清零,完成初始化并给邻居发送一个Open消息,转移到Open状态

2. 如果TCP连接建立失败,BGP继续监听由邻居发起的连接,重置ConnectRetry计时器并转移到Active状态

3. 如果在连接状态下,ConnectRetry超时,计时器将重新开始,并再一次试图与邻居建立TCP连接,BGP保持Connect状态,此时如果有任何其他输入事件,转入Idle状态

Active State 在此状态,BGP过程试图与邻居建立一个TCP连接

1. 如果连接成功,BGP过程将ConnectRetry计时器清零,完成初始化,给邻居发送一个Open消息并转移到发送Open消息状态,Hold计时器设置为4mins

2. 如果在激活状态,ConnectRelay计时器超时,将回到ConnectState并且重置ConnectRelay计时器.也发起一个到对等的TCP连接并继续监听来自对等体的连接.

3. 如果邻居试图与一个未知IP建立TCP会话,同时ConnectRelay计时器重置,连接被拒绝并保持在Active状

4. 任何一个事件(除开始事件)都回导致状态转向idle

Open send State 在此状态下,已经发送了Open消息,BGP等待邻居发来的Open消息,

1. 当收到一个Open消息,如果发现差错,将给邻居发一个Notification消息并转入Idle状态

2. 如果收到的Open消息没有差错,将给邻居发送一个Keepalive消息并将Keepalive计时器清零,此时协商一个较短的holdtime,如果为0,则没有启动Hold和keepalive计时器,根据AS号选择IBGP或者EBGP,同时将状态转移到OpenConfirm状态

3. 如果收到一个TCP断开消息,本地断开BGP连接,重置ConnectRetry计时器,并转入Active状态

Open Confirm State 此状态下BGP会等待一个Keepalive消息或者Notification消息

1. 如果收到一个Keepalive消息,转移到Establish状态

2. 如果收到一个Notification消息,转入Idle状态,并断开TCP连接

3. 如果Hold计时器超时,检测到一个差错或出现stop事件,BGP将给邻居发送一个Notification并断开连接,转入Idle状态

Establish State 此状态下,BGP对等体间的连接已经完全建立,可以交换Update Keepalive和

Notification消息,如果收到Notification自动转入Idle,并中断连接

路径属性

BGP路径属性分为4类

1. Well-known mandatory 公认必遵–所有的BGP路由器必须识别

(Update消息必须包含该属性)

2. Well-known discretionary 公认可遵–所有BGP路由器都能识别,但不是一定需要

(Update消息可以不包含该属性或者该属性任选)

3. Optional transitive 可选传递–不是所有的BGP路由器都能识别,但所有BGP

路由器都能传递它 (此属性即使BGP路由器不接受也可以传递)

4. Optional nontransitive 可选非传递–不是所有的BGP路由器都能识别,不能

识别BGP路由器丢弃它 (此属性如果BGP路由器不接受则立即丢弃此消息,不再传递)

ORIGIN 属于公认必选属性,明确了路由更新的来源,用于判断路由可信度,当BGP有多条路由来源时,

路由器会将ORIGIN做为路由决策的参考来源有如下几类:

IGP---从AS内部学到,ORIGIN为0

EGP---NLRI从EGP学到,ORIGIN为1

Incomplete---NLRI通过其他手段获得,ORIGIN为3

一般来说具有较低ORIGIN值得前缀被优先选取, IGP>BGP>重分布例如通过重分布进入BGP,ORIGIN 属性为3,通过Network命令注入其ORIGIN为0

AS_PATH 描述一个路由传递过程中经过那一些AS(不算自己,从离自己最近的AS开始,以目的网段的AS 结束),为了避免AS环路,如果从外部收到一条包含自己AS的路由,就说明有环路,此时BGP将丢弃该路由通常一条AS_PATH含有多个同一AS号,用于加长AS_PATH,提供策略选路,如下图

Next_Hop 该属性描述了到公布目的地址的路径的下一跳路由器的IP地址

1.如果正在进行路由通告的路由器和接收的路由器在不同的AS中,Next_Hop为正在宣告的路由器接口的ip

2.如果正在宣告的路由器和接收的路由器在同一个AS内,并且更新消息中NLRI目的地也在同一个AS中,则next_hop为一宣告的路由的邻居的ip

3.如果正在宣告的路由器和接收的路由器是内部对等体,并且更新消息的NLRI指向不同AS,则Next_hop 为学习到路由的外部对等实体的ip

Local_Pref 仅用在本地AS,不会传到其他AS,具有较高Local_pref的路由将被优先考虑,默认值100 如下图,优先考虑ISP1的路由

Multi_Exit_Disc(MED) Local_Pref仅影响离开AS的业务量,而MED用于影响流入AS的业务量,它允许一个AS将其首选入口通知给另一个AS,具有最低MED值的路由作为首选

Weight Cisco专有,对于离开AS的报文,从多条路径中选择哪一条。它是不传递的。缺省下从对等体学到的所有路由器的权重值是0,由本地路由器产生的所有路由的权重值是32768选路时优先选用权值最高的路径

Comunity 使可以向一组源路由使用相同的策略,即一个目的地作为一些目的地团体中的一个成员,这些目的地共享一个或多个共同特性。它有4个字节–前面两个字节的AS号,后面两个字节的管理上定义表示符,而Cisco正好反过来,用ip bgpcommuity new-format改过来当对团体路由进行聚合时,聚合路由继承了所有路由的全部团体属性 NO_EXPORT的团体属性,携带该属性的路由允许在邻居AS内公布但不允许邻居AS把路由公布其他AS NONE属性删除现存的团体属性 NO_ADVERTISE属性指不在IBGP邻居间传递带有该属性的路由 DELETE属性用于只删除匹配特定团体列表的属性

ORIGINATOR_ID 由路由反射器(RR)使用,它是有路由发起者产生的一个32比特的值,该值是本地AS里路由发起者的RID,如果路由器发起者从该属性值中看到了自己的RID,就说明有环路,该路由忽略

Cluster_LIST 由路由反射器使用,它是路由经过反射器簇ID的一个序号。如果路由反射器在该属性值中发现自己的本地簇ID,就说明有环路,忽略掉。如果一个簇里不止一个RR,要在进程下用bgp cluster-id手工指定簇ID,因为默认RR将自己的RID当成cluster-id

AS_SET

由于聚合时AS_PATH中数据丢失,导致产生环路的潜在因素增加,因此加入AS_SET字段,通告

汇聚时包含的AS号AS_PATH替代了ATOMIC_AGGREGATE的功能,但也有其缺点:如聚合的网络出现故障,AS_SET的改变将通告到聚合点以外

BGP选路规则

BGP路由信息库(RIB)包括

Adj-RIBs-In: 储存未经处理的路由信息,来自对等接收到的更新消息, 所包含的路由是可用的

Loc-RIB: 包含的路由是运行BGP的路由器通过对Adj-RIBs-In中的路由使用他的本地路由策略而选择的路由Adj-RIBs-Out: 包含运行BGP的路由器向其对等公布的路由

3个数据库间的处理方法如下

1. 为每一条可用路由计算优先级,并对BGP update消息中包含的路由信息变更作出处理

2. 将最优路由放入Loc-RIB

3. 将适合的路由放入Adj-RIBs-out(调用仅在上一步完成后)

BGP路径选择顺序:如果路径不可达或者同步开启后,路径不同步,则该路径不参与选路

1,Weight---权重(越大越优先)

2,Local_Pref---本地优先(越大越优先)

3,所传递路由的本地起源优先,即下一跳是0.0.0.0(在BGP表中,当前路由器通告的路由的下一跳为0.0.0.0) 4,AS-Path(越短越优先)in out

5,起源(优先:IGP > EGP > Incomplete)in out

6,MED(越小越优先)可选非传递,只能通告一个AS 影响in out

默认情况,不比较来自不同as的med 可加命令:Bgp always compare

Bgp bestpath med missing asworst 默认值很大

7,首选EBGP的路由,在联盟EBGP和IBGP中首选联盟EBGP路由

8,BGP优先选择到BGP下一跳的IGP度量最低的路径不比较AD(无效)

8.5,BGP的邻居cost,有cost的比没有的优先都有的话,ID小的优,cost小的优

9,如果有多条来自相同相邻AS的路由并通过Maximum-paths使多条路径可用,则将所有开销相同的路由加入Loc-RIB

10,BGP优先选择最老的路径,降低滚翻的影响

11,BGP邻居的RID(越小越优先)

12,如果多条路径始发路由器ID或路由器ID相同,那么优选Cluster-List最短的路径

13,选择邻居ip地址最小的路由

BGP路由惩罚

路由抑制可以阻止公布不稳定的路由,它为每条路由分配一个动态的度量数字用来反映稳定程度,当一条路由出现摆动,就给他分配一个惩罚值,摆动得越多,惩罚值越大。当一段时间不摆动,惩罚值降低,在一个半衰期后,降到原来的一半。如果惩罚值超过抑制上限,该路由就被抑制,只有当一个半衰期后惩罚值降低到重新使用界限时,才重新使用。

缺省下,

惩罚值–每次摆动1000 抑制界限– 2000 重新使用界限– 750 半衰期– 15分钟最大抑制时间– 60分钟,或者半衰期的4倍

iBGP和IGP的同步

在某些情况下将IGBP当IGP使用,但是每个IBGP路由器必须与其它每一个IBGP路由器建立对等,即必须保证AS内IBGP全互连,全互连可以防止AS内产生BGP环路,同时保证BGP路由上的所有路由器都知道如何转发数据包到目的地

IBGP和IGP同步规则一条从IBGP邻居学习到的路由在进入IGP路由表或者公布给一个BGP对端之前,通过IGP必须知道该路由. 同步可以防止没有足够信息的IGP造成路由黑洞.但也会带来很多缺陷,为了使IBGP工作正常,可以采用2种方法:

1.将外部路由重分发到IGP中从而保证IGP和BGP同步,但对于IGP路由器一般无法承受巨大的internet 路由条目,在几个大型的中断事故中,多数是BGP无意中被分发到了OSPF或者IS-IS中

2.IBGP为逻辑上全网状连接,且关闭同步功能,所有路由器通过BGP知道外部路由,且不用通知IGP就能将路由加入到路由表中,但如果一个AS中有多个IBGP路由器,一个路由器将于其他每个路由器建立对等,十分耗时,故常采用联盟或者路由反射器来控制IBGP逻辑上的全互连.

同步是一个较老的BGP特性,在新版的IOS中,同步默认被关闭下图为关闭同步前后的区别,前者为同步打开,后者为同步关闭

管理大型网络中的BGP

在一个较大规模的AS中试图生成全互连的IBGP对等关系是一个规模庞大的工作,同时对于BGP对等关系的管理也十分复杂。BGP设计了如下4种方式对对等关系进行管理

对等体组(Peer Group) 在大型互联网络中,一个路由器的策略会应用到多个对等关系,在Cisco路由器中可

以使用一个名字和一系列的路由策略来定义一个对等组(Peer Groups),任何对等策略对整个group生效,对等组提高了路由器性能,只需访问一次策略数据库,生成一个Update消息,并将副本发给所有的对等体即可。

团体属性(Communities) 相对于PeerGroups是对一组路由器使用策略,而团体(Communities)是对一组路由是用策略,团体可设置成为一个公用的值或者管理员定义的特有团体,一条路由可以属于多个团体,路由聚合可以继承所有路由的全部团体属性

路由反射器(Route reflectors) 在大型的AS中,全互连带来极大的工作量,通过路由反射器(RR)可以建立一种C/S结构,如一个含有N个路由器的AS内,全互连将使用对等会话数目为(N-2)N/2,如果选取一个RR,则对等会话数目将降为N-1。对一个C/S结构称其为一个RR-Cluster。RR公布路由的规则:1,如果路由是从非客户的IBGP对等学习到的,只将它反射给客户2,如果路由是从客户处学习到的,将它反射给除了发起该路由的客户外所有的客户以及非客户3,如果路由是从EBGP邻居学来的,将它反射给所有的客户和非客户将一个路由器配置成路由反射器(RR),用neigbhor route-reflect-client把自己配成反射器,由该命令所定义的IBGP邻居路由器当成客户机,这些客户机只与RR建立对等关系。RR不能改动它从客户处收到的路由的属性。在一个AS内可以做RR冗余,因为客户并不知道自己是客户,所有一个RR可以是另一个路由反射器的客户。只需要RR支持路由反射,客户不需要支持

RR使用了2个BGP路径属性:ORIGINATOR_ID 由路由反射器(RR)使用,它是有路由发起者产生的一个32比特的值,该值是本地AS里路由发起者的RID,如果路由器发起者从该属性值中看到了自己的RID,就说明有环路,该路由忽略

Cluster_LIST 由路由反射器使用,它是路由经过反射器簇ID的一个序号。如果路由反射器在该属性值中发现自己的本地簇ID,就说明有环路,忽略掉。如果一个簇里不止一个RR,要在进程下用bgp cluster-id手工指定簇ID,因为默认RR将自己的RID当成cluster-id

联盟属性(Confederations)

联盟(confederations)是一组分成子自治系统组的AS如上图

1. 每一个联盟分配一个联盟ID,对于外端而言,此联盟ID代表的是整个联盟的AS号.联盟其实质是对自治系统的再次细分.

2. AS_PATH中加入了AS_CONFED_SEQUENCE和AS_CONFED_SET用法和AS_SEQUENCE及AS_SET完全相同,

3. 在联盟环境下,所有路由器必须支持联盟

4. 用预留AS(64512~65535)作为联盟中的AS编号是一中通用做法

5. 选路优先级:联盟的外部EBGP〉AS成员的EBGP〉IBGP

6. 联盟相对于标准的AS,Next_hops MED可以不加修改的公布给联盟中的其他AS成员的EBGP对端,而且可以发送Local_Pref属性

7. 大型系统中,联盟和RR同时使用可以更好的控制IBGP对等关系

正则表达式AS-PATH过滤采用正则表达式,正则表达式解释如下:

1. 匹配行开始和结束:Ip as-path access-list 20 permit 850 将匹配(850) (850,23,33) (33,27,7850,33)这样的路经如果仅匹配850,则可以使用ip as-path access-list 20 permit ^850$ 仅匹配一个空的AS_PATH ip as-path access-list 20 permit ^$

2. 匹配字符集和Ip as-path access-list 22 permit ^85[0123459]$ ^85[^6-8]$

将匹配含有850~855 and 859的AS_PATH

3. 否定:匹配出字符集和外的其他任何字符Ip as-path access-list 23 permit ^85[ ^0-5]$ 将匹配含有856~859的AS_PATH

4. 通配符Ip as-path access-list 24 permit ^8

5.$ 将匹配含有850~859的AS_PATH 由于.支持空格符,所以也匹配85

5. 替代,即或操作Ip as-path access-list 24 permit ^(851|852)$ 将匹配含有851或者852的AS_PATH

6. 选择字符,匹配一个可能存在或者不存在的字符Ip as-path access-list 24 permit ^(850)?$

将匹配单一AS号850或者空列表,如果表达式为850? 匹配85 or 850

7. 重复,匹配多个字符Ip as-path access-list 24 permit ^(850)*$ 将匹配重复多次的AS号850或者空列表,匹配(),(850),(850,850),(850,850,850) Ip as-path access-list 24 permit ^(850)+$ 将匹配至少包含一个AS号为850

8. 分界线,描述多个字Ip as-path access-list 24 permit ^5610_148_3_2$ 只有as_path(5610_148_3_2)才能被匹配

Ip as-path access-list 24 permit -5610_148_3_2$ 包含as_path(5610_148_3_2)都能被匹配

Ip as-path access-list 24 permit ^(550)+_[12|34]?_1805_.* 即匹配as_path在多个550后,选择12或者34 接下来必须要有1805

元字符特殊字符匹配内容

. 任何单一字符,包括空格

[] 在方括号中罗列的任何字符

[^] 除了在方括号中所罗列字符外的任何字符

(^必须放在字符列表之前)

- (连字符)在由连字符所分配的两个字符

之间的任意字符

? 字符或模式出现0次或1次

* 字符或模式出现0次或多次

+ 字符或模式出现1次或多次

^ 一行的开始

$ 一行的结束

| 由元字符特殊字符分隔的字之一

_ (下划线)一个逗号,行的开始,行的结

束或空格

AS-PATH过滤Neighbor distribute-list可以对NLRI处理,as_path过滤则是对AS的处理。

Neighbor 1.1.1.1 filter-list 1 out

!

Ip as-path access-list 1 permit ^$

Permit .* 匹配全部

Route Reflectors 路由反射器用于减小IBGP对等连接数量的一种方法在成为RR的路由器上加入neighbor 10.33.255.2 route-reflector-client RR公布路由的规则:

1,如果路由是从非客户的IBGP对等学习到的,只将它反射给客户

2,如果路由是从客户处学习到的,将它反射给除了发起该路由的客户外所有的客户以及非客户

3,如果路由是从EBGP邻居学来的,将它反射给所有的客户和非客户如果路由反射器在该属性值中发现自己的本地簇ID,就说明有环路,忽略掉。如果一个簇里不止一个RR,要在进程下用bgp cluster-id手工指定簇ID,因为默认RR将自己的RID当成cluster-id

相关主题
相关文档
最新文档