- BGP的报文类型
- Open报文:
- Open报文用于在BGP对等体之间建立邻居关系。它是TCP连接建立后发送的第一个报文,负责协商BGP参数,如版本号、AS号、Hold时间等。
- 在Open报文中,My AS字段显示本地AS号,BGP Identifier则标识本设备的Router-id。如果参数协商成功,BGP邻居关系将建立。
- Keepalive报文:
- Keepalive报文用于维持已经建立的BGP邻居关系。这种报文周期性发送,主要作用是让BGP邻居知道本地路由器还在运行,保持连接稳定。
- Keepalive报文只包含BGP消息头,没有附加其他字段,其发送间隔在Open报文中确定。默认情况下,Keepalive报文的发送间隔是60秒,超时时间为180秒。
- Update报文:
- Update报文负责在BGP邻居间交换路由信息,可以发布新的可达路由信息或撤销不可达的路由。每个Update报文可以通告一条路由,并包含NLRI(网络层可达信息)和路径属性等信息。
- NLRI携带路由前缀和掩码信息,Path Attributes列出相关路由的属性,每个属性由类型、长度、值组成的三元组构成。Update报文是实现BGP路由更新功能的核心。
- Notification报文:
- 当BGP检测到错误状态时,会向对等体发出Notification报文,之后立即断开BGP连接。这种报文包含错误代码、子代码及错误数据,用于详细描述错误信息。
- Notification报文只能导致一种结果,即断开TCP连接,使得BGP状态回到Idle。
- Route-refresh报文:
- Route-refresh报文用于要求对等体重新发送指定地址族的路由信息,通常用于手动触发路由更新或出站路由过滤(ORF)功能。
- 当入口路由策略发生变化时,可以通过手动触发Route-refresh报文来请求邻居重新通告路由,从而动态刷新BGP路由表。这种报文支持AFI(地址族标识)和SAFI(子地址族标识),以区分不同的路由类型。
- Open报文:
- BGP的选路规则
- 协议首选值
- 协议首选值(PrefVal):这是一个私有属性,仅在本地有效,不传递给其他BGP邻居。数值越高,优先级越高。
- 配置示例:可以通过bgp local-router peer-group-name route-policy route-policy-name export命令修改从特定对等体收到的路由的协议首选值。
- 本地优先级
- 本地优先级(Local_Pref):本地优先级表明流量离开AS时的最佳路由。数值越高,优先级越高。
- 传递特性:本地优先级属性只能在IBGP邻居之间传递,对于EBGP邻居只在入方向上有效。
- 配置示例:通过执行default local-preference [value]命令修改BGP路由的缺省本地优先级。
- 路由来源
- 路由来源:优选手动聚合路由(aggregate)、自动聚合路由(summary automatic)、network命令引入的路由、import-route命令引入的路由、从邻居学到的路由。
- 优先级顺序:手动聚合路由 > 自动聚合路由 > network路由 > import-route路由 > 从邻居学习的路由。
- AS_Path长度
- AS_Path长度:AS_Path记录了到达目的地所需经过的AS编号。路径越短,优先级越高。
- 防环机制:如果AS_Path中已经包含本AS编号,则拒绝接收该路由,避免环路。
- Origin类型
- Origin类型:Origin属性定义路径信息的来源。其优先级为IGP > EGP > Incomplete。
- 配置示例:通过network [ip-address | mask | mask-length]命令将路由注入BGP,其Origin属性为IGP。
- MED值
- MED值:MED值用于判断流量进入AS时的最佳路由。数值越低,优先级越高。
- 传递特性:MED属性仅在相邻两个AS之间传递,不会进一步传递给其他AS。
- 配置示例:使用set metric-value [in | out]命令可以配置MED值。
- 邻居类型
- 邻居类型:依次优选EBGP路由、IBGP路由、LocalCross路由、RemoteCross路由。
- 应用场景:主要用于VPNv4路由的选择,在PE设备上根据ERT和IRT的匹配进行路由交叉。
- Next_hop
- IGP度量值:优选BGP下一跳的IGP度量值最小的路由。
- 配置示例:通过IGP协议如OSPF或IS-IS计算度量值,BGP在选路时考虑该值。
- Cluster_List长度
- Cluster_List长度:在启用路由反射器的环境下,Cluster_List长度越短,优先级越高。
- 配置示例:使用cluster [id]命令在路由反射器环境中配置Cluster_List。
- Originator_ID大小
- Originator_ID大小:如果路由携带Originator_ID属性,则优选Originator_ID最小的路由。
- 应用场景:在复杂路由反射器拓扑中使用,以确保路由的稳定性和一致性。
- 对等体地址IP
- 对等体地址IP:优选从具有最小IP地址的对等体学来的路由。
- 应用场景:在多个对等体存在的情况下,选择IP地址最小的对等体作为最优路由来源
- 协议首选值
- BGP的状态机
- Idle
- Idle:在该状态下,BGP等待启动事件。如果发生错误或TCP断开通知,BGP会回到Idle状态。
- 启动事件:比如配置BGP进程或重置已有进程,会触发BGP尝试与对等体建立TCP连接,并转向Connect状态。
- Connect
- Connect:在此状态下,BGP尝试建立TCP连接。如果连接成功,将向对等体发送Open报文并转到OpenSent状态;如果连接失败,则转到Active状态。
- 连接重传定时器:该定时器用于在连接未成功时重复尝试连接。如果定时器超时,仍未收到对等体的响应,则继续保持在Connect状态。
- Active
- Active:在这个状态下,BGP继续尝试建立TCP连接。如果连接成功,将发送Open报文并关闭连接重传定时器,转到OpenSent状态;如果连接失败,则保持在Active状态。
- 错误处理:如果连接重传定时器超时且仍未收到对等体响应,BGP将回到Connect状态重新尝试。
- OpenSent
- OpenSent:在这个状态下,BGP已成功建立TCP连接并发送了Open报文,正在等待对等体的响应。如果收到正确的Open报文回复,将发送Keepalive报文并转到OpenConfirm状态;如果发现Open报文有错误,发送Notification报文并回到Idle状态。
- 检查Open报文:在此过程中,BGP检查收到的Open报文中的AS号、版本号和认证等参数。
- OpenConfirm
- OpenConfirm:在此状态下,BGP已发送Keepalive报文并正在等待对等体的回应。如果收到Keepalive报文,将转到Established状态;如果收到Notification报文,则回到Idle状态。
- 保持连接:此步骤是确保双方都同意继续后续的路由信息交换。
- Established
- Established:这是对等体关系已完全建立的状态,双方开始交互Update报文来传递路由信息。为了维持该状态,需要定时发送Keepalive报文。
- 路由信息交互:在此状态下,BGP可以通过Update、Keepalive和Route-refresh报文保持连接和同步路由信息。如果收到错误的Update或Keepalive报文,BGP发送Notification报文并回到Idle状态。
- Idle
BGP协议的报文,选路规则和状态机
最新推荐文章于 2024-09-30 17:57:44 发布