BGP简单介绍

1. 功能描述 && 场景

1.1. 定义:

BGP(border gateway protocol)是一种不同自治系统的路由设备之间进行通信的外部网关协议(exterior gateway protocol, EPG);

1.2. 主要功能:

在不同自治系统(autonomous sustems, AS)之间交换网络可达信息,并通过协议自身机制来消除路由环路和容量超限;

1.3. 场景举例

众所周知,设备和设备间、地区与地区间的联系都需要路由设备进行管理(包括最短路径决策),以上所说的具有相同管理体制和通信风格的通信群体可划分为一个AS,假如一个国家就是一个AS,一个AS有多个邻接的AS还有很多路由器,那么国内的AS管理设备也都是同一个AS,可组成IBGP,而不同国家之间的AS管理设备就是不同的AS,可组成EBGP,对于国家间的边缘路由器,对外对内所能分享的信息和所管理的信息是不一样的,类似新闻媒体,对于外国传入的路由信息不可胡乱更改,想知道某些外国的信息也不一定就要和这个国家连接在一起,所以EBGP是非全连接的,而在同一个AS下,就要尽量全连接,这有助于最短路径决策(AS各设备对外是统一的),所以IBGP是全连接。

隐患:重复路由、环路、容量。

1.4. 设计目的:

为方便AS间管理;

1.5. 优点:

(1)实现系统间路由互通;

(2)确保AS管理的独立性;

(3)可扩展性;

2. 分类 && 拓扑

2.1. BGP分类

IBGP:相同AS之间的BGP。

EBGP:不同AS之间的BGP。

2.2. 简单配置:

2.3. BGP拓扑

3. 状态 && 报文

3.1. 状态

状态一:Idle

处于Idle状态的BGP进程不接受任何邻居发送过来的邻居建立的请求,除非触发了BGP start事件,这事件一般是由用户配置BGP触发的,一旦触发了BGP start事件,设备就会初始化一个connect-retry timer,并且向指定邻居发起建立TCP 连接的请求,然后就进入了connect状态。

状态二:connect

处于connect状态的设备会试图完成与邻居的TCP连接,如果连接一旦建立,设备就会清除connect-retry timer,发送open message,然后进入open-sent状态。如果连接建立失败,设备就会重置connect-retry timer,然后等待邻居发送过来的连接建立请求,这时就进入Active状态。如果connect-retry timer超时,设备就会重置它,并试图与邻居建立TCP连接,BGP仍然保持在connect状态。如果在connect状态中设备遇到错误,就会回到Idle状态。 

状态三:ative

处于Active状态的设备仍然试图完成与邻居的TCP连接,如果连接一旦建立,设备就会清除connect-retry timer,发送open message,然后进入open-sent状态。如果connect-retry timer超时,设备就会重置它,并试图与邻居建立TCP连接,BGP会回到connect状态。如果邻居试图建立TCP连接的请求报文中的源地址与本地邻居表中的地址不符,设备就会陷入active状态。如果在active状态中设备遇到错误,就会回到Idle状态。

状态四Open-sent

在open-sent状态中,设备会等待邻居发送过来的open message,一旦接受到邻居发送过来的open message,设备就会检查open message中的所有字段,如果发现错误,设备就会发送Notification message通告这个错误,并且中断TCP连接,回到Idle状态。如果所有的字段都匹配,设备就会发送第一个Keepalive message,初始化Holdtimer和Keepalive timer,进入open-confirm状态。如果在open-sent状态中设备遇到错误,或是Holdtimer超时,设备就会发送Notification message通告错误,并回到Idle状态。 

状态五Open-confirm

设备在open-confirm状态会等待邻居发送过来的Keepalive message,一旦收到,就会进入Established状态。如果在open-confirm状态中设备遇到错误,或是Holdtimer超时,设备就会发送Notification message通告错误,并回到Idle状态。

状态六:Established

BGP邻居建立成功

3.2. 报文

3.2.1. TCP

涉及三次握手报文、复位报文(RST)、四次挥手报文、数据报文(PSH)。所涉及的TCP报文中,目的端口号为179,是BGP专用。

3.2.2. BGP

BGP报文由BGP报文头和具体报文内容两部分组成。

BGP报文头包括三的部分,总长19字节。各个部分的格式和功能如下:

Marker:占16字节,用于检查BGP对等体的同步信息是否完整,以及用于BGP验证的计算。不使用验证时所有比特均为1(十六进制则全“FF”)。

Length:占2个字节(无符号位),BGP消息总长度(包括报文头在内),以字节为单位。长度范围是19~4096。

Type:占1个字节(无符号位),BGP消息的类型。Type有5个可选值,表示BGP报文头后面所接的5类报文(其中,前四种消息是在RFC4271中定义的,而Type5的消息则是在RFC2918中定义的):

TYPE值

报文类型

1OPEN
2UPDATE
3NOTIFICATION
4KEEPALIVE
5REFRESH(RFC2918)

BGP的运行是通过消息驱动的,共有5种消息类型,这些消息有相同的报文头。这些消息通过TCP协议进行传播(端口号是179)。消息最长为4096字节,最短为19字节(只包含报文头)。

3.2.2.1. OPEN(建联)

version:表示协议的版本号,现在BGP的版本号为4。
My autonomous System:发送者自己的AS域号
Hold Time:发送者自己设定的hold time值(单位:秒),用于协商BGP对等体间保持建立连接关系,发送KEEPALIVE或UPDATE等报文的时间间隔。BGP的状态机必须在收到对等体的OPEN报文后,对发出的OPEN报文和收到的OPEN报文两者的hold time时间作比较,选择较小的时间作为协商结果。Hold Time的值可为零(不发KEEPALIVE报文)或大于等于3,我们系统的默认为180。
BGP Identifier:发送者的router id。
Opt Parm Len:表示Optional Parameters(可选参数)的长度。如果此值为0,表示没有可选参数。
Optional Paramters:此值为BGP可选参数列表,每一个可选参数是一个TLV格式的单元(RFC3392)。

3.2.2.2. UPDATE(更新)

Unfeasible Routes Length:标明Withdrawn Routes部分的长度。其值为零时,表示没有撤销的路由。

Withdrawn Routes:包含要撤销的路由列表,列表中的每个单元包含1字节的Length域和可变长度的Prefix域。

Total Path Attribute Length:标明Path Attributes部分的长度。其值为零时,表示没有路由及其路由属性要通告。

注意:当且仅当path属性中只含有NLRI时报文为合法,否则属性表中缺失AS_PATH、ORIGIN、NEXT_HOP任意wellknown属性都是不合法报文。

3.2.2.3. NOTIFICATION(终止)

Error code:占1个字节(无符号位),定义错误的类型,非特定的错误类型用零表示。
Error subcode:占1个字节(无符号位),指定错误细节编号,非特定的错误细节编号用零表示。
Data:指定错误数据内容。

相关错误码如下:

NO类型错误码中文
1报文头0
21/1连接不同步
31/2错误消息长度
41/3错误消息类型
5OPEN报文2/1不支持版本号
62/2错误对端AS号
72/3错误BGP标识符
82/4不支持的选项参数
92/5认证失败
102/6不支持的HOLDTIMER
112/7不支持能力类型
12UPDATE报文3/1畸形属性表
133/2未识别的公认属性
143/3缺少公认属性
153/4属性标识错误
163/5属性长度错误
173/6无效origin
183/7AS路由环路
193/8无效的nexthop
203/9可选参数错误
213/10无效网络字段
223/11畸形AS_PATH
23超时4/0hold timer超时
24状态机5/0FSM错误
25系统终止6/1路由超限
266/2人为shutdown
276/3undo peer的时候
286/4人为reset
296/5连接拒绝
306/6其他的配置改变
316/7连接冲突解决
326/8资源不足
336/9BFD down导致BGP session down
346/0其他所有情况
3.2.2.4. KEEPALIVE

只含有BGP报文的报文头,且 type == 4。

3.2.2.5. REFRESH(不常用)

Field字段

Length长度

Description描述

AFI2字节(无符号位)表示地址族id,与UPDATE报文中的定义相同。
Res1字节(无符号位)所有为应全为零,在接收报文时,此位被忽略。
SAFI1字节(无符号位)与UPDATE报文中的定义相同

3.2.3. 其他报文

BGP本身并不会产生路由,路由的起始是依赖于其他路由协议的,例如:network方式,涉及ospf等协议,此外,还有重分发和路由汇聚方式。

4. 路由属性

4.1. 报文携带路由属性

属性类型

                          属性值                                        

注意事项

1:Origin

IGP

这是wellknown属性,正常情况不可或缺

EGP

Incomplete

2:As_Path

AS_SET

AS_SEQUENCE

AS_CONFED_SET

AS_CONFED_SEQUENCE

3:Next_Hop

下一跳的IP地址

4:Multi_Exit_Disc

MED用于判断流量进入AS时的最佳路由

5:Local_Pref

Local_Pref用于判断流量离开AS时的最佳路由

6:Atomic_Aggregate

BGP Speaker选择聚合后的路由,而非具体的路由

7:Aggregator

发起聚合的路由器ID和AS号

8:Community

团体属性

9:Originator_ID

反射路由发起者的Router ID

10:Cluster_List

反射路由经过的反射器列表

14:MP_REACH_NLRI

多协议可达NLRI

可在无三大wellknown属性条件下合法

15:MP_UNREACH_NLRI

多协议不可达NLRI

不可在无三大wellknown属性条件下合法

16:Extended Communtities

扩展团体属性

4.1.1. origin code

定义路径信息的来源,取值如下:

0 == IGP:网络层可达信息来源于AS内部,从IGP路由表通过network命令学习到的路由携带此属性;

1 == EGP:网络层可达信息通过;

2 == INCOMPLETE:通过别的方式学习网络层可达信息,使用重分发学习的路由携带此属性;

这个属性可以通过配置设备来完成改变。

4.1.2. next hop

(1)在IBGP中:nh不会更新(无对应算法)

(2)在EBGP中:IGP每过一个路由就会更新。

(3)从本地到EBGP对等体,下一跳变为自己。

(4)从EBGP对等体到本地再到IBGP对等体,下一条不变。

4.1.3. AS_PATH

描述了一条前缀先后经过的AS路径,不过是反序的,即最后路过的AS排列再这个属性的首位,其目的是为了防止环路。

(1)设备可默认或通过配置造成通路附加(在AS_PATH顶部增加本设备AS或配置的AS)。

(2)AS_PATH格式:

AS-SET:无序性

AS-SEQUENCE:保序性

(3)EBGP对等体间AS_PATH携带自身AS,IBGP间无。

4.1.4. local_preference

本地优先级,仅使用于IBGP对等体之间的UPDATE消息中,EBGP之间并不会携带此属性,默认值为100,可以配置默认值,仅本AS内部传输,即本地的路由前缀匹配的本地优先级会通告给本AS所有路由器。

4.1.5. MED

multi-exit-disc属性应用于不同AS间,用以区分到达相同邻居AS的多个出口点(两相邻AS),在EBGP和IBGP的UPDATE中均携带。

(1)MED携带于EBGP对等体之间

(2)MED越小越优先

(3)通过network或重发布方式获取的路由,如果直连,那么MED=0,如果来自IGP,那么MED来源于IGP;

(4)通过路由聚合获取的路由,本地MED无,邻居收到设置为0;

4.1.6. community

这个属性是一种路由标记,主要用于标识具有相同特征的BGP路由。Community属性有4个字节,前两个字节代表AS号码,后两个字节是管理上定义的标识符,格式为AA:NN。

4.2. 非报文携带属性

4.2.1. weight

这是个本地概念,在当前设备配置,在当前设备发挥作用,用意为:本设备的某neighbor权重为多少,weight越大越优。(取值0-65565,重分发默认32768,network来源或从邻居学习的默认0)

5. 路由优先级

在下一跳可达、关闭同步、未使用路由策略条件下:

序号条目规则局限IBGPEBGP
1weight越大越优本地
2local_pre越大越优本AS×
3路由来源network > 重发布 > 路由聚合
4AS_PATH越少越优
5origin越小越优
6MED越小越优本对AS
7BGPEBGP > 联邦EBGP && EBGP > IBGP
8IGP度量越小越优
9等价负载均衡负载均衡
10纯EBGP路由越老越优×
11router-id越小越优
12originator-id越小越优关联RR中router-id相等×
13cluster-list越短越优关联RR中originator-id相等×
14邻居地址越小越优

6. 路由策略

与之前的场景举例一样,国与国之间虽然网络可以互通,但是这并不代表别国的任何路由本国都可以获取并应用,事实上,BGP设备实质上也是防火墙设备,有过滤功能,是一个策略工具。

其所涉及工作组件如下:

6.1. 访问控制表:

6.2. 地址前缀列表:

6.3. 自治系统路径表(BGP):

AS路径过滤列表使用正则方式定义过滤规则。AS-Path是BGP属性,AS路径过滤规则仅应用于BGP网络。

6.4. 团体属性表(BGP):

团体是一组有相同特征的路由集合,团体属性是BGP的属性,可以降低BGP路由管理维护的难度。和ACL类似,团体属性列表可以定义多个表项,按照序号顺序进行匹配。只要有一个表项匹配了路由,则通过团体属性列表,不再进行后续匹配。

6.5. 扩展团体属性表(BGP):

扩展团体是一组有相同特征的路由集合,扩展团体属性是BGP的属性,可以降低BGP路由管理维护的难度。和ACL类似,扩展团体属性列表可以定义多个表项,按照序号顺序进行匹配。只要有一个表项匹配了路由,则通过扩展团体属性列表,不再进行后续匹配。

7. 路由反射

对于BGP环路问题,有两种解决办法:

(1)对于EBGP:AS_PATH。

(2)对于IBGP:不把从IBGP接收的更新传递给其他IBGP。

对于IBGP要全互联问题:

(1)并不会用排列组合的方式进行IBGP对等体间完全互联

(2)用反射,物理上非全互联,效果上达到全互联

7.1. 路由反射相关概念

7.1.1. 路由反射器:

在本设备上配置本设备的相对客户机,那么本设备就是路由反射器RR,两者都不是的为非客户机。

7.1.2. cluster:

路由反射器和其客户机设备之间通过IBGP连接组成一个集群。

7.1.3. cluster-id:

用来标识cluster。

7.1.4. originator-id:

RR产生的携带本AS内部发起者的router-id。

7.1.5. cluster-list:

由一系列的Cluster_ID组成,描述了一条路由所经过的反射器路径,这和描述路由经过的AS路径的AS-Path属性相似。

7.2. 路由反射过程

7.2.1. 连接限制:

客户机和RR必形成IBGP,客户机之间不需要建立BGP连接,非客户机与RR或RR的客户机间必然建立连接。

7.2.2. 反射限制:

从非客户机IBGP对等体学到的路由将发布给该RR的所有客户机;

从客户机学到的路由将发布给该RR的所有客户机和非客户机;

从EBGP学到的路由将发布给所有客户机和非客户机

7.2.3. 反射保护

客户机和非客户机之间环路:Originator_ID属性保证路由在反射器和客户机/非客户机之间的不出现循环

1)当一条路由第一次被RR反射的时候,RR将Originator_ID属性加入到这条路由,标识这条路由的始发路由器。

2)如果一条路由中已经存在了Originator_ID属性,则RR将不会创建新的Originator_ID

3)当其他BGP Speaker接收到这条路由的时候,将比较收到的Originator_ID和本地的Router ID,如果两个ID相同,BGP Speaker会忽略掉这条路由,不做处理

AS内部环路:Cluster_List 属性用于防止AS内部的环路

1)当RR在他的客户机之间或客户机与非客户机之间反射路由时,RR会把本地Cluster_ID添加到Cluster_List的前面。

2)如果Cluster_List为空,RR就创建一个

3)当RR接收到一条更新路由时,RR会检查Cluster_List。如果Cluster_List中已经有本地Cluster_ID,丢弃该路由;

4)如果没有本地Cluster_ID,将其加入Cluster_List,然后反射该更新路由

8. 路由聚合

当BGP网络规模大到一定程度,势必形成一种BGP路由表骇人的局面,如果设备都要存储和全套,那必不现实,减小路由表的规模将是个好点子,思路为只传递大概,并不传递明细。

8.1. 路由聚合方式:

network

自带掩码,可按照掩码聚合。(传输源聚合)

aggregate-address

有丰富聚合选项。(传输源或传输路径中聚合)

8.2. aggregate-address:

summary-only 

该命令加入后,aggregate-address 宣告的路由中,明细路由将不会宣告。

supress-map 

该命令用来抑制aggregate-address 宣告的路由中不包含某条明细路由。

attribute-map

该命令可以改变聚合路由的属性

AS-Set 

不写该命令时,聚合路由的as-path是基于生成聚合路由的as-path,而不是明细路由的as-path,加入该命令后,聚合路由将继承明细路由的所有属性,包括as-path。

Advertise Map

设置汇聚路由的组成不包含特定明细路由,这样聚合路由就不会继承特定明细路由的属性。当在对BGP路由进行聚合的时候,用AS-SET属性对被聚合的路由将携带明细路由的AS号,利用advertise-map(外加route-map)来控制汇聚路由究竟对哪些明细路由进行汇聚,最后将汇聚后的BGP路由放入BGP表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值