当前位置: 首页 > news >正文

HCIP【BGP协议(详解)】

目录

1 BGP协议产生背景

2 BGP协议特性

2.1 自治系统间路由传播

2.2 路由矢量协议

2.3 防环机制 

2.4 基于TCP传输

2.5 路由更新机制

2.6 丰富的路由属性

2.7 支持CIDR和路由聚合

2.8 路由过滤和策略控制

2.9 动态对等体功能

3 BGP基本术语

4 BGP规划问题

4.1 路由黑洞解决方案

5 BGP环路问题

5.1 EBGP水平分割(通过AS_PATH)

5.2 IBGP水平分割

6 BGP消息种类

6.1 BGP头部信息

6.2 数据包种类

7 BGP状态机

        7.1  Idle状态        

        7.2 Connect状态

        7.3 Active状态

        7.4 Opensent状态

        7.5 OpenConfirm状态

        7.6 Established状态


1 BGP协议产生背景

BGP(Border Gateway Protocol,边界网关协议)是一种用于自治系统间的动态路由协议,是一种外部网关协议。BGP的设计目标是提供一种可靠、稳定且灵活的路由信息交换机制,以适应复杂多变的网络环境。

自治系统AS:一组同一个管理机构进行管理,对外呈现统一选路策略的路由器的集合。随着互联网的复杂性增加,不同管理机构控制着各自的路由选择域,这些自治系统需要通过某种机制来交换路由信息,以确保数据能够高效、准确地在各个自治系统间传输。

自治系统编号:
       2字节AS编号:取值范围0-65535,其中0和65535保留
                                 公有AS:1-64511
                                 私有AS:64512-65535
       4字节AS编号:2的32次方的编号数量

2 BGP协议特性

2.1 自治系统间路由传播

[1]BGP专注于不同自治系统(AS)之间传递路由信息,确保跨AS的通信

[2]从其他AS接收的路由在本AS内部的扩散依赖于内部网关协议(IGP),如OSPF或者IS-IS

2.2 路由矢量协议

[1]作为路径矢量协议,BGP使用自治系统序列来衡量距离,每个AS在路由传播过程中添加自己的编号到AS_PATH属性中。

[2]路由的下一跳地址在进入AS时会更新为上一AS的出接口IP地址,而在AS内部传播时下一跳保持不变。

2.3 防环机制 

BGP通过路径矢量机制避免环路。当路由器收到一条路由时,会检查AS_PATH属性中是否包含自己的AS编号,若存在则丢弃该路由。

2.4 基于TCP传输

[1]BGP使用TCP协议(端口179)进行通信,确保数据传输的可靠性和稳定性。

[2]需要手动配置BGP邻居关系,以建立稳定的会话。

2.5 路由更新机制

[1]初始建立邻居关系时,BGP会发送完整的路由表。

[2]后续通信中,BGP仅发送增量更新,减少带宽占用和处理负担。

2.6 丰富的路由属性

BGP拥有多种属性(如LocalPref、MED、AS_PATH等),用于控制路由选择和优化网络流量分布。这些属性使得网络管理员能够灵活地实施路由策略,满足不同的网络需求。

2.7 支持CIDR和路由聚合

[1]BGP支持CIDR(无类域间路由),允许更灵活的IP地址分配和路由聚合。

[2]路由聚合功能可以减少路由表的规模,提高网络效率。

 2.8 路由过滤和策略控制

[1]BGP提供了强大的路由过滤和策略控制功能,允许网络管理员根据特定条件(如AS_PATH、前缀等)对路由进行过滤。

[2]通过路由策略,可以实现流量工程和负载均衡等高级网络管理功能。

2.9 动态对等体功能

BGP支持动态对等体功能,简化了配置和维护工作,能够自动接受来自指定网段内所有邻居的连接请求。

3 BGP基本术语

BGP Speaker:运行BGP协议的路由器称为BGP发言者

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

 BGP对等体:BGP邻居可以直连,也可以非直连

【1】EBGP对等体:跨AS之间的邻居,一般情况下EBGP对等体是物理上直连的。                              BGP发言者从EBGP对等体获得的路由会向它所有BGP对等体通告(包括EBGP和IBGP)

【2】 IBGP对等体:同一个AS内部的邻居

 

4 BGP规划问题

规划不当容易产生路由黑洞

 BGP规划示意图

 路由黑洞产生原因:由于IBGP邻居之间没有运行BGP协议的路由器,无法获得BGP的路由;从而导致的数据包进入路由器被丢弃。

R2:peer 5.5.5.5 next-hop-local   :表示将下一跳地址设置为本地地址,即数据包将从本地设备发送到目标设备,而不是通过其他路由器转发。

4.1 路由黑洞解决方案

(1)BGP引入IGP(上图可以在R2和R5上把bgp引入ospf),这个方法有可能会造成引入BGP后,外部网络的路由太多了,内网的路由器承载不住。

(2)在黑洞路由器上配置目的网段的静态路由(不现实,比如:需要配置的目的网段太多的情况,累死网络管理员了)

(3)IBGP全连接   :IBGP防环机制:IBGP水平分割:从IBGP邻居学习到的路由不会传递给其他IBGP邻居

IBGP全连接(full-fresh)主要是邻居太多,手工配置邻居,会导致工作量比较大

(4)BGP路由反射器(无视IBGP的防环机制,可以减少邻居关系的数量)

 以R2作为反射器:

(5)BGP联盟(完美的避开了IBGP全连接的坑------IBGP水平分割限制)

 

5 BGP环路问题

5.1 EBGP水平分割(通过AS_PATH)

 通过AS_PATH属性防环,在学习到的路由中,若有本地AS号,则拒绝学习,防止环路

5.2 IBGP水平分割

当路由器从一个IBGP对等体学习到某条BGP路由时,它将不能再把这条路由通告给任何IBGP对等体。
造成问题:一些路由器无法学到去往其他AS的路由
解决方法:路由反射器和联盟

6 BGP消息种类

 6.1 BGP头部信息

 标记(Marker):该字段被保留下来用于解决协议兼容性问题,没有其他含义

长度(length):指示BGP报文的长度(字节数)

 类型(Type):该字段指示了BGP报文的类型,BGP5种数据包类

6.2 数据包种类

(1) open:用于建立BGP对等体之间的连接关系,正常收发一次即可;携带route-id;

Hold time:保持时间,该字段表示路由器在收到Keepalive消息或者Update消息之前等待的最长时间,默认180s,如果邻居双方的保持时间不一致,将以较短的时间作为双方可接收的保持时间。

可选参数长度:指示了BGP报文中可选参数的长度

可选参数:Open包中包含多个可选参数,主要用于宣告及协商BGP对等体的某些能力特征

(2)Keepalive:周期性的向BGP对等体发出Keepalive(周期保活)消息,用于保持连接的有效性,在默认情况下每60秒发送一条Keepalive消息,或者以已协商一致的保持时间的1/3为周期发送Keepalive消息。默认60s,超时180s。

 (3)Update:携带的是路由更新(删减、增加)信息

(4)notfication:当BGP检测到错误状态时,就向对等体发出notfication消息,之后BGP连接会立即被关闭(邻居关系结束了)用于通知对等体发生错误状态,并立即中断BGP连接。Notification消息会在检测到错误或异常情况时发送,如路由不一致、身份验证失败等。

(5)router-refresh:用于在改变路由策略后,要求对等体重新发送指定地址族的完整路由表信息;只有支持路由刷新能力的路由器才会响应router-refresh报文。

7 BGP状态机

 

7.1  Idle状态

  • 描述:BGP的初始状态。路由器等待管理员的命令来启动BGP会话。

  • 转换:当BGP进程启动后,路由器会尝试建立TCP连接,进入Connect状态。

7.2 Connect状态

  • 描述:路由器尝试与对等体建立TCP连接。

  • 转换

    • 如果TCP连接成功建立,路由器发送Open消息并进入Opensent状态。

    • 如果TCP连接尝试失败,路由器进入Active状态。

7.3 Active状态

  • 描述:路由器在多次尝试后未能成功建立TCP连接,会进入Active状态。

  • 转换

    • 如果TCP连接成功建立,路由器发送Open消息并进入Opensent状态。

    • 如果TCP连接尝试失败,路由器可能会重新进入Connect状态或保持在Active状态。

7.4 Opensent状态

  • 描述:路由器已发送Open消息,并等待对等体的Open消息响应。

  • 转换

    • 如果收到的Open消息没有错误,路由器发送Keepalive消息并进入Established状态。

    • 如果收到的Open消息有错误,路由器发送Notification消息并返回Idle状态。

7.5 OpenConfirm状态

  • 描述:当本地路由器收到对等体的Open消息后,进入OpenConfirm状态。路由器发送Keepalive消息以确认收到对等体的Open消息。

  • 转换:收到对等体的Keepalive消息后,路由器进入Established状态。

7.6 Established状态

  • 描述:BGP会话已成功建立,路由器可以交换Update、Keepalive和Notification消息。

  • 转换

    • 如果收到Keepalive消息或Update消息,路由器保持在Established状态。

    • 如果收到Notification消息或检测到错误,路由器返回Idle状态。

8 BGP邻居建立条件

8.1 IBGP建立邻居关系条件

(1)对方接口要有IP地址,TCP可达(需要具有到达对方IP地址的路由),建议使用环回地址来指定IBGP邻居,以提高邻居关系的稳定性和可靠性

(2)更新源地址必须与指定的邻居地址一致,需要修改更新源为环回地址;

命令:[R1-bgp]peer 2.2.2.2 connect-interface LoopBack 0

(3)IBGP邻居关系不需要直连

8.2 EBGP建立邻居关系

(1)对方接口有IP地址,TCP可达,并且需要直连

(2)可通过修改EBGP最大跳数来使EBGP非直连

(3)建议使用直连接口地址(物理地址)来指定邻居关系

(4)更新源地址必须和指定的邻居地址一致

PS:默认IBGP邻居间数据包的TTL值为255,EBGP邻居间TTL为1;故一旦使用环回建立ebgp邻居关系,必须修改TTL值,否则无法建立TCP三次连接             

命令:[r4-bgp]peer 5.5.5.5 ebgp-max-hop 2    //修改TTL值(最大跳数值)

9 BGP基本配置

9.1 启动BGP、创建BGP连接

[huawei]bgp 'as-number'     启动BGP
[huawei-bgp]router-id 'router-id'   配置router-id;(可选配置)
[huawei-bgp]peer 'ip-address' as-number 'as-number'    指定BGP对等体及AS号;
[huawei-bgp] address-family ipv4  unicast   创建BGP地址族,并进入相应地址族视图。----华三
[huawei-bgp-ipv4] peer ip-address enable   使能本地路由器与指定对等体交换路由信息的能力

9.2 优化BGP连接

指定建立TCP连接使用的源接口;
[huawei-bgp]peer 'ip-address' connect-interface ‘interface’ 指定EBGP对等体最大跳数;默认跳数是1,配置允许同非直接相连网络上的邻居建立EBGP连接   
[huawei-bgp]peer 'ip-address ebgp-max-hop 'hop-count'       

9.3 配置BGP生成路由

将本地路由发布到BGP路由表中:
[Router-bgp] network ip-address [ mask | mask-length ] [route-policy route-policy-name ]引入其它路由协议的路由:
[Router-bgp] import-route protocol [ { process-id | all-processes } [ allow-direct | med med-value | route-policy route-policy-name ]  ]

9.4 查看命令

BGP邻居表详细信息

[router]display bgp peer

 BGP路由表详细信息

[router]display bgp routing-table

 10 BGP路由选路原则

10.1 路由选路原则

 

  • 1、首先丢弃下一跳(NEXT_HOP)不可达的路由;

  • 2、优选Preferred-value值最大的路由;默认为0;Preferred-value:定义:首选项。 属性值:默认为0,取值范围是 0~65535,取值越大,优先级越高。 注意:H3C和华为的私有属性,

  • 3、优选本地优先级(LOCAL_PREF)最高的路由;

  • 4、依次选择network命令生成的路由、import-route命令引入的路由、聚合路由;

  • 5、优选AS路径(AS_PATH)最短的路由;

  • 6、依次选择ORIGIN属性为IGP、EGP、Incomplete的路由;

  • 7、优选MED值最低的路由;

  • 8、依次选择从EBGP、联盟EBGP、联盟IBGP、IBGP学来的路由;

  • 9、优选下一跳度量值最低的路由;度量值:一般指通过IGP协议到达下一跳地址的度量值

  • 10、优选CLUSTER_LIST长度最短的路由;

  • 11、优选ORIGINATOR_ID最小的路由;

  • 12、优选Router ID最小的路由器发布的路由。

  • 13、优选IP地址最小的对等体发布的路由。

 

10.2 配置负载分担时的路由选择

配置BGP负载分担后,满足如下所有条件的多条BGP路由会成为等价路由,进行负载分担:

  • 首选值(PrefVal)相同。

  • 本地优先级(Local_Pref)相同。

  • 都是聚合路由,或者都不是聚合路由。

  • AIGP值相同。

  • AS_Path属性完全相同。

  • Origin类型(IGP、EGP、Incomplete)相同。

  • MED(Multi_Exit Discriminator)值相同。

  • 都是EBGP路由或都是IBGP路由。配置maximum load-balancing eibgp命令后,BGP在选择最优VPN路由时忽略该条比较。

  • AS内部IGP的Metric相同。配置maximum load-balancing eibgp命令后,BGP在选择最优VPN路由时忽略该条比较。

此外,需要特别指出的是,携带标签的BGP路由与不携带标签的BGP路由即使满足上述条件,也不能形成负载分担。

11 BGP路由发布策略与路由过滤

11.1 路由发布策略

1. 只发布最优路由
  • 策略:当存在多条有效路由时,BGP发言者只将最优路由发布给对等体。如果配置了advertise-rib-active命令,则BGP发布IP路由表中的最优路由;否则,发布BGP路由表中的最优路由。

2. 只发布自己使用的路由
  • 策略:BGP发言者只把自己使用的路由发布给对等体。这意味着BGP不会发布那些它自己不使用的路由,以避免网络中的路由环路和不必要的流量。

3. EBGP路由的发布
  • 策略:BGP发言者会将从EBGP获得的路由发布给它的所有BGP对等体,包括EBGP对等体和IBGP对等体。这确保了跨自治系统的路由信息能够被广泛传播。

4. IBGP路由的发布
  • 策略:BGP发言者会将从IBGP获得的路由发布给它的EBGP对等体,但不会发布给它的IBGP对等体。这种机制避免了IBGP对等体之间的路由环路。

5. 会话建立后的路由发布
  • 策略:一旦BGP会话建立,BGP发言者将把满足上述条件的所有BGP路由发布给新对等体。之后,BGP发言者只在路由变化时,向对等体发布更新的路由。这减少了网络中的路由更新频率,提高了网络的稳定性。

6. 控制BGP路由信息的发布
  • 策略:可以通过配置BGP路由信息的发布策略来进一步控制路由的传播。这包括使用访问控制列表(ACL)、地址前缀列表、路由策略等对发布的路由信息进行过滤。

7. 延迟发布更新消息
  • 策略:在设备重启且BGP进程恢复后,可以配置BGP更新消息的延迟发布,以避免设备重启后路由信息不全导致的流量丢失。

8. 配置BGP日志和告警功能
  • 策略:通过配置BGP日志和告警功能,可以更好地监控和管理BGP路由的发布和接收情况。

11.2 BGP路由过滤

(1)通过路由策略过滤

(2)通过前缀地址列表过滤

(3)通过filter-policy进行过滤

 12 BGP路由属性

属性越多,控制BGP路由选路的方法越多;属性:描述一个对象的特征的一些信息

12.1 公认必须遵循属性

BGP发布的路由必须携带,所有路由器必须识别的属性;AS_path、next-hop、origin

此部分来自华为官方文档内容

  • AS_Path属性

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

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

    • 当BGP Speaker将这条路由通告到EBGP对等体时,便会在Update报文中创建一个携带本地AS号的AS_Path列表。

    • 当BGP Speaker将这条路由通告给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属性

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

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

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

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

 

  • Origin属性

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

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

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

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

12.2 公认任意属性

所有路由都识别,但不是必须携带的属性;local-perference、Atomic-aggregate

  • Local_Pref属性

    Local_Pref属性表明路由器的BGP优先级,用于判断流量离开AS时的最佳路由。当BGP的设备通过不同的IBGP对等体得到目的地址相同但下一跳不同的多条路由时,将优先选择Local_Pref属性值较高的路由。Local_Pref属性仅在IBGP对等体之间有效,不通告给其他AS。Local_Pref属性可以手动配置,如果路由没有配置Local_Pref属性,BGP选路时将该路由的Local_Pref值按缺省值100来处理。

  • Atomic-aggregate:自动聚合
    注:BGP可以自动聚合,也可以手动聚合

12.3 可选过度属性

路由器可以不识别该属性,但是会继续向下传递该属性

团体属性

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

 公认团体属性

团体属性名称

团体属性号

说明

Internet

0(0x00000000)

设备在收到具有此属性的路由后,可以向任何BGP对等体发送该路由。

No_Advertise

4294967042(0xFFFFFF02)

设备收到具有此属性的路由后,将不向任何BGP对等体发送该路由。

No_Export

4294967041(0xFFFFFF01)

设备收到具有此属性的路由后,将不向AS外发送该路由。

No_Export_Subconfed

4294967043(0xFFFFFF03)

设备收到具有此属性的路由后,将不向AS外发送该路由,也不向AS内其他子AS发布此路由。

12.4 可选非过度属性

  • MED属性

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

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

  • Originator_ID属性和Cluster_List属性

    Originator_ID属性和Cluster_List属性用于解决路由反射器场景中的环路问题clustor_list:集群列表
    originator_id:集群ID
    MED:多出口鉴别器:当一个AS有多个入口点时,用于判断流量进入AS时的最优路径。【属性值:network的路由,默认值为0;引入的路由,默认值为原IGP协议的cost; 值小的优先】

 

 13 BGP路由属性控制的选择以及控制方法

13.1 属性控制的选择建议

(1)如果希望影响下游所有路由器的路由选择,建议使用AS-PATH

(2)如果只希望影响本AS内部的路由器选择,建议使用Local-preference

(3)如果希望只影响下游某一个AS的路由器选择,建议使用MED

(4)如果希望只影响某一台路由器的路由选择,建议使用preferred-value

13.2 属性控制方法

路由策略:

14 BGP对等体

定义:BGP对等体组(peer Group)是一些具有某些相同属性的对等体的集合,我们可以通过对等体组简化配置 

特点:根据对等体所在的AS区域,可以将其分为IBGP,EBGP对等体组

配置IBGP对等体组:

示例图:

 相关命令:

[R2-bgp]group in internal
[R2-bgp]peer 3.3.3.3 group in
[R2-bgp]peer 4.4.4.4 group in
[R2-bgp]peer 5.5.5.5 group in
[R2-bgp]peer in connect-interface l0
[R2-bgp]peer in next-hop-local[R3-bgp]peer 2.2.2.2 as 200
[R3-bgp]peer 2.2.2.2 connect-interface l0
R4和R5上做和R3相同的配置

配置EBGP对等体组:

15 BGP路由聚合

目的是为了减少路由表规模

15.1 自动聚合

只能对引入的IGP的路由进行聚合;
只能将明细路由汇总到主类,这会造成路由黑洞;
华为设备默认关闭自动聚合功能;
只能在始发路由器上进行配置;
[r1-bgp]summary automatic 开启自动聚合
自动聚合后,会出现状态码S(suppressed),代表被抑制的路由信息不会再加表和传递了

15.2 手动聚合

可实现精确汇总:[R1-bgp]aggregate 172.16.0.0 16
可以在任何路由器上对BGP路由进行聚合;
出现问题:明细路由依然被通告,有形成环路的隐患;
解决方法:[R1-bgp]aggregate 172.16.0.0 16 detail-suppressed  //抑制明细路由
此命令不通过明细路由;

未完待续~~~


http://www.mrgr.cn/news/97095.html

相关文章:

  • 集合与容器:List、HashMap(II)
  • leetcode-代码随想录-哈希表-有效的字母异位词
  • c语言学习16——内存函数
  • 嵌入式Linux开发环境搭建,三种方式:虚拟机、物理机、WSL
  • Flink CDC Pipeline mysql to doris
  • 【小沐杂货铺】基于Three.JS绘制三维数字地球Earth(GIS 、WebGL、vue、react)
  • wsl编译openwrt24.10.0
  • 嵌入式开发中栈溢出的处理方法
  • 【统计方法】LASSO筛变量
  • Apache httpclient okhttp(2)
  • CExercise_05_1函数_2海伦公式求三角形面积
  • 大模型学习四:‌DeepSeek Janus-Pro 多模态理解和生成模型 本地部署与调用指南
  • Leetcode 437 -- dfs | 前缀和
  • centos8上实现lvs集群负载均衡dr模式
  • swift-oc和swift block和代理
  • Dive into Deep Learning - 2.4. Calculus (微积分)
  • 如何实现浏览器中的报表打印
  • yolov12检测 聚类轨迹运动速度
  • 【小沐杂货铺】基于Three.JS绘制太阳系Solar System(GIS 、WebGL、vue、react)
  • Vanna:用检索增强生成(RAG)技术革新自然语言转SQL