26天:路由协议基础

第26天:路由协议基础

今日目标

  • 理解路由的基本概念
  • 掌握路由表的结构和查找过程
  • 学习静态路由配置
  • 理解动态路由协议的分类
  • 深入学习RIP协议
  • 了解OSPF协议基础
  • 实现路由表模拟器

1. 路由基础概念

1.1 什么是路由?

路由 = Routing

路由的定义:
确定数据包从源到目的地的传输路径

生活比喻:
路由就像导航系统

场景:你要从北京到上海
- 可以坐飞机(快,贵)
- 可以坐高铁(较快,适中)
- 可以开车(灵活,慢)

路由器就是"导航":
- 分析目的地
- 选择最佳路径
- 指引数据包前进

关键问题:
1. 去哪里?→ 目标网络
2. 怎么走?→ 下一跳
3. 有几条路?→ 多条路径
4. 哪条最好?→ 路由度量

路由器的作用

路由器 = Router

功能:
1. 路径选择
   - 根据路由表选择最佳路径
   - 转发数据包

2. 连接不同网络
   - 连接多个子网
   - 隔离广播域

3. 流量控制
   - QoS(服务质量)
   - 流量整形

4. 安全防护
   - 访问控制列表(ACL)
   - 防火墙功能

工作过程:
┌──────────────────────────────────────┐
│         路由器工作流程               │
├──────────────────────────────────────┤
│ 1. 接收数据包                        │
│ 2. 检查目标IP地址                    │
│ 3. 查找路由表                        │
│ 4. 确定出口接口和下一跳              │
│ 5. 修改以太网头部(源/目标MAC)      │
│ 6. TTL减1                            │
│ 7. 重新计算校验和                    │
│ 8. 转发数据包                        │
└──────────────────────────────────────┘

示例:
网络A: 192.168.1.0/24
   ↓
路由器R1
   ↓
网络B: 192.168.2.0/24

主机A (192.168.1.10) → 主机B (192.168.2.20)
1. A发送数据包,目标IP: 192.168.2.20
2. A发现目标不在本地网络
3. A发送给默认网关(路由器R1)
4. R1接收,查路由表
5. R1确定从接口2转发
6. R1修改以太网头部,转发到网络B
7. 主机B接收

1.2 路由vs交换

路由(Routing)vs 交换(Switching)

┌──────────────┬────────────────┬────────────────┐
│    特性      │     交换机     │    路由器      │
├──────────────┼────────────────┼────────────────┤
│ OSI层        │    第2层       │    第3层       │
│ 工作地址     │   MAC地址      │   IP地址       │
│ 转发依据     │   MAC地址表    │   路由表       │
│ 广播域       │   不隔离       │   隔离         │
│ 冲突域       │   隔离         │   隔离         │
│ 主要功能     │   局域网连接   │   网络互连     │
│ 转发速度     │   快           │   较慢         │
│ 智能程度     │   低           │   高           │
└──────────────┴────────────────┴────────────────┘

交换机:
- 在局域网内转发
- 基于MAC地址
- 维护MAC地址表
- 不修改IP包

路由器:
- 在网络间转发
- 基于IP地址
- 维护路由表
- 修改以太网头部
- TTL减1

三层交换机:
- 结合交换和路由功能
- 硬件转发,速度快
- 适合大型局域网

1.3 直连路由vs间接路由

直连路由(Direct Routing):
目标网络直接连接在路由器接口上

示例:
路由器R1有两个接口:
- eth0: 192.168.1.1/24
- eth1: 192.168.2.1/24

路由表自动包含:
192.168.1.0/24 dev eth0
192.168.2.0/24 dev eth1

数据流向:
192.168.1.10 → 192.168.1.20
- 直接在同一网段
- 不需要路由器(或路由器直接转发)

间接路由(Indirect Routing):
目标网络需要通过其他路由器到达

示例:
网络拓扑:
192.168.1.0/24 ← R1 ← 10.0.0.0/30 → R2 → 192.168.3.0/24

R1的路由表:
192.168.1.0/24 dev eth0 (直连)
10.0.0.0/30 dev eth1 (直连)
192.168.3.0/24 via 10.0.0.2 (间接,通过R2)

数据流向:
192.168.1.10 → 192.168.3.20
1. 发送给R1(默认网关)
2. R1查路由表:192.168.3.0/24 via 10.0.0.2
3. R1转发给R2(下一跳)
4. R2接收,直连192.168.3.0/24
5. R2直接转发到目标主机

下一跳(Next Hop):
- 到达目标网络的"下一个"路由器
- 必须是直连的(能直接到达)

2. 路由表

2.1 路由表结构

路由表条目

路由表 = Routing Table

每个条目包含:

1. 目标网络(Destination)
   - 目标网络地址
   - 示例:192.168.1.0/24

2. 子网掩码(Netmask)
   - 确定网络部分
   - 示例:255.255.255.0

3. 下一跳/网关(Gateway/Next Hop)
   - 下一个路由器的IP
   - 直连则为0.0.0.0或接口
   - 示例:192.168.2.1

4. 接口(Interface)
   - 出口网络接口
   - 示例:eth0, eth1

5. 度量(Metric)
   - 路径的"代价"
   - 数值越小越优
   - 示例:跳数、带宽

6. 标志(Flags)
   - U: Up,路由有效
   - G: Gateway,需要网关
   - H: Host,主机路由
   - D: Dynamic,动态路由
   - M: Modified,被修改

示例路由表:

Destination     Gateway         Netmask         Flags  Metric  Interface
0.0.0.0         192.168.1.1     0.0.0.0         UG     100     eth0
192.168.1.0     0.0.0.0         255.255.255.0   U      0       eth0
192.168.2.0     192.168.1.254   255.255.255.0   UG     10      eth0
10.0.0.0        192.168.1.254   255.0.0.0       UG     20      eth0

解释:
第1行:默认路由(0.0.0.0/0)
- 所有未匹配的流量走这里
- 网关:192.168.1.1
- 接口:eth0

第2行:直连路由(192.168.1.0/24)
- 本地网络
- 无需网关(0.0.0.0)
- 直接从eth0转发

第3行:间接路由(192.168.2.0/24)
- 通过网关192.168.1.254到达
- 度量:10

第4行:聚合路由(10.0.0.0/8)
- 包含所有10.x.x.x网络
- 度量:20

2.2 查看路由表

Linux/macOS

# Linux - 使用ip route
ip route show

输出示例:
default via 192.168.1.1 dev eth0 proto dhcp metric 100
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.10 metric 100
192.168.2.0/24 via 192.168.1.254 dev eth0 metric 10

# Linux - 使用route(老命令)
route -n

输出示例:
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    100    0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0

# macOS - 使用netstat
netstat -rn

输出示例:
Routing tables
Internet:
Destination        Gateway            Flags        Netif Expire
default            192.168.1.1        UGSc           en0
192.168.1.0/24     link#4             UCS            en0

Windows

# 查看路由表
route print

输出示例:
===========================================================================
Interface List
  3...aa-bb-cc-dd-ee-ff ......Ethernet
===========================================================================

IPv4 Route Table
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0      192.168.1.1    192.168.1.10     25
        192.168.1.0    255.255.255.0         On-link     192.168.1.10    281
===========================================================================

# 添加路由
route add 192.168.2.0 mask 255.255.255.0 192.168.1.254

# 删除路由
route delete 192.168.2.0

# 修改路由
route change 192.168.2.0 mask 255.255.255.0 192.168.1.253

2.3 路由查找过程

最长前缀匹配(Longest Prefix Match)

路由查找算法:
选择匹配前缀最长的路由

为什么?
更具体的路由优先于一般路由

示例:
路由表:
1. 0.0.0.0/0          (默认路由)
2. 10.0.0.0/8         (A类网络)
3. 10.1.0.0/16        (更具体)
4. 10.1.2.0/24        (最具体)
5. 10.1.2.10/32       (主机路由)

查询:10.1.2.10

匹配过程:
10.1.2.10 & 0.0.0.0/0        = 0.0.0.0      ✅ 匹配(0位)
10.1.2.10 & 10.0.0.0/8       = 10.0.0.0     ✅ 匹配(8位)
10.1.2.10 & 10.1.0.0/16      = 10.1.0.0     ✅ 匹配(16位)
10.1.2.10 & 10.1.2.0/24      = 10.1.2.0     ✅ 匹配(24位)
10.1.2.10 & 10.1.2.10/32     = 10.1.2.10    ✅ 匹配(32位)

结果:选择10.1.2.10/32(最长前缀)

优先级:
主机路由(/32)> 子网路由(/24)> 聚合路由(/16, /8)> 默认路由(/0)

实际例子:

路由表:
192.168.0.0/16 via R1
192.168.1.0/24 via R2

查询:192.168.1.100
- 匹配192.168.0.0/16(16位前缀)
- 匹配192.168.1.0/24(24位前缀)
- 选择192.168.1.0/24(更长)→ via R2

查询:192.168.2.100
- 匹配192.168.0.0/16(16位前缀)
- 不匹配192.168.1.0/24
- 选择192.168.0.0/16 → via R1

查找流程

完整路由查找流程:

1. 接收数据包
   ↓
2. 提取目标IP地址
   ↓
3. 查找路由表
   a. 精确匹配(主机路由,/32)
   b. 网络匹配(按前缀长度排序)
   c. 默认路由(0.0.0.0/0)
   ↓
4. 找到匹配?
   是 → 转发到下一跳
   否 → 无法路由,丢弃包,发送ICMP目标不可达
   ↓
5. 确定出口接口
   ↓
6. 查ARP表获取下一跳MAC
   ↓
7. 封装以太网帧
   ↓
8. 转发

多条匹配时:
1. 最长前缀优先
2. 前缀长度相同,比较度量(Metric)
3. 度量相同,负载均衡(ECMP)

3. 静态路由

3.1 静态路由配置

Linux

# 添加静态路由
# 格式:ip route add <目标网络> via <网关> dev <接口>

# 添加网络路由
sudo ip route add 192.168.2.0/24 via 192.168.1.254 dev eth0

# 添加主机路由
sudo ip route add 10.1.1.100/32 via 192.168.1.254

# 添加默认路由
sudo ip route add default via 192.168.1.1

# 删除路由
sudo ip route del 192.168.2.0/24

# 修改路由
sudo ip route replace 192.168.2.0/24 via 192.168.1.253 dev eth0

# 持久化配置(Ubuntu/Debian)
# 编辑 /etc/network/interfaces
auto eth0
iface eth0 inet static
    address 192.168.1.10
    netmask 255.255.255.0
    gateway 192.168.1.1
    # 添加静态路由
    up ip route add 192.168.2.0/24 via 192.168.1.254 dev eth0

# 持久化配置(CentOS/RHEL)
# 创建 /etc/sysconfig/network-scripts/route-eth0
192.168.2.0/24 via 192.168.1.254 dev eth0

Windows

# 添加静态路由
route add 192.168.2.0 mask 255.255.255.0 192.168.1.254

# 添加持久路由(-p参数)
route add -p 192.168.2.0 mask 255.255.255.0 192.168.1.254

# 删除路由
route delete 192.168.2.0

# 修改路由
route change 192.168.2.0 mask 255.255.255.0 192.168.1.253

Cisco路由器

# 进入配置模式
Router> enable
Router# configure terminal

# 添加静态路由
Router(config)# ip route <目标网络> <子网掩码> <下一跳或接口>

# 示例
Router(config)# ip route 192.168.2.0 255.255.255.0 192.168.1.254
Router(config)# ip route 192.168.2.0 255.255.255.0 GigabitEthernet0/1

# 添加默认路由
Router(config)# ip route 0.0.0.0 0.0.0.0 192.168.1.1

# 查看路由表
Router# show ip route

Codes: C - connected, S - static, R - RIP, O - OSPF
       * - candidate default

Gateway of last resort is 192.168.1.1 to network 0.0.0.0

C    192.168.1.0/24 is directly connected, GigabitEthernet0/0
C    192.168.3.0/24 is directly connected, GigabitEthernet0/1
S    192.168.2.0/24 [1/0] via 192.168.1.254
S*   0.0.0.0/0 [1/0] via 192.168.1.1

3.2 静态路由的优缺点

优点:
✅ 配置简单
✅ 无需协议开销
✅ 不占用CPU和带宽
✅ 安全(不会被欺骗)
✅ 可预测(路径固定)
✅ 适合小型网络

缺点:
❌ 不能自动适应网络变化
❌ 链路故障无法自动切换
❌ 大型网络配置繁琐
❌ 人工配置容易出错
❌ 维护成本高
❌ 扩展性差

使用场景:
✅ 小型网络(<10个路由器)
✅ 简单拓扑
✅ 末端网络(Stub Network)
✅ 默认路由
✅ 特定安全需求
✅ 实验和测试环境

4. 动态路由协议

4.1 动态路由概述

动态路由 = Dynamic Routing

特点:
- 路由器自动学习路由
- 自动适应网络变化
- 链路故障自动切换
- 路由器之间交换信息

工作原理:
1. 路由器启动
2. 发现邻居路由器
3. 交换路由信息
4. 计算最佳路径
5. 更新路由表
6. 定期更新或事件触发更新

优点:
✅ 自动学习路由
✅ 自动适应变化
✅ 链路冗余和负载均衡
✅ 适合大型网络
✅ 减少人工配置

缺点:
❌ 占用带宽(协议报文)
❌ 占用CPU(路由计算)
❌ 占用内存(路由表)
❌ 配置复杂
❌ 收敛时间(网络变化到稳定的时间)
❌ 可能被攻击

何时使用?
- 大型网络
- 复杂拓扑
- 需要自动故障恢复
- 网络经常变化

4.2 动态路由协议分类

按工作范围分类

1. IGP(Interior Gateway Protocol)
   内部网关协议
   - 在自治系统(AS)内使用
   - 示例:RIP, OSPF, IS-IS, EIGRP

2. EGP(Exterior Gateway Protocol)
   外部网关协议
   - 在自治系统之间使用
   - 示例:BGP

自治系统(AS):
- 由单一组织管理的网络集合
- 有统一的路由策略
- 分配唯一的AS号
- 示例:
  - AS 4134:中国电信
  - AS 15169:Google
  - AS 32934:Facebook

┌─────────────────────────────────────────┐
│          互联网                         │
├──────────────┬──────────────┬───────────┤
│   AS 100     │   AS 200     │  AS 300   │
│   (公司A)    │   (公司B)    │  (ISP)    │
├──────────────┼──────────────┼───────────┤
│  内部使用    │  内部使用    │ 内部使用  │
│  OSPF (IGP)  │  RIP (IGP)   │ OSPF (IGP)│
├──────────────┴──────────────┴───────────┤
│        AS之间使用BGP (EGP)              │
└─────────────────────────────────────────┘

按算法分类

1. 距离矢量(Distance Vector)
   - 基于Bellman-Ford算法
   - 只知道方向和距离
   - 定期广播整个路由表
   - 收敛慢
   - 协议:RIP, IGRP

   特点:
   - "谣言路由"
   - 路由器只从邻居学习
   - 不知道完整拓扑

   比喻:
   问路:"去火车站怎么走?"
   答:"我不知道在哪,但往前走3个路口,问那边的人"

2. 链路状态(Link State)
   - 基于Dijkstra算法(SPF)
   - 知道整个网络拓扑
   - 只传播链路状态变化
   - 收敛快
   - 协议:OSPF, IS-IS

   特点:
   - 每个路由器有完整拓扑图
   - 独立计算最短路径
   - 更准确,更快

   比喻:
   有一张完整地图,自己计算最短路径

3. 混合型(Hybrid)
   - 结合两者优点
   - 协议:EIGRP(Cisco专有)

对比:
┌──────────────┬────────────────┬────────────────┐
│    特性      │   距离矢量     │    链路状态    │
├──────────────┼────────────────┼────────────────┤
│ 拓扑知识     │   部分(邻居) │   完整         │
│ 路由计算     │   分布式       │   独立         │
│ 更新方式     │   整个路由表   │   链路状态变化 │
│ 收敛速度     │   慢           │   快           │
│ CPU占用      │   低           │   高           │
│ 内存占用     │   低           │   高           │
│ 带宽占用     │   高(定期)   │   低(变化时) │
│ 扩展性       │   差           │   好           │
└──────────────┴────────────────┴────────────────┘

4.3 路由度量(Metric)

度量 = Metric = 路由的"代价"

作用:
- 评估路径的优劣
- 选择最佳路径
- 数值越小越好

常见度量类型:

1. 跳数(Hop Count)
   - 经过的路由器数量
   - RIP使用
   - 简单但不准确
   - 最大15跳

   示例:
   路径1: A → B → C → D (3跳)
   路径2: A → E → D (2跳,选择此路径)
   但路径2可能是慢速链路!

2. 带宽(Bandwidth)
   - 链路速度
   - OSPF默认使用
   - Cost = 10^8 / 带宽(bps)

   示例:
   100Mbps链路:Cost = 10^8 / 10^8 = 1
   10Mbps链路:Cost = 10^8 / 10^7 = 10
   1Mbps链路:Cost = 10^8 / 10^6 = 100

3. 延迟(Delay)
   - 传输时间
   - EIGRP考虑
   - 单位:微秒

4. 负载(Load)
   - 链路利用率
   - EIGRP考虑

5. 可靠性(Reliability)
   - 链路质量
   - 丢包率
   - EIGRP考虑

6. MTU(最大传输单元)
   - EIGRP考虑

复合度量:
EIGRP度量 = [K1×带宽 + (K2×带宽)/(256-负载) + K3×延迟] × [K5/(可靠性+K4)]

默认:K1=K3=1, K2=K4=K5=0
简化为:度量 = 带宽 + 延迟

5. RIP协议详解

5.1 RIP概述

RIP = Routing Information Protocol
路由信息协议

版本:
- RIP v1(1988):有类路由,不支持VLSM
- RIP v2(1993):无类路由,支持VLSM,支持认证
- RIPng:IPv6版本

特点:
- 距离矢量协议
- 度量:跳数
- 最大跳数:15(16表示不可达)
- 更新周期:30秒
- 失效时间:180秒
- 刷新时间:240秒
- 端口:UDP 520
- 管理距离:120

适用场景:
✅ 小型网络
✅ 简单拓扑
✅ 兼容性要求高
✅ 设备性能有限

不适用场景:
❌ 大型网络(>15跳)
❌ 需要快速收敛
❌ 复杂拓扑
❌ 需要精确控制

5.2 RIP工作原理

路由更新

RIP更新机制:

1. 定期更新(每30秒)
   - 路由器广播整个路由表
   - 地址:
     * RIPv1: 255.255.255.255(广播)
     * RIPv2: 224.0.0.9(组播)

2. 触发更新
   - 路由变化时立即发送
   - 防止路由环路

3. 邻居发现
   - 通过接收更新发现邻居
   - 没有Hello机制

路由表项包含:
- 目标网络
- 度量(跳数)
- 下一跳
- 超时定时器

示例:

路由器R1连接:
- 网络A: 192.168.1.0/24(直连,度量0)
- 网络B: 192.168.2.0/24(直连,度量0)

R1广播更新给邻居R2:
Network         Metric
192.168.1.0/24    1      (度量+1)
192.168.2.0/24    1      (度量+1)

R2接收并更新路由表:
Network         Next Hop    Metric
192.168.1.0/24  R1          1
192.168.2.0/24  R1          1
192.168.3.0/24  直连        0

R2再广播给R3...

防环机制

RIP防环机制:

问题:距离矢量协议容易产生路由环路

示例:
R1 ← → R2 ← → R3
 ↓
网络A

正常情况:
R1: 网络A, 度量0(直连)
R2: 网络A via R1, 度量1
R3: 网络A via R2, 度量2

R1-网络A链路断开:
R1: 网络A不可达
R2: 还记录着网络A via R1, 度量1(未更新)
R1收到R2的更新:认为可以通过R2到达网络A, 度量2
R2收到R1的更新:更新为度量3
...无限计数!

防环机制:

1. 最大跳数(Maximum Hop Count)
   - 16表示不可达
   - 限制无限计数
   - 但限制了网络规模

2. 水平分割(Split Horizon)
   - 不向接收路由的接口发回该路由
   - 示例:
     R1从R2学到网络A
     R1不会向R2通告网络A

3. 毒性逆转(Poison Reverse)
   - 向源接口通告不可达(度量16)
   - 比水平分割更积极
   - 示例:
     R1从R2学到网络A
     R1向R2通告:网络A度量16(不可达)

4. 抑制定时器(Holddown Timer)
   - 路由失效后,在一定时间内不接受更新
   - 防止错误路由信息
   - 典型:180秒

5. 触发更新(Triggered Update)
   - 路由变化立即发送
   - 加快收敛

5.3 RIP配置示例

Cisco路由器

# 启用RIP
Router(config)# router rip

# 指定版本
Router(config-router)# version 2

# 通告网络(有类网络)
Router(config-router)# network 192.168.1.0
Router(config-router)# network 192.168.2.0

# 关闭自动汇总(RIPv2)
Router(config-router)# no auto-summary

# 配置被动接口(不发送更新)
Router(config-router)# passive-interface GigabitEthernet0/0

# 配置默认路由传播
Router(config-router)# default-information originate

# 查看RIP配置
Router# show ip protocols

# 查看RIP数据库
Router# show ip rip database

# 调试RIP
Router# debug ip rip

Linux(Quagga/FRRouting)

# 安装Quagga
sudo apt-get install quagga

# 配置RIP
sudo vtysh
configure terminal
router rip
  version 2
  network 192.168.1.0/24
  network 192.168.2.0/24
  exit
exit
write memory

6. OSPF协议基础

6.1 OSPF概述

OSPF = Open Shortest Path First
开放最短路径优先

特点:
- 链路状态协议
- 基于Dijkstra算法(SPF)
- 度量:Cost(基于带宽)
- 支持VLSM和CIDR
- 快速收敛
- 分层设计(区域)
- 支持认证
- 协议:IP协议89
- 管理距离:110

版本:
- OSPFv2:IPv4
- OSPFv3:IPv6

优点:
✅ 快速收敛
✅ 无环路
✅ 支持大型网络
✅ 精确度量(带宽)
✅ 分层设计
✅ 负载均衡

缺点:
❌ 配置复杂
❌ 占用CPU和内存
❌ 需要规划区域

6.2 OSPF工作原理

邻居关系

OSPF邻居建立过程:

1. Down状态
   - 初始状态
   - 未发送Hello

2. Init状态
   - 发送Hello包
   - 尚未收到邻居的Hello

3. 2-Way状态
   - 收到对方Hello
   - 看到自己的Router ID
   - 邻居关系建立
   - 选举DR/BDR(如果在多路访问网络)

4. ExStart状态
   - 决定主从关系
   - Router ID大的为主

5. Exchange状态
   - 交换数据库描述(DBD)
   - 描述链路状态数据库

6. Loading状态
   - 请求完整LSA
   - 发送LSR(链路状态请求)
   - 接收LSU(链路状态更新)

7. Full状态
   - 数据库同步完成
   - 邻接关系建立
   - 可以转发流量

Hello包内容:
- Router ID
- Area ID
- 认证信息
- Hello间隔
- Dead间隔
- 优先级
- DR和BDR
- 邻居列表

Hello间隔:
- 默认10秒(点对点、广播)
- 30秒(NBMA)

Dead间隔:
- 默认40秒(4倍Hello)

区域概念

OSPF区域设计:

为什么需要区域?
- 减少LSA泛洪
- 减小路由表
- 加快收敛
- 隔离故障

区域类型:

1. 骨干区域(Area 0)
   - 所有区域必须连接到Area 0
   - 核心区域
   - 不能分割

2. 常规区域(Regular Area)
   - 标准OSPF区域
   - 接收所有LSA类型

3. 末端区域(Stub Area)
   - 不接收外部LSA(Type 5)
   - 使用默认路由
   - 减少路由表

4. 完全末端区域(Totally Stub Area)
   - 只有默认路由和区域内路由
   - Cisco专有

5. NSSA(Not-So-Stubby Area)
   - 类似Stub,但允许注入外部路由(Type 7)

拓扑示例:
         ┌──────────────┐
         │   Area 0     │
         │   (骨干)     │
         └───┬──────┬───┘
             │      │
      ┌──────┴──┐ ┌─┴──────┐
      │ Area 1  │ │ Area 2 │
      └─────────┘ └────────┘

路由器类型:
- 内部路由器(IR):所有接口在同一区域
- 骨干路由器(BR):至少一个接口在Area 0
- 区域边界路由器(ABR):连接多个区域
- 自治系统边界路由器(ASBR):连接其他AS

6.3 OSPF配置示例

Cisco路由器

# 启用OSPF(进程号100)
Router(config)# router ospf 100

# 设置Router ID
Router(config-router)# router-id 1.1.1.1

# 通告网络(精确匹配)
Router(config-router)# network 192.168.1.0 0.0.0.255 area 0
Router(config-router)# network 192.168.2.0 0.0.0.255 area 1

# 配置被动接口
Router(config-router)# passive-interface GigabitEthernet0/0

# 修改Cost
Router(config)# interface GigabitEthernet0/1
Router(config-if)# ip ospf cost 10

# 修改Hello间隔
Router(config-if)# ip ospf hello-interval 5
Router(config-if)# ip ospf dead-interval 20

# 查看OSPF邻居
Router# show ip ospf neighbor

# 查看OSPF数据库
Router# show ip ospf database

# 查看OSPF接口
Router# show ip ospf interface

# 查看OSPF路由
Router# show ip route ospf

7. 实战项目:路由表模拟器

7.1 项目需求

功能需求:
1. 路由表管理
   - 添加/删除路由
   - 查看路由表
   - 导入/导出

2. 路由查找
   - 最长前缀匹配
   - 查找路径
   - 性能测试

3. 路由协议模拟
   - 静态路由
   - 简单RIP模拟
   - 路由收敛演示

4. 可视化
   - 路由表显示
   - 查找过程展示
   - 网络拓扑图

技术要求:
- Python实现
- 支持IPv4/IPv6
- 命令行界面
- 友好的输出

7.2 工具演示

# 路由表管理
python day26_routing_sim.py --add 192.168.2.0/24 --via 192.168.1.254
python day26_routing_sim.py --show

# 路由查找
python day26_routing_sim.py --lookup 192.168.2.100

# RIP模拟
python day26_routing_sim.py --simulate-rip

8. 今日练习

练习1:查看本机路由表

1. Linux/macOS:
   ip route show
   或
   netstat -rn

   分析:
   - 有多少条路由?
   - 默认网关是什么?
   - 有直连路由吗?

2. Windows:
   route print

   分析:
   - 默认路由的度量是多少?
   - 有多个网卡吗?

练习2:静态路由实验

虚拟机实验:

拓扑:
VM1 (192.168.1.10) ← → VM2 (192.168.1.1/192.168.2.1) ← → VM3 (192.168.2.10)

步骤:
1. 配置VM2为路由器(启用IP转发)
   sudo sysctl -w net.ipv4.ip_forward=1

2. VM1添加到192.168.2.0/24的路由
   sudo ip route add 192.168.2.0/24 via 192.168.1.1

3. VM3添加到192.168.1.0/24的路由
   sudo ip route add 192.168.1.0/24 via 192.168.2.1

4. 测试连通性
   从VM1 ping VM3

5. 查看数据包路径
   traceroute从VM1到VM3

练习3:路由查找练习

给定路由表:
1. 0.0.0.0/0 via 192.168.1.1
2. 10.0.0.0/8 via 192.168.1.2
3. 10.1.0.0/16 via 192.168.1.3
4. 10.1.2.0/24 via 192.168.1.4
5. 192.168.0.0/16 via 192.168.1.5

查找以下目标IP的路由:
1. 10.1.2.100 → ?
2. 10.1.3.100 → ?
3. 10.2.1.100 → ?
4. 192.168.100.1 → ?
5. 8.8.8.8 → ?

(答案见文末)

9. 常见问题

Q1:静态路由和动态路由能同时使用吗?

A: 可以!实际网络常常混合使用

  • 默认路由:静态
  • 内部网络:动态(OSPF)
  • 特定路由:静态

管理距离决定优先级:

  • 直连:0
  • 静态:1
  • OSPF:110
  • RIP:120

Q2:路由环路怎么检测?

A:

  • TTL:每经过路由器减1,为0丢弃
  • Traceroute:显示路径,可见环路
  • 路由协议防环机制

Q3:为什么需要默认路由?

A:

  • 不可能配置所有路由
  • 互联网上几十万条路由
  • 默认路由:匹配所有
  • 通常指向ISP

Q4:RIP和OSPF如何选择?

A: 小型网络(<15跳):RIP

  • 配置简单
  • 资源占用低

大型网络:OSPF

  • 快速收敛
  • 无跳数限制
  • 更精确

Q5:什么是管理距离?

A: 管理距离(AD)= 路由信息的可信度

  • 值越小越可信
  • 用于选择路由来源

常见AD:

  • 直连:0
  • 静态:1
  • EIGRP:90
  • OSPF:110
  • RIP:120
  • 外部:255(不可信)

10. 总结

今天我们学习了:

核心知识点

  1. 路由基础

    • 路由的作用和原理
    • 直连路由vs间接路由
    • 下一跳概念
  2. 路由表

    • 路由表结构
    • 最长前缀匹配
    • 路由查找过程
  3. 静态路由

    • 配置方法
    • 优缺点
    • 使用场景
  4. 动态路由分类

    • IGP vs EGP
    • 距离矢量 vs 链路状态
    • 路由度量
  5. RIP协议

    • 距离矢量协议
    • 跳数度量
    • 防环机制
    • 配置方法
  6. OSPF基础

    • 链路状态协议
    • 区域设计
    • 邻居关系
    • 快速收敛

重点回顾

路由查找:
最长前缀匹配 → 主机路由优先 → 网络路由 → 默认路由

动态路由分类:
距离矢量(RIP):简单,慢,适合小网络
链路状态(OSPF):复杂,快,适合大网络

RIP防环:
- 最大跳数(15)
- 水平分割
- 毒性逆转
- 抑制定时器
- 触发更新

OSPF特点:
- 快速收敛
- 区域设计
- Cost度量
- LSA泛洪

练习3答案

1. 10.1.2.100 → via 192.168.1.4(/24最长)
2. 10.1.3.100 → via 192.168.1.3(/16)
3. 10.2.1.100 → via 192.168.1.2(/8)
4. 192.168.100.1 → via 192.168.1.5(/16)
5. 8.8.8.8 → via 192.168.1.1(默认路由)

明天预告

第27天:第四周综合实战

内容预览:

  • 网络层知识回顾
  • 综合实战项目
  • 网络排错案例
  • 性能优化
  • 周总结

继续加油! 🚀

今天我们深入学习了路由协议,理解了网络层最核心的概念之一。从静态路由到动态路由,从RIP到OSPF,这些都是网络工程师必备的知识。明天我们将进行第四周的综合实战,巩固本周所学!

进度:26/180天(14.4%)