MHuiG

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

OSPF 基础

# OSPF 基础

## 动态路由

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

### 动态路由分类

按照使用范围分类:

- IGP: 内部网关协议，运行于 AS 内部的路由协议 (RIP, OSPF, IS-IS)
- EGP: 外部网关协议，运行于 AS 之间的路由协议 (BGP)

按照算法分类:

- 距离矢量路由协议：通过距离和矢量两个参数来描述一个路由信息进行计算，距离指的是由多远能到达目标 (开销，跳数). (RIP, BGP)
- 链路状态路由协议：通过每台路由器自动生成链路状态信息，通过在一定的区域内交互链路状态信息，得到区域内完整的拓扑，最终通过最短路径树算法，计算得到最优的树状路径. (OSPF IS-IS)

按照主类进行分类:

- 有类路由协议：在传递信息时，不携带掩码，根据传递路由的主类网络以及接收路由的接口掩码的配置，自动计算路由. (RIPv1)
- 无类路由协议：在传递信息时，协议带子网掩码，可以支持更广泛的应用，支持 VLSM, CIDR. (RIPv2, OSPF, IS-IS, BGP)

### 动态路由特点

路由器通过动态路由协议自动计算得到的路由信息可以根据网络的变化自动进行路由表的改变.

1. 可以减少网络的管理任务.
2. 动态路由协议会占用部分网络的带宽.
3. 可以实现路由的自动调整.

## 链路状态

LS: 链路状态，设备直接相连的网络或节点信息.

LSA: 链路状态通告.

LSDB: 链路状态数据库，是所有 LSA 的集合.

SPF: 最短路径树算法.

## OSPF 工作原理

1. 建立邻居关系.
2. 泛洪 LSA, 并同步 LSDB.
3. 根据 SPF 算法计算最优路径.
4. 将计算得出的路由放入到路由表中.

## 区域

AREA: 区域，OSPF 通过区域可以实现网络的分层，并实现管理域的隔离，缩小 LSDB 的规模，每个 OSPF 设备在运行时需要指定接口所在的区域，每个区域会有一个区域号进行标识，一般写作点分十进制。区域是从逻辑上将设备分为不同的组.

OSPF 区域分为两层:

- 骨干区域：固定的区域号为 `0` 或 `0.0.0.0` 必须有且只能有一个.
- 非骨干区域: AS 内可以存在多个非骨干区域，区域号非 0, 所有的非骨干区域和骨干区域相连，非骨干区域之间不能相连.

## 路由器角色

`IR`: 区域内部路由器，所有的接口属于同一个 OSPF 区域的路由器.

`BR`: 骨干路由器，至少有一个路由器接口运行于 OSPF 的骨干区域的路由器.

`ABR`: 区域边界路由器，连接多个区域且所连接的区域中包括骨干区域的路由器.

`ASBR`: 自治系统边界路由器，OSPF 中，AS 和 AS 相连的路由，一般在 ASBR 上将其他 AS 路由注入进 OSPF 中形成 OSPF 外部路由.

## Router-ID

32bit 的无符号整数，每个 OSPF 设备在网络中的唯一标识，经常用点分十进制表示，每个设备在运行 OSPF 的 AS 内都有唯一的 RID.

### 生成规则

1. 如果手工配置了 RID, 则手工配置优先.
2. 如果没有手工配置，则设备会使用最大的 lookback 接口 IP 作为 RID.
3. 如果没有 lookback 接口，则优选物理接口最大的 IP 地址作为 RID.

### 全局 RID

默认情况下，设备的全局标识.

### 协议 RID

默认情况下，路由协议会使用全局 RID 作为协议 RID, 如果手工指定协议 RID, 则优先使用手工指定的 RID.

## Cost

OSPF 以 cost 作为度量值，是一个 16bit 正整数，取值范围 1-65535, 数值越小越优.

OSPF 计算的开销是到达目的网络所有链路的总开销，从目的到本设备的入向接口开销总和.

cost 只与带宽有关.

cost = 参考带宽值 / 接口带宽值 (参考带宽值 100Mbit/s)

如果修改参考带宽值，所有 OSPF 设备都要修改.

## OSPF 报文

`Hello`: 用于发现，建立以及维持邻居关系.

`DD`: 数据库描述信息，相当于 LSDB 的摘要信息，在路由器之间选举主从.

`LSR`: 链路状态请求，用于请求特定的 LSA.

`LSU`: 链路状态更新，用于响应 LSR, 进行 LSA 的更新.

`LSACK`: 链路状态确认，对 LSU 中的信息进行确认.

## 建立邻居关系

    R1                                                       R2
    down
        ==> hello (RID: 1.1.1.1 neighbor list: null)    ==>
                                                            init
        <== hello (RID: 2.2.2.2 neighbor list: 1.1.1.1) <==
    2-way                                                   init
        ==> hello (RID: 1.1.1.1 neighbor list: 2.2.2.2) ==>
                                                            2-way
    EXstart
        ==> DD (1.1.1.1) X ===============================>
        <== DD (2.2.2.2) Y <===============================
    EXchange
        ==> DD (LSDB) Y    ===============================>
        <== DD (LSDB) Y+1  <===============================
                                                            EXchange
        ==> DD Y+1         ===============================>
    Loading
        ==> LSR           ================================>
        <== LSU           <================================
        ==> LSACK         ================================>
        ..........
    Full                                                    Full

## OSPF 状态机

`DOWN`: 表示 OSPF 失效状态，当前状态下无法和其他路由器建立邻居关系.

`Init`: 初始化状态，表示收到 OSPF Hello 报文，但报文中不包含自身的 RID, 也就是此时其他路由器并不知道自身的存在.

`2-way`: 双向通信状态，表示收到 OSPF Hello 报文，且收到的报文中包含自身设备的 RID, 此时已经和邻居建立双向通信.

`EXstart`: OSPF 设备会交互空的 DD 报文用于 OSPF 邻接关系的主从选举.

`EXchange`: OSPF 会发送 DD 报文来描述自身数据库信息.

`Loading`: OSPF 设备通过发送 LSR 对特定的 LSA 进行请求，并等待对方更新。被请求设备将 LSA 放入到 LSU 中发送过去，并等待对方的 ACK. 收到的设备需要对其确认.

`FULL`: 当 LSDB 同步完成时，进入此状态也就是邻接状态.

## OSPF 邻接状态建立过程

第一步:

当邻居状态变为 EXstart 时，RTA 回会向 RTB 发送第一个 DD 报文，在这个报文中，序列号为 X, RTA 宣告自己为主路由器.

此时 RTB 也向 RTA 发送自己的第一个 DD 报文，在这个报文中，假设 DD 报文的序列号为 Y, RTB 也宣告自己为主路由器，由于 RTB 的 RID 比 RTA 大，所以 RTB 成为真正的主路由器.

第二步:

RTA 发送一个新的 DD 报文，在这个报文中，携带着 LSDB 的描述信息。序列号设置为 RTB 在上一个 DD 报文中的序列号，此时 RTB 的状态改为 EXchange.

第三步:

邻居状态变为 EXchange 之后，RTB 发送一个新的 DD 报文，该报文包含着 LSDB 的描述信息，DD 报文的序列号为 Y+1 (上次使用的序列号 + 1).

第四步:

即使 RTA 不需要新的 DD 报文来描述自己的 LSDB, 但作为从路由器，RTA 需要对主路由器 RTB 发送的每一个 DD 报文进行确认，所以，RTA 向 RTB 发送一个内容为空的 DD 报文，序列号采用 RTB 上次发送的序列号 (表示确认).

第五步:

发送完最后一个 DD 报文后，RTA 将状态改为 Loading, RTB 收到最后一个 DD 报文后状态改为 FULL (假设 RTB 的 LSDB 是完整的，不需要向 RTA 请求更新).

## OSPF 所支持的网络类型

1. BMA: 广播型多路访问，当链路层为以太网时，此网络中带有广播功能，也是 OSPF 默认的网路类型，在此网络类型下需要进行 DR 和 BDR 的选举.
2. NBMA: 非广播型多路访问，无法发送广播和组播报文，只能够通过单播形式来寻找邻居，在此网络类型下，也会进行 DR 和 BDR 的选举.
3. P2P: 点到点网络，接口通过点到点的形式与另一台路由器相连，在此网络类型下不需要选举 DR 和 BDR.
4. P2MP: 点到多点，是一种特殊的网络类型，P2MP 必须由其他网络类型强制修改，不选举 DR 和 BDR.

对于不同网络类型的区别

网络类型 | Hello | Dead | DR/BDR
--- | --- | --- | ---
BMA | 10 | 40 | 选举
NBMA | 30 | 120 | 选举
P2P | 10 | 40 | 无
P2MP | 30 | 120 | 无

## DR/BDR

不用 DR 邻接关系数量:

使用 DR 邻接关系数量:

在 MA 网络中有 N 台设备且形成两两邻接关系则网络内邻接关系数量为
.

在 MA 网络中设备之间建立邻接关系，需要维护的邻接关系随着设备的增加而大幅度增加。每两台设备之间两两交互 LSA, 会导致 LSA 的重复发送，导致网络计算效率低.

DR: 指定路由器，在每个 OSPF 的 MA 网络中，都会选举一个 DR 设备，DR 设备会和每台设备建立邻接关系，并交互 LSA, 同时将自身收集到的 LSA 交互给每台设备.

BDR: 备份指定路由器，为了防止 DR 设备失效造成的单点故障，在 MA 网络中也会选举 BDR 设备，BDR 也会与其他成员建立邻接关系，同时监听 DR 的状态，如果 DR 失效，则 BDR 成为新的 DR.

DR Other: 除 DR 以外其他路由器，DR Other 之间只建立邻居关系.

每一个广播范围内选择一个 DR/BDR.

2-way 状态下完成 DR/BDR 选举.

## DR 和 BDR 选举

每台运行 OSPF 的路由器都有接口优先级。默认值 1.

当优先级为 0 时，表示该设备放弃参选.

255 最大值.

1. 优先级大于 0 的设备进行选举，优先级越大越优.
2. 如果优先级一致，则比较 RID, RID 越大越优.

## OSPF 的组播组

224.0.0.5: 所有的路由器都监听的地址

1. DR/BDR 发送的 OSPF 报文目标地址都是 224.0.0.5
2. 在广播型网络中所有的路由器都以 224.0.0.5 为目标地址发送 Hello 报文.
3. DR/BDR 会将 LSA 的更新发向 224.0.0.5

224.0.0.6: DR/BDR 监听的地址

1. DR Other 发送的 OSPF 报文的目标地址为 224.0.0.6
2. DR Other 会将 LSA 的更新发向 224.0.0.6

## Shell - 全局 OSPF 配置

    interface LoopBack0
     ip address 11.11.11.11 255.255.255.255
    #
    ospf 1 router-id 1.1.1.1 // 创建OSPF进程, 配置RID
     area 0.0.0.0 // 创建区域
      network 11.11.11.11 0.0.0.0 // 宣告接口
      network 12.1.1.1 0.0.0.0
    #
    #####################

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

    Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface

        11.11.11.11/32  Direct  0    0           D   127.0.0.1       LoopBack0
           12.1.1.0/24  Direct  0    0           D   12.1.1.1        GigabitEthernet
    0/0/0
           12.1.1.1/32  Direct  0    0           D   127.0.0.1       GigabitEthernet
    0/0/0
         12.1.1.255/32  Direct  0    0           D   127.0.0.1       GigabitEthernet
    0/0/0
        22.22.22.22/32  OSPF    10   1           D   12.1.1.2        GigabitEthernet
    0/0/0
           23.1.1.0/24  OSPF    10   2           D   12.1.1.2        GigabitEthernet
    0/0/0
        33.33.33.33/32  OSPF    10   2           D   12.1.1.2        GigabitEthernet
    0/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
    [R1]dis int brief
    PHY: Physical
    *down: administratively down
    (l): loopback
    (s): spoofing
    (b): BFD down
    ^down: standby
    (e): ETHOAM down
    (d): Dampening Suppressed
    InUti/OutUti: input utility/output utility
    Interface                   PHY   Protocol InUti OutUti   inErrors  outErrors
    GigabitEthernet0/0/0        up    up          0%     0%          0          0
    GigabitEthernet0/0/1        down  down        0%     0%          0          0
    GigabitEthernet0/0/2        down  down        0%     0%          0          0
    LoopBack0                   up    up(s)       0%     0%          0          0
    NULL0                       up    up(s)       0%     0%          0          0

## Shell - 接口下 OSPF 配置

    [R1]interface LoopBack0
    [R1-LoopBack0]ospf enable 1 area 0
    [R1-LoopBack0]dis th
    [V200R003C00]
    #
    interface LoopBack0
     ip address 11.11.11.11 255.255.255.255
     ospf enable 1 area 0.0.0.0
    #
    return

## OSPF 实验

R1

    #
     sysname R1
    #
    interface GigabitEthernet0/0/0
     ip address 12.1.1.1 255.255.255.0
    #
    interface GigabitEthernet0/0/1
     ip address 13.1.1.1 255.255.255.0
    #
    interface GigabitEthernet0/0/2
     ip address 14.1.1.1 255.255.255.0
    #
    interface LoopBack0
     ip address 1.1.1.1 255.255.255.255
    #
    ospf 1 router-id 1.1.1.1
     area 0.0.0.0
      network 1.1.1.1 0.0.0.0
      network 12.1.1.1 0.0.0.0
      network 13.1.1.1 0.0.0.0
      network 14.1.1.1 0.0.0.0
    #

R2

    #
     sysname R2
    #
    interface GigabitEthernet0/0/0
     ip address 12.1.1.2 255.255.255.0
    #
    interface GigabitEthernet0/0/1
     ip address 24.1.1.2 255.255.255.0
    #
    interface GigabitEthernet0/0/2
     ip address 23.1.1.2 255.255.255.0
    #
    interface NULL0
    #
    interface LoopBack0
     ip address 2.2.2.2 255.255.255.255
    #
    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
      network 24.1.1.2 0.0.0.0
    #

SW3

    #
    sysname SW3
    #
    vlan batch 10 to 80
    #
    stp disable
    #
    dhcp enable
    #
    interface Vlanif10
     ip address 13.1.1.3 255.255.255.0
    #
    interface Vlanif30
     ip address 34.1.1.3 255.255.255.0
    #
    interface Vlanif40
     ip address 23.1.1.3 255.255.255.0
    #
    interface Vlanif50
     ip address 192.168.1.254 255.255.255.0
     dhcp select interface
     dhcp server lease day 0 hour 0 minute 10
     dhcp server dns-list 8.8.8.8
    #
    interface GigabitEthernet0/0/1
     port link-type access
     port default vlan 10
    #
    interface GigabitEthernet0/0/2
     port link-type access
     port default vlan 50
    #
    interface GigabitEthernet0/0/3
     port link-type access
     port default vlan 40
    #
    interface GigabitEthernet0/0/4
     port link-type access
     port default vlan 30
    #
    interface LoopBack0
     ip address 3.3.3.3 255.255.255.255
    #
    ospf 1 router-id 3.3.3.3
     area 0.0.0.0
      network 3.3.3.3 0.0.0.0
      network 13.1.1.3 0.0.0.0
      network 23.1.1.3 0.0.0.0
      network 34.1.1.3 0.0.0.0
      network 192.168.1.254 0.0.0.0
    #

SW4

    #
    sysname SW4
    #
    vlan batch 10 to 80
    #
    stp disable
    #
    dhcp enable
    #
    interface Vlanif20
     ip address 24.1.1.4 255.255.255.0
    #
    interface Vlanif30
     ip address 34.1.1.4 255.255.255.0
    #
    interface Vlanif60
     ip address 192.168.2.254 255.255.255.0
     dhcp select interface
     dhcp server lease day 0 hour 0 minute 10
     dhcp server dns-list 8.8.8.8
    #
    interface Vlanif70
     ip address 14.1.1.4 255.255.255.0
    #
    interface GigabitEthernet0/0/1
     port link-type access
     port default vlan 20
    #
    interface GigabitEthernet0/0/2
     port link-type access
     port default vlan 60
    #
    interface GigabitEthernet0/0/3
     port link-type access
     port default vlan 70
    #
    interface GigabitEthernet0/0/4
     port link-type access
     port default vlan 30
    #
    interface LoopBack0
     ip address 4.4.4.4 255.255.255.255
    #
    ospf 1 router-id 4.4.4.4
     area 0.0.0.0
      network 4.4.4.4 0.0.0.0
      network 24.1.1.4 0.0.0.0
      network 14.1.1.4 0.0.0.0
      network 34.1.1.4 0.0.0.0
      network 192.168.2.254 0.0.0.0
    #

SW5

    #
    sysname SW5
    #
    stp disable
    #
    vlan batch 50 60
    #
    interface GigabitEthernet0/0/1
     port link-type access
     port default vlan 50
    #
    interface GigabitEthernet0/0/2
     port link-type access
     port default vlan 60
    #
    interface GigabitEthernet0/0/3
     port link-type access
     port default vlan 50
    #
    interface GigabitEthernet0/0/4
     port link-type access
     port default vlan 60
    #

## Shell-Display

    display bridge mac-address // 查看 mac
    display this // 查看当前视图
    display  current-configuration  // 查看当前配置
    display ip interface brief // 查看接口IP
    display ip routing-table // 查看路由
    display port vlan  查看 vlan // 和接口
    display ospf peer brief // 查看 OSPF 对等统计信息

实现VLAN间通信

实现 VLAN 间通信 实现 VLAN 间通信 使用路由器物理接口 R1<Huawei>sy[Huawei]sy R1[R1]int g0/0/0[R1-GigabitEt...

STP

STP STP STPSTP: 生成树协议，在以太网中，通过阻塞部分链路形成树状结构，从而消除网络中的环路结构，当主链路发生故障时，被阻塞的链路可以自行恢复转发状态，从而保证网络中链路...

推荐阅读
OSPF路由计算 实现VLAN间通信 IP路由基础 VRF 虚拟路由转发 BGP DHCP

留言区

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