MHuiG

「看庭前花开花落,望天上云卷云舒」

BGP

# BGP

BGP: 边界网关协议，是目前唯一的一种 EGP 协议。是一种增强型的路径矢量路由协议.

AS: 自治系统，是由同一个技术机构进行管理并且运行相同的选路策略的一组路由设备.

AS 号: 1-65535. 1-64511 共有 AS. 64512-65535 私有 AS.

是一个 16bit 的整数，目前新版本的 BGP 支持 4 字节的 AS 号.

IGP 着重于发现路由和计算路由.

BGP 着重于控制路由，传播路由以及最优的路径选择.

## BGP 特征

- BGP 具备可靠的路由更新机制。基于 TCP 协议传递报文，协议号为 179.
- BGP 具备丰富的度量值.
- 从设计上避免了环路.
- 附带多种路由属性.
- 支持 CIDR, 具备丰富的路由过滤和路由策略机制.
- BGP 无周期更新，只会通过周期性发送 Keepalive 报文来检测 TCP 的连通性. (OSPF 有周期性更新，OSPF LSA 周期性更新默认 1800s 老化 3600s)
- 只进行增量更新.(只更新变化的路由)
- 所有的报文属性均采用 TLV 结构，增强扩展性.

## BGP 路由传递

在两个 AS 之间运行的 BGP PEER 称为 EBGP (外部 BGP)

在两个 AS 内部运行的 BGP PEER 称为 IBGP (内部 BGP)

## BGP 的报文

1. Open: 用于负责建立 BGP 对等体以及协商对等体之间相关参数.
2. Keepalive: 周期性 (60s) 发送，用于检测 BGP PEER 之间的连通性。如果在 180s 内没有收到对方的 Keepalive 报文则认为邻居失效.
3. Update: 用于在 BGP 对等体之间来传递路由信息，可以用于新路由的更新，也可以用于老路由的撤销.
4. Notification: 当 BGP 设备检测到错误信息时，会发送 Notification 报文通知对等体.
5. Route-refresh: 用来通知对等体路由刷新.

## EBGP 基础配置

1. 创建 BGP 进程并设置 RID

2. 指定对等体 IP 地址，以及 AS 号

    [R1]bgp ?
      INTEGER<1-65535>  2-byte autonomous system number
      STRING<3-11>      4-byte autonomous system number
                        (number<1-65535>.number<0-65535>)

    [R1]bgp 100
    [R1-bgp]router-id 1.1.1.1
    [R1-bgp]peer 12.1.1.2 as-number 200

    [R2]bgp 200
    [R2-bgp]router-id 2.2.2.2
    [R2-bgp]peer 12.1.1.1 as-number 100
    [R2-bgp]

    查看 bgp 状态
    [R1-bgp]display bgp peer

     BGP local router ID : 1.1.1.1
     Local AS number : 100
     Total number of peers : 1          Peers in established state : 1

      Peer            V          AS  MsgRcvd  MsgSent  OutQ  Up/Down       State PrefRcv

      12.1.1.2        4         200        2        3     0 00:00:23 Established       0
    [R1-bgp]

    IP协议号
    6:TCP
    1:ICMP
    17:UDP
    89:OSPF

    [R1-GigabitEthernet0/0/0]shutdown
    [R1-GigabitEthernet0/0/0]undo shutdown

## BGP 协议头

1. Marker: 标记信息，共 16 字节，固定全为 1.
2. Length: 长度，包含 BGP 头部与报文内容的总长度。共 2 字节
3. Type: 类型，用于标识 BGP 报文类型.

- 1, 表示 Open
- 2, 表示 Update
- 3, 表示 Notification
- 4, 表示 Keepalive
- 5, 表示 Route-refresh

## Open 报文字段

- 1.version: 表示当前使用的 BGP 版本。目前使用的 BGP 版本为 BGP 4+, 所以目前该字段固定为 4.
- 2.my as: 表示当前 BGP 设备自身的 AS 号
- 3.hold time: 保持时间，用于表示 BGP keepalive 报文的超时时间。如果两台设备时间不一致，则按照较小值为准.
- 4.RID: 用于标识当前设备的 RID.
- 5. 可选参数长度：用于标识 BGP 可选参数信息的长度.
- 6. 可选参数：用于协商 BGP 的能力，以及相关参数.

可选参数由 TLV 结构组成
TLV 结构：通过 TLV 结构可以大大增加协议自身的扩展性.

- Type: 表示当前 TLV 结构的类型.
- Length: 表示当前 TLV 结构的长度.
- Value: 表示当前 TLV 结构的数值.

## Keepalive 报文字段

只包含 BGP 的协议头，无报文字段内容.

## Update 报文字段

- Withdrawn routes length: 无效路由长度，用于标识无效路由 (撤销路由) 的长度信息.
- Withdrawn routes: 用于表明撤销的路由信息.
- Path attribute length: 用于标识路径属性信息长度.
- Path attribute: 用于标识 BGP 路由的路径属性.
- NLRI: 网络层可达信息。用于传递的 BGP 路由.

BGP 传递路由时，一个 Update 报文只能携带一条路由，或多条属性相同的路由.

导入直连路由注入 BGP, 出现 Update 报文

    [R1-bgp]import-route direct

撤销路由，出现 Update 报文

    [R1-bgp]undo import-route direct

## Notification 报文字段

1. 错误代码:

- 1. 表示消息头错误
- 2. 表示 open 报文错误
- 3. 表示 Update 报文错误
- 4. 表示 Keepalive 超时
- 5. 表示状态机错误
- 6. 表示终止会话. (管理员关闭，或检测到接口 down)

2. 子错误代码:
3. 数据

当收到 Notification 报文后，BGP 会 down 掉邻居的会话.

## Route-refresh 报文字段

AFI : (2B) 地址家族
SAFI : (1B) 子地址家族

## BGP 状态机

Idle: 空闲状态，表示 BGP 设备的初始状态。当 BGP 进程收到 START 消息后尝试 TCP 连接，并转入 connect 状态.

Connect: 连接状态，此时会主动与 BGP 对等体建立 TCP 会话状态，如果 TCP 会话建立成功则会进入 openset 状态，如果 TCP 会话建立失败则会进入 Active 状态.

Active: 活动状态，在该状态下会等待 PEER 与其建立邻居关系，如果 TCP 会话建立成功，则进入 openset 状态，如果 TCP 重传计时器 (32s) 超时，则回到 connect 状态重新建立 TCP.

Openset: 在该状态下表示 BGP 的 TCP 会话已经建立成功，并且向邻居发送 open 报文，并等等对方的 open 报文。如果收到对方正确的 open 报文，则进入 openconfirm.

Openconfirm: 表示对 open 报文进行了确认，此时会向对方发送 keeepalive 报文，如果收到了对方的 Keepalive 报文，则进入 established 状态.

Established: 表示 BGP 的会话已经建立成功，也是 BGP 最终的稳定状态。在该状态下可以发送 Update Keepalive route-refresh 和 notification 报文.

在任何状态下收到 Notification 报文都会直接回到 Idle 状态.

    [R1]display bgp peer

     BGP local router ID : 1.1.1.1
     Local AS number : 100
     Total number of peers : 1          Peers in established state : 0

      Peer            V          AS  MsgRcvd  MsgSent  OutQ  Up/Down       State Pre
    fRcv

      12.1.1.2        4         200        0        0     0 00:00:31        Idle
       0
    [R1]display bgp peer

     BGP local router ID : 1.1.1.1
     Local AS number : 100
     Total number of peers : 1          Peers in established state : 0

      Peer            V          AS  MsgRcvd  MsgSent  OutQ  Up/Down    State Pre fRcv

      12.1.1.2        4         200        1        3     0 00:00:32 OpenConfirm    0
    [R1]
    Mar  4 2024 11:58:48-08:00 R1 %%01BGP/3/STATE_CHG_UPDOWN(l)[5]:The status of the
     peer 12.1.1.2 changed from OPENCONFIRM to ESTABLISHED. (InstanceName=Public, St
    ateChangeReason=Up) display bgp peer

## BGP 的路由

BGP 的路由：BGP 协议本身无法自动发现路由，需要将现有路由表中的路由注入 BGP 从而形成 BGP 路由.
BGP 所有的路由信息会先加入到 BGP 表，在 BGP 表中最优的路由会进入到 IP 路由表

## IBGP 配置

IBGP 配置:

1.AS 内通过 IGP 网络可达

2.IBGP 一般采用环回口作为 BGP 互联接口.

如果 EBGP 需要通过环回口建立 BGP PEER, 则

1. 首先通过静态路由确保环回口可达

2. 在 EBGP 中开启 BGP 多跳功能

EBGP 默认会开启直连检测功能.

开启 EBGP 多跳功能后 EBGP 会自动关闭直连检查功能.

    ospf 1 router-id 2.2.2.2
     area 0.0.0.0
      network 2.2.2.2 0.0.0.0
      network 12.1.1.2 0.0.0.0
      network 23.1.1.2 0.0.0.0

    bgp 100
     router-id 2.2.2.2
     peer 1.1.1.1 as-number 100
     peer 1.1.1.1 connect-interface LoopBack0
     peer 3.3.3.3 as-number 100
     peer 3.3.3.3 connect-interface LoopBack0

    [R1]bgp 100
    [R1-bgp]router-id 1.1.1.1
    [R1-bgp]peer 2.2.2.2 as-number 100
    [R1-bgp]dis bgp peer

     BGP local router ID : 1.1.1.1
     Local AS number : 100
     Total number of peers : 1          Peers in established state : 0

      Peer            V          AS  MsgRcvd  MsgSent  OutQ  Up/Down       State Pre fRcv

      2.2.2.2         4         100        0        0     0 00:02:00      Active       0

    物理接口改成环回接口

    [R1-bgp]peer 2.2.2.2 connect-interface LoopBack 0
    [R2-bgp]peer 1.1.1.1 connect-interface LoopBack 0

    [R1-bgp]dis bgp peer

     BGP local router ID : 1.1.1.1
     Local AS number : 100
     Total number of peers : 1          Peers in established state : 1

      Peer            V          AS  MsgRcvd  MsgSent  OutQ  Up/Down       State PrefRcv

      2.2.2.2         4         100        2        3     0 00:00:02 Established       0

    [R2-bgp]dis th
    bgp 100
     router-id 2.2.2.2
     peer 1.1.1.1 as-number 100
     peer 1.1.1.1 connect-interface LoopBack0
     peer 3.3.3.3 as-number 100
     peer 3.3.3.3 connect-interface LoopBack0

    (TCP可达就可以建立peer)

    [R1]bgp 100
    [R1-bgp]peer 3.3.3.3 as-number 100
    [R1-bgp]peer 3.3.3.3 connect-interface LoopBack0

    [R3]bgp 100
    [R3-bgp]peer 1.1.1.1 as-path-filter
    [R3-bgp]peer 1.1.1.1 as-number 100
    [R3-bgp] peer 1.1.1.1 connect-interface LoopBack0
    [R1-bgp]dis bgp peer

     BGP local router ID : 1.1.1.1
     Local AS number : 100
     Total number of peers : 2          Peers in established state : 2

      Peer            V          AS  MsgRcvd  MsgSent  OutQ  Up/Down       State PrefRcv

      2.2.2.2         4         100       16       17     0 00:14:50 Established       0
      3.3.3.3         4         100        2        3     0 00:00:06 Established         0

    [R1]ip route-static 4.4.4.4 32 14.1.1.4
    [R4]ip route-static 1.1.1.1 32 14.1.1.1

    [R1]Ping -a 1.1.1.1 4.4.4.4
      PING 4.4.4.4: 56  data bytes, press CTRL_C to break
        Reply from 4.4.4.4: bytes=56 Sequence=1 ttl=255 time=60 ms
        Reply from 4.4.4.4: bytes=56 Sequence=2 ttl=255 time=30 ms
        Reply from 4.4.4.4: bytes=56 Sequence=3 ttl=255 time=20 ms
        Reply from 4.4.4.4: bytes=56 Sequence=4 ttl=255 time=20 ms
        Reply from 4.4.4.4: bytes=56 Sequence=5 ttl=255 time=30 ms

      --- 4.4.4.4 ping statistics ---
        5 packet(s) transmitted
        5 packet(s) received
        0.00% packet loss
        round-trip min/avg/max = 20/32/60 ms
    [R4-bgp]dis th
    [V200R003C00]
    #
    bgp 200
     peer 1.1.1.1 as-number 200
     peer 1.1.1.1 connect-interface LoopBack0
     peer 4.4.4.4 as-number 200
    [R1-bgp]dis th
    [V200R003C00]
    #
    bgp 100
     router-id 1.1.1.1
     peer 2.2.2.2 as-number 100
     peer 2.2.2.2 connect-interface LoopBack0
     peer 3.3.3.3 as-number 100
     peer 3.3.3.3 connect-interface LoopBack0
     peer 4.4.4.4 as-number 200
     peer 4.4.4.4 connect-interface LoopBack0

    [R1-bgp]dis bgp peer

     BGP local router ID : 1.1.1.1
     Local AS number : 100
     Total number of peers : 3          Peers in established state : 2

      Peer            V          AS  MsgRcvd  MsgSent  OutQ  Up/Down       State PrefRcv

      2.2.2.2         4         100       28       29     0 00:26:00 Established       0
      3.3.3.3         4         100       13       14     0 00:11:16 Established       0
      4.4.4.4         4         200        0        0     0 00:00:17        Idle

    [R1-bgp]peer 4.4.4.4 ebgp-max-hop 2
    [R1-bgp]dis th
    [V200R003C00]
    #
    bgp 100
     router-id 1.1.1.1
     peer 2.2.2.2 as-number 100
     peer 2.2.2.2 connect-interface LoopBack0
     peer 3.3.3.3 as-number 100
     peer 3.3.3.3 connect-interface LoopBack0
     peer 4.4.4.4 as-number 200
     peer 4.4.4.4 ebgp-max-hop 2
     peer 4.4.4.4 connect-interface LoopBack0

    [R4-bgp]dis th
    [V200R003C00]
    #
    bgp 200
     peer 1.1.1.1 as-number 100
     peer 1.1.1.1 ebgp-max-hop 2

    [R1-bgp]dis bgp peer

     BGP local router ID : 1.1.1.1
     Local AS number : 100
     Total number of peers : 3          Peers in established state : 3

      Peer            V          AS  MsgRcvd  MsgSent  OutQ  Up/Down       State PrefRcv

      2.2.2.2         4         100       33       34     0 00:31:34 Established       0
      3.3.3.3         4         100       18       19     0 00:16:50 Established       0
      4.4.4.4         4         200        2        3     0 00:00:01 Established       0

## BGP 的路由注入

network 命令：将路由表现有的路由逐条注入到 BGP 表中。注入路由时网络号和掩码必须匹配路由表中的信息.

import-route 命令：可以将某一类路由一次性注入进 BGP 中

    [R4]int LoopBack 1
    [R4-LoopBack1]ip add 10.4.4.4 24

    [R4]bgp 200
    [R4-bgp]network 10.4.4.0 24
    [R4-bgp]display bgp routing-table

     BGP Local router ID is 4.4.4.4
     Status codes: * - valid, > - best, d - damped,
                   h - history,  i - internal, s - suppressed, S - Stale
                   Origin : i - IGP, e - EGP, ? - incomplete

     Total Number of Routes: 1
          Network            NextHop        MED        LocPrf    PrefVal Path/Ogn

     *>   10.4.4.0/24        0.0.0.0         0                     0      i

    [R4-bgp]undo network 10.4.4.0 255.255.255.0
    [R4]ip route-static 10.1.1.0 24 NULL 0

    [R4]bgp 200
    [R4-bgp]network 10.1.1.0 24
    [R4-bgp]dis bgp routing-table

     BGP Local router ID is 4.4.4.4
     Status codes: * - valid, > - best, d - damped,
                   h - history,  i - internal, s - suppressed, S - Stale
                   Origin : i - IGP, e - EGP, ? - incomplete

     Total Number of Routes: 1
          Network            NextHop        MED        LocPrf    PrefVal Path/Ogn

     *>   10.1.1.0/24        0.0.0.0         0                     0      i

    [R4-bgp]import-route ?
      direct  Connected routes
      isis    Intermediate System to Intermediate System (IS-IS) routes
      ospf    Open Shortest Path First (OSPF) routes
      rip     Routing Information Protocol (RIP) routes
      static  Static routes
      unr     User network routes

    [R3]ip route-static 30.1.0.0 24 NULL 0
    [R3]ip route-static 30.1.1.0 24 NULL 0
    [R3]ip route-static 30.1.2.0 24 NULL 0
    [R3]ip route-static 30.1.3.0 24 NULL 0
    [R3]bgp 100
    [R3-bgp]import-route static
    [R3-bgp]dis bgp routing-table

     BGP Local router ID is 3.3.3.3
     Status codes: * - valid, > - best, d - damped,
                   h - history,  i - internal, s - suppressed, S - Stale
                   Origin : i - IGP, e - EGP, ? - incomplete

     Total Number of Routes: 5
          Network            NextHop        MED        LocPrf    PrefVal Path/Ogn

       i  10.1.1.0/24        4.4.4.4         0          100        0      200i
     *>   30.1.0.0/24        0.0.0.0         0                     0      ?
     *>   30.1.1.0/24        0.0.0.0         0                     0      ?
     *>   30.1.2.0/24        0.0.0.0         0                     0      ?
     *>   30.1.3.0/24        0.0.0.0         0                     0      ?

    [R3-bgp]import-route ospf 1
    [R3-bgp]display bgp routing-table

     BGP Local router ID is 3.3.3.3
     Status codes: * - valid, > - best, d - damped,
                   h - history,  i - internal, s - suppressed, S - Stale
                   Origin : i - IGP, e - EGP, ? - incomplete

     Total Number of Routes: 10
          Network            NextHop        MED        LocPrf    PrefVal Path/Ogn

     *>   1.1.1.1/32         0.0.0.0         2                     0      ?
     *>   2.2.2.2/32         0.0.0.0         1                     0      ?
     *>   3.3.3.3/32         0.0.0.0         0                     0      ?
       i  10.1.1.0/24        4.4.4.4         0          100        0      200i
     *>   12.1.1.0/24        0.0.0.0         2                     0      ?
     *>   23.1.1.0/24        0.0.0.0         0                     0      ?
     *>   30.1.0.0/24        0.0.0.0         0                     0      ?
     *>   30.1.1.0/24        0.0.0.0         0                     0      ?
     *>   30.1.2.0/24        0.0.0.0         0                     0      ?
     *>   30.1.3.0/24        0.0.0.0         0                     0      ?

    [R1]dis ip routing-table
    Route Flags: R - relay, D - download to fib
    ------------------------------------------------------------------------------
    Routing Tables: Public
             Destinations : 20       Routes : 20

    Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface

            1.1.1.1/32  Direct  0    0           D   127.0.0.1       LoopBack0
            2.2.2.2/32  OSPF    10   1           D   12.1.1.2        GigabitEthernet0/0/0
            3.3.3.3/32  OSPF    10   2           D   12.1.1.2        GigabitEthernet0/0/0
            4.4.4.4/32  Static  60   0          RD   14.1.1.4        GigabitEthernet0/0/1
           10.1.1.0/24  EBGP    255  0          RD   4.4.4.4         GigabitEthernet0/0/1
           12.1.1.0/24  Direct  0    0           D   12.1.1.1        GigabitEthernet0/0/0
           12.1.1.1/32  Direct  0    0           D   127.0.0.1       GigabitEthernet0/0/0
         12.1.1.255/32  Direct  0    0           D   127.0.0.1       GigabitEthernet0/0/0
           14.1.1.0/24  Direct  0    0           D   14.1.1.1        GigabitEthernet0/0/1
           14.1.1.1/32  Direct  0    0           D   127.0.0.1       GigabitEthernet0/0/1
         14.1.1.255/32  Direct  0    0           D   127.0.0.1       GigabitEthernet0/0/1
           23.1.1.0/24  OSPF    10   2           D   12.1.1.2        GigabitEthernet0/0/0
           30.1.0.0/24  IBGP    255  0          RD   3.3.3.3         GigabitEthernet0/0/0
           30.1.1.0/24  IBGP    255  0          RD   3.3.3.3         GigabitEtherne0/0/0
           30.1.2.0/24  IBGP    255  0          RD   3.3.3.3         GigabitEthernet0/0/0
           30.1.3.0/24  IBGP    255  0          RD   3.3.3.3         GigabitEthernet0/0/0
          127.0.0.0/8   Direct  0    0           D   127.0.0.1       InLoopBack0
          127.0.0.1/32  Direct  0    0           D   127.0.0.1       InLoopBack0
    127.255.255.255/32  Direct  0    0           D   127.0.0.1       InLoopBack0
    255.255.255.255/32  Direct  0    0           D   127.0.0.1       InLoopBack0

## BGP 路由不调优的可能性

BGP 只会将 BGP 表中最优的路由加入到 IP 路由表中.

BGP 路由不调优的可能性:

1.BGP 开启 BGP 同步检测功能且路由不同步.(该功能默认关闭，且 ENSP 模拟器中无法开启)

2.BGP 路由的下一跳地址不可达，会导致 BGP 路由失效，造成不调优.

解决方案 1: 在 IGP 中添加对应网络的路由信息，使下一跳地址可达.

    ospf 1 router-id 1.1.1.1
      import-route static

解决方案 2: 更改路由的下一跳，使其变为网络中的可达地址，实现路由有效性

    bgp 100
      peer 2.2.2.2 next-hop-local

    <R2>dis bgp routing-table

     BGP Local router ID is 2.2.2.2
     Status codes: * - valid, > - best, d - damped,
                   h - history,  i - internal, s - suppressed, S - Stale
                   Origin : i - IGP, e - EGP, ? - incomplete

     Total Number of Routes: 11
          Network            NextHop        MED        LocPrf    PrefVal Path/Ogn

     *>i  1.1.1.1/32         3.3.3.3         2          100        0      ?
     *>i  2.2.2.2/32         3.3.3.3         1          100        0      ?
       i  3.3.3.3/32         3.3.3.3         0          100        0      ?
       i  10.1.1.0/24        4.4.4.4         0          100        0      200i
       i  10.4.4.0/24        4.4.4.4         0          100        0      200i
     *>i  12.1.1.0/24        3.3.3.3         2          100        0      ?
     *>i  23.1.1.0/24        3.3.3.3         0          100        0      ?
     *>i  30.1.0.0/24        3.3.3.3         0          100        0      ?
     *>i  30.1.1.0/24        3.3.3.3         0          100        0      ?
     *>i  30.1.2.0/24        3.3.3.3         0          100        0      ?
     *>i  30.1.3.0/24        3.3.3.3         0          100        0      ?
    <R2>
    <R2>dis ip routing-table
    Route Flags: R - relay, D - download to fib
    ------------------------------------------------------------------------------
    Routing Tables: Public
             Destinations : 17       Routes : 17

    Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface

            1.1.1.1/32  OSPF    10   1           D   12.1.1.1        GigabitEthernet0/0/0
            2.2.2.2/32  Direct  0    0           D   127.0.0.1       LoopBack0
            3.3.3.3/32  OSPF    10   1           D   23.1.1.3        GigabitEthernet0/0/1
           12.1.1.0/24  Direct  0    0           D   12.1.1.2        GigabitEthernet0/0/0
           12.1.1.2/32  Direct  0    0           D   127.0.0.1       GigabitEthernet0/0/0
         12.1.1.255/32  Direct  0    0           D   127.0.0.1       GigabitEthernet0/0/0
           23.1.1.0/24  Direct  0    0           D   23.1.1.2        GigabitEthernet0/0/1
           23.1.1.2/32  Direct  0    0           D   127.0.0.1       GigabitEthernet0/0/1
         23.1.1.255/32  Direct  0    0           D   127.0.0.1       GigabitEthernet0/0/1
           30.1.0.0/24  IBGP    255  0          RD   3.3.3.3         GigabitEthernet0/0/1
           30.1.1.0/24  IBGP    255  0          RD   3.3.3.3         GigabitEtherne0/0/1
           30.1.2.0/24  IBGP    255  0          RD   3.3.3.3         GigabitEthernet0/0/1
           30.1.3.0/24  IBGP    255  0          RD   3.3.3.3         GigabitEthernet0/0/1
          127.0.0.0/8   Direct  0    0           D   127.0.0.1       InLoopBack0
          127.0.0.1/32  Direct  0    0           D   127.0.0.1       InLoopBack0
    127.255.255.255/32  Direct  0    0           D   127.0.0.1       InLoopBack0
    255.255.255.255/32  Direct  0    0           D   127.0.0.1       InLoopBack0

    <R2>

    [R1]ospf 1
    [R1-ospf-1]import-route static

    [R2]dis ip routing-table
    Route Flags: R - relay, D - download to fib
    ------------------------------------------------------------------------------
    Routing Tables: Public
             Destinations : 20       Routes : 20

    Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface

            1.1.1.1/32  OSPF    10   1           D   12.1.1.1        GigabitEthernet0/0/0
            2.2.2.2/32  Direct  0    0           D   127.0.0.1       LoopBack0
            3.3.3.3/32  OSPF    10   1           D   23.1.1.3        GigabitEthernet0/0/1
            4.4.4.4/32  O_ASE   150  1           D   12.1.1.1        GigabitEthernet0/0/0
           10.1.1.0/24  IBGP    255  0          RD   4.4.4.4         GigabitEthernet0/0/0
           10.4.4.0/24  IBGP    255  0          RD   4.4.4.4         GigabitEthernet0/0/0
           12.1.1.0/24  Direct  0    0           D   12.1.1.2        GigabitEthernet0/0/0
           12.1.1.2/32  Direct  0    0           D   127.0.0.1       GigabitEthernet0/0/0
         12.1.1.255/32  Direct  0    0           D   127.0.0.1       GigabitEthernet0/0/0
           23.1.1.0/24  Direct  0    0           D   23.1.1.2        GigabitEthernet0/0/1
           23.1.1.2/32  Direct  0    0           D   127.0.0.1       GigabitEthernet0/0/1
         23.1.1.255/32  Direct  0    0           D   127.0.0.1       GigabitEthernet0/0/1
           30.1.0.0/24  IBGP    255  0          RD   3.3.3.3         GigabitEthernet0/0/1
           30.1.1.0/24  IBGP    255  0          RD   3.3.3.3         GigabitEthernet0/0/1
           30.1.2.0/24  IBGP    255  0          RD   3.3.3.3         GigabitEthernet0/0/1
           30.1.3.0/24  IBGP    255  0          RD   3.3.3.3         GigabitEthernet0/0/1
          127.0.0.0/8   Direct  0    0           D   127.0.0.1       InLoopBack0
          127.0.0.1/32  Direct  0    0           D   127.0.0.1       InLoopBack0
    127.255.255.255/32  Direct  0    0           D   127.0.0.1       InLoopBack0
    255.255.255.255/32  Direct  0    0           D   127.0.0.1       InLoopBack0

    [R2]

    [R2]dis bgp routing-table

     BGP Local router ID is 2.2.2.2
     Status codes: * - valid, > - best, d - damped,
                   h - history,  i - internal, s - suppressed, S - Stale
                   Origin : i - IGP, e - EGP, ? - incomplete

     Total Number of Routes: 12
          Network            NextHop        MED        LocPrf    PrefVal Path/Ogn

     *>i  1.1.1.1/32         3.3.3.3         2          100        0      ?
     *>i  2.2.2.2/32         3.3.3.3         1          100        0      ?
       i  3.3.3.3/32         3.3.3.3         0          100        0      ?
     *>i  4.4.4.4/32         3.3.3.3         1          100        0      ?
     *>i  10.1.1.0/24        4.4.4.4         0          100        0      200i
     *>i  10.4.4.0/24        4.4.4.4         0          100        0      200i
     *>i  12.1.1.0/24        3.3.3.3         2          100        0      ?
     *>i  23.1.1.0/24        3.3.3.3         0          100        0      ?
     *>i  30.1.0.0/24        3.3.3.3         0          100        0      ?
     *>i  30.1.1.0/24        3.3.3.3         0          100        0      ?
     *>i  30.1.2.0/24        3.3.3.3         0          100        0      ?
     *>i  30.1.3.0/24        3.3.3.3         0          100        0      ?
    [R2]

    [R1-bgp]peer 2.2.2.2 next-hop-local
    [R2]dis bgp routing-table

     BGP Local router ID is 2.2.2.2
     Status codes: * - valid, > - best, d - damped,
                   h - history,  i - internal, s - suppressed, S - Stale
                   Origin : i - IGP, e - EGP, ? - incomplete

     Total Number of Routes: 11
          Network            NextHop        MED        LocPrf    PrefVal Path/Ogn

     *>i  1.1.1.1/32         3.3.3.3         2          100        0      ?
     *>i  2.2.2.2/32         3.3.3.3         1          100        0      ?
       i  3.3.3.3/32         3.3.3.3         0          100        0      ?
     *>i  10.1.1.0/24        1.1.1.1         0          100        0      200i
     *>i  10.4.4.0/24        1.1.1.1         0          100        0      200i
     *>i  12.1.1.0/24        3.3.3.3         2          100        0      ?
     *>i  23.1.1.0/24        3.3.3.3         0          100        0      ?
     *>i  30.1.0.0/24        3.3.3.3         0          100        0      ?
     *>i  30.1.1.0/24        3.3.3.3         0          100        0      ?
     *>i  30.1.2.0/24        3.3.3.3         0          100        0      ?
     *>i  30.1.3.0/24        3.3.3.3         0          100        0      ?

    [R2]dis ip routing-table
    Route Flags: R - relay, D - download to fib
    ------------------------------------------------------------------------------
    Routing Tables: Public
             Destinations : 19       Routes : 19

    Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface

            1.1.1.1/32  OSPF    10   1           D   12.1.1.1        GigabitEthernet0/0/0
            2.2.2.2/32  Direct  0    0           D   127.0.0.1       LoopBack0
            3.3.3.3/32  OSPF    10   1           D   23.1.1.3        GigabitEthernet0/0/1
           10.1.1.0/24  IBGP    255  0          RD   1.1.1.1         GigabitEthernet0/0/0
           10.4.4.0/24  IBGP    255  0          RD   1.1.1.1         GigabitEthernet0/0/0
           12.1.1.0/24  Direct  0    0           D   12.1.1.2        GigabitEthernet0/0/0
           12.1.1.2/32  Direct  0    0           D   127.0.0.1       GigabitEthernet0/0/0
         12.1.1.255/32  Direct  0    0           D   127.0.0.1       GigabitEthernet0/0/0
           23.1.1.0/24  Direct  0    0           D   23.1.1.2        GigabitEthernet0/0/1
           23.1.1.2/32  Direct  0    0           D   127.0.0.1       GigabitEthernet0/0/1
         23.1.1.255/32  Direct  0    0           D   127.0.0.1       GigabitEthernet0/0/1
           30.1.0.0/24  IBGP    255  0          RD   3.3.3.3         GigabitEthernet0/0/1
           30.1.1.0/24  IBGP    255  0          RD   3.3.3.3         GigabitEthernet0/0/1
           30.1.2.0/24  IBGP    255  0          RD   3.3.3.3         GigabitEthernet0/0/1
           30.1.3.0/24  IBGP    255  0          RD   3.3.3.3         GigabitEthernet0/0/1
          127.0.0.0/8   Direct  0    0           D   127.0.0.1       InLoopBack0
          127.0.0.1/32  Direct  0    0           D   127.0.0.1       InLoopBack0
    127.255.255.255/32  Direct  0    0           D   127.0.0.1       InLoopBack0
    255.255.255.255/32  Direct  0    0           D   127.0.0.1       InLoopBack0

    [R2]

## BGP 路由通告原则

1. BGP 只通告最优的路由.

`*` 表示该路由是有效的

`>` 表示该路由是最优的

2. 从 EBGP 对等体获取的路由会通告给所有的 BGP 对等体 (EBGP 和 IBGP).

3. 从 IBGP 对等体获取的路由不会通告给 IBGP 对等体 (IBGP 水平分割原则，用于防止 AS 内路由环路问题)
   为了防止 AS 内部分设备无法收到 BGP 路由，可以通过配置 IBGP 全互联来解决，但 IBGP 全互联可能会导致网络结构复杂，例如关系数量过多等问题，导致扩展性差，此时可以通过 BGP 路由反射器和 BGP 联盟来简化 AS 内的拓扑结构.

4. 从 IBGP 获取的路由，是否通告给 EBGP 对等体取决于 BGP 的同步规则。默认情况下同步功能关闭，且在 ENSP 中无法手动开启，如果开启，则只有路由同时从 BGP 和 IGP 学习到才可以通告给 EBGP 对等体。同步规则主要是用来防止 BGP 路由黑洞问题.

## BGP 路由黑洞实验

    R3没有5.5.5.5路由  BGP路由黑洞

    BGP注入OSPF
    [R2-ospf-1]import-route bgp
    [R4-ospf-1]import-route bgp

    或者R3运行BGP

    <R1>ping -a 1.1.1.1 5.5.5.5
      PING 5.5.5.5: 56  data bytes, press CTRL_C to break
        Request time out
        Request time out
        Request time out
        Request time out
        Request time out

      --- 5.5.5.5 ping statistics ---
        5 packet(s) transmitted
        0 packet(s) received
        100.00% packet loss

    <R3>dis ip routing-table
    Route Flags: R - relay, D - download to fib
    ------------------------------------------------------------------------------
    Routing Tables: Public
             Destinations : 13       Routes : 13

    Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface

            2.2.2.2/32  OSPF    10   1           D   23.1.1.2        GigabitEthernet0/0/0
            3.3.3.3/32  Direct  0    0           D   127.0.0.1       LoopBack0
            4.4.4.4/32  OSPF    10   1           D   34.1.1.4        GigabitEthernet0/0/1
           23.1.1.0/24  Direct  0    0           D   23.1.1.3        GigabitEthernet0/0/0
           23.1.1.3/32  Direct  0    0           D   127.0.0.1       GigabitEthernet0/0/0
         23.1.1.255/32  Direct  0    0           D   127.0.0.1       GigabitEthernet0/0/0
           34.1.1.0/24  Direct  0    0           D   34.1.1.3        GigabitEthernet0/0/1
           34.1.1.3/32  Direct  0    0           D   127.0.0.1       GigabitEthernet0/0/1
         34.1.1.255/32  Direct  0    0           D   127.0.0.1       GigabitEthernet0/0/1
          127.0.0.0/8   Direct  0    0           D   127.0.0.1       InLoopBack0
          127.0.0.1/32  Direct  0    0           D   127.0.0.1       InLoopBack0
    127.255.255.255/32  Direct  0    0           D   127.0.0.1       InLoopBack0
    255.255.255.255/32  Direct  0    0           D   127.0.0.1       InLoopBack0

    BGP注入OSPF
    [R2-ospf-1]import-route bgp

    [R2-ospf-1]dis ospf lsdb

         OSPF Process 1 with Router ID 2.2.2.2
             Link State Database

                     Area: 0.0.0.0
     Type      LinkState ID    AdvRouter          Age  Len   Sequence   Metric
     Router    4.4.4.4         4.4.4.4           1234  48    80000005       0
     Router    2.2.2.2         2.2.2.2             15  48    80000008       0
     Router    3.3.3.3         3.3.3.3           1230  60    8000000A       0
     Network   34.1.1.3        3.3.3.3           1230  32    80000003       0
     Network   23.1.1.2        2.2.2.2           1278  32    80000003       0

             AS External Database
     Type      LinkState ID    AdvRouter          Age  Len   Sequence   Metric
     External  1.1.1.1         2.2.2.2             15  36    80000001       1

    [R4-ospf-1]import-route bgp

    [R4-ospf-1]dis ospf lsdb

         OSPF Process 1 with Router ID 4.4.4.4
             Link State Database

                     Area: 0.0.0.0
     Type      LinkState ID    AdvRouter          Age  Len   Sequence   Metric
     Router    4.4.4.4         4.4.4.4             23  48    80000006       0
     Router    2.2.2.2         2.2.2.2             64  48    80000008       0
     Router    3.3.3.3         3.3.3.3           1277  60    8000000A       0
     Network   34.1.1.3        3.3.3.3           1277  32    80000003       0
     Network   23.1.1.2        2.2.2.2           1326  32    80000003       0

             AS External Database
     Type      LinkState ID    AdvRouter          Age  Len   Sequence   Metric
     External  5.5.5.5         4.4.4.4             23  36    80000001       1
     External  1.1.1.1         2.2.2.2             63  36    80000001       1

    <R3>dis ip routing-table
    Route Flags: R - relay, D - download to fib
    ------------------------------------------------------------------------------
    Routing Tables: Public
             Destinations : 15       Routes : 15

    Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface

            1.1.1.1/32  O_ASE   150  1           D   23.1.1.2        GigabitEthernet0/0/0
            2.2.2.2/32  OSPF    10   1           D   23.1.1.2        GigabitEthernet0/0/0
            3.3.3.3/32  Direct  0    0           D   127.0.0.1       LoopBack0
            4.4.4.4/32  OSPF    10   1           D   34.1.1.4        GigabitEthernet0/0/1
            5.5.5.5/32  O_ASE   150  1           D   34.1.1.4        GigabitEthernet0/0/1
           23.1.1.0/24  Direct  0    0           D   23.1.1.3        GigabitEthernet0/0/0
           23.1.1.3/32  Direct  0    0           D   127.0.0.1       GigabitEthernet0/0/0
         23.1.1.255/32  Direct  0    0           D   127.0.0.1       GigabitEthernet0/0/0
           34.1.1.0/24  Direct  0    0           D   34.1.1.3        GigabitEthernet0/0/1
           34.1.1.3/32  Direct  0    0           D   127.0.0.1       GigabitEthernet0/0/1
         34.1.1.255/32  Direct  0    0           D   127.0.0.1       GigabitEthernet0/0/1
          127.0.0.0/8   Direct  0    0           D   127.0.0.1       InLoopBack0
          127.0.0.1/32  Direct  0    0           D   127.0.0.1       InLoopBack0
    127.255.255.255/32  Direct  0    0           D   127.0.0.1       InLoopBack0
    255.255.255.255/32  Direct  0    0           D   127.0.0.1       InLoopBack0

    [R1]ping -a 1.1.1.1 5.5.5.5
      PING 5.5.5.5: 56  data bytes, press CTRL_C to break
        Reply from 5.5.5.5: bytes=56 Sequence=1 ttl=252 time=80 ms
        Reply from 5.5.5.5: bytes=56 Sequence=2 ttl=252 time=50 ms
        Reply from 5.5.5.5: bytes=56 Sequence=3 ttl=252 time=60 ms
        Reply from 5.5.5.5: bytes=56 Sequence=4 ttl=252 time=50 ms
        Reply from 5.5.5.5: bytes=56 Sequence=5 ttl=252 time=40 ms

      --- 5.5.5.5 ping statistics ---
        5 packet(s) transmitted
        5 packet(s) received
        0.00% packet loss
        round-trip min/avg/max = 40/56/80 ms

## BGP 属性

BGP 的路由中会携带多条属性信息，这些属性信息描述了 BGP 路由的各种特征，可以用于 BGP 最终的选路策略.

## BGP 属性分类

公认必遵属性 (well-know mandatory): 该属性可以被所有的 BGP 设备所识别，在 update 报文中必须携带该属性，如果未携带，则认为该报文错误.

公认任意属性 (well-know discretionary): 该属性可以被所有的 BGP 设备所识别，在 update 报文中可以不携带，如果未携带，则不认为该报文错误.

可选过渡属性 (optional transitive): 该属性可能不被 BGP 设备所识别。如果不识别的情况下，依旧可以传递该属性.

可选非过渡属性 (optional non-transitive): 该属性可能不被 BGP 设备所识别。如果不识别的情况下，不会传递该属性。属性信息直接被忽略.

## Origin-code

Origin-code : 起源代码或起源属性，是一个公认必遵属性，用于标识一个路由被注入进 BGP 表的方式，在 BGP 路由传递过程中起源代码一般不会改变，共三个值:

i:IGP, 表示该路由是通过 network 命令注入 BGP 得到的

e:EGP, 表示路由通过 EGP 协议学习的，该协议目前已经完全被 BGP 取代，现网中几乎无法见到

?:incomplete, 表示通过其他方式注入得到，一般是通过 import 命令注入得到.

当去往同一个目的地存在多条起源属性不同的路由时，如果其他条件都相同，则按照起源代码 i 优于 e 优于？的顺序加表.

## AS_PATH

AS_PATH:AS 路径属性，是一个公认必遵属性，用于描述一个 BGP 路由所经过的 AS 路径信息，本地始发的路由 AS_PATH 属性为空，当路由传递给 EBGP PEER 时，会将自身的 AS 号添加到 AS_PATH 中

AS_PATH 可以用于 BGP 的 AS 间路由防环，当从 EBGP 接收路由时，如果发现路由中的 AS_PATH 已经包含自身的 AS 号，则拒绝接收该路由.

如果从不同的路径收到相同目的地的路由，且其他属性完全相同，此时会优选 AS-PATH 较短的路由.

    bestroute as-path-ignore // 通过此命令可以忽略AS-PATH长短的比较

    <R2>dis bgp routing-table

     BGP Local router ID is 2.2.2.2
     Status codes: * - valid, > - best, d - damped,
                   h - history,  i - internal, s - suppressed, S - Stale
                   Origin : i - IGP, e - EGP, ? - incomplete

     Total Number of Routes: 6
          Network            NextHop        MED        LocPrf    PrefVal Path/Ogn

     *>   1.1.1.1/32         12.1.1.1        0                     0      100i
     *>i  5.5.5.5/32         4.4.4.4         0          100        0      300i
     *>   10.1.0.0/24        12.1.1.1        0                     0      100?
     *>   10.1.1.0/24        12.1.1.1        0                     0      100?
     *>   10.1.2.0/24        12.1.1.1        0                     0      100?
     *>   10.1.3.0/24        12.1.1.1        0                     0      100?

    <R5>dis bgp routing-table

     BGP Local router ID is 5.5.5.5
     Status codes: * - valid, > - best, d - damped,
                   h - history,  i - internal, s - suppressed, S - Stale
                   Origin : i - IGP, e - EGP, ? - incomplete

     Total Number of Routes: 6
          Network            NextHop        MED        LocPrf    PrefVal Path/Ogn

     *>   1.1.1.1/32         45.1.1.4                              0      200 100i
     *>   5.5.5.5/32         0.0.0.0         0                     0      i
     *>   10.1.0.0/24        45.1.1.4                              0      200 100?
     *>   10.1.1.0/24        45.1.1.4                              0      200 100?
     *>   10.1.2.0/24        45.1.1.4                              0      200 100?
     *>   10.1.3.0/24        45.1.1.4                              0      200 100?

    所经过的AS路径信息
    越靠近后,靠近始发侧
    新的AS号在前

    ---

    [R5-bgp]display bgp routing-table peer 56.1.1.6 advertised-routes

     BGP Local router ID is 5.5.5.5
     Status codes: * - valid, > - best, d - damped,
                   h - history,  i - internal, s - suppressed, S - Stale
                   Origin : i - IGP, e - EGP, ? - incomplete

     Total Number of Routes: 6
          Network            NextHop        MED        LocPrf    PrefVal Path/Ogn

     *>   1.1.1.1/32         56.1.1.5                              0      300 200 100i
     *>   5.5.5.5/32         56.1.1.5        0                     0      300i
     *>   10.1.0.0/24        56.1.1.5                              0      300 200 100?
     *>   10.1.1.0/24        56.1.1.5                              0      300 200 100?
     *>   10.1.2.0/24        56.1.1.5                              0      300 200 100?
     *>   10.1.3.0/24        56.1.1.5                              0      300 200 100?

## Next-hop

next-hop: 下一跳地址是一个公认必遵属性，描述路由到达目标网络的下一台设备的 IP 地址.
当 BGP 设备收到路由时如果下一跳地址是不可达的，则路由不会被调优.

在不同场景中，设备对缺省的 Next-hop 属性设置规则也是不同的:

1.BGP 设备向 EBGP 对等体发布路由时，会把该路由的下一跳属性设置为本地与对端建立 BGP PEER 接口的地址.

2.BGP 设备将本地始发的路由发布给 IBGP 对等体，会将路由的下一跳设置为本地与对端建立 IBGP PEER 接口的地址.

3. 如果从其他 EBGP 学习的路由在通告给 IBGP PEER 时会保持 Next-hop 属性不变

4. 如果路由器收到 BGP 路由，该路由的 Next-hop 字段与 EBGP 对等体在同一个 IP 子网，那么该路由通告给 EBGP PEER 时不修改 Next-hop 属性.

    [R1-bgp]display bgp routing-table

     BGP Local router ID is 1.1.1.1
     Status codes: * - valid, > - best, d - damped,
                   h - history,  i - internal, s - suppressed, S - Stale
                   Origin : i - IGP, e - EGP, ? - incomplete

     Total Number of Routes: 2
          Network            NextHop        MED        LocPrf    PrefVal Path/Ogn

     *>   1.1.1.1/32         0.0.0.0         0                     0      i
     *>   2.2.2.2/32         12.1.1.2        0                     0      200i

    <R2>display bgp routing-table

     BGP Local router ID is 2.2.2.2
     Status codes: * - valid, > - best, d - damped,
                   h - history,  i - internal, s - suppressed, S - Stale
                   Origin : i - IGP, e - EGP, ? - incomplete

     Total Number of Routes: 2
          Network            NextHop        MED        LocPrf    PrefVal Path/Ogn

     *>   1.1.1.1/32         12.1.1.1        0                     0      100i
     *>   2.2.2.2/32         0.0.0.0         0                     0      i
    <R2>

    [R3-bgp]display bgp routing-table

     BGP Local router ID is 3.3.3.3
     Status codes: * - valid, > - best, d - damped,
                   h - history,  i - internal, s - suppressed, S - Stale
                   Origin : i - IGP, e - EGP, ? - incomplete

     Total Number of Routes: 3
          Network            NextHop        MED        LocPrf    PrefVal Path/Ogn

       i  1.1.1.1/32         1.1.1.1         0          100        0      i
       i  2.2.2.2/32         12.1.1.2        0          100        0      200i
     *>i  11.1.1.1/32        1.1.1.1         0          100        0      i

    [R2-bgp]display bgp routing-table

     BGP Local router ID is 2.2.2.2
     Status codes: * - valid, > - best, d - damped,
                   h - history,  i - internal, s - suppressed, S - Stale
                   Origin : i - IGP, e - EGP, ? - incomplete

     Total Number of Routes: 3
          Network            NextHop        MED        LocPrf    PrefVal Path/Ogn

     *>   1.1.1.1/32         12.1.1.1        0                     0      100i
     *>   2.2.2.2/32         0.0.0.0         0                     0      i
     *>   11.1.1.1/32        12.1.1.1        0                     0      100i

## Local-preference

本地优先级属性
Local-preference: 本地优先级属性，公认任意属性，用于在 AS 内来确定流量的出口路径。在 AS 内的本地优先级越大越优，缺省值 100，只能在 AS 内传递

【本地优先级属性用于在 BGP AS 内控制出向流量，当 AS 内，存在多个出口时，可以通过控制本地优先级属性实现流量路径的选择，优先级越大越优，优先级默认值为 100.】

    本地优先级的注意事项：本地优先级只能在IBGP对等体之间传递，而不能在EBGP对等体之间传递，如果在EBGP对等体之间收到了携带本地优先级属性的路由，则进行错误处理。

可以在 AS 边界路由器上使用 import 方向的策略来修改 local preference 属性值。也就是在收到路由之后在本地为路由赋予 local preference。

    [R3-bgp]default local-preference 110 // 更改本地优先级

## MED

MED（multi-exit）： 多出口标识（多出口鉴别器）可选非过度属性

是一种度量值，可以用于控制入向流量，MED 数值越小 BGP 路由越优，缺省情况下不携带 MED 值 (不携带为 0)

    [R3]route-policy set-med permit node 10 // 创建策略
    [R3-route-policy]apply cost 30 // 更改MED值
    [R3-bgp]peer 13.1.1.1 route-policy set-med export // 在BGP应用

在 AS 出口中可以将 IGP 的注入进 BGP，此时 IGP 的 metric 会被添加进 BGP MED 属性，并通告给 EBGP peer，EBGP 对等体可以根据 MED 值或者该路由的 IGP 情况进行选路.

    [R2-GigabitEthernet0/0/1]ospf cost 15 // 更改接口ospf 开销值

缺省情况下 BGP 设备只会比较来自同一个相邻 AS 的 MED 值，可以通过命令

    [R1-bgp] compare-different-as-med

让路由器比较来自不同 AS 路由的 MED 值

MED 作用：

在 AS 之间控制入向流量的属性，属性仅在 AS 之间传递，收到此属性的 AS 不会再通告给任何第三方 AS.

路由在通告进 BGP 设备时，路由会将 metric 加入到 MED 属性中，通过 MED 值反应路由的变化类似于 BGP metric，数值越小越优先，不同的 IGP 引入的 MED 无法比较.

如果是本地始发路由，MED 值会被通告给 IBGP 和 EBGP.

如果是从其他的 BGP 对等体学习的路由，则 MED 值只能通告给 IBGP 对等体，不会通告给 EBGP 对等体.
MED 值只能影响相邻的 AS 选路.

MED 更加灵活，当开销发生变动时，MED 也会随之改变

## Community

Community: 团体属性，是 BGP 路由中的一种标记信息，使用可以将一些相同策略的路由进行相同的标记加以区分。从而便于后续的策略执行，是一个可选过渡属性，共 32bit 有两种表示形式:

十进制数形式

AA:NN 其中 AA 是 16bit,NN 也为 16bit. 一般情况下，AA 可以使用路由对应的 AS 号，NN 为管理员自定义的标记信息.

常见的 Community 可以分为 2 类:

公认 Community:

1.internet:0x00000000 表示缺省的 Community 信息，默认路由器对该 Community 不做任何的动作.

2.no-advertise:0xFFFFFF02 表示该路由不会通告给任何的 BGP PEER.

3.no-export:0xFFFFFF01 表示该路由不会发出本 AS, 表示不会通告给 EBGP PEER.

4.no-export-subconfed:0xFFFFFF03 表示该路由不会传出联盟子 AS, 同时也不会向其他 AS 传递.

私有 Community

Community-filter: 用于匹配 BGP 中 Community 信息的工具

基本的 filter 范围：1-99

高级的 filter 范围: 00-199

    [R3]ip community-filter ?
      INTEGER<1-99>     Community-filter number (basic)
      INTEGER<100-199>  Community-filter number (advanced)
      advanced          Advanced community-filter
      basic             Basic community-filter
    [R3]ip community-filter 1 permit 100:100
    [R3]ip community-filter 2 permit 100:200

    ----
    通告Community
    [R1-bgp]peer 12.1.1.2 advertise-community

    [R1-acl-basic-2001]dis current-configuration configuration acl-basic
    acl number 2000
     rule 5 permit source 10.1.0.0 0. 0.255.255
    acl number 2001
     rule 5 permit source 20.1.0.0 0.0.255.255
    [R1-route-policy]dis th
    route-policy set-com permit node 10
     if-match acl 2000
     apply community 100:100
    #
    route-policy set-com permit node 20
     if-match acl 2001
     apply community 100:200

    [R1-bgp]peer 12.1.1.2 route-policy set-com export
    [R1-bgp]peer 12.1.1.2 advertise-community

    [R2]dis bgp routing-table community 100:100
    ---
    [R2-bgp]peer 23.1.1.3 advertise-community
    [R2-bgp]peer 24.1.1.4 advertise-community

    [R3]ip community-filter 1 permit 100:100
    [R3]ip community-filter 2 permit 100:200

    [R4]ip community-filter 1 permit 100:100
    [R4]ip community-filter 2 permit 100:200

    [R3-route-policy]dis th
    route-policy set-lp permit node 10
     if-match community-filter 1
     apply local-preference 110
    #
    route-policy set-lp permit node 20
     if-match community-filter 2
     apply local-preference 50

    [R4-route-policy]dis th
    route-policy set-lp permit node 10
     if-match community-filter 1
     apply local-preference 50
    #
    route-policy set-lp permit node 20
     if-match community-filter 2
     apply local-preference 110

    bgp 300
    peer x.x.x.x route-policy set-lp import

    [R3-bgp]peer 23.1.1.2 route-policy set-lp import
    [R4-bgp]peer 24.1.1.2 route-policy set-lp import

## BGP 选路原则

0.BGP 路由的下一跳地址不可达，则路由不会被调优.

1.preferred-value (首选值) 数值越高，路由越优.

是华为设备私有的属性，只能用于 BGP 本地路由控制，该属性不会出现在 update 报文中。缺省值为 0

2. 优选 local-Preference 属性值较高的路由.

3. 本地始发的路由，优于非本地始发路由.

聚合路由优于非聚合路由

手动聚合 > 自动聚合 > network > import > 非本地始发

4. 优选 AS_PATH 路径较短的路由.

5. 优选 origin 最优的路由

`i>e>?`

6. 优选 MED 数值较小的路由

7. 优选从 EBGP 学习的路由 (EBGP 优于 IBGP 路由)

8. 优选 next-hop 的 IGP 度量值最小的路由

8.5 BGP 设备不开启负载均衡，如果开启了负载均衡条件，且前 8 条内容一致，则实现负载均衡.

9. 优选 cluster_list 较短的路由.

10. 优选 RID (originator-id) 较小路由.

11. 优选具有最小 IP 地址的对等体通告的路由.

## BGP 路由反射器

由于 IBGP 水平分割规则的存在，AS 内部如果需要构建 IBGP 全互联，则需要维护大量的 TCP 连接以及 BGP 邻居关系，尤其当路由器数量较多时，会导致扩展性变差，难以维护.

此时可以通过 BGP 的路由反射器技术来简化 BGP 的邻居关系建立.

BGP 路由反射器可以降低水平分割发送路由的限制，让一部分 IBGP 的路由可以发送给 IBGP PEER.

## BGP 路由反射器中的角色

RR (rouote reflector): 路由反射器

client:RR 的客户机

non-cient:RR 的非客户机

## 路由反射规则

当 RR 接收到 BGP 路由时，

如果是反射器从自己的非客户机收到的，则会将其反射给所有的客户机

如果是从客户机收到的路由，则会反射给所有的非客户机和客户机.

如果从 EBGP PEER 收到的路由，则发送给所有 BGP PEER.

    peer x.x.x.x reflect-client

    [R1-bgp]peer 2.2.2.2 reflect-client
    [R1-bgp]peer 3.3.3.3 reflect-client

## 反射器簇

一个路由器与其所有的客户机形成一个路由反射器簇.

在一个 AS 内一个路由器有可能属于多个不同的簇.

路由器在不同的簇内角色可能不同

## 起源者 ID

Originator: 起源者 ID, 用于反射器簇内防环，是一个可选非过渡属性，当路由反射器第一次反射路由时，反射器会将路由发起者的 RID 添加至该属性，在后续传递过程中该属性不变，BGP 设备收到路由时会将起源者 ID 和自身的 RID 进行对比，如果不一致，则正常接收处理该路由，如果一致，则拒绝接收该路由.

## 簇 id

簇 id: 簇 id 是反射器簇的标识，具备相同簇 id 的反射器在同一个簇内，如果没有配置簇 id, 则缺省用设备的 RID 作为族 id.

    [R1-bgp]reflector cluster-id x.x.x.x // 手动设置更改簇id

## Cluster_id list

Cluster_id list: 簇 id 列表，用于在 BGP 路由反射器簇直接进行防环，是一个可选非过渡属性，当路由器第一次反射路由时，反射器会创建该属性，并将自身的簇 id 添加到列表中。当路由反射器接收到携带簇 id 列表的路由时，会检查列表是否包含自身的簇 id 信息，如果不包含，则正常接收处理，如果包含自身的族 id, 则拒绝接收该路由.

## BGP 路由聚合

BGP 路由聚合：可以将多个 BGP 路由聚合成一条路由，从而减少 BGP 传递的路由条目。来提升 BGP 传输的效率.

自动聚合：将本地 import 命令引入的路由自动聚合成主类网络.

默认会抑制明细路由，只有主类网络会被通告出去.

手工聚合：可以将 BGP 表中任意的路由聚合成任意长度，可以实现更灵活的路由聚合.

默认不抑制明细路由.

detail-suppressed: 可以通过该参数将明细路由进行抑制.

as-set: 将明细路由的 AS 无序添加到 AS_PATH 中，用于聚合后的路由防环.

attribute-policy: 在聚合后将某些属性添加到聚合路由中.

origin-policy: 起源策略，用于匹配路由起源，只有匹配起源策略的路由才会被聚合.

suppress-policy: 在进行路由聚合时，可以通过抑制策略选择被抑制的路由，未被抑制的路由可以正常的被通告.

    自动聚合
    [R1-bgp]summary automatic

    ------
    手工聚合
    10.1.0.0/24 0000 0000
    10.1.1.0/24 0000 0001
    10.1.2.0/24 0000 0010
    10.1.3.0/24 0000 0011
    10.1.4.0/24 0000 0100
    10.1.5.0/24 0000 0101
    10.1.6.0/24 0000 0110
    10.1.7.0/24 0000 0111
    10.1.0.0/21 0000 0000

    [R5-bgp]aggregate 10.1.0.0 21

    -----
    detail-suppressed

    [R5-bgp]aggregate 10.1.0.0 255.255.248.0 ?
      as-set             Generate the route with AS-SET path-attribute
      attribute-policy   Set aggregation attributes
      detail-suppressed  Filter more detail route from updates
      origin-policy      Filter the originate routes of the aggregate
      suppress-policy    Filter more detail route from updates through a Routing
                         policy
      <cr>
    [R5-bgp]aggregate 10.1.0.0 255.255.248.0 detail-suppressed

    [R5-bgp]aggregate 10.1.0.0 255.255.248.0 detail-suppressed as-set

    [R5]route-policy set-com permit node 10
    [R5-route-policy]apply community 100:100
    [R5-bgp]aggregate 10.1.0.0 255.255.248.0 detail-suppressed as-set attribute-policy set-com
    Warning: set-com used as BGP attribute-policy, apply as-path is not supported.
    [R5-bgp]dis bgp r community
     Total Number of Routes: 1
          Network            NextHop        MED        LocPrf    PrefVal Community

     *>   10.1.0.0/21        127.0.0.1                             0      <100:100>

    ----
    origin-policy

    [R1]route-policy set-com permit node 10
    [R1-route-policy]apply community 100:1
    [R1-bgp]import-route static route-policy set-com
    [R1-bgp]peer 100.1.1.5 advertise-community

    [R5]ip community-filter 1 permit 100:1
    [R5]route-policy ori-policy permit node 10
    [R5-route-policy]if-match community-filter 1

    [R5-bgp]aggregate 10.1.0.0 255.255.248.0 as-set detail-suppressed attribute-poli
    cy set-com origin-policy ori-policy

    [R5-bgp]dis bgp routing-table community

     BGP Local router ID is 5.5.5.5
     Status codes: * - valid, > - best, d - damped,
                   h - history,  i - internal, s - suppressed, S - Stale
                   Origin : i - IGP, e - EGP, ? - incomplete

     Total Number of Routes: 9
          Network            NextHop        MED        LocPrf    PrefVal Community

     *>   10.1.0.0/21        127.0.0.1                             0      <100:100>
     s>   10.1.0.0/24        100.1.1.1       0                     0      <100:1>
     s>   10.1.1.0/24        100.1.1.1       0                     0      <100:1>
     s>   10.1.2.0/24        100.1.1.2       0                     0      <100:1>
     s>   10.1.3.0/24        100.1.1.2       0                     0      <100:1>
     *>   10.1.4.0/24        100.1.1.3       0                     0      <100:2>
     *>   10.1.5.0/24        100.1.1.3       0                     0      <100:2>
     *>   10.1.6.0/24        100.1.1.4       0                     0      <100:2>
     *>   10.1.7.0/24        100.1.1.4       0                     0      <100:2>

    ----
    suppress-policy
    10.1.0000 0 001.0/24
    10.1.0000 0 011.0/24

    10.1.0000 0 0X0.0 0.0.2.0
    [R5-acl-basic-2000]rule per source 10.1.1.0 0.0.2.0
    [R5-route-policy]dis th
    route-policy sup-policy permit node 10
     if-match acl 2000
    [R5-bgp]aggregate 10.1.0.0 255.255.248.0 as-set detail-suppressed origin-policy
    ori-policy attribute-policy set-com suppress-policy sup-policy
    [R5-bgp]dis bgp routing-table community
          Network            NextHop        MED        LocPrf    PrefVal Community

     *>   10.1.0.0/21        127.0.0.1                             0      <100:100>
     *>   10.1.0.0/24        100.1.1.1       0                     0      <100:1>
     s>   10.1.1.0/24        100.1.1.1       0                     0      <100:1>
     *>   10.1.2.0/24        100.1.1.2       0                     0      <100:1>
     s>   10.1.3.0/24        100.1.1.2       0                     0      <100:1>
     *>   10.1.4.0/24        100.1.1.3       0                     0      <100:2>
     *>   10.1.5.0/24        100.1.1.3       0                     0      <100:2>
     *>   10.1.6.0/24        100.1.1.4       0                     0      <100:2>
     *>   10.1.7.0/24        100.1.1.4       0                     0      <100:2>

## 策略修改 AS_PATH

    route-policy add-as permit node 10
     apply as-path 123 addivite
    route-policy add-as2 permit node 10
     apply as-path 123 overwrite

    [R2-bgp]peer 23.1.1.3 route-policy add-as export

## AS-path-filter

AS-path-filter: AS 路径过滤器，是 BGP 中一个特有的过滤器，可以与路由策略配合使用，对 BGP 的路由进行过滤或属性的调整.

AS-path-filter 在使用时通过正则表达式对 BGP 路由中的 AS-PATH 属性进行配置

## 正则表达式符号

`^`: 起始符，表示一个字符串开始

    ^10
    10 20 30
    10 11 12
    100 110 120

`$`: 结束符，表示一个字符串的结束.

    10$
    30 20 10
    120 110

`_`: 匹配任意一个符号，包括括号和空格.

    _100$    从AS100始发的路由

`.`: 可以用于匹配任意的单个字符，包括空格.

    0.1
    0x1
    011
    021
    0 1

`+`: 用于匹配前面的序列，可以出现 1 次或多次.

    12+
    12
    122
    1222

`*`: 用于匹配前面的序列，可以出现 0 次或多次.

    12*
    1
    12
    122
    1222

`?` : 用于匹配前面的序列，可以出现 0 次或 1 次.

    12?
    1
    12

`()` : 一个序列优先计算，一般可以与 | 配合使用.

`|` : 逻辑或

    12(3|4)56
    12356
    12456

`[]` : 用于匹配一个序列的范围，一般可以与 - 配合使用.

`-`: 连接符，一般用于表示一个序列范围.

`12[3456]` 等同于 `12[3-6]`

    123
    124
    125
    126

正则表达式举例:

`^100$` : 从相邻的 AS 100 始发的路由.

`^$` : 本 AS 始发的路由.

`_100$` : 从 AS100 始发的路由

`^100_` : 从相邻的 AS 100 传入的路由.

`_100_` : 途径 AS 100 的路由.

`.*`: 匹配任意的 BGP 信息

`^[0-9]+$` : 从相邻 AS 始发的路由. `[0-9][0-9][0-9][0-9][0-9]`

    需求1: 在R6中过滤掉始发于AS200 的路由
    [R6-bgp]dis bgp routing-table
     Total Number of Routes: 6
          Network            NextHop        MED        LocPrf    PrefVal Path/Ogn

     *>   10.1.1.0/24        56.1.1.5                              0      500 400 100?
     *>   20.1.1.0/24        56.1.1.5                              0      500 300 200?
     *>   30.1.1.0/24        56.1.1.5                              0      500 300?
     *>   40.1.1.0/24        56.1.1.5                              0      500 400?
     *>   50.1.1.0/24        56.1.1.5        0                     0      500?
     *>   60.1.1.0/24        0.0.0.0         0                     0      ?

    [R6]ip as-path-filter deny_200 deny ?
      TEXT  A regular-expression of 1 to 255 characters for matching AS_Path attributes

    [R6]ip as-path-filter deny_200 deny _200$ // 拒绝始发于 AS200 的路由
    [R6]ip as-path-filter deny_200 permit .*   // 未匹配的路由默认为拒绝,这里修改为放行
    [R6-bgp]peer 56.1.1.5 as-path-filter deny_200 ?
      export  Egress distribution list
      import  Ingress distribution list
    [R6-bgp]peer 56.1.1.5 as-path-filter deny_200 import // BGP 调用 as-path-filter
    [R6-bgp]dis bgp routing-table
     Total Number of Routes: 5
          Network            NextHop        MED        LocPrf    PrefVal Path/Ogn

     *>   10.1.1.0/24        56.1.1.5                              0      500 400 100?
     *>   30.1.1.0/24        56.1.1.5                              0      500 300?
     *>   40.1.1.0/24        56.1.1.5                              0      500 400?
     *>   50.1.1.0/24        56.1.1.5        0                     0      500?
     *>   60.1.1.0/24        0.0.0.0         0                     0      ?

    ----
    AS200始发的路由 MED 修改为 50
    [R2-bgp]dis bgp routing-table
     Total Number of Routes: 9
          Network            NextHop        MED        LocPrf    PrefVal Path/Ogn

     *>   10.1.1.0/24        12.1.1.1        0                     0      100?
     *>   20.1.1.0/24        0.0.0.0         0                     0      ?
     *>   30.1.1.0/24        23.1.1.3        0                     0      300?
     *>   40.1.1.0/24        12.1.1.1                              0      100 400?
     *                       23.1.1.3                              0      300 500 400?
     *>   50.1.1.0/24        23.1.1.3                              0      300 500?
     *                       12.1.1.1                              0      100 400 500?
     *>   60.1.1.0/24        23.1.1.3                              0      300 500 600?
     *                       12.1.1.1                              0      100 400 500 600?

    [R2]ip as-path-filter AS200 permit ^$ // 本AS始发的路由
    [R2-route-policy]dis th
    route-policy set-med permit node 10
     if-match as-path-filter AS200
     apply cost 50
    [R2-bgp]import-route static route-policy set-med

    [R2-bgp]dis bgp routing-table
     Total Number of Routes: 9
          Network            NextHop        MED        LocPrf    PrefVal Path/Ogn

     *>   10.1.1.0/24        12.1.1.1        0                     0      100?
     *>   20.1.1.0/24        0.0.0.0         50                    0      ?
     *>   30.1.1.0/24        23.1.1.3        0                     0      300?
     *>   40.1.1.0/24        12.1.1.1                              0      100 400?
     *                       23.1.1.3                              0      300 500 400?
     *>   50.1.1.0/24        23.1.1.3                              0      300 500?
     *                       12.1.1.1                              0      100 400 500?
     *>   60.1.1.0/24        23.1.1.3                              0      300 500 600?
     *                       12.1.1.1                              0      100 400 500 600?

    -------

## BGP 对等体组

BGP 对等体组：是一些具有相同策略的对等体的集合，当一个对等体加入对等体组中，该对等体将获得与所在 BGP 对等体组相同的配置，当对等体组的配置改变时，组内成员的配置也相应改变.

在大型 BGP 网络中，由于对等体的数量很多，其中很多对等体具有相同的策略，在配置时会重复使用一些命令，利用对等体组可以简化配置.

    group ibgp internal
    peer ibgp connect-interface LoopBack0
    peer ibgp password simple huawei123
    peer ibgp reflect-client
    peer ibgp next-hop-local

    peer x.x.x.x group ibgp
    ----
    group ebgp external
    peer ebgp as-number 300
    peer ebgp ebgp-max-hop 2
    peer ebgp connect-interface LoopBack0
    peer ebgp password simple huawei123

    peer x.x.x.x group ebgp

OSPF特殊区域

OSPF 特殊区域 OSPF 特殊区域 什么时候使用特殊区域(目的：减少 LSDB 的规模) 1. 网络末端 2. 路由器性能低下 Stub 区域Stub (末节区域) Stub 中只...

VRF 虚拟路由转发

VRF 虚拟路由转发 VRF 虚拟路由转发 VRFVRF: 虚拟路由转发，在三层将路由环境分割成多个虚拟环境，每个虚拟环境之间都是完全隔离的。通过用于 MPLS VPN 以及 VRF ...

推荐阅读
IP路由基础 OSPF路由计算 VRF 虚拟路由转发 OSPF基础 BFD协议原理与配置 DHCP

留言区

Notes
数据通信网络
Are You A Robot?