BGP
BGP特性
- EGP、路径矢量
- TCP 端口号 179
- 基于单播发送协议报文,可以跨越路由器建立BGP邻居关系
- 没有定期更新、只有触发更新
- 路由携带丰富的属性
- 支持CIDR、VLSM、路由过滤、路由策略
BGP自治系统AS
BGP使用AS号区分不同的AS
在BGP中,一台路由器只能有一个AS号,只能属于一个AS
BGP的AS内能运行多种IGP协议,通过IGP协议来发现路由以及保证AS内BGP邻居之间的TCP的可达
AS号
2字节AS号: 1--65535(默认所有厂家都支持)
公有AS号:能在公网上运行的AS号:1--64511
私有AS号:只能在私网上运行的AS号:64512--65535
4字节AS号:1--43亿(不是所有设备都支持,华为默认支持)
BGP报文交互中的角色
- Speaker:发送BGP消息的路由器称为BGP发言者,它接收或产生新的路由信息,并发布给其它BGP Speaker。
- Peer:相互交换消息的BGP Speaker之间互称对等体(Peer),若干相关的对等体可以构成对等体组(Peer Group)。
BGP邻居关系
EBGP邻居:建立BGP邻居关系的路由器不在同一个AS。
一般使用直连物理接口IP建立EBGP邻居。
EBGP邻居间交互的BGP报文IP TTL = 1。(可以修改)
EBGP使用环回接口建立邻居需要注意的问题:
1. 在EBGP邻居之间存在多条物理链路的时候
2. 一般使用静态路由保证环回接口TCP可达
3. 通过修改E-BGP的多跳,加大报文发送TTL值
4. 指定环回接口为更新源IBGP邻居:建立BGP邻居关系的路由器在同一个AS内。
一般使用Loopback接口IP建立IBGP邻居。
IBGP邻居间交互的BGP报文IP TTL = 255。
BGP路由传播原则
从EBGP邻居接收的路由,可以传给其他的EBGP邻居和IBGP邻居;
从IBGP邻居接收的路由,不能传给其他的IBGP邻居(IBGP邻居的水平分割);
从IBGP邻居接收的路由,能否传给其他的EBGP邻居,视同步情况而定。(同步机制默认关闭)。
只有最优并且是自己使用的路由,才能向其他邻居传播
当一条路由的前缀标示 > 表示最优路由
成为最优路由条件:
1. 有效路由 (路由的前缀标示 *)
下一跳地址可达
如果开启同步,必须满足同步条件
路由的前缀和路由的下一跳地址不能一致
2. 根据选路规则选出的最优路由
BGP同步
- 从IBGP邻居学到的路由,在发给EBGP邻居之前,做同步检查:该条路由是否也通过IGP学到,如果通过IGP也学到,则能传给EBGP邻居,否则不能传。
- 同步机制仅仅避免了路由转发黑洞,并没有解决路由转发黑洞问题。
- 现在华为VRP平台无法开启同步机制,采用其他机制解决路由黑洞问题:
- 在数据转发所需经过的路径上也运行BGP
- 将所需的BGP路由引入到IGP中
- MPLS
解决BGP路由转发黑洞的方案
IBGP全连接
因为AS内有IBGP邻居水平分割的机制,因此AS内的IBGP邻居建立应采用全连接的方式。
反射器
作用:IBGP水平分割的替代方案,减少IBGP邻居关系的数量
反射原则:
1. 从非客户机接收的路由,能反射给所有的客户机。
2. 从客户接接收的路由,能反射给所有的客户机和非客户机。
3. 从EBGP邻居接收的路由,能反射给所有的客户机和非客户机。
4. 仅是反射器上最优并且是反射器自己使用的路由可以被反射。
5. BGP路由被反射时,该路由的属性默认不会被修改。
反射器防环原则:
- 集群ID:反射器进行BGP路由反射时,会在集群列表最左边添加自身的集群ID,当反射器接收到BGP路由时,如果发现集群列表中包含自身的集群ID,则丢弃该路由。默认选择反射器的Router-id做为集群ID。
- 源ID(ORIGINATOR_ID) :反射器进行BGP路由反射时,会将该路由发布者的Router-id做为源ID,当BGP路由器收到BGP路由时,如果发现该路由的源ID与自身的Router-id相同,则丢弃该路由。
对比:谁添加、添加的是什么、谁检查
联盟
作用:IBGP水平分割的替代方案,减少IBGP邻居关系的数量
实现:在大AS里划分小AS,将原来的IBGP邻居转化为联盟内的EBGP邻居关系,现实路由的传递
对等体组
作用:简化BGP配置
分为IBGP对等体组和EBGP对等体组。
BGP状态机
idle:初始化
connect:建立TCP三次握手,TCP等待时间为32S
Active:TCP三次握手失败,不断尝试重新建立
一般BGP的配置错误导致停留在此状态(邻居地址配置错误;AS号错误;connect-interface忘配置,或配错)
open-sent:发open,等open
open-confirm:发keepalive,等keepalive
如果在5S内收到keepalive报文,进入establish状态
如果在5S内收到Notification报文,进入idle状态
如果在5S内没有收到keepalive报文,进入idle状态Established:接收到对方的Keepalive,BGP邻居建立成功。
BGP路由选择原则
首先丢弃下一跳(NEXT_HOP)不可达的路由;
优选 Preferred-value 值最大的路由;
优选本地优先级(LOCAL_PREF)最高的路由;
优选聚合路由(手工聚合产生的路由优于自动聚合产生的路由);(华为优选本地起源(Network))
优选 AS 路径(AS_PATH)最短的路由;
依次选择 ORIGIN 类型为IGP、EGP、Incomplete 的路由;
优选 MED 值最低的路由;
依次选择从 EBGP、联盟、IBGP 学来的路由;
优选下一跳IGP Cost 值最低的路由;
检查是否开启否则均衡,如果开启,满足以下条件就会进行负载:
a. BGP路由的AS号要相同
b. BGP路由的下一跳地址不同优选 CLUSTER_LIST 长度最短的路由;
优选 ORIGINATOR_ID 最小的路由;
优选 Router ID 最小的路由器发布的路由。
优选地址最小的对等体发布的路由。
BGP路由聚合
自动聚合:
- 只能对通过路由引入得到的BGP路由自动聚合,默认开启,实用时建议关闭。
- 有类聚合。
- 明细路由将被抑制,只发布汇总路由。
- 缺点:不能控制聚合路由的范围,不能针对network的路由生效
手动聚合
1 |
|
注意:
- 不加detail-suppressed时既发聚合也发明细,加上detail-suppressed只发聚合不发明细。
- 手工聚合产生的聚合路由可以再次做手工聚合
- 配置聚合之后,会自动在全局路由表中产生一条针对聚合路由指向null 0 的BGP路由
- 聚合路由是否继承明细路由的属性?
- AS-PATH:默认不继承,可以通过AS-SET还原
- next-hop:不继承
- origin:继承最差
- 团体属性:继承
- 本地优先级,MED:不继承
- 聚合路由添加的属性?
- AGGREGATE:用于标示聚合路由所在的AS以及产生者的Router id
- ATOMIC_AGGREGATE:聚合路由并且抑制明细之后才会产生,主要用于表示聚合路由丢失了路径属性(主要用于给管理员提示)
- attribute-policy: 修改聚合路由的路径属性,配合route-policy修改
- origin-policy: 根据条件的产生聚合路由,配合route-policy
- suppress-policy: 将匹配中的明细路由抑制,与detail-suppressed互斥,配合route-policy
BGP衰减
作用:对震荡的BGP路由进行抑制。
关键参数:惩罚值、抑制阈值、半衰期、再使用阈值
实现:
惩罚值:默认为1000,当BGP路由发生抖动时对路由的惩罚值
抑制阈值:默认为2500,当BGP路由惩罚值达到抑制阀值时,停止更新路由
半衰期:默认15分钟,当BGP路由没有在抖动惩罚值减少一半
使用阈值:默认750,当BGP路由域值到达使用阀值,正常更新路由
路由衰减默认不启用,如果开启只针对EBGP有效
BGP安全特性
认证:影响BGP邻居关系的建立
MD5:认证信息存放在TCP的option中
GTSM:通用TTL安全机制
主要用于防止多跳攻击
现实:检查bgp报文中TTL值是否在限制的TTL范围之内,如果不在直接丢弃报文
GTSM机制与EBGP多跳互斥限制从对等体接收的路由数量
防止从邻居收到大量的路由信息,导致设备性能消耗过大
AS_Path长度保护
限制BGP路由AS-PATH的最大经过的AS号
BGP ORF 出方向路由过滤
基于本地的入口策略构建对端的出口策略,实现BGP按需发布路由
实现:通过在open报文的扩展能力参数中增加ORF特性实现,通过路由刷新报文携带自身入方向的策略,邻居收到自身入方向的策略的策略会自动产生出方向策略。
BGP报文格式
BGP报文组成:BGP报文头部+BGP报文类型
BGP报文头部:
- marker:默认全为1,使用BGP KEYCHAIN 非全1(做BGP认证时能进行检查)
- 长度:标示报文总长度
- type:用于BGP报文类型
Open(Type 1)
用于建立BGP邻居关系时发送参数进行协商,除Hold time外,其他信息都会影响BGP邻居建立
- 版本号:当前V4 协商时版本必须一致
- AS号:发送报文路由器的AS 协商时对比收到的AS号和指定的AS号是否一致
- Hold time:表示TCP连接的失效时间,默认为180S 协商时取小值
- BGP router id:用于表示一台BGP路由器 协商时收到的 BGP router id和自身不能一致
- BGP router id选举方式(已经选出router id,重新指定router id,需要重新启动BGP进程才会生效)
- 系统视图下指定
- BGP进程下指定
- 自动选择环回接口或者物理接口IP地址大的
- BGP router id作用:
- 在路由聚合时,路由聚合者用router id表示
- 防环时使用(起源ID,簇ID)
- 选路
- BGP router id选举方式(已经选出router id,重新指定router id,需要重新启动BGP进程才会生效)
- BGP的扩展能力参数
- 多协议扩展能力
- IPV4单播(默认只能建立IPV4的单播邻居)
- IPV4组播
- VPNv4
- IPV6单播
- IPV6组播
- VPNv6
- EVPN
- 路由刷新能力(默认开启)
- 4字节AS号支持能力(默认开启)
- BGP出方向路由过滤功能(需要手工配置)
- 认证(可选配置):只支持MD5认证
- 多协议扩展能力
Update(Type 2):
路由更新
- 携带BGP可达路由信息,使用NLRI
- 携带BGP可达路由路径属性
- 携带BGP不可达路由,主要用于撤销路由
- 如果路由信息的路径属性不一致,使用不同的update报文update报文只会在邻居建立之后、收到路由刷新报文以及当路由发生变化时发出。
- Update报文结构
- Withdrawn Routes Length :(2字节无符号整数)不可达路由长度,表示Withdrawn Routes字段的数据长度。如果Withdrawn Routes Length字段数值为0,则表示Withdrawn Routes字段没有任何数据,在UPDATE消息中不会被显示。
- Withdrawn Routes :(变长)撤销路由。该字段包括一系列的IP地址前缀信息,以<length, prefix>的格式来表示,比如<19,198.18.160.0>表示一个198.18.160.0 255.255.224.0的网络。
- Path Attribute Length :(2字节无符号整数)路由属性长度,表示Path Attributes字段的数据长度。如果Path Attribute Length数值为0,则表示Path Attributes字段没有任何数据,在UPDATE消息中不会被显示。
- Path Attributes:(变长)更新的路由属性列表。按其类型号从小到大的顺序排序,填写更新的路由的所有属性。每一个属性单元包括属性类型,属性长度,属性值三部分。
- Network Layer Reachability Information :(变长)网络可达信息。包括一系列的IP地址前缀。格式与撤消路由字段一样<length, prefix>
Notification(Type 3)
通知差错
- 差错通知报文,当收到BGP报文中的参数错误时会发出
- 当邻居收到Notification报文会断开TCP的连接
- Notification报文结构
- Errorcode:错误码。1字节长的字段。每个不同的错误都使用唯一的代码表示,而每一个错误码都可以拥有一个或多个错误子码,但如果某些错误码并不存在错误子码的话,则该错误子码字段以全0表示。
- Errsubcode:错误子码。
- Data:指定错误数据内容
Keepalive(Type 4)
维护邻居关系
- 充当OPEN报文的确认,在收到open报文同意open报文中的参数时发送
- 保持TCP的连接,每60S发送一次
- Keepalive报文只有BGP报文头
Route-Refresh(Type 5)
用于动态的请求BGP路由发布者重新发布UPDATE报文,进行路由更新
BGP路由属性BGP属性分类
属性分类 主要包含的属性
公认必遵属性 | ORIGIN属性、AS_PATH属性、NEXT_HOP属性 |
---|---|
公认可选属性 | LOCAL_PREF属性、ATOMIC_AGGREGATE属性 |
可选传递属性 | COMMUNITY属性、AGGREGATE属性 |
可选非传递属性 | MED属性、CLUSTER_LIST属性、ORIGINATOR_ID属性 |
AS-PATH
AS路径,公认必遵
记录了BGP路由所经过的AS的编号。
- BGP路由器将BGP路由传给EBGP邻居时,在AS-PATH列表最左边添加自身的AS号。
- 作用:
- 在AS间防环:BGP路由器接收到BGP路由时,如果发现AS-PATH列表中包含本AS的编号,则丢弃该路由。
- 量化距离,影响选路
- AS_Path 4种表示方式:
- AS_Path seq:有序排放AS号
- AS_Path as-set:无序排放AS号,做路由聚合时使用
- AS_Path confed seq:联盟内AS号有序排放
- AS_Path confed as-set:联盟内由聚合时使用,无序排放AS号
- fake-as AS号欺骗(可以用于隐藏真实AS号)
Next-Hop
下一跳,公认必遵
- 将路由传给EBGP邻居时,路由的下一跳为自己。
- 将路由传给IBGP邻居时,路由的下一跳默认保持不变。
- 多点可达环境中,路由的下一跳保持不变。
- 自身产生BGP路由下一跳地址为0.0.0.0(聚合路由为127.0.0.1)
ORIGIN
起源属性,公认必遵
- IGP:路由是通过network命令被发布进BGP的,”i”
- EGP:”e”
- Incomplete:路由是通过imort-route命令被发布进BGP的,”?”
- 路由选择顺序:i > e > ?
- 起源属性所有的AS都会传递
- 起源属性在传递过程中不会做任何的修改,除非手工修改
- 修改方式:通过route-policy
LOCAL_PREF
本地优先级,公认可选
默认值100,数值越大越优先。
只能在AS内传递。
MED
多出口鉴别器,可选非传递
默认值取BGP路由来源的度量值, 数值越小越优先。
可以在AS内传递,也可以在相邻AS间传递,不能跨越AS传递。
注意问题:只有来自相同AS的路由才会比较MED值,主要路由的AS-path对比是否来自相同的AS
Preferred-value
首选值,H3C私有属性
默认值为0,越大越优先。
本地有效,不会随着BGP路由传递。
ATOMIC_AGGREGATE
原子聚合,公认可选
用来通告路由接收者,该路由是经过聚合的
团体属性(相当于IGP中的TAG)
- 公认团体属性:标记BGP路由的可传递性。
- INTERNET:缺省情况下,所有的路由都属于INTERNET 团体。具有此属性的路由可以被通告给所有的BGP 对等体。
- NO_EXPORT:具有此属性的路由在收到后,不能被发布到本地AS之外。如果使用了联盟,则不能被发布到联盟之外,但可以发布给联盟中的其他子AS。
- NO_ADVERTISE:具有此属性的路由被接收后,不能被通告给任何其他的BGP 对等体。
- NO_EXPORT_SUBCONFED:具有此属性的路由被接收后,不能被发布到本地AS 之外,也不能发布到联盟中的其他子AS。
- 自定义团体属性:类似于给BGP路由打标记。如:200 : 1
- 团体属性值默认不会传递,需要手工配置
- 匹配团体属性,需要团体属性列表进行匹配
- 基本团体属性列表:使用具体的团体属性值,匹配一个或者多个团体属性
- 高级团体属性列表:使用正则表达式进行匹配团体属性
高级(扩展)的团体属性:8个字节
在MPLS VPN中使用
RT
Soo
�用
RT
Soo