BGP基本原理

BGP基本原理

建议食用原文,有图
原文链接

  • BGP概述

    BGP(Border Gateway Protocol,边界网关协议)是一种用于自治系统间的动态路由协议

    • BGP可以进行路由优选,路由环路避免、高效率的传递机制、维护大量路由的能力、触发更新等。
  • BGP协议特性

    BGP协议

    • BGP是自治系统外部路由协议,用来在AS之间传递路由信息

    • 路径矢量路由协议,从设计上笔迷拿了环路的发生

    • 由TCP协议承载,端口号为179

    • 支持CIDR和路由聚合

    • 路由附带丰富的属性

    • 只发送增量路由更新

    • 路由过滤和路由策略

  • 基本术语

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U7MJBzvu-1670224823634)(image/image_jzSX-fMhC5.png)]

    • BGP Speaker:运行BGP路由协议的路由器

    • Router ID

    • BGP对等体:相互之间存在TCP连接、相互交换路由信息的BGP发言者之间互称对等体。

    • IBGP对等体:同一自治系统的BGP对等体称为IBGP对等体

    • EBGP对等体:处于不同自治系统的BGP对等体之间称为EBGP对等体

  • 对等体

    EBGP对等体

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ATNGDb8K-1670224823636)(image/image_AH9rBsJUCT.png)]

    • 处于不同AS的BGP对等体为EBGP对等体,通常情况下EBGP对等体是物理上直连

    • BGP发言者从EBGP对等体获得的路由会向他所有BGP对等体通告(包括EBGP和IBGP)

    IBGP对等体

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U9yEmg6n-1670224823636)(image/image_6kjB0pDnjT.png)]

    • 处于同一个AS的BGP对等体为IBGP对等体

    • 从IBGP获得的路由不想它的IBGP对等体发布

    IBGP全连接

    • BGP会话是基于TCP的点到点单播连接

    • BGP发言者从IBGP对等体获得路由不向其他IBGP对等体发布

  • BGP消息及状态机

    BGP消息种类

    消息类型 消息作用描述
    Open 用于建立BGP对等体之间的连接关系
    Keepalive 周期性地想BGP对等体发出Keepalive消息,用来爆出链接的有效性
    Update 携带的是路由更新(删减、增加)信息
    Notification 当BGP检测到错误状态是,就会想对等体发出Notification消息,之后BGP连接会立即被关闭
    Route-refresh 要求对等体重新发送指定地址族的路由信息
    • Open消息: Open消息是TCP连接建立后发送的第一个消息,用于建立BGP对等体之间的连接关系并进行参数协商。内容包括BGP版本号、所属AS、路由器ID、Hold Time值、认证信息等信息

    • **Keepalive 消息: **BGP 会周期性地向对等体发出 Keepalive 消息,主要作用是让 BGP邻居知道自己的存在,保持邻居关系的稳定性; 还有一个作用是对收到的 Open 消息的回应。其消息格式中只包含消息头,没有附加其他任何字段。长度共 19 个字节,消息中只有标记、长度、类型,不包括数据域。

    • **Update 消息: **Update 消息用于在对等体之间交换路由信息。它既可以发布可达路由信息,也可以撤销不可达路由信息;一条 Update 消息可以通告一类具有相同路径属性的可达路由,同时 Update 消息还可以携带多条不可达路由。

    • Notification 消息: Notification 消息的作用为错误通知。BGP 发言者如果检测到对方发过来的消息有错误或者主动断开 BGP 连接,都会发出 Notification 消息来通知 BGP邻居,并关闭连接且回到 idle 状态; 如果收到邻居发来的 Notification 消息,也会将连接状态变为 idle。Notification 消息的内突包括错误代码和错误子代码及错误数据等信福

    • Route-refresh消息: Route-refresh 用来要求对等体重新发送指定地址族的路中信息

    BGP协议状态机

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hv0XdJop-1670224823637)(image/image_qSI_ubqx-s.png)]

    • ldle 状态(空闲状态): 此状态为初始状态,不接受任何 BGP 连接,等待 start 事件的产生。如果有 start 事件产生则系统开启 ConnectRetry 定时器,向邻居发起 TCP连接,将状态变为 Connect。

    • **Connect 状态(连接状态): **在 Connect 状态,系统会等待 TCP 连接建立完成。如果TCP 状态为 Established,则拆除 ConnectRetry 定时器,并发送 Open 消息,将状态变为 OpenSent;如果 TCP 连接失败则重置 ConnectRetry 定时器并转为 Active 状态;如果 ConnectRetry timer expired(重传定时器)超时,则重新连接,仍处于 Connect状态。

    • **Active 状态(活跃状态): **如果已经有启动事件 TCP 连接未完成则处于 Active 状态。在 Active 状态系统会响应 ConnectRetry timer expired 事件,重新进行 TCP 连接,同时重置 ConnectRetry 定时器,变为 Connect 状态: 如果与对方的 TCP 连接成功建立则发送 Open 消息,将状态变为 OpenSend,并清除 ConnectRetry 定时器,重置HoldTime 定时器。

    • **OpenSent 状态 (OPEN 消息已发送) : **此状态表明系统已经发出 Open 消息,在等待 BGP 邻居发给自己的 Open 消息。如果收到 BGP 邻居发来的 Open 消息,且没有错误的话则转向 OpenConfirm 状态,同时将 HoldTime 定时器的值置为协商值,发送Keepalive 消息并置 KeepAlive 定时器; 如果有错误则发送 Notification 消息并断开连接。

    • OpenConfirm 状态 (OPEN 消息确认): 此状态表明系统已经发出 Keepalive 消息,并等待 BGP 邻居的 Keepalive 消息。如果收到 Keepalive 消息则转向 Established 状态并重置 HoldTime 定时器;如果 KeepAlive 定时器超时则重置并发送 KeepAlive 消息,如果收到 notification 消息,则断开连接

    • **Established 状态(连接建立) : **如果处于 Established 状态,则说明 BGP 连接建立完成,可以发送 Update 消息交换路由信息;如果 KeepAlive 定时器超时则重置KeepAlive 定时器并发送 KeepAlive 消息: 如果收到 Keepalive 消息则重置 HoldTime定时器; 如果检测到错误或收到 Notification 消息则断开连接

    在除Idle状态以外的其它五个状态出现任何错误的时候,BGP状态都会退回到Idle状态

  • BGP路由属性

    BGP路由属性分类

    属性分类 主要包含的属性
    公认必遵属性 Origin、AS_PATH、Next_hop属性
    公认可选属性 Local_pref、Atomic_aggregate属性
    可选过渡属性 Comunity属性、Aggregator属性
    可选非过渡属性 MED、Cluster_list、Originator_ID属性
    • 公认必遵属性: 所有BGP设备都可以识别此类属性、且必须存在Update报文中。如果缺少种类属性,路由信息就会出错

    • 公认任意属性: 所有BGP设备都可以识别此类属性,但不要求必须存在于Update报文中。

    • 可选过渡属性: BGP设备可以不识别此类属性,如果BGP设备不识别此类属性,但它仍然会接收这类属性,并通告给其他对等体

    • 可选非过渡属性:BGP设备可以不识别此类属性,如果BGP设备不识别此类属性,则会被忽略该属性,且不会通告给其他对等体


    • 常用的BGP路由属性

      • Origin属性:用来定义路径信息的来源,标记一条路有是怎么成为BGP路由的有以下几种类型:

        • IGP:具有最高的优先级。通过Network命令注入到BGP路由表,Origin属性为IGP

        • EGP:优先级次之。通过EGP得到的路由信息,其Origin属性为EGP。

        • 优先级最低。通过其他方式学习到的路由信息。比如BGP通过import-route命令引入的路由,其Origin属性为Incomplete

      • AS_Path属性:AS_Path属性按矢量顺序记录了某条路由从本地到目的地址所要经过的所有AS编号。在接收路由时,设备如果发现AS_Path列表中有本AS号,则不接收该路由,从而避免了AS间的路由环路。

        • 当BGP Speaker传播自身引入的路由时:

          • 通告给EBGP对等体时,会在Update报文中创建一个携带本地AS号的AS_Path列表

          • 通告给IBGP对等体时,便会在Update报文中创建一个空的AS_Path列表

        • 当BGP Speaker传播从其他BGP Speaker的Update报文中学习到的路由时:

          • 当BGP Speaker将这条路由通告给EBGP对等体时,便会把本地AS编号添加在AS_Path列表的最前面(最左面)。收到此路由的BGP设备根据AS_Path属性就可以知道去目的地址所要经过的AS。离本地AS最近的相邻AS号排在前面,其他AS号按顺序依次排列

          • 当BGP Speaker将这条路由通告给IBGP时,不会改变这条路由相关的AS_Path属性

      • Next_Hop属性:记录的路由的下一跳信息,BGP的下一跳属性和IGP的有所不同,不一定就是邻居设备的IP地址。通常情况下,Next_Hop属性遵循下面的规则:

        • BGP Speaker在向EBGP对等体发布某条路由时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址

        • BGP Speaker将本地始发路由发布给IBGP对等体时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址

        • BGP Speaker在向IBGP对等体发布从EBGP对等体学来的路由时,并不改变该路由信息的下一跳属性。

      • Local_Pref属性:

        • Local_Pref属性表明路由器的BGP优先级,用于判断流量离开AS时的优选路由。当BGP的设备通过不同的IBGP对等体得到目的地址相同但下一跳不同的多条路由时,将优先选择Local_Pref属性值较高的路由。Local_Pref属性仅在IBGP对等体之间有效,不通告给其他AS。

        • Local_Pref属性可以手动配置,如果路由没有配置Local_Pref属性,BGP选路时将该路由的Local_Pref值按缺省值100来处理。

      • MED属性

        • MED属性用于判断流量进入AS时的优选路由。当一个运行BGP的设备通过不同的EBGP对等体得到目的地址相同但下一跳不同的多条路由时,在其它条件相同的情况下,将优先选择MED值较小者作为优选路由。

        • MED属性仅在两个AS之间传递,收到此属性的AS一方不会在将其通告给其他任何第三方AS。MED属性可以手动配置,如果路由没有配置MED属性,BGP选路时将该路由的MED值按缺省值0来处理

      • 团体属性:团体属性(Community)用于标识具有相同特征的BGP路由,使路由策略的应用更加灵活,同时降低了维护管理的难度。

        团体属性名称 团体属性号 说明
        Internet (0x00000000) 设备在收到具有此属性的路由后,可以向任何BGP对等体发送该路由
        No_Export 4294967041(0xFFFFFF01) 设备收到具有此属性的路由后,将不想AS外发送该路由
        No_Advertise 4294967042(0xFFFFFF02) 设备收到具有此属性的路由后,将不向任何BGP对等体发送该路由。
        No_Export_Subconfed 4294967043(0xFFFFFF03) 设备收到具有此属性的路由后,将不向AS外发送该路由,也不向AS内其他子AS发布此路由。
      • Originator_ID属性和Cluster_List属性

        • Originator_ID属性和Cluster_List属性用于解决路由反射器场景中的环路问题
    • BGP选择路由的策略

      首先丢弃掉下一跳(next_hop)不可达的路由

      1. 优选Preferred-value值最大的路由

      2. 优选Preferred-value值最大的路由

      3. 看厂商

        1. 华为设备:依次优选手动聚合路由、自动聚合路由、Network命令引入路由、Import-route命令路由、从对等体学习的路由(

        2. 华三设备:依次优选Network命令生成的路由、import-route命令引入的路由、聚合路由

      4. 优选AS(AS_Path)最短的路由

      5. 依次优选Origin类型为IGP、EGP、Incomplete的路由

      6. 对于来自同一AS的路由,优选MED值最低的路由

      7. 依次优选EBGP路由、IBGP路由、LocalCross路由、RemoteCross路由。

      8. 优选下一跳度量值(metric)最低的路由

      9. 优选Cluster_List最短的路由

      10. 优选Router ID最小的设备发布的路由。

        1. 如果路由携带Originator_ID属性,选路过程中将比较Originator_ID的大小(不再比较Router ID),并优选Originator_ID最小的路由.
      11. 优选IP地址最小的对等体发布的路由

  • BGP路由的发布策略

    • 只将最有路由发布给对等体,如果配置了advertise-route-active命令,则BGP发布IP路由表中的最优路由;否则,发布BGP路由表中的最优路由

    • 只把自己使用的路由发布给对等体

    • 从EBGP获得的路由会想他所有BGP对等体发布

    • 从IBGP获得的路由不向它的IBGP对等体发布

    • 从IBGP获得的路由会发布给它的EBGP对等体

    • 会话一旦建立,BGP发言者将把满足上述条件的所有BGP路由发布给新对等体。之后,BGP发言者只在路由发生变化时,想对等体发布更新路由。

  • 路由反射器

    路由反射器

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vA70Blcr-1670224823638)(image/image_0B2mye9Kaz.png)]

    为保证IBGP对等体之间的连通性,需要在IBGP对等体之间建立全连接关系。假设在一个AS内部有n台设备,那么建立的IBGP连接数就为n(n-1)/2。当设备数目很多时,设备配置将十分复杂,而且配置后网络资源和CPU资源的消耗都很大。在IBGP对等体间使用路由反射器可以解决以上问题。

    路由反射器相关角色

    在一个AS内部关于路由反射器有以下几种角色:

    图1 路由反射器示意图

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mjgp9R6w-1670224823640)(image/image_zh9YzTNHyD.png)]

    • 路由反射器RR(Route Reflector):允许把从IBGP对等体学到的路由反射到其他IBGP对等体的BGP设备,类似OSPF网络中的DR。

    • 客户机(Client):与RR形成反射邻居关系的IBGP设备。在AS内部客户机只需要与RR直连。

    • 非客户机(Non-Client):既不是RR也不是客户机的IBGP设备。在AS内部非客户机与RR之间,以及所有的非客户机之间仍然必须建立全连接关系。

    • 始发者(Originator):在AS内部始发路由的设备。Originator_ID属性用于防止集群内产生路由环路。

    • 集群(Cluster):路由反射器及其客户机的集合。Cluster_List属性用于防止集群间产生路由环路

    路由反射器原理

    • 从非客户机学到的路由,发布给所有客户机。

    • 从客户机学到的路由,发布给所有非客户机和客户机(发起此路由的客户机除外)。

    • 从EBGP对等体学到的路由,发布给所有的非客户机和客户机。

    Cluster_List属性

    路由反射器和它的客户机组成一个集群(Cluster),使用AS内唯一的Cluster ID作为标识。为了防止集群间产生路由环路,路由反射器使用Cluster_List属性,记录路由经过的所有集群的Cluster ID。

    • 当一条路由第一次被RR反射的时候,RR会把本地Cluster ID添加到Cluster List的前面。如果没有Cluster_List属性,RR就创建一个。

    • 当RR接收到一条更新路由时,RR会检查Cluster List。如果Cluster List中已经有本地Cluster ID,丢弃该路由;如果没有本地Cluster ID,将其加入Cluster List,然后反射该更新路由。

    Originator_ID属性

    Originator ID由RR产生,使用的Router ID的值标识路由的始发者,用于防止集群内产生路由环路。

    • 当一条路由第一次被RR反射的时候,RR将Originator_ID属性加入这条路由,标识这条路由的发起设备。如果一条路由中已经存在了Originator_ID属性,则RR将不会创建新的Originator_ID属性。

    • 当设备接收到这条路由的时候,将比较收到的Originator ID和本地的Router ID,如果两个ID相同,则不接收此路由。

    备份路由反射器

    为增加网络的可靠性,防止单点故障对网络造成影响,有时需要在一个集群中配置一个以上的RR。由于RR打破了从IBGP对等体收到的路由不能传递给其他IBGP对等体的限制,所以同一集群内的RR之间中可能存在环路。这时,该集群中的所有RR必须使用相同的Cluster ID,以避免RR之间的路由环路。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F7sUOU2K-1670224823641)(image/image_Yq-mjroE9d.png)]

    路由反射器RR1和RR2在同一个集群内,配置了相同的Cluster ID。

    • 当客户机Client1从EBGP对等体接收到一条更新路由,它将通过IBGP向RR1和RR2通告这条路由。

    • RR1和RR2在接收到该更新路由后,将本地Cluster ID添加到Cluster List前面,然后向其他的客户机(Client2、Client3)反射,同时相互反射。

    • RR1和RR2在接收到该反射路由后,检查Cluster List,发现自己的Cluster ID已经包含在Cluster List中。于是RR1和RR2丢弃该更新路由,从而避免了路由环路。

    多集群路由反射器

    一个AS中可以存在多个集群,各个集群的RR之间建立IBGP对等体。当RR所处的网络层不同时,可以将较低网络层次的RR配成客户机,形成分级RR。当RR所处的网络层相同时,可以将不同集群的RR全连接,形成同级RR。

    分级路由反射器

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j7et1Rei-1670224823642)(image/image_iMFDj1rmRj.png)]

    在实际的RR部署中,常用的是分级RR的场景。【ISP为AS100提供Internet路由。AS100内部分为两个集群,其中Cluster1内的四台设备是核心路由器,采用备份RR的形式保证可靠性。

    同级路由反射器

    同级路由反射器

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ewlX93IR-1670224823643)(image/image_roDSN5bvMz.png)]

    一个骨干网被分成多个集群。各集群的RR互为非客户机关系,并建立全连接。此时虽然每个客户机只与所在集群的RR建立IBGP连接,但所有RR和客户机都能收到全部路由信息。

猜你喜欢

转载自blog.csdn.net/weixin_45059947/article/details/128187450