第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. 总结
今天我们学习了:
核心知识点
路由基础:
- 路由的作用和原理
- 直连路由vs间接路由
- 下一跳概念
路由表:
- 路由表结构
- 最长前缀匹配
- 路由查找过程
静态路由:
- 配置方法
- 优缺点
- 使用场景
动态路由分类:
- IGP vs EGP
- 距离矢量 vs 链路状态
- 路由度量
RIP协议:
- 距离矢量协议
- 跳数度量
- 防环机制
- 配置方法
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%)