BGP协议的报文,选路规则和状态机

  • 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(子地址族标识),以区分不同的路由类型。
  • 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状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值