目录
BGP邻居
IBGP:邻居的AS号和自身的AS号相同,建立的BGP邻居叫IBGP邻居 默认TTL为255
EBGP:邻居的AS号和自身的AS号不同,建立的BGP邻居叫做EBGP邻居 默认TTL为1
BGP报文
- Open报文
- 协商BGP参数
- Update报文
- 交换路由信息
- Keepalive报文
- 保持邻居关系
- Notification报文
- 差错通知
- Route-Refresh报文
- 用于在改变路由策略后请求对等体重新发送路由信息
Open关键报文
- My AS:用于标识自身所处的AS,邻居的open报文中My AS要和本地配置的一致。
- Version:用于标识当前的BGP版本,向下兼容。 BGP4
- Hold Time:默认为180s,即keeplive时间的3倍,双方不一致将会协商使用一个小的。
- Router ID:用于标识自身的BGP Router ID,不能和邻居冲突。
- 认证:认证需要通过
- 地址簇必须要有一种协商成功。(IPv4 单播 IPv4 组播 不能成功 IP四单播 IP四单播 可以成功)
- 默认情况下在华为设备携带了3中可协商能力:1、IPV4单播路由功能 2、路由刷新能力 3、4字节AS号支持能力
BGP工作原理
BGP状态
- Idle状态是BGP初始状态。在Idle状态下,BGP拒绝邻居发送的连接请求。也不会想邻居发送TCP syn,只有32s之才会向邻居发送TCP syn 并且将邻居转为connect状态。
- 卡在idle状态的原因:本地没有去往邻居的路由。
- 在connect状态下,BGP启动连接重传定时器(connect。Retry),等待TCP完成连接
- 如果TCP连接成功,那么BGP向对等体发送open报文,并转至opensent状态。
- 如果TCP连接失败,那么BGP转至Active状态。(邻居开BGP了 但是没配邻居)
- 如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP继续尝试和其它BGP对等体进行TCP连接,停留在connect状态。
- 常见卡在connect状态的原因:
- 邻居没有启用BGP协议
- 沿途路径存在流量过滤将TCP SYN拒绝了
- EBGP邻居建立没有配置多跳。
- 在Active状态下,BGP总是在试图建立ICP连接。
- 如果TCP连接成功,那么BGP向对等体发送Open报文,关闭连接重传定时器,并转至opensent状态
- 如果TCP连接失败,那么BGP停留在Active状态。
- 如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP转至connect状态。
- opensent状态下,BGP等待对等体的open报文,并对收到的0pen报文中的AS号、版本号、认证码等进行检查。
- 如果收到的open报文正确,那么BGP发送Keepalive报文,并转至openconfirm状态。
- 如果发现收到的open报文有错误,那么BGP发送Notification报文给对等体,并转至Idle状态。
- 在Established状态下,BGP可以和对等体交换Update、Keepalive、Route-refresh报文和Notification报文
- 如果收到正确的Update或Keepalne报文,那么BGP就认为对端处于正常运行状态,将保持BGP连接。
- 如果收到错误的Update或Keepalive报文,那么BGP发送Notification报文通知对端,并转至ldle状态
- Route-refresh报文不会改变BGP状态。
- 如果收到Notification报文,那么BGP转至ldle状态
- 如果收到TCP拆链通知,那么BGP断开连接,转至ldle状态。
BGP路由
产生方式
- 通过network的方式,将本地路由中的路由发布出去。
- 通过import-route的方式,将其他协议的路由引入到BGP协议中。
- 通过手动聚合的方式,产生一条聚合路由(汇总)
- 通过自动聚合的方式,产生一条聚合路由。
得到BGP路由
- IBGP邻居给我传递
- EBGP邻居给我传递
- 自身产生BGP路由
BGP路由通告原则
BGP只会将有效路由中的最优的BGP路由通告给邻居。
* -valid 有效 > - best 最优
- 自身产生的BGP路由通告给所有的BGP邻居。
- 从IBGP邻居收到的路由,不会传递给IBGP邻居。(防环)
- 从IBGP邻居收到的路由,会传递给EBGP邻居
- 从EBGP邻居收到的路由,会传递给IBGP邻居
- 从EBGP邻居收到的路由,会传递给EBGP邻居
- [AR2-bgp] peer 4.4.4.4 next-hop-local //从EBGP邻居接受的路由,发送给IBGP邻居的时候修改下一跳地址。
- @只需要在AS的边界设备上,针对本AS内的IBGP邻居配置。
BGP的防环机制
- AS内的防环使用IBGP水平分割机制(只传一跳),即从IBGP邻居收到的路由不会传递给另一个IBGP邻居
- AS之间的防环原则:利用了BGP的路由属性,即BGP将路由发送给EBGP邻居的时候会将自身的AS号添加到as-path列表中;并且规定,从EBGP邻居收到的路由如果携带自身AS号 则不接受该路由
BGP同步
BGP下一跳属性
- 自身产生的路由发送给所有BGP邻居的时候,下一跳自动修改。
- 从EBGP邻居接受的路由发送给IBGP邻居的时候,下一跳不会自动修改。
- 从EBGP邻居接受的路由发送给EBGP邻居的时候,下一跳自动修改。
- 从IBGP邻居接受的路由发送给EBGP邻居的时候,下一跳自动修改。
- 从IBGP邻居接受的路由不存在发送给IBGP邻居的情况(防环)
自动修改,指的是将路由传递给该邻居的时候,下一跳修改为自身与该其建立邻居的接口IP。
路由黑洞
- BGP同步:用于防止BGP路由黑洞问题。
- BGP同步机制:即从IBGP邻居接受的路由,需要在IGP表中存在,才会发送给EBGP邻居如果IGP表中不存在,则不会发送给EBGP邻居。
- 为什么不使用BGP同步解决路由黑洞问题呢?
1、BGP同步并不能完全解决路由黑洞问题。
2、出现了更好的解决方案:- AS内部采用全互联的IBGP邻居架构,让所有路由器都运行BGP协议,从而使每台路由器都能够学到BGP路防止黑洞产生。
- 在ASBR上将BGP路由引入到IGP协议中。(该方法已被淘汰)
- 在ASBR之间建立GRE隧道,解决路由黑洞问题。(节约成本)
- 通过LSP隧道解决路由黑洞问题。
BGP选路属性
- 如果此路由的下一跳不可达,忽略此路
- 由优选协议首选值(PrefVal)最高的路由
- 优选本地优先级(LocalPref)最高的路由
- 优选本地生成的路由
- 优选AS路径(AS_Path)最短的路由
- 比较Origin属性,依次优选Origin类型为IGP、EGP、Incomplete的路由
- 优选MED值最低的路由
- 优选从EBGP邻居学来的路由(EBGP路由优先级高于IBGP路由)
- 优选到BGP下一跳IGP Metric较小的路由
- 优选Cluster_List最短的路由
- 起源ID
- 优选RouterID最小的路由器发布的路由
- 比较对等体的IP Address,优选从具有较小IP Address的对等体学来的路由
协议首选值(PrefVal)
- 华为BGP私有属性
- 只在本地有效,不会传递给任何的BGP邻居
- 默认等于0
- BGP的选路属性
- 越大越优
- 针对发送给邻居的BGP路由,无法修改协议协议首选值,因为报文中并不携带
- 针对接受BGP邻居的路由,才可修改协议首选值。
- 当不想影响其他设备的选路,只针对单台设备的选路进行控制的时候,建议使用协议首选值。
本地优先级(Local-pref)
- 公认任意属性
- 只在一个AS内部进行传递,不会传递给EBGP邻居。
- 用于BGP路由的路径选择(默认100,越大越优先。)
- 应用在AS内存在多个出口的时候选择一个出口访问外部网络
- EBGP路由不携带本地优先级属性,对于不携带本地优先级属性的BGP路由,设备将会认为这个BGP路由的本地优先级为默认本地优先级(默认的本地优先级为100)
修改方式
- 针对接受或者发送给BGP邻居的路由进行修改(Route-policy)
- EBGP邻居之间out方向不可以修改 (图AR2上 写路由策略的方向)
- EBGP邻居之间in方向可以修改
- IBGP邻居之间in,out方向可以修改
- 修改默认的本地优先级
- [AR2-bgp]default local-preference //修改默认的本地优先级。
- 关键点:在只会在对没有本地优先级属性的路由生效
- 哪些BGP路由没有本地优先级
- 自身产生的:network和import-route指令变成的BGP路由没有本地优先级。
- 邻居传递的:EBGP邻居传递的路由默认没有本地优先级。
优选本地生成的路由
- 手动聚合>自动聚合>etwork>import-route>邻居传递的
- 当下一跳等于127.0.0.1(手动聚合,自动聚合)或者0.0.0.0(network,import-route)的时候,路由即为本地产生的。
优选AS路径(AS_Path)最短的路由
- 公认必遵属性
- 用于AS之间的防环属性
- 用于BGP路由的路径选择。
AS之间防环:
- BGP设备将路由发送给EBGP邻居的时候,将会在路由的as-path属性中添加自身的AS号
- BGP设备从EBGP邻居接受路由的时候,将会检查路由的AS-PATH属性列表,如果存在自身的AS号,那么将忽略这条BGP路由。
- IBGP邻居之间不会做AS-PATH的防环检测。
- 路径选择:当存在去往同一个目的地的多条BGP路由时,比较两条路由的AS-PATH列表,越短越优。
- 修改方式:AS-path在任何BGP邻居之间的in/out方向都可以进行修改。
- @apply as-path 100 100 additive //在原有的As-path列表中添加新的AS号,
- @apply as-path 100 100 overwrite //使用指定的AS-path覆盖原有的as-path
- @apply as-path none overwrite //清空原有的as-path列表。
Origin(起源属性)
- 公认必遵属性
- 描述了这条路由是如何成为BGP路由的
- 用于BGP路径选择
- i:表明该路由是通过network的方式变成的BGP路由。
- ?:表明该路由是通过import-route的方式变成BGP路由。
- e:表明是从EGP协议学到的该路由。
- 选路规则:i > e > ?
MED
- 可选非过渡属性
- 用于BGP路由的路径选择(越小越优)
- 如果报文中不携带MED值,默认认为MED为0.
MED的修改方式:
- 在所有BGP邻居之间 in/out方向均可修改。
MED选路方式:
- @默认情况下,只有当两条BGP路由as-path列表中,最左边的AS号相同的时候,才会进行MED的比较
- @compare-different-as-med //命令用来配置允许比较来自不同自治系统中的邻居的路由的MED值
如何产生MED呢:
当一条路由变为BGP路由的时候,这个路由在IP路由表中的Cost为多少,那么变为BGP路由之后MED为多少。
华为MED通告原则:
- 自身始发的路由,MED会通告为IBGP和EBGP邻居。
- 从IBGP邻居接受的路由,传递给EBGP邻居的时候,不携带MED值
- 从EBGP邻居接受的路由,传递给IBGP邻居的时候,携 带 MED值。
- 从EBGP邻居从EBGP邻居接受的路由传递给EBGP邻居的时候,不携带MED
BGP负载
(负载后路由表就有2条路)
- maximum load-balancing
- INTEGER<1-8> //针对IBGP和EBGP路由都开启负载
- ebgp //针对EBGP路由开启负载
- ibgp //针对IBGP路由开启负载
- 无论BGP设备是否开启负载功能,都会选取出一条最优的BGP路由传递给邻居。
- BGP路由的负载需要满足AS-PATH属性完全相同:
- AS号码一样
- AS号出现的顺序一样
- AS号数量一样
- load-balancing as-path-ignore 命令用来设置路由在形成负载分担时不比较路由的AS-Path屋性
BGP团体属性
- 作用:
- 用于限制BGP路由的传递范围。
- 类似于IGP协议中的tag值,用于对BGP路由实现标记。
- 分类:
- 公共团体团体属性:
- Internet:默认所有路由都有该属性,具有该属性BGP路由发送给所有的BGP邻居但是依然要满足BGP路由的通告原则。
- No_Advertise:收到有这个属性的路由,自身不会发送给其他的BGP邻居
- No_Export:收到了有这个属性的路由,不会发送给EBGP邻居。
- No_Export subconfed:收到具有该属性的路由,不会发送给成员EBGP邻居,也不会发送给EBGP邻居。
- 团体属性,不会自动传递给BGP邻居,需要在邻居之间配置开启团体属性的传递功能。
- [AR1-bgp]peer 10.8.12.2 advertise-community //开启团体属性的传递能力
- 团体属性可以携带多个,当存在冲突的时候,传递范围小的生效。
- 自定义团体属性:一共四个字节,用于对BGP路由实现标记。
- aa:nn : aa占用2个字节,nn占用两个字节,取值都是0~65535。一般使用路由器所在的AS号表示。
- 团体号:4个字节全部使用十进制数进行表示,其中存在一些私有的范围,具体查看华为说明。
- 公共团体团体属性:
- 团体列表:
- ipcommunity-fiter本质作用就是为了对BGP路由的团体属性进行匹配
- 类型:
- 基本:编号范围1-99,直接配置团体属性,匹配BGP路由。
- 高级:编号100-199,通过正则表达是匹配BGP路由。默认拒绝所有。
OSPF,IS-IS,BGP概念区分
概念 \ 协议 | OSPF | IS - IS | BGP |
---|---|---|---|
区域相关 | 区域是将自治系统划分的不同部分,每个区域有独立链路状态数据库,通过 ABR 实现区域间通信 | 区域用于划分网络,减少链路状态信息传播范围和处理复杂度 | 自治系统(AS)是由一个或多个网络运营商或组织管理的一组路由器和网络,具有唯一的自治系统编号(ASN),是 BGP 路由信息交换的基本单位 |
边界路由器 | ABR(区域边界路由器)连接同一个自治系统内的不同区域,负责区域间路由信息传递和汇总 ASBR(自治系统边界路由器)连接 OSPF 自治系统与其他自治系统,引入外部路由并通告内部路由到其他自治系统 | Level - 1/2 路由器兼具区域内和区域间路由功能,类似 OSPF 的 ABR,连接不同区域 Level - 2 路由器主要负责区域间路由,维护整个网络拓扑信息 | EBGP(外部边界网关协议)用于不同自治系统之间的 BGP 连接,交换跨自治系统的路由信息 IBGP(内部边界网关协议)用于同一个自治系统内部的 BGP 连接,在自治系统内传播路由信息 |
路由信息交换单元 | 链路状态通告(LSA),用于描述网络拓扑结构和链路状态 | 链路状态协议数据单元(LSP),类似于 LSA,描述路由器连接状态和邻居关系等 | BGP 通过路径向量协议交换路由信息,携带丰富的属性来描述路由的特征和策略 |
特殊机制 | 无 | 无 | 路由反射器(RR)用于解决 IBGP 全连接问题,将从一个 IBGP 邻居学到的路由反射给其他邻居 联盟(Confederation)将大型自治系统划分为多个子自治系统,简化管理和路由策略配置 |