BGP的特征:
BGP是外部路由协议,用来在AS之间传递路由信息。
是一种增强的距离矢量路由协议(AS_PATH)。
可靠的路由更新机制(TCP)(目的端口为179,源端口随机生成)
丰富的Metric度量方法(12条选路原则)。
从设计上避免了环路的发生
为路由附带属性信息。
支持CIDR(无类别域间选路)。
丰富的路由过滤和路由策略(router-policy)。
无需周期性的更新,只存在触发更新,并且值更新部分路由。
周期性(60s)的发送KeepAlive报文检测TCP的连通性。
BGP报文种类:
Open:负责和对等体建立邻接关系。
KeepAlive:该消息在对等体之间周期性地发送,用以维护TCP的连接。(60s)
Update:该消息被用来在BGP对等体之间传递路由信息。(通告和撤销路由)
Notification:当BGP Speacker检测到错误的时候,就发送给消息给对等体。
Router-refresh:用来通知对等体自己支持路由刷新能力。
BGP邻居:
BGP的邻居关系:
BGP邻居关系建立在TCP连接的基础之上。
可以通过IGP或静态路由来提供TCP连接的可达性。
注:BGP的邻居是通过单播的方式建立的,所以首先需要在BGP进程下手动配置邻接地址。BGP没有自动发现邻居的机制,只能手动建立。
BGP中影响邻居建立的条件:
停留在Idle状态。
没有到达Peer的路由条目。
EBGP多跳。(不去发送TCP的建立连接报文)
停留在Connect或者Active状态。
源地址错误。(查看对端的IP地址是否是本地指定的邻居地址)
TCP的认证。(TCP MD5)
有到达peer的路由,但是路由错误。
过滤了TCP的报文。
注:在华为中如果是通过默认路由的方式到达邻居,那么该邻居通告的所有路由都为无效路由。
关于BGP AS Number:
默认使用连个字节的AS number,可以扩展到四个字节。AS Number需要进行申请。
1- 64511//公有的AS Number范围。
64512~65535 //私有的AS Number范围。
BGP状态机:
图:BGP状态机
Idle:BGP连接的第一个状态。在空闲状态,BGP在等待一个启动事件。启动事件出现以后,BGP初始化资源,复位连接重试计时器(Connect-Reitry),发起第一条TCP连接,同时转入Connect(连接)状态。
Connet:在此状态,BGP发起第一个TCP连接,如果连接失败,则进入到active状态。如果TCP连接成功,就转入OpenSent状态,如果TCP连接失败,就转入Active状态。
Active:在此状态,BGP总是在试图建立TCP连接,如果连接重试计时器(Connect-Retry)超时,就退回到Connect状态,如果TCP连接成功,就转入OpenSent状态,如果TCP连接失败,就继续保持在Active状态,并继续发起TCP连接。
OpenSent:在此状态,TCP连接已经建立,BGP也已经发送了第一个Open报文,剩下的工作,BGP就在等待其对等体发送Open报文,并对收到的Open报文进行正确性检测,如果有错误,系统就会发送一个条出错的通知消息并回退到Idle状态。如果没有错误,BGP就开始放KeepAlive报文,并复位KeepAlive计时器,开始计时。同时转入OpenConfirm状态。
OpenConfirm:在此状态,BGP等待一个KeepAlive报文,同时复位保持计时器,如果收到一个KeepAlive报文,就转入Established阶段,BGP邻居的关系就建立起来了。
Established:在此状态,BGP邻居关系已经建立,这时,BGP将和它的邻居们交换Update报文,同时复位保持计时器。
另外,在除Idle状态以外的其他五个状态出现任何ERROR的时候,BGP状态机就会回退到Idle状态。在BGP对等体建立的过程中,通常可见的三个状态是:Idle,Active,Established。
Idle状态下,BGP拒绝任何进入的连接请求,是BGP的初始状态。
BGP路由通告原则:
连接建立时,BGP Speaker只把本身用的最优路由通告给对等体。
多条路径时,BGP Speraker只选择最优的路由放入路由表。
BGP Speraker从EBGP获得路由会向它所有的BGP对等体通告(包括EBGP和IBGP)。
通告给EBGP时,下一跳为自己。(注:如果通告路由的EBGP邻居需要接收的的EBGP邻居在同一网段,则通告时不修改下一跳。)
通告给IBGP时,不更改下一跳。防止次优路径。
BGP Speraker从IBGP获得的路由不会通告给其他的IBGP邻居。
IBGP的水平分割原理:从一个IBGP邻居收到的路由条目不会再通告给其他IBGP邻居。
如果想让所有的IBGP邻居都能收到路由,有三种解决方案:
全互联(每两台设备之间都建立IBGP邻居)。
RP(路由反射器)。
联盟
BGP与IGP同步。BGP不将从IBGP对等体获得的路由通告给它的EBGP对等体,除非该路由信息也能通过IBGP过得。
所有厂商同步功能默认关闭。华为不支持开启,思科可以开启。
BGP路由信息处理:
图:BGP路由信息处理
BGP路由信息处理:
当从对等体接收到更新数据包时,路由器会把这些更新数据包存储到路由选择信息库(Routing Information Base, RIB)中,并指明是来自哪个对等体的(Adj-RIB-In)。这些更新数据包被输入策略引擎过滤后,路由器将会执行路径选择算法,来为每一条前缀确定最佳路径。
得出的最佳路径被存储到本地BGP RIB (Loc-RIB)中,然后被提交给本地IP路由选择表(IP-RIB),以用作安装考虑。
除了从对等体接收来的最佳路径外,Loc-RIB也会包含当前路由器注入的(被称为本地发起的路由),并被选择为最佳路径的BGP前缀。Loc-RIB中的内容在被通告给其他对等体之前,必须通过输出策略引擎。只有那些成功通过输出策略引擎的路由,才会被安装到输出RIB (Adj-RIB-Out)中。
BGP路径属性(12条):
BGP作为一个策略工具,主要作用是实现AS间的路由信息传递。BGP就是结合丰富的路径属性,很好的控制路由信息的传递,从而实现路径的选择。
BGP属性分类(四类):
公认必遵(Well-known mandatory)公认强制
所有BGP路由器都可以识别,且必须存在于Update消息中。如果缺少这种属性,路由信息就会出错。
origin
as_path
next hop
公认任意(Well-known discretionary)公认非强制
所有BGP路由器都可以识别,但不要求必须存在于Update消息中,可以根据具体情况来决定是否添加到Update消息中。
Local-Preference
Atomic-Aggregate(as-set)原子聚合//标识汇总路由
MP Reach NLRI
可选过渡(Optional transitive)
BGP的路由器可以选择是否在Update消息中携带这种路由属性。接收的路由器如果不识别这种属性,可以转发个邻居路由器,邻居路由器可能会识别并使用到这种属性。
Aggreagator//聚合者,标识聚合路由的来源AS和聚合者。通告汇总设备的Router-ID。
Community
Extended-Communities
可选非过渡(Optional non-transitive)
BGP路由器可以选择是否在Update消息中携带这种属性。在整个路由发布的路径上,如果部分路由器不能识别该属性,可能会导致该属性无法发挥效用。因此接收的路由器如果不识别这种属性,将丢弃这种属性,不必在转发给邻居路由器。
MED(cost)
Originator-ID//标识路由的来源设备
Cluster-List//防止路由的反射回路
Oeigin
Origin属性用来定义路径信息的来源,标记一条路由是怎么成为BGP路由的。它有以下3种类型:
IGP:具有最高的优先级。通过路由始发AS的IGP得到的路由信息,比如通过network命令注入到BGP路由表的路由,其Origin属性为IGP。
EGP:优先级次之。通过EGP得到的路由信息,其Origin属性为EGP。
Incomplete:优先级最低。通过其他方式学习到的路由信息。比如BGP通过import-route命令引入的路由,其Origin属性为Incomplete。
AS_Path
AS_Path属性按矢量顺序记录了某条路由从本地到目的地址所要经过的所有AS编号。当BGP路由器从EBGP对等体接收路由时,如果发现AS_Path列表中有本AS号,则不接收该路由,从而避免了AS间的路由环路。
当BGP Speaker本地通告一条路由时:
当BGP Speaker将这条路由通告到其他AS时,便会将本地AS号添加在AS_Path列表中,并通过Update消息通告给邻居路由器。
当BGP Speaker将这条路由通告到本地AS时,便会在Update消息中创建一个空的AS_Path列表。
当BGP Speaker传播从其他BGP Speaker的Update消息中学习到的路由时:
当BGP Speaker将这条路由通告到其他AS时,便会把本地AS编号添加在AS_Path列表的最前面(最左面)。收到此路由的BGP路由器根据AS_Path属性就可以知道去目的地址所要经过的AS。离本地AS最近的相邻AS号排在前面,其他AS号按顺序依次排列。
当BGP Speaker将这条路由通告到本地AS时,不会改变这条路由相关的AS_Path属性。
AS-path属性的类型:
AS-Set :由一系列AS号无序的组成,包含在Update消息中。
AS-sequence:由一系列AS号顺序的组成,包含在update消息中。
AS-confed-sequence:在本地联盟内由一系列ad号按顺序地组成,包含在Update消息中,只能在本地联盟内传递。
AS-confed-set:在本地联盟中由一系列AS号无序的组成,包含在Update消息中。只能在本地联盟内传递。
Next_Hop
Next_Hop属性记录了路由的下一跳信息。BGP的下一跳属性和IGP的有所不同,不一定就是邻居设备的IP地址。通常情况下,Next_Hop属性遵循下面的规则:
BGP Speaker将本地始发路由发布给IBGP对等体时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。
BGP Speaker在向EBGP对等体发布某条路由时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。
BGP Speaker在向IBGP对等体发布从EBGP对等体学来的路由时,并不改变该路由信息的下一跳属性。
Local_Pref
该属性仅在IBGP对等体之间有效,不通告给其他AS。它表明路由器的BGP优先级。
该属性用于判断流量离开AS时的最佳路由。当BGP路由器通过不同的IBGP对等体得到目的地址相同但下一跳不同的多条路由时,将优先选择Local_Pref属性值较高的路由。
MED
MED属性用于判断流量进入AS时的最佳路由,当一个运行BGP的设备通过不同的EBGP对等体得到目的地址相同但下一跳不同的多条路由时,在其它条件相同的情况下,将优先选择MED 值较小者作为最佳路由。
MED属性仅在相邻两个AS之间传递,收到此属性的AS一方不会再将其通告给任何其他第三方AS。MED属性可以手动配置,如果路由没有配置MED属性,BGP选路时将该路由的MED值按缺省值0来处理。
团体属性
团体属性是一组有相同特征的目的地址的集合。团体属性用一组以4字节为单位的列表来表示,设备中团体属性的格式是aa:nn或团体号。
aa:nn:aa和nn的取值范围都是0~65535,管理员可根据实际情况设置具体数值。通常aa表示自治系统AS编号,nn是管理员定义的团体属性标识。例如,来自AS100的一条路由,管理员定义的团体属性标识是1,则该路由的团体属性格式是100:1。
团体号:团体号是0~4294967295的整数。RFC1997中定义,0(0x00000000)~65535(0x0000FFFF)和4294901760(0xFFFF0000)~4294967295(0xFFFFFFFF)是预留的。
团体属性用来简化路由策略的应用和降低维护管理的难度,利用团体可以使多个AS中的一组BGP设备共享相同的策略。团体是一个路由属性,在BGP对等体之间传播,且不受AS的限制。BGP设备在将带有团体属性的路由发布给其它对等体之前,可以先改变此路由原有的团体属性。
公认团体属性
Internet:缺省情况下,所有的路由都属于Internet团体。具有此属性的路由可以被通告给所有的BGP对等体。
No_Advertise:具有此属性的路由在收到后,不能被通告给任何其他的BGP对等体。
No_Export:具有此属性的路由在收到后,不能被发布到本地AS之外。如果使用了联盟,则不能被发布到联盟之外,但可以发布给联盟中的其他子AS。
No_Export_Subconfed:具有此属性的路由在收到后,不能被发布到本地AS之外,也不能发布到联盟中的其他子AS。
BGP选路规则:
当到达同一目的地存在多条路由时,BGP依照如下策略顺序进行路由选择:
如果此路由的下一跳不可达,忽略此路由。
优选协议首选值(PrefVal)最高的路由。
优选本地优先级(Local_Pref)最高的路由。
优选本地生成的路由。
优选AS路径最短的路由。
比较Origin属性,依稀选Origin类型为IGP、EGP、Incomplete的路由。
优选MED值最小的路由。
优选从EBGP邻居学来的路由(EBGP路由优先级高于IBGP路由)
优选到下一跳IGP Metric较小的路由。
优选Cluster_List最短的路由。
优选Router ID最小的路由器发布的路由。
比较对等体的IP address,优选从具有较小IP地址的对等体学来的路由。
BGP路由汇总:
自动汇总:
开启BGP自动汇总后,只能针对重分发的进BGP的外部路由做自动汇总,并且只汇总成主类路由。
手动汇总:
手动汇总优先于自动汇总。
detail-suppressed //抑制明细路由。
suppress-policy //指定抑制哪些明细路由。
origin-policy //配置起源策略,针对哪些类型的路由做汇总,可以匹配属性。
as-set //用于汇总路由基础明细路由的AS-Path属性,防止环路问题。
注:如果汇总的明细路由来自不同AS,则汇总路由继承的明细路由AS—path属性标识为无序。
如果明细路由来自同一个as,则汇总继承的明细路由AS-Path为有序。
attribute-poliy //为汇总路由配置属性。
BGP路由表中的”s”标记表示该路由条目被抑制,并且此路由不能通告给邻居。
汇总路由的属性继承:
在华为中如果手工汇总并且不携带“detail-suppressed”参数,汇总路由会继承明细路由的community和origin属性。
community属性:将明细路由中所有community属性汇总,作为汇总路由的community属性。
origin属性:继承明细路由中起源最低的属性。
在华为中如果手工汇总并且携带“detail-suppressed”参数,抑制明细路由的同时会追加Atomic-aggregate属性,该属性标识汇总路由属性丢失。如果Atomic-aggregate属性被设置,则不会继承明细路由的community 属性。
BGP路由过滤:
理由前缀列表实现路由过滤。
peer 13.1.1.1 ip-prefix bgp import
利用filter-policy实现路由过滤
peer 13.1.1.1 filter-policy 2000 import
as-path-filter过滤路由
ip as-path-filter as deny 1000
ip as-path-filter as permit .*
peer 13.1.1.1 as-path-filter import
正则表达式:
正则表达式知识BGP过滤的一种方法。
正则表达式是按照一定的规则来匹配字符串的公式。基于这些字符串对BGP的as-path属性做出判断(接收或拒绝)。实际上可以认为他是一个as-path的acl。
正则表达式可以定义为多个permit或deny语句。语句与语句之间的关系是或 的关系。
正则表达式字符:
符号 说明
^ 匹配一个字符串的开始。如^200表是只匹配as-path的第一个值为200.
|匹配一个子符串的结束。如200|匹配一个子符串的结束。如200表示只匹配as-path的最后一个值为200.
. 匹配任何单个字符,包括空格。
匹配前面的一个字符或者一个序列,可以一次或者多次出现。
_ 匹配一个符号。如逗号,括号,空格符号等。
* 匹配前面的一个字符或者一个序列,可以零次或多次出现。
匹配变化的AS或者一个独立的匹配,通常和“ | ”一起使用
| 逻辑或
[ ] 匹配一个范围内得as,通常和“ - ” 一起使用。
- 连接符。
BGP反射器:
路由反射器的反射原则(非非不传):
从EBGP邻居收到的EBGP路由可以反射给客户端、非客户端和其他的EBGP邻居。
从IBGP非客户端邻居收到的IBGP路由可以反射给客户端和其他的EBGP邻居,不能反射给非客户端。
从IBGP客户端邻居收到的IBGP路由可以反射给客户单、非客户端和其他EBGP邻居。
对等体之间的关系:
Client只需维护与RR之间的IBGP会话。
RR与RR之间需建立IBGP的全互联。
Non-Client和Non-Client之间需建立IBGP全互联。
RR与Non-Client之间需建立IBGP全互联。
Cluster List:
只有经过RR反射的路由才会携带Cluster_list和起源ID属性。
cluster-list属性的目的是为了防止在RR之间反射的路由环路,如果RR收到的路由条目中携带cluster-list属性,并且在列表中包含自己的cluster-id,则丢弃路由。如果不包含则接收并继续反射路由,同时追加自己的cluster-id。
Originator ID:
Originator id属性用于防止在反射器和客户端/非客户端之间产生环路。
Originator-id属性长4字节,可选非过渡属性,属性类型为9,是又路由反射器RR产生的,携带了本地AS内部路由发起者的Router ID。
当一条路由第一次被RR反射的时候,RR讲Originator-ID属性加入到这条路由,标识这条路由的始发路由器。如果一条路由中已经存在了Originator-id属性,则RR将不会创建新的Originator-id。
当其他BGP speaker接收到这条路由时,将比较收到的Originator-id和本地的router-id,如果两个id相同,bgp speaker会忽略掉这条路由,不做处理。
BGP联盟:
在联盟AS间传递联盟EBGP路由时不改变下一跳。
如果在联盟AS之间通过loopback口建立联盟EBGP邻居,同样需要指定EBGP多跳,默认TTL为1.
():表示联盟内有序的AS。
[]:表示联盟内无序的AS。 //华为才会有,思科是大括号
{}:表示联盟外无序的AS。
正则表达式中下划线可以配置小括号,大括号,不能匹配中括号。
BGP中如何下发默认路由:
针对peer通告默认。
本地创建默认路由后network进BGP。
本地创建默认路由后import进BGP。
default-route imported //配置引入默认路由
BGP命令行:
配置BGP只通告活动路由:active-route-advertise
配置IP RIB中过滤BGP路由:bgp-rib-only
这两条命令互斥。
as-path limit 1 //配置允许as-path的数量。默认255. 可配置1-2000.
4字节的AS号:
定义了一种新的Open能力码用于进行BGP连接的能力协商。
2中新的可选过渡属性,AS4-path和AS4-aggregator属性。
定义了AS-Trans(保留值为23456)用于衔接2字节的AS和4字节的AS。