ccnp router实验报告 bgp基本配置

一、   实验内容

(1)   配置路由器R1。指定邻居路由器以及所在的as、更新源

(2)   配置路由器R2。

(3)   配置路由器R3。配置下一跳自我,对从EBGP邻居传入的路由,在通告给IBGP邻居时,强迫路由器通告自己是发送BGP更新的下一跳,人、而不是EBGP邻居

(4)   创建对等体组

(5)   配置路由器R4

(6)   实验调试。

Show tcp brief(查看TCP连接信息摘要)

Show ip bgp neighbor(查看bgp邻居的详细信息)

Show ip bgp summary(查看bgp连接的摘要信息)

Show ip bgp(查看bgp表的信息)

Show ip route;ping;

在R1上打开bgp同步,然后查看bgp表;

Debug ip bgp updates

删除与建立邻居关系

   

二、   实验结论

   Bgp的配置有很多事情。要注意一台路由器只能启动一个bgp进程。

   在命令neighbor后边跟update-source参数是指定更新源的,后面跟next-hop-self参数是用来解决下一跳可达的问题。为了确保能够建立bgp邻接关系,neighbor命令指定的邻居地址必须可达

 

第二篇:ccnp-bgp

      

 BGPBorder Gateway Protocol,边界网关协议)

-----是一种在自治系统之间动态交换路由信息的路由协议



知识部分
一、BGP应用场景
1.用在中转的AS,如:ISP网络
2.在末端AS(例如企业的AS中),如果存在多个出口,需要做路径控制时可以采用BGP

二、BGP特性
1.路径矢量算法(可以认为是距离矢量)。BGP使用Path-Vector算法保证计算的路由是无环
2.BGP协议是承载在TCP之上,端口号为179
3.BGP采用触发、增量的更新
4.BGP路由具有丰富的路径属性(Path Attribute,可以认为是Metrics),可进行丰富的路由策略功能
5.BGP能够处理大量的路由(典型的网络:Internet)

三、BGP数据结构
1.Neighbor表
  存放BGP邻居信息
2.BGP表(亦称为转发数据库)
  存放从每个BGP邻居学习到的所有路由信息
  允许存放到达同一个目标网络的多条路径
  每条路径中都包含BGP路径属性
3.IP路由表
  所有路由协议通用

四、BGP报文类型
BGP在建立对等连接之前,两个邻居必须先执行标准的TCP三次握手进程,并在端口179打开TCP连接。TCP为一条可靠连接提供了分段,重传,确认以及排序等功能,从而将BGP从这些功能中解放出来。所有的BGP消息均采用单播方式经TCP连接传递给邻居。
BGP使用以下四种消息类型:
Type 1——Open(打开)消息
Type 3——Keepalive(保持激活)消息
Type 2——Update(更新)消息
Type 4——Notification(通告)消息
1.Open消息
 
在TCP会话建立之后,两个邻居都将发送Open消息,每个邻居都利用该消息标识自己并指定BGP操作参数。Open消息包括以下信息:
BGP版本号。(BGP version number)
1字节,该字段用于指定发起方正在运行的BGP版本号(一般情况下的BGP版本号位4)如果邻居运行较早的版本的BGP,则邻居会拒绝指定版本为4的Open消息;此时BGP-4路由器将更改到BGP-3并在发送一次指定版本的Open消息。最终双方将持续协商至双方都可接受的版本为止。
自治系统号 (AS number)
2字节,该字段表示会话发起的路由器的AS号,该消息用于确认该BGP会话是eBGP(不同的AS号)或是iBGP邻居(相同的AS号)
保持时间 (Hold time)
2字节,该字段表示路由器收到Keepalive消息或是Update消息之前可以等待的最长时间(以秒为单位)。Cisco默认时间为180s,但如果双方的保持时间不一致的话,协商时,采用OPEN消息中较小的那个Hold Time作为双方的Hold Time。Hold Time是设备收到一个KEEPALIVE之前允许经过的最大秒数。这个时间或者是0秒(不发送KEEPALIVE),或者是至少3秒。一般默认KEEPALIVE每60秒发送一次,HoldTime为180秒。
BGP Identiffer(标识)
4字节,Router ID。
optional parameters length
可变长度(可选内容),公布本路由器能够支持的一些能力参数,如认证、多协议支持等等。
注:OPEN报文中Marker、Length、Type三个字段为BGP报文头部分。
2.Keepalive 消息

当路由器接受了由邻居发送来的Open消息中的指定参数,它将响应一条Keepalive消息,此后路由器每60s发送一条Keepalive消息(Cisco默认),或是以协商的保持时间的1/3为周期发送Keepalive消息。由于KEEPALIVE纯粹是一个通信知会,不需要携带什么信息,因此KEEPALIVE报文实际上是不带数据的BGP报文头。
3.Update消息
Update消息被用来宣告可行路由、撤销的路由。Update消息将包括以下信息:
增量更新报文

a)unfeasible routes length(2字节):不可到路由长度,如没有则为0
b)total path attribute length(2字节):BGP属性长度
c)path attributes(可变长):BGP路径属性。该属性提供了允许BGP选择最短路径,检测环路,确定路由策略等相关信息。
d)nework layer reachability information(可变长):网络层可达性信息。该字段有一个或是多个IP地址前缀及长度的二元组。
路由撤销报文(Withdrawal Routes)

a)unfeasible routes length(2字节):不可到路由长度,这路由有不可达路由
b)withdrawn routes:撤消路由条目,包括前缀长度和网络号的二元组
c)total path attribute length(2字节):这里为0,没有数据
注:在通告路由的可达性信息时,通常一个Update报文只能通告一个网段,除非多个网段的路径属性是完全相同的,此时允许在一个Update中通告多个网段。
在通告路由的不可达信息时,允许在一个Update报文中撤销多个网段。因为在通告路由的不可达信息时,并不包含路径属性。
4.Notification消息

只要路由器检测到差错就会发送Notification消息并关闭BGP进程,随后我们将看到BGP邻居断开,然后试图重新建立BGP邻居。关于Notification消息的错误代码请查阅相关RFC文档。
BGP邻居关系
1
.eBGP邻居(external BGP,外部BGP邻居)
位于不同AS的BGP路由器建立的邻居关系称为eBGP邻居。
eBGP邻居建立的条件:
邻居的IP地址可达性
指定正确的AS号
默认情况下,eBGP邻居间发送的BGP报文,其IP报文头的TTL为1。如果使用非直连的IP地址来建立eBGP邻居,必须更改TTL使之足够大。
验证需要匹配
router(config)#router bgp 100     #表示本路由器位于AS 100
router(config-router)#neighbor 1.1.1.1 remote-as 200     #表示邻居1.1.1.1位于AS 200,该邻居为eBGP邻居
2.iBGP邻居(internal BGP,内部BGP邻居)
位于同一个AS的BGP路由器建立的邻居关系称为iBGP邻居。
iBGP邻居建立的条件:
邻居的IP地址可达性
指定正确的AS号
默认情况下,iBGP邻居间发送的BGP报文,其IP报文头的TTL为255
验证需要匹配
router(config)#router bgp 100
router(config-router)#neighbor 1.1.1.1 remote-as 100     #表示邻居1.1.1.1位于AS 100,该邻居为iBGP邻居
注:在BGP建立邻居时,会检查接收到的BGP报文的源IP地址是否为本路由器上neighbor 命令所指定的BGP 邻居IP地址,如果不是,该BGP报文被丢弃。因此必须使用update-source来控制BGP报文的源IP地址。

示例1:eBGP邻居配置
采用直连接口的iP地址来建立(假设该eBGP邻居间只有一条物理链路,采用直连网段的IP地址即可)
R1(config)#router bgp 100
R1(config-rotuer)#neighbor 1.1.1.2 remote-as 200
R2(config)#router bgp 200
R2(config-rotuer)#neighbor 1.1.1.1 remote-as 100
采用Loopback的iP地址来建立(假设该eBGP邻居间有多条物理链路,可以采用Loopback的IP地址)
R1(config)#ip route 200.1.1.1 255.255.255.255 2.1.1.2
R1(config)#ip route 200.1.1.1 255.255.255.255 2.1.1.6     #先要保证R1-R2路由可达性
R1(config)#router bgp 200
R1(config-router)#neighbor 200.1.1.1 remote-as 300
R1(config-router)#neighbor 200.1.1.1 update-source loopback0
R1(config-router)#neighbor 200.1.1.1 ebgp-multihop 2     #表示发送给此eBGP邻居200.1.1.1的BGP报文,TTL设置为2
R2(config)#ip route 100.1.1.5 255.255.255.255 2.1.1.1
R2(config)#ip route 100.1.1.5 255.255.255.255 2.1.1.5
R2(config)#router bgp 300
R2(config-router)#neighbor 100.1.1.5 remote-as 200
R2(config-router)#neighbor 100.1.1.5 update-source loopback0
R2(config-router)#neighbor 100.1.1.5 ebgp-multihop 2     #表示发送给此eBGP邻居100.1.1.5的BGP报文,TTL设置为2
示例2:iBGP邻居配置(通常都采用Loopback接口的IP地址来建立)
R1(config)#router bgp 200
R1(config-router)#neighbor 100.1.1.5 remote-as 200
R1(config-router)#neighbor 100.1.1.5 update-source loopback0     #表示本路由器发送给BGP邻居100.1.1.5的报文,其源IP地址为本路由器的Lo0接口地址
R2(config)#router bgp 200
R2(config-router)#neighbor 100.1.1.2 remote-as 200
R2(config-router)#neighbor 100.1.1.2 update-source loopback0     #表示本路由器发送给BGP邻居100.1.1.2的报文,其源IP地址为本路由器的Lo0接口地址
示例3:使用local-as参数来建立邻居
R2(config)#router bgp 2     #本路由器处于AS 2中
R2(config-router)#neighbor 1.1.1.1 remote-as 1     #指定邻居1.1.1.1在AS 1中
R2(config-router)#neighbor 1.1.1.1 local-as 22     #告诉邻居1.1.1.1自己在AS 22中,这样R1在与R2建邻居时就可以使用AS 22。
R1(config)#router bgp 1
R1(config-router)#neighbor 2.2.2.2 remote-as 22     #指定邻居2.2.2.2在AS 22中
注:建立iBGP时两邻居可达性由IGP路由协议来保证,所以不需要配置静态路由。

BGP路由通告的原则

BGP路由器只会把自己选出的最优路由通告给其邻居。(对于最优路由Cisco的做法是一定会通告,H3C/华为的做法是要写入IP路由表才会通告)

1.从eBGP邻居学习的路由,可以通告给eBGP邻居或iBGP

2.从iBGP邻居学习的路由,不能通告给iBGP邻居(水平分割原则,此原则是开启的,没有命令关闭)

3.从iBGP邻居学习的路由,是否能够通告给eBGP邻居/是否能够被选择为最优路由,取决于同步原则。

①若同步原则开启,则必须满足同步条件,才能通告;若不满足同步条件,则不能通告。

②若同步原则关闭,则可以通告(在实际应用中,同步原则都应该是关闭的)。

那么什么是同步原则?

指的是通过BGP学习的路由,若通过IGP也可以学习到,则称该路由满足同步条件。同步原则的存在主要是避免在报文转发时出现黑洞。

什么时候才能关闭同步原则?

如果一个AS中所有路由器都运行BGP,并且两两之间都建立iBGP邻居,此时可以安全的关闭同步原则(主要针对中转AS而言)。

注:router(config-router)#no synchronization     #关闭同步原则,新版本IOS中默认都是关闭的。

BGP路由的通告

1.network命令

需要注意的是BGP中使用network命令是真正意义上的通告某条路由,它跟IGP路由协议中的network命令的涵义不一样。另外BGP路由协议中将不涉及某个具体接口,更核心的将是两路由器之间的邻居关系。

2. redistribute命令

可以将IGP学习到的路由通过重发布注入到BGP中,此方法要特别注意路由的更新量问题。

注:①Q:BGP协议中使用network命令能够通告哪些路由?

              A:只要本路由器的IP路由表中存在此路由,就可以在BGP中使用network来通告

   ②BGP路由只有2个来源:a)本地注入(network、redistribute);b)从邻居学习。

   ③BGP中的自动汇总只会针对通过redistribute引入的路由。另外高版本的IOS中已经关闭了BGP的自动汇总功能。

BGP邻居状态机

可以利用邻居状态机描述BGP连接的建立和维护,它将有以下的6中状态:

1.ldle (空闲)状态

BGP总以ldle状态为起点,该状态拒绝所有入站的连接。只有在BGP起动之后,BGP进程将初始化所有BGP资源,初始化去往邻居的TCP连接,监听来自邻居的TCP初始化消息,并更改为连接状态。启动事件一般是配置BGP进程。

2. Connect(连接)状态

进入Connect状态后,BGP进程将一直等待TCP连接的完成(三次握手),当TCP连接建立成功,BGP将会向邻居发送Open消息,并进入OpenSent(打开发送)状态。如果TCP会话没有建立,BGP将继续监听邻居初始化的连接,开启连接重试定时器,迁移到Active(激活)状态。Connect→→OpenSent(TCP连接建立);Connect→→Active(TCP连接暂未建立)。

3.Active(激活)状态

该状态下,BGP进程继续尝试和邻居建立TCP连接,如果TCP连接建立成功,BGP进程清除连接重试定时器,完成初始化过程,并向邻居发送Open报文,迁移到OpenSent(打开发送)状态。

如果连接重试定时器到期BGP进程依然处在激活状态,进程将返回连接状态,监听邻居发起的TCP会话,这个过程将反复循环,直到监听到由邻居发起的TCP会话。

4.OpenSent(打开发送)状态

进入了该状态,已经发送了Open消息,BGP将一直等待来自邻居的Open消息。一旦接收到Open消息后,将检查该消息的每一个字段,如果有差错,将会发送Notification消息迁入Idle状态。

如果接收到的Open消息没错,就会发送Keepalive消息并商讨Keepalive定时器和Keepalive发送的时间。 并迁移到OpenConfirm(打开确认)状态。

5.OpenConfirm(打开确认)状态

进入了这个状态下,BGP进程将等待邻居确认的Keepalive或Notification消息。如果接收到的是Keepalive消息则迁移到Established(建立)状态,如果是Notification消息那么就将迁移到Idle状态。

6.Established(建立)状态

进入了这个状态就说明了BGP的对等连接正式建立了,对等体之间交互Update,Keepalive和Notification消息,如果接受到的是Update或Keepalive消息,则重启保持定时器,如果接受到一个Notification消息,则会迁移到Idle状态。

注:①Q:长时间停留在Active或ldle状态,可能的原因是什么?

              A:a)本路由器没有到达BGP Open报文中源IP地址的路由(debug ip bgp输出:no route)

                  b)neighbor命令中配置了错误的IP地址(debug ip bgp输出:no route)

                  c)neighbor命令中没有配置更新源地址(debug ip bgp输出:Connection refused by remote host)

                  d)在建立eBGP邻居是的neighbor命令中没有考虑到TTL值问题

                  e)没有配置neighbor命令

                  f)AS号配置错误(debug ip bgp输出:Connection refused by remote host)

    ②我们在实际网络中操作BGP时,为了避免路由动荡,可以使用命令router(config-router)# neighbor A.B.C.D shutdown来暂时的关闭BGP邻居,此时邻居配置未删除但是路由丢失。

    ③查看命令show ip bgp summary     #观察最后1列显示为空白或数字,表示该邻居正常建立。

       查看命令show ip bgp neighbors     #观察BGP State显示为Established表示邻居正常建立。

BGP的会话管理

1.硬复位

router#clear ip bgp *     #将所有BGP邻居强行复位(TCP连接断开)

router#clear ip bgp A.B.C.D     #将与A.B.C.D建立的BGP邻居强行复位(TCP连接断开)

2.软复位

①router#clear ip bgp */x.x.x.x soft out     #没有清除BGP邻居关系,只是主动向所有邻居/邻居A.B.C.D重新发送一次BGP路由更新。当某个BGP路由器的出口策略改变时,可以采用soft out方式让路由器重新发送一次BGP更新,使得出口策略可以立即生效。

②router#clear ip bgp */A.B.C.D soft in     #没有清除BGP邻居关系,只是向所有邻居/邻居A.B.C.D发送一个Route-Reflesh message报文要求邻居重新发送一次BGP路由更新(此方式需要双方路由器对Route-Reflesh刷新功能的支持)。

router(config-router)#neighbor A.B.C.D soft-reconfiguration inbound     #设置存储邻居路由更新的原始拷贝

router#clear ip bgp */A.B.C.D soft in     #将所有邻居/邻居A.B.C.D所发送的路由拷贝重新刷新一次

注:当某个BGP路由器的入口策略改变时,可以采用soft in方式要求邻居路由器重新发送一次BGP更新或将本地路由器存储的邻居路由的原始更新拷贝重新刷新一次,使得入口策略可以立即生效。

BGP的路由汇总

1.router(config)#ip route 10.1.0.0 255.255.0.0 null0     #创建一条指向null0的静态路由

router(config)#router bgp 65010

router(config-router)#network 10.1.0.0 mask 255.255.0.0     #因为路由表中已经存在10.1.0.0/16的路由,因此可以通过network命令让BGP路由器通告此路由。此方式不需要通告明细路由。

2.router(config)#router bgp 65010

router(config-router)#network 10.1.1.0 mask 255.255.255.0

router(config-router)#network 10.1.2.0 mask 255.255.255.0

router(config-router)# aggregate-address 10.1.0.0 255.255.252.0 [summary-only] [as-set]     #[summary-only]表明此路由器只会向外通告汇总后的路由。此方式为BGP真正的路由汇总,它需要在本路由器上通过network命令先通告明细路由。添加[as-set]参数的目的是让这条汇总后的路由带上所有明细路由的AS号。不过这个AS的排序是无序的。

3.将IGP重发布到BGP时会自动汇总成主类网络,BGP自身通告的路由不会执行自动汇总

router(config)#router bgp 65010

router(config-router)#no auto-summary     #将自动汇总功能关闭

4. unsuppress-map

router(config)#ip prefix-list P1 permit 10.1.1.0/24     #使用前缀列表来匹配想要泄露给邻居的明细路由

router(config)#route-map UNSUPPRESS permit 10

router(config-route-map)#match ip address prefix-list P1

router(config-route-map)#exit

router(config)#router bgp 1

router(config-router)#network 10.1.1.0 mask 255.255.255.0

router(config-router)#network 10.1.2.0 mask 255.255.255.0

router(config-router)# aggregate-address 10.1.0.0 255.255.252.0 summary-only as-set     #汇总路由并且抑制所有明细

router(config-router)# neighbor 2.2.2.2 unsuppress-map UNSUPPRESS #应用配置好的route-map来达到明细路由泄露的目的

注:unsuppress-map的作用是,当我们使用summary-only参数后明细被抑制的情况下允许某些明细路由的通告。

5.advertise-map

router(config)#ip prefix-list P1 permit 10.1.1.0/24     #使用前缀列表来匹配想要排除在汇总路由之外的明细路由

router(config)#route-map ADVERTISE deny 10

router(config-route-map)#match ip address prefix-list P1

router(config-route-map)#route-map ADVERTISE permit 20

router(config-route-map)#exit

router(config)#router bgp 1

router(config-router)#network 10.1.1.0 mask 255.255.255.0

router(config-router)#network 10.1.2.0 mask 255.255.255.0

router(config-router)#aggregate-address 10.1.0.0 255.255.252.0 summary-only as-set advertise-map ADVERTISE     #应用配置好的route-map来达到将某条明细路由排除在汇总之外的目的

注:advertise-map的作用是将原本包含在汇总路由网段中的某些明细路由排除在汇总之外,主要表现在通过as-set设置的汇总路由不包含这些被排除的明细路由的as号。

BGP路径属性及选路原则

1. Weight(权重)属性

思科私有,该属性不传递给任何BGP邻居(包括iBGP和eBGP邻居),仅对本路由器有效。其他厂商也有类似的路径属性。在BGP选路时,优选Weight值大的路径。默认本地注入的为32768,外部学习而来的为0。

①配置方式1:

router(config-router)#neighbor A.B.C.D weight 100     #表示本BGP路由器从邻居A.B.C.D学习的BGP路由均设置weight为100

②配置方式2:

router(config)#access-list 1 permit 10.1.1.0     #定义一个access-list来匹配一组路由

router(config)#route-map WEIGHT permit 10

router(config- route-map)#match ip address 1

router(config- route-map)#set weight 100

router(config- route-map)#route-map WEIGHT permit 20

router(config- route-map)#router bgp 200

router(config- router)#neighbor 12.1.1.1 route-map WEIGHT in     #表示本BGP路由器从邻居12.1.1.1学习的BGP路由,如果该路由的网络号为10.1.1.0,则设置weight为100;如果是其他路由,则允许接收,但不设置weight(默认为0)

③正则表达式:

 

示例:AS_PATH

匹配位于AS 100中的路由:_100$

匹配本AS的路由:^$

匹配从AS 400传递过来的路由:^400_

匹配经过AS 500的路由:_500_

2.Local Preference(本地优先级)

Local Preference是公认(指所有遵照RFC标准实现的BGP都能够识别该路径属性)自由选择(指在BGP路由通告中可以包含/也可以不包含该路径属性)属性。

Local Preference只能在iBGP邻居间传递,不会传递给eBGP邻居。

在BGP选路时,优选Local Preference值大的路径。默认为100。

Local Preference通常用于AS的入口策略,也就是控制本AS的出流量。

示例:要求AS 200访问AS 100的10.1.1.0/24时,从R2出去;而访问11.1.1.0/24时,从R3出去。

router(config)#access-list 10 permit 10.1.1.0

router(config)#access-list 11 permit 11.1.1.0     #定义access-list来匹配路由

router(config)#route-map LP permit 10

router(config- route-map)#match ip address 10

router(config- route-map)#set local-preference 150

router(config)#route-map LP permit 20

router(config- route-map)#match ip address 11

router(config- route-map)#set local-preference 50

router(config)#route-map LP permit 30     #定义route-map来控制路由参数

router(config)#router bgp 200

router(config- router)#neighbor 12.1.1.1 route-map LP in     #将route-map应用于路由器上。表示从12.1.1.1邻居学习的10.1.1.0/24路由设置LocalPref为150;而11.1.1.0/24路由设置LocalPref为50;其他路由允许接收,没有更改LocalPref值。

3.BGPNEXT-HOP属性

①当BGP路由器将BGP路由通告给eBGP邻居时,NEXT-HOP属性会发生变化,设置为本路由器与该BGP邻居建立邻居时neighbor命令所指定的IP地址;

②当BGP路由器将BGP路由通告给iBGP邻居时,NEXT-HOP属性保持不变。这里存在路由可达性问题,因此我们常使用命令router(config-router)# neighbor A.B.C.D next-hop-self,将发送给邻居A.B.C.D的路由的下一跳地址设置为本路由器与A.B.C.D建立邻居时所使用的IP地址(即发送BGP更新报文的源IP地址)。

4.AS_PATH

①常规AS_PATH操作

AS_PATH由一系列AS路径组成,也是公认强制属性。当BGP发言者发布路由给IBGP邻居时,BGP不修改路由的AS_PATH属性。当BGP发言者发布路由给EBGP邻居时,本地系统将把自己的AS号作为序列的最后一个元素加在后面(放在最左面)。由于BGP发言者发布路由给IBGP邻居时,并不将AS号加入AS_PATH,如果邻居将路由继续转发,最终发言者自己再次收到路由时,将无法判断是否环路路由。因此,BGP要求IBGP对收到的路由不再转发。有鉴于此,AS内部BGP发言者对路由要同步,IBGP邻居必须逻辑上全连接建立邻居。

AS_PATH选路控制示例:

router(config)#access-list 11 permit 10.1.1.0

router(config)#route-map AS_PATH permit 10

router(config-route-map)#match ip address 1

router(config-route-map)#set as-path prepend 100 200 300

router(config)#route-map AS_PATH permit 20

router(config)#router bgp 200

router(config-router)#neighbor 12.1.1.1 route-map AS_PATH out     #表示通告给邻居12.1.1.1的BGP路由10.1.1.0,在AS_PATH前多添加 200 200 200三个AS号,人为增长AS_PATH长度,影响选路。

②allow as in

router(config-router)#neighbor 12.1.1.1 allowas-in 1     #允许BGP路由器在接收到一条包含有自己AS号(1次)的路由时也能够接收。其中数字“1”表示在接收到的路由AS_PATH属性中可以出现1次自己的AS号,取值范围是1~10。根据AS_PATH的防环路原则,一台BGP路由器在接收到一条包含有自己AS号的路由时将会丢弃这条路由。这个功能将可以打破这种规则。

5.ORIGIN

ORIGIN标示路径信息的来源,是公认强制属性。ORIGIN可以是以下三种值:

IGP:网络层可达信息来源于AS内部

EGP:网络层可达信息通过AS外部学习

INCOMPLETE:网络层可达信息通过别的方式学习

在BGP选路时,ORIGIN值IGP优于EGP,EGP优于INCOMPLETE。

6.MED(多出口标识符):在思科的BGP表显示为metric。

MED是可选(指并非所有的BGP实现者都能够识别该路径属性,但是目前几个主流的厂商都实现该路径属性)非传递(指如果某个BGP设备不认识该路径属性,则将直接删除此属性)属性。

MED可以在iBGP间传递,可以传递给eBGP;但是最多只能传递到相邻的AS中。

在BGP选路时,优选MED值小的路径。

MED通常用于AS的出口策略,也就是控制进入本AS的入流量。它跟Local Preference属性基本上是相反的,配置上则很相似。

7.BGP路径属性特性:

①公认强制(Well-known mandatory)

  公认自由选择(Well-known discretionary)

公认属性是所有的BGP都必须识别支持的属性。其中,公认强制属性是BGP UPDATE消息中必须包含的必要部分。公认自由选择则是自由选择的部分。

②可选传递(Optional transitive)

可选非传递(Optional non-transitive)

可选属性并不要求所有的BGP都识别。如果属性是可选转发的,那么,即使BGP不能识别该属性,也要接受该属性并将其发布给它的对端,同时标识为partial。而如果属性是可选非转发的,BGP可以忽略包含该属性的消息并且不向它的对端发布。

BGP团体属性

1.团体属性

团体属性可以添加在每一个路由前缀中,由RFC1997定义,是一个transitive optional属性。包含有团体属性的路由,表示该路由是一个路由团体中的一员,该路由团体具有某种或多种相同的特征。根据这些特征区分不同的路由,可以大大简化路由策略的配置工作,同时也增强路由策略的能力。

团体属性的Type code是8,32个bites长。可以解析为一个10进制的数,也可以解析为AA:NN的格式。RFC中规定,16个bites作为AS number,后16个bites由该AS自己使用。同时,这32个bites开头的部分0x00000000——0x0000FFFF和结尾的部分0xFFFF0000——0xFFFFFFFF被保留。

RFC1997还规定了几种公认的团体属性:

INTERNET:默认的团体属性,所有路由都属于该团体。

NO_EXPORT(4294967041,or 0xFFFFFF01):含有该属性的路由不向任何联盟外的eBGP邻居发送,如果没有定义联盟,则认为该AS是一个独立的联盟。例如,大量的没有必要透传到internet的IP子网路由,可以标记该团体属性,以控制一些不需要的路由的规模。

NO_ADVERTISE(4294967042,or 0xFFFFFF02):含有该属性的路由不向任何BGP邻居发送,包括eBGP和iBGP。

Local-AS(4294967043,or 0xFFFFFF03):也称作NO-ADVERTISE-SUBCONFED:含有该属性的路由,不向任何eBGP邻居发送,包括联盟内的eBGP邻居。

注:设备收到带有这几个公认的团体属性的路由,是自动按照RFC规定来执行的,不需要再配置路由策略。另外需要注意的是默认情况下Cisco路由器不会主动发送这个团体属性,所以需要在路由器上配置sent-community命令。

2.扩展团体属性

因为团体属性的使用越来越丰富,原有的32bite定义已经不能满足各种应用。应运而生的就是扩展团体属性。使用了新的Type code和格式,在RFC4360中定义。比起原来的团体属性,扩展团体属性提供了更长的取值范围,以减少冲突的可能;同时,还增加了一个Type字段,可以使得路由策略直接基于扩展团体属性的type字段进行操作。相当于将一些原来需要通过复杂的团体属性配置才能实现的功能,直接添加到了扩展团体属性的结构中。

扩展团体属性也是transitive optional,Type code是16,64个bites长。RFC4360中给出了具体的扩展团体属性各字段的定义以及若干种应用模板,这里着重要注意的是已经得到了广泛应用的Route Target Community:在MPLS VPN应用中,RT团体属性来区分不同VRF的路由,路由器通过RT中的内容,判断该路由是否需要添加到相应的VRF中。

BGP高级特性

在一个中转AS中,为了保证此AS中的路由器都能够学习到路由(避免黑洞),要求它们都需要运行BGP,由于iBGP邻居间路由通告的水平分割原则,它们之间任意两个都要建立iBGP邻居关系,邻居数量为N*(N-1)/2

以下2个特性的目的都是为了减少iBGP邻居的数量:

1.路由反射器——思路:“打破”水平分割原则的限制

所谓的路由反射器就是,选择AS中的一台路由器作为RR(Router Reflctor,路由反射器)而其他的路由器称RRC(Route Reflector Client,路由反射器客户端)。不再需要和RRC角色的路由器建立iBGP邻居关系,只需要和RR建立对等体关系,这样的一个RR与RRC的集合被称作“集群”。

术语:

RR:Route Reflector,路由反射器

RRC:Route Reflector Client,路由反射器客户端

Non-Client:非客户端

Cluster:由RR和它的RRC构成的集合,称为Cluster(集群)。

引入RR后,路由通告的原则:

①当RR从它的RRC或eBGP邻居学习到路由,可以通告给其他RRC以及Non-Client;

②当RR从Non-Client学习到路由,可以通告给它所有的RRC;

配置:只需要在RR上指定哪些路由器是它的RRC即可。

RR:

router(config)#router bgp 100

router(config-router)#neighbor A.B.C.D route-reflector-client     #指定A.B.C.D是本路由器的RRC

router(config-router)#bgp cluster-id a.b.c.d     #设置本RR的Cluster-ID(默认为本路由器的BGP RouterID)。如果一个Cluster中存在多个RR,则这些RR必须配置相同的ClusterID。

注:通常的规划:一个AS中规划2个路由器作为RR,而其余路由器作为RRC。注意:此时一个Cluster中存在2个RR,可能形成环                     路,此时一定要为这2个RR配置相同的ClusterID。

2.联邦——思路:将iBGP邻居关系“变为”eBGP邻居关系

将一个AS“划分为”若干个AS(一般使用私有的AS号),将某些iBGP邻居变为eBGP邻居。注意:此私有AS进行联邦的配置对于其他AS是完全透明的。配置好联邦后,还需要保证每个私有AS内部的iBGP全互联(可结合路由反射器进一步减少iBGP邻居数量),但是私有AS间已经变为eBGP邻居,不存在水平分割原则的限制。

配置:

联邦内部的路由器配置:

router(config)#router bgp 65001     #此处的AS号为联邦中的私有AS号

router(config-router)#bgp confederation identifier 100     #设置联邦的标志,即本路由器所在的共有AS号

router(config-router)#bgp confederation peer 65002 65003     #当一台本路由器和联邦内部的其他私有AS建立了“eBGP邻居”关系,则必须在此处指出这些私有AS的AS号(如果有多个,用空格分割)

注:在同一个联邦的eBGP之间传递路由,NEXT-HOP属性不会发生改变。

优化BGP的设计

1.减少路由振荡

大型网络之间,路有频繁振荡会带来严重的后果。因此BGP为尽可能减少路由振荡做了一些考虑。

①BGP邻居超时时间很长,通常是180秒。当应用环回地址建立邻居时,即便链路中断,只要备份链路能够及时发布切换环回地址路由,邻居可以保持建立,不引起振荡。

②BGP规定,如果需要撤销到一个目的地址的路由,同时更新一个掩码不同的路由,则应该把他们组合在一个UPDATE消息中。这样BGP可以一次处理,不出现路由振荡。

③BGP提供路由抑制机制(Route flap damping),它为每条路由分配一个动态的度量数字,用来反馈路由稳定程度。当一条路由出现振荡,就给他分配一个惩罚值。振荡越多,惩罚值越高。如果惩罚值超出预设的门限,该路由就不再对外发布。直到一段时间后惩罚值降低到可重新使用的门限值。

2.节省设备资源

①在BGP向其他邻居发布路由时,引入一个介于0.75~1的随机因子,将该因子分别与每对邻居间发布路由的最小时间间隔相乘,从而得出不同的路由发布最小时间间隔,以避免路由都挤在一个时间发布占用太多的带宽和CPU。

②BGP支持路由聚合,可根据某些属性进行灵活的聚合,减少路由发布条目。

③引入路由反射器。IBGP要求全链接,引入反射器后,每台BGP发言者只需要与BGP反射器建立邻居,BGP反射器会把从IBGP邻居学到的路由发布给其他IBGP邻居,以节省开销。

补充

icmp重定向

ICMP重定向报文是ICMP控制报文中的一种。在特定的情况下,当路由器检测到一台机器使用非优化路由的时候,它会向该主机发送一个ICMP重定向报文,请求主机改变路由。路由器也会把初始数据报向它的目的地转发。

发生ICMP重定向通常有两种情况:

1)当路由器从某个接口收到数据还需要从相同接口转发该数据时;

2)当路由器从某个接口到发往远程网络的数据时发现源ip地址与下一跳属于同一网段时。

相关推荐