BGP路由协议(1)
什么是BGP
BGP是外部路由协议,是一种增强的距离矢量路由协议。
BGP作用
用来在AS之间传递路由信息。
什么是系统(AS)
AS是由同一个技术管理机构管理、使用统一选路策略的一些路由器的集合。
BGP特征
- 可靠的路由更新机制
- 丰富的Metric度量方法
- 从设计上避免了环路的发生
- 为路由附带属性信息
- 支持CIDR(无类别域间选路)
- 丰富的路由过滤和路由策略
可靠的路由更新机制
- 传输协议:TCP,端口号179
- 无需周期性更新
- 路由更新:只发送增量路由
- 周期性发送keepAlive报文检测TCP的连通性
BGP报文五种类型:
- Open:负责和对等体建立邻居关系。
- KeepAlive:该消息在对等体之间周期性地发送,用以维护连接。
- Update:该消息被用来在BGP对等体之间传递路由信息。
- Notification:当BGP Speaker检测到错误的时候,就发送该消息给对等体。
- Route-refresh:用来通知对等体自己支持路由刷新能力。
BGP协议中消息的应用
- 通过TCP建立BGP连接时,发送OPEN消息
- 连接建立后,如果有路由需要发送或路由变化时,发送UPDATE消息通告对端
- 稳定后要定时发送KEEPALIVE消息以保持BGP连接的有效性
- 当本地BGP在运行中发现错误时,要发送NOTIFICATION消息通告BGP对等体
- ROUTE-REFRESH消息用来通知对等体自己支持路由刷新
BGP六种状态机
Idle、Connect、Active、OpenSent、OpenConfirm和Established。
BGP邻居关系
BGP邻居关系建立在TCP连接的基础之上
可以通过IGP或静态路由来提供TCP连接的IP可达性
BGP两种邻居
IBGP和EBGP
BGP通告原则
- BGP Speaker只把自己使用的最优路由通告给对等体
- BGP Speaker从EBGP获得的路由会向它所有BGP对等体通告(包括EBGP和IBGP)
- BGP Speaker 从IBGP获得的路由不会通告给它的IBGP邻居。
- BGP Speaker 从IBGP获得的路由是否通告给它的EBGP对等体要依IGP和BGP同步的情况来决定
AS内部的IBGP对等体为什么需要建立全互连?
为了保证IGP对等体之间的连通性
BGP如何解决对等体数量过多而导致的占用资源过多的问题?
- 路由反射器
- 路由联盟
BGP的路径属性
BGP路径属性是一组描述BGP前缀特性的参数
BGP路径属性可以被分为四大类:
- 公认强制(Well-known mandatory)
- 公认可选(Well-known discretionary)
- 可选过渡 (Optional transitive)
- 可选非过渡 (Optional non-transitive)
公认属性是所有BGP路由器都必须识别的属性
- 公认必遵 (Well-known mandatory)
-
- 所有BGP路由器都可以识别,且必须存在于Update消息中。如果缺少这种属性,路由信息就会出错
- 公认任意 (Well-known discretionary)
-
- 所有BGP路由器都可以识别,但不要求必须存在于Update消息中,可以根据具体情况来决定是否添加到Update消息中
可选属性不需要都被BGP路由器所识别
- 可选过渡 (Optional transitive)
-
- BGP路由器可以选择是否在Update消息中携带这种属性。接收的路由器如果不识别这种属性,可以转发给邻居路由器,邻居路由器可能会识别并使用到这种属性
- 可选非过渡 (Optional non-transitive)
-
- BGP路由器可以选择是否在Update消息中携带这种属性。在整个路由发布的路径上,如果部分路由器不能识别这种属性,可能会导致该属性无法发挥效用。因此接收的路由器如果不识别这种属性,将丢弃这种属性,不必再转发给邻居路由器
常见BGP路由属性
属性 | 类别 |
---|---|
1. Origin | 公认强制 |
2. AS_PATH | 公认强制 |
3. Next hop | 公认强制 |
4. MED | 可选非过渡 |
5. Local-Preference | 公认可选 |
6. Atomic-Aggregate | 公认可选 |
7. Aggregator | 可选过渡 |
8. Community | 可选过渡 |
9. Originator-ID | 可选非过渡 |
10. Cluster-List | 可选非过渡 |
11. MP_Reach_NLRI | MPLS/v*n体系结构 |
12. MP_Unreach_NLRI | MPLS/v*n体系结构 |
13. Extended_Communities | MPLS/v*n体系结构 |
起源(Origin)属性
决定路由Origin属性的方式
- 某条路由是直接而具体的注入到BGP路由表中的,则origin属性为IGP
- 通过network命令注入BGP的路由
- 通过EGP(RFC904)学到的路由,则origin属性为EGP
- 其他情形下,Origin属性都为 Incomplete
- 通过import命令注入BGP的路由
Origin属性值默认情况下不被任何路由器修改
AS_PATH属性
AS_PATH如何避免形成路由环路?
BGP不会接受AS_PATH中已包含本地AS号的路由。如果BGP路由信息发布者从EBGP对等体收到一条路由,它的AS_PATH包含发布者自己的AS号,就说明这条路由曾经从本AS发出过,将其丢弃,同时不再进行转发。
MED (Multi-Exit-DISC) 属性
MED是可选非过渡属性
区别到达同一邻居AS的多条入口链路(MED值越小,链路越优先)
通过EBGP发送MED值给对等体
LOCAL-PREF与MED的区别。
- MED通常通过外部链路宣告给对等体,区分本地AS到同一邻居AS之间的多入口链路,MED数值越小越优
- LOCAL_PREF只能发布给IBGP邻居,数值越高越优先
其他属性后续再复习
BGP路径选择过程
- 如果此路由的下一跳不可达,忽略此路由
- Preferred-Value值数值高的优先
- Local-Preference值最高的路由优先
- 聚合路由优先于非聚合路由
- 本地手动聚合路由的优先级高于本地自动聚合的路由
- 本地通过network命令引入的路由的优先级高于本地通过
import-route命令引入的路由 - AS路径的长度最短的路径优先
- 比较Origin属性,IGP优于EGP,EGP优于Incomplete
- 选择MED较小的路由
- EBGP路由优于IBGP路由
- BGP优先选择到BGP下一跳的IGP度量最低的路径
当以上全部相同,则为等价路由,可以负载分担
注:AS_PATH必须一致.当负载分担时,以下3条原则无效 - 比较Cluster-List长度,短者优先,
- 比较Originator_ID(如果没有Originator_ID,则用Router ID比较),选择数值较小的路径
- 比较对等体的IP地址,选择IP地址数值最小的路径