BGP—外部网关协议
1.AS
自治系统,一整套归自己管理的设备集合,重点在于产权
AS号:类似于IP地址,分为公网和私网,BGP路由器只能属于一个AS
在长度为16bit的AS号表示方式中:64512-65534为私有AS号
在长度为32bit的AS号表方式中:4200000000-4294967294为私有AS号
2.BGP特点
(1)能承载大量的路由——BGP协议不计算只传,是触发式更新(不动就不更新,消耗资源少)
(2)BGP是应用层协议,基于TCP连接,即可靠
(3)BGP可以跨设备建邻居,两种邻居关系分别为EBGP(AS之间)和IBGP(AS内部)
(4)端口号:179
(5)丰富的路由策略,13条选路原则,每条BGP路由都携带多种路径属性,BGP可以通过这些路径属性控制路径选择,不像OSPF或者ISIS只能通过Cost控制路径选择,因此在路径选择上,BGP具有丰富的可操作性,可以在不同场景下选择最合适的路径控制方式
(6)可以支撑MPLS/VPN的应用,传递客户VPN路由
(7)提供了路由聚合和路由衰减功能用于防止路由振荡,可以提高网络稳定性
路由衰减:路由衰减使用惩罚值(Penalty value)来衡量一条路由的稳定性,惩罚值越高说明路由越不稳定。如图所示,路由每发生一次振荡,BGP便会给此路由增加1000的惩罚值,其余时间惩罚值会慢慢下降。当惩罚值超过抑制阈值(suppress value)时,此路由被抑制,不加入到路由表中,也不再向其他BGP对等体发布更新报文。被抑制的路由每经过一段时间,惩罚值便会减少一半,这个时间称为半衰期(half-life)。当惩罚值降到再使用阈值(reuse value)时,此路由变为可用并被加入到路由表中,同时向其他BGP对等体发布更新报文。从路由被抑制到路由恢复可用的时间称为抑制时间(suppress time)。
(8)BGP通常被称为路径矢量路由协议(Path-Vector Routing Protocol)
(9)BGP默认没有等价路由概念,如果有去往同一目的网段的多条路由,BGP会选择最优的一条理由传输出去,查看表时,有“>”为最优
(10)选路功能强大,有大量的路由属性,IGP靠开销
3.BGP工作原理
第一步,建邻居peer
1.BGP是应用层协议,传输层对应TCP,进行三次握手
2.发送OPEN,进行协商,邻居是EBGP还是IBGP
3.keepalive,维持邻居关系,默认60s,180s断开
第二步,传路由network,import
4.对等体(邻居)建立
在三次握手完成后
(1)发送Open报文,其中Open报文中携带:
My Autonomous System:自身AS号
Hold Time:用于协商后续Keepalive报文发送时间,默认是60s,达到180s就噶掉了
BGP ldentifer:自身Router ID(支持手动配置和自动配置)
OSPF修改Router ID——OSPF重启 BGP修改Router ID——不需要重启
(2)参数协商正常之后双方相互发送Keepalive报文,收到对端发送的Keepalive报文之后对等体建立成功,同时双方定期发送Keepalive报文用于保持连接
(3)BGP对等体关系建立之后,BGP路由器发送BGPUpdate(更新)报文通告路由到对等体
5.连接源地址
BGP是接口建立邻居
默认是直连口,修改为Loopback作为更新源地址(Loopback接口非常稳定)
IBGP没什么事情,EBGP要考虑多跳问题
6.BGP报文
BGP存在5种类型的报文,不同类型的报文拥有相同的头部(header)
报文头格式:
(1)Marker:16Byte,用于标明BGP报文边界,所有bit为“1”
(2)Length:2Byte,BGP报文总长度(包括报文头在内以Byte为单位
(3)Type:1Byte,BGP报文的类型。
其取值从1到5,分别表示Open、Update、Notification、Keepalive和Route-refresh 报文
报文格式:
报文名称 | 作用 | 发送时刻 | 主要字段 |
Open | 协商BGP对等体参数,建立对等体关系 | BGP TCP连接建立成功之后 | Version:版本号。 My As:本地A5号。 Hold Time:保持时间 |
Update | 发送BGP路由更新、撤销路由 | BGP对等体关系建立之后有路由需要发送路由变化时向对等体发送Update报文 | Withdrawn Routes Length:标明长度 Withdrawn routes:不可达路由的列表,告知对方撤销路由 |
Notification | 报告错误信息,中止对等体关系 | 当BGP在运行中发现错误时,发送Notfcation报文将错误通告给BGP对等体 | Error Code、Error subcode:差错码、差错子码,用于告知对端具体的错误类型 Data:用于辅助描述详细的错误内容,长度并不固定 |
Keepalive | 标志对等体建立,维持BGP对等体关系 | BGP路由器收到对端发送的Keepalive报文,将对等体状态置为已建立,同时后续定期发送报文用于保持连接 | Marker:固定值 Length:长度 Type:类型 |
Route-refresh | 用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新能力的BGP设备会发送和响应此报文 | 当路由策略发生变化时,触发请求对等体重新通告路由 | AF1:地址族标识,如IPv4 Res.:保留,8个bit必须置 SAFl:子地址族标识。 |
7.BGP状态
OSPF有7个状态,ISIS有3个状态,BGP有6个状态
状态名称 | 用途 | 粗略理解 |
idle | 开始准备TCP的连接并监视远程对等体,启用BGP时,要准备足够的资源 | 开始准备建立 |
Connect | 正在进行TCP连接,等待完成中,认证都是在TCP建立期间完成的。如果TCP连接建立失败则进入Active状态,反复尝试连接 | 建立连接,TCP三次握手 |
Active | TCP连接没建立成功,反复尝试TCP连接 | 连接失败,重新失败,5次 |
Opensent | TCP连接已经建立成功,开始发送Open包,Open包携带参数协商对等体的建立 | 连接成功,发送Open |
Openconfirm | 参数、能力特性协商成功,自己发送Keepalive包,等待对方的Keepalive包 | 收到Open,发自己的Keepalive,等对方回应 |
Established | 已经收到对方的Keepalive包,双方能力特性经协商发现一致,开始使用Update通告路由信息 | 邻居建好了,传路由信息 |
具体流程如下图所示:
详细理解一下:
1.Idle状态是BGP初始状态。在ldle状态下,BGP拒绝邻居发送的连接请求。只有在收到本设备的Start事件后,BGP才开始尝试和其它BGP对等体进行TCP连接,并转至Connect状态
2.在Connect状态下,BGP启动连接重传定时器(Connect Retry),等待TCP完成连接
(1)如果TCP连接成功,那么BGP向对等体发送Open报文,并转至OpenSent状态
(2)如果TCP连接失败,那么BGP转至Active状态
(3)如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP继续尝试和其它BGP对等体进行TCP连接,停留在Connect状态
3.在Active状态下,BGP总是在试图建立TCP连接
(1)如果TCP连接成功,那么BGP向对等体发送Open报文,关闭连接重传定时器,并转至OpenSent状态
(2)如果TCP连接失败,那么BGP停留在Active状态
(3)如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP转至Connect状态
4.在OpenSent状态下,BGP等待对等体的Open报文,并对收到的Open报文中的AS号、版本号、认证码等进行检查
(1)如果收到的Open报文正确,那么BGP发送Keepalive报文,并转至OpenConfirm状态
(2)如果发现收到的Open报文有错误,那么BGP发送Notification报文给对等体,并转至Idle状态
5.在OpenConfirmn状态下,BGP等待Keepalive或Notifcation报文。如果收到Keepalive报文,则转至Estalblished状态,如果收到Notification报文,则转至ldle状态
6.在Established状态下,BGP可以和对等体交换Update、Keepalive、Route-refresh报文和Notification报文
(1)如果收到正确的Update或Keepalive报文,那么BGP就认为对端处于正常运行状态,将保持BGP连接
(2)如果收到错误的Update或Keepalive报文,那么BGP发送Notification报文通知对端,并转至ldle状态
(3)Route-refresh报文不会改变BGP状态。
(4)如果收到Notification报文,那么BGP转至ldle状态
(5)如果收到TCP拆链通知,那么BGP断开连接,转至Idle状态
8.优先级
OSPF内部是10,外部150
ISIS没有内部外部,都是15,直连是0,静态是60
BGP是最不优的,优先级为最大值255
9.BGP路由来源
BGP没有算法,不会自己计算路由,也不会发现路由,只会传递路由
路由来源:Network(逐条注入)、import-route(批量操作—直连、静态、OSPF、ISIS路由)
建立BGP,双方都要配置,有延迟,需要稍等一会,成功后会更新一条日志,最后一个单词是Up,表示成功,可以通过 display bgp peer查看,当State为Established时为成功
<Huawei>sys
[Huawei]bgp 自己的AS号
[Huawei-bgp]peer 对方端口ip地址 as 对方的AS号
当使用network进行引入时,使用network 网段 网段相应的掩码(和OSPF不同,OSPF使用的是反掩码)
EBGP一般直连建邻居,如果非要用loopback口建邻居,注意多跳的问题
IBGP一般loopback口建邻居,要修改连接源地址,使用命令:peer 1.1.1.1 connect-interface lo0
10.BGP聚合路由
手工聚合 aggregate 10.1.0.0 22 detail-suppressed
自动聚合 summary automatic
手动聚合优于自动聚合
11.核心—通告原则(基本原则)
(1)第一条原则:只发布最优且有效(即下一跳地址可达)路由
通过display bgp routing-table命令可以查看BGP路由表
* :代表有效 > : 代表最优
(2)第二条原则:从EBGP对等体获取的路由,会发布给所有对等体
(3)第三条原则:从IBGP对等体获取的BGP路由,不会再发送给其他IBGP对等体,该条原则也被称为“IBGP水平分割”
如图所示,如果IBGP对等体学习到的路由会继续传递给其他的IBGP对等体:R2将一条路由传递给了IBGP对等体R3,R3收到路由之后传递给IBGP对等体R1,R1继续传递给IBGP对等体R2,至此路由环路形成了
第三条原则可能会带来新的问题,当BGP路由器R2将路由传递给BGP路由器R1时,由于第三条原则限制,R1无法将BGP路由传递给R3,R3将无法学习到路由
为解决该问题可以采用AS内IBGP全互联的方式,即R2、R3之间建立非直连的IBGP对等体关系,以此让BGP路由器R2将路由传递给BGP路由器R3
(4)第四条原则:当一台路由器从自己的IBGP对等体学习到一条BGP路由时(这类路由被称为IBGP路由),它将不能使用该条路由或把这条路由通告给自己的EBGP对等体,除非它又从IGP协议(例如OSPF等,此处也包含静态路由)学习到这条路由,该条规则也被称为BGP同步原则,华为不支持同步原则
同步原则---IGP跟EGP同步,同步了才能往下发,没同步就不能
- 没有同步原则,会发生路由黑洞,如果发生路由黑洞,有别的技术去解决(MPLS)
- 有同步原则,会发生路由震荡,即路由衰减功能,危害太大
华为认为震荡问题远远大于黑洞问题,所以不支持同步原则
总结※:
- 从E到I,下一跳默认不是本地---next-hop-local
- 从E到E,默认可以,自动防环--检查AS_Path
- 从I到I,有水平分割机制,默认不会传递(1.路由反射器 2.联邦联盟)
- 从I到E,默认可以传,同步原则(华为不支持)
12.network(宣告)命令:
(1)OSPF:宣告网段,计算路由,简单来说就是,OSPF通过network这条命令,把需要参与到路由计算的网段宣告到OSPF里,宣告之后可以计算路由,实现通网
[Huawei]ospf
[Huawei]area 区域号
[Huawei]network 网段 反掩码
(2)ISIS:宣告所在的AS号+设备自己的route id+00,不要忘记进入接口输入命令isis enable,开启ISIS
[Huawei]isis
//区域号以49.0000为例
[Huawei-isis-1]network-entity 49.0000.0000.0001.00
(3)BGP:宣告网段
①建邻居——peer
②传网段——需要谁通网就network谁
13.BGP路由属性
1.任何一条BGP路由都拥有多个路径属性
2.当路由器将BGP路由通告给它的对等体时,一并被通告的还有路由所携带的各个路径属性
3.BGP的路径属性将影响路由优选
4.每个属性可以实现BGP部分功能
属性分类:
1.公认:所有BGP必须识别
(1)公认必遵:Origin、AS_Path、Next hop——必须包括在每个Update消息里
(2)公认任意:Local_Preference、Atomic_aggregate——可能包括在某些Update消息里
2.可选:可以不识别
(1)可选过渡:Aggregator、Community——BGP设备不识别此类属性依然会接受该类属性并通告给其他对等体
(2)可选非过渡:MED、Cluster-List、Originator-ID——BGP设备不识别此类属性会忽略该属性,且不会通告给其他对等体
在BGP Update报文中,存在路径属性:
Path attributes
Path Attribute - ORlGIN: IGP
Path Attribute - AS PATH: 65536 1 2 3
Path Attribute - NEXT HOP: 172.16.1.1
公认必遵!!!!———————————————————————————————————
1.AS_Path:AS号的路径,即经过了哪些AS,确保EBGP对等体之间传递无环,也是路由优选的衡量标准之一,路由离开AS是添加本地的AS号,后续向前添加
①防环:在传递过程(从EBGP到EBGP)中会增加AS号,判断存的AS号中是否有自身AS号,有的话就不通
②路由优选:通过判断AS号的个数来判断哪一个更优(越少越优),去往同一个地方的不同路径才有可比性
③AS_Path类型:AS_SEQENCE、AS_SET、AS_Confed_Sequence、AS_Confed_Set
R3将R1和R2路由聚合后,AS_Path属性丢失,存在产生环路的风险,为此可以通过AS_SET类型的AS_Path属性携带聚合前的AS路径信息,可以把默认类型AS_SEQENCE改成AS_SET
AS_Confed_Sequence、AS_Confed_Set应用于BGP联邦联盟中,已经淘汰了
④使用Route-Policy修改BGP路由的AS_Path属性时,可以使用以下三种方式:追加、覆盖、删除
2.Origin:起源,三种方式,可以通过命令display bgp routing-table查看,最后一列Ogn即为Origin
起源名称 | 标记 | 描述 |
IGP | i | 如果路由是由始发的BGP路由器使用network命令注入到BGP的,那么该BGP路由的Origin属性为IGP |
EGP | e | 如果路由是通过EGP学习到的,那么该BGP路由的Origin属性为EGP(这种方式不存在了) |
Incomplete | ? | 如果路由是通过其他方式学习到的,则Orgin属性为Incomplete(不完整的)。例如通过import-route命令引入到BGP的路由 |
路由优选:当去往同一个目的地存在多条不同Origin属性的路由时,在其他条件都相同的情况下,BGP将按如Origin的下顺序优选路由:IGP>EGP>Incomplete(i>?)
3.Next hop:下一跳
当路由器接收到BGP路由后,需对BGP路由的Next_Hop属性值进行检查,该属性值(IP地址)必须在本地路由可达,如果不可达,则这条BGP路由不可用
在不同的场景中,设备对BGP路由的缺省Next Hop属性值的设置规则如下:
①BGP路由器在向EBGP对等体发布某条路由时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址(EBGP自己会改)
②BGP路由器将本地始发路由发布给IBGP对等体时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址(IBGP自己会改)
③路由器在收到EBGP对等体所通告的BGP路由后,在将路由传递给自己的IBGP对等体时,会保持路由的Next_Hop属性值不变(EBGP到IBGP不改变,需要配置next-hop-local)——修改Next hop,可以使用peer next-hop-local命令可以在设置向IBGP对等体(组)通告路由时,把下一跳属性设为自身的TCP连接源地址
④如果路由器收到某条BGP路由,该路由的Next_Hop属性值与EBGP对等体(更新对象)同属一个网段,那么该条路由的Next_Hop地址将保持不变并传递给它的BGP对等体
公认任意!!!!———————————————————————————————————
1.Local_Preference:本地优先级,可以通过命令display bgp routing-table查看——LocPrf
来源:AS外的路由进入到本AS时,由边界路由自动添加,默认Local_Preference值为100
作用:边界路由器通知AS内部的其他路由器,哪条路由时离开本AS的首选路径,数值越大越优先
特点:
①EBGP邻居之间不会发送,IBGP之间传递会携带
②通过命令bgp default local-preference 200 可以修改或者通过路由策略修改
2.Atomic_aggregate
作用:路由聚合后才会出现,用于通知其他路由器,传递的路由是危险的,因为路由聚合会导致明细的路由携带的路径属性丢失
可选过渡!!!!———————————————————————————————————
1.Aggregator
作用:路由聚合后才会出现,用于标记路由聚合行为发生在哪个AS及哪台BGP路由器上
该属性会携带着聚合路由器所在的AS号,以及该路由器的router-id
2.Community:团体属性
本质上是路由的标记,可以直接针对标记做一些操作或者策略
1.可以简化操作,提升效率 2.可以实现复杂的路由传递的需求
公认团体属性:有固定含义的团体属性
团体属性名称 | 团体属性号 | 说明 |
Internet | 0(0x00000000 ) | 设备在收到具有此属性的路由后,可以向任何BGP对等体发送该路由。缺省情况下,所有的路由都属于Internet团体,默认的 |
No_Advertise | 4294967042(0xFFFFFF02) | 设备收到具有此属性的路由后,将不向任何BGP对等体发送该路由 |
No_Export | 4294967041(0xFFFFFF01) | 设备收到具有此属性的路由后,将不向AS外发送该路由 |
No_Export_Subconfed | 4294967043(0xFFFFFF03) | 设备收到具有此属性的路由后,将不向AS外发送该路由,也不向AS内其他子AS发布此路由 |
可选非过渡!!!———————————————————————————————————
1.MED
BGP没有cost的概念,MED类似于BGP的开销
来源:由AS内部运行的IGP协议开销继承而来
作用:通知其他AS的路由器,那条路由是进入本地AS的首先路径,路由优选数值越小越优先
传递原则:不会跨AS传递,其他情况都可以
———————————————————————————————————————————
反射器--RR
作用:打破水平分割(水平分割是一个机制),实现把路由从IBGP发给IBGP(联邦联盟)
角色:1.反射器RR 2.客户端client
特点:
1.只有反射器知道自己是反射器,以及自己的客户端是谁,客户端全程闭眼玩家
2.反射器该干的事得干(I到E,E到E,E到I)
3.非客户不能反射给另一个非客户,其他都可以(客户面子大)
———————————————————————————————————————————
2.Originator-ID:起源者ID
作用:反射器防环
只有一台反射器不会环路的,因为水平分割,只有多台会环路
原理:由第一台接收到路由的反射器添加,添加路由产生者的router-id,当路由产生者的又一次接收到了这条路由,会检查该字段,发现跟自己的router-id一致,所以不接收
3.Cluster-List:反射器列表
作用:反射器防环
原理:每台反射器都会把自己的router-id,添加到该属性,接收到路由后会检查该属性,有没有自己的router-id,如果有则不接收
Preferred-Value!!!————————————————————————————————
Preferred-Value(协议首选值)是华为设备的特有属性,华为的亲儿子
Preferred-Value优先级最高的,最优的!!!
特点:
1.本地有效,不会对其他设备传递
2.越大越优先,默认0,取值范围是0~65535
3.通过命令或者路由策略可以调整该属性,用于控制路由优选,Preferred-Value只能在路由器本地配置,而且只影响本设备的路由优选。该属性不会传递给任何BGP对等体
14.BGP路由优选!!!!!!!!!!!!!!!!!!!!!!!
13条选路原则:(小口诀:“漂亮老男人”)
“漂亮”比谁大,“老男人”比谁小——0~8条规则
漂——P——Prefered-Value
亮——L——Local_Preference
老 ——L——本地始发优于其他
——A——AS_Path 比小
——O——Origin network>import
男人——M——MED 比小
——E——EBGP路由优先级高于IBGP路由
——N——Next_Hop的IGP度量值最小的路由
0.丢弃下一跳不可达的路由(默认规则)
1.优选Prefered-Value属性值最大的路由(亲儿子)
peer 10.0.3.3 preferred-value 100
2.优选Local_Preference属性值最大的路由(本地优先级)
3.本地始发的BGP路由优于从其他对等体学习到的路由
本地始发的路由优先级:优选手动聚合>自动聚合>network>import>从对等体学到的
手动聚合:人为去计算
R3上配置两条静态路由,将静态路由通过import-route注入到BGP,并通过aggregate命令进行手动聚合,同时增加关键字detail-suppressed抑制明细路由的对外通告
R3上执行如下操作:
ip route-static 10.0,45.0 255,255.255.128 null0
ip route-static 10.0.45.128 255,255.255.128 null0
bgp 200
aggregate 10.0.45.0 255.255,255.0 detail-suppressed
import-route static
自动聚合:不建议使用,会聚合成 / 8 ,聚合不精准,使用summary automatic触发
R3上执行如下操作:
ip route-static 10.0.45.0 255,255.255.128 null0
ip route -static 10.0.45.128 255.255.255.128 null0
bgp 200
summary automatic
import-route static
4.优选AS_Path个数最少的路由
5.优选Orgin属性最优的路由
Origin属性信按优先级从高到低的排列是IGP、EGP及Incomplete
6.优选MED属性值最小的路由
7.优选从EBGP对等体学来的路由(EBGP路由优先级高于IBGP路由)
8.优选到Next_Hop的IGP度量值最小的路由
OSPF开销越小越优先
R1通过display bgp routing-table 10.0.45.0 24 查看BGP路由的详细信息,下一跳10.0.2.2的BGP路由其IGPcost值变为了10,而下一跳为10.0.3.3的BGP路由其IGP cost为默认值1,所以R1优选下一跳为10.0.3.3的路由
在R1的路由详细信息中可以看到如下内容:not preferred for lGP cost。表明该路由因为IGP cost未被优选
9.优选Cluster_List最短的路由
R2看到的从R3过来的Cluster_List为0,从R1过来的为R1的router id,越少越优先,上面空的为优
10.优选Router_ID最小的设备R3通告的路由
11.优选Orginator_ID最小的设备通告的路由
router_id一致,比较起源者id
12.优选具有最小!P地址的对等体通告的路由
BGP默认没有等价路由,根据选路原则一定能选出一条最优,满足“漂亮老男人”的时候可以做等价,使用一条命令:maximum load-balsndng lbgp 2,最多支持16条路径
OK了,短暂的先结束一下咯~~~