飞翔飞翔
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
  • 学习路径
  • IP协议

    • 认识 IP 协议与网络层定位
    • IPv4 编址体系与分类地址
    • CIDR 与子网划分实战
    • IPv6 编址体系
    • ARP 协议详解
    • NDP 协议详解
    • IGMP 与 MLD 组播侦听发现
    • VRRP 与网关冗余
    • IPv4 数据报首部解析
    • IPv6 数据报与扩展首部
    • IPsec 安全扩展
    • 分片、MTU 与路径发现
    • ICMP 与 Traceroute 原理
    • 路由基础与转发流水线
    • 动态路由协议
    • NAT 网络地址转换
    • DHCP 与自动配置
    • Wireshark 与命令行工具
    • IPv6 过渡技术
    • IP 协议栈排障与攻击防御
  • TCP协议

    • 认识 TCP 协议与传输层定位
    • TCP 报文段首部解析
    • 三次握手与连接建立
    • 四次挥手与连接释放
    • TCP 有限状态机
    • 序列号与确认机制
    • 超时重传与 RTO 计算
    • 滑动窗口与流量控制
    • 拥塞控制基础
    • 现代拥塞控制算法
    • TCP 选项与扩展
    • TCP 性能调优与内核参数
    • Nagle 算法与糊涂窗口综合征
    • TCP 定时器与 Keep-Alive 机制
    • TCP 安全与攻击防御
    • TCP 与上层/下层交互
    • TCP 综合实践与排障

动态路由协议

为什么需要动态路由

静态路由像手写通讯录:适合联系人少、变化慢的场景。但互联网有数十亿设备、数百万条前缀,手工配置不现实。更麻烦的是:链路断了、新网段加了、度量变了,静态路由不会自动调整。

动态路由协议让路由器之间自动交换路由信息,自适应网络变化。

自治系统(AS)与协议分类

互联网被划分为数万个自治系统(Autonomous System),每个 AS 是一个独立管理的网络(如一个 ISP、一所大学、一家企业)。

类型协议范围核心算法
IGP(内部网关协议)RIP、OSPF、IS-ISAS 内部距离向量 / 链路状态
EGP(外部网关协议)BGPAS 之间路径向量

类比:IGP 是城市内部交通规划(由市政府管),BGP 是城市之间高速公路规划(由省政府/国家管)。

RIP:最简单的距离向量协议

原理

每个路由器维护一张表:到每个目的网络的距离(跳数,Hop Count)。

  • 初始:知道自己直连网络,距离 0
  • 周期性(30 秒)向邻居广播整张表
  • 收到邻居的表后,更新:如果邻居到某目的距离 +1 < 自己当前距离,就更新

RIP 的致命缺陷

  1. 最大 15 跳:16 表示不可达,网络直径受限
  2. 慢收敛:链路断了,坏消息传得慢(计数到无穷问题)
  3. 度量粗糙:只看跳数,不看带宽。1 跳卫星链路和 1 跳 100G 光纤等价

生活例子:RIP 像"问路"——你问路人 A 到机场多远,A 说"我问了 B,B 说 3 站",但没人知道每站是地铁还是步行。

RIPv2 改进

  • 支持 CIDR/VLSM(RIPv1 不支持子网掩码)
  • 支持组播更新(224.0.0.9)
  • 支持认证

现状:RIP 已淘汰,仅用于教学或极小型网络。

OSPF:链路状态协议的王者

原理

每个路由器:

  1. 发现邻居(Hello 包,10 秒一次)
  2. 测量到邻居的代价(Cost = 参考带宽 / 接口带宽)
  3. 构造 LSA(Link State Advertisement),描述自己的连接状态
  4. 泛洪 LSA 到整个区域(Area),所有路由器收到后构建统一的 LSDB(Link State Database)
  5. 每台路由器独立运行 Dijkstra 最短路径算法,计算到所有节点的最优路径

分层设计:区域(Area)

大型网络中,LSA 泛洪会消耗大量资源。OSPF 把 AS 划分为区域:

  • Area 0(骨干区域):所有区域必须直接连接到骨干
  • 普通区域:只知道自己区域内的详细路由,区域间路由通过 ABR(Area Border Router)汇总
  • 特殊区域:Stub Area(不接收外部 AS 路由)、NSSA(Not-So-Stubby Area)

生活例子:OSPF 像"每个城市画自己的地图,然后交给省会汇总"。北京不需要知道广州每条街道,只需要知道"去广州走京广高速"。

OSPF 的区域设计是互联网可扩展性的经典范例。所有区域必须直接连接到 Area 0(骨干),ABR 负责在区域间汇总路由。普通区域只知道本区域内部路由 + 经过 ABR 汇总的区域间路由,LSA 泛洪被严格限制在区域内,大幅降低了大型网络的协议开销。

OSPF 代价计算

Cost = 参考带宽 / 接口带宽

默认参考带宽 100 Mbps,这意味着:

  • 100M 接口 Cost=1
  • 1G 接口 Cost=1(因为 100/1000=0.1,取整为 1)
  • 10G 接口 Cost=1

问题:现代网络全是 10G/100G,默认参考带宽导致所有链路 Cost=1,无法区分。需要手动调整参考带宽或接口 Cost。

OSPF 安全

  • 明文认证:密码明文传输,不安全
  • MD5 认证:RFC 2328,用预共享密钥生成 MD5 摘要
  • HMAC-SHA:RFC 5709,更安全的哈希算法

攻击风险:伪造 LSA 注入,导致路由器计算错误路径,流量被劫持或黑洞。

IS-IS:OSPF 的"孪生兄弟"

IS-IS(Intermediate System to Intermediate System)最初为 OSI 网络设计,后被 IP 网络采用。

特性OSPFIS-IS
设计初衷IP 专用OSI 通用,后适配 IP
封装IP 协议 89直接封装在数据链路层
区域边界路由器(ABR)链路(不同区域在链路上划分)
扩展性支持数千路由器支持更大规模(ISP 偏好)
配置复杂度较复杂相对简单

大型 ISP(如中国电信、AT&T)偏好 IS-IS,因为扩展性更好。

BGP:互联网的"外交协议"

BGP(Border Gateway Protocol,RFC 4271)是 AS 之间的路由协议,互联网的事实标准。

为什么 IGP 不能用于 AS 之间?

  • 信任问题:AS 之间是竞争/合作关系,不会把内部拓扑暴露给对方
  • 策略问题:ISP A 可能不想帮 ISP B 转发某些流量(政治、商业、成本原因)
  • 规模问题:全球路由表已超 90 万条 IPv4 前缀,IGP 无法承载

BGP 的核心:路径向量

BGP 不传播"距离",而是传播路径(经过哪些 AS):

前缀 8.8.8.0/24 的路径:AS 15169
前缀 1.1.1.0/24 的路径:AS 13335
前缀 202.100.1.0/24 的路径:AS 4134 → AS 4809 → AS 100

路由器收到多条到同一前缀的路径后,按策略选择最优(不是最短)。

BGP 选路的第一原则是 Local Preference(本地优先级),这是 AS 内部网络管理员可以控制的策略属性。即使路径 B 经过的 AS 数更多(路径更长),只要 LocalPref 最高,就会被优先选择。这体现了 BGP 的设计哲学:策略优先于最短路径,因为 AS 之间的路由涉及商业关系、成本、政治等复杂因素,绝非"最短即最优"。

BGP 选路原则(简化)

  1. 最高 Local Preference(本地优先级,内部策略)
  2. 最短 AS Path(经过的 AS 数最少)
  3. 最低 Origin Type(IGP < EGP < Incomplete)
  4. 最低 MED(Multi-Exit Discriminator,类似度量)
  5. eBGP 优于 iBGP(外部邻居优于内部邻居)
  6. 最低 IGP Cost 到下一跳
  7. 最早建立的路由
  8. 最低 Router ID

BGP 安全:路由劫持

攻击者伪造 BGP 宣告,声称"我拥有 1.1.1.0/24",导致全球流量被引到恶意 AS。

防御:

  • RPKI(Resource Public Key Infrastructure):用密码学验证 AS 是否有权宣告某个前缀
  • ROV(Route Origin Validation):路由器检查 RPKI 证书,拒绝无效宣告
  • BGP MD5:RFC 2385,邻居间 TCP 连接认证
  • GTSM(Generalized TTL Security Mechanism):RFC 5082,eBGP 邻居通常直连,TTL=255,如果收到 TTL<254 的包,丢弃(防止远程伪造)

本篇小结

  • IGP 用于 AS 内部:RIP(已淘汰)、OSPF(企业主流)、IS-IS(ISP 主流)
  • OSPF 是链路状态协议,Dijkstra 算法,分层区域设计
  • BGP 用于 AS 之间,路径向量,策略优先于最短路径
  • 路由协议安全:OSPF MD5/SHA 认证、BGP RPKI/ROV/MD5/GTSM
  • 现代互联网:企业内部 OSPF/IS-IS,运营商之间 BGP

动手实践

  1. 查看 Linux 路由表,观察动态路由协议注入的路由(如果有):

    ip route | grep -E "proto ospf|proto bgp|proto rip"
    
  2. 在 Packet Tracer 中搭建 3 路由器 OSPF 网络,观察:

    • Hello 包(10 秒间隔)
    • LSA 泛洪
    • Dijkstra 计算后的路由表
  3. 思考:为什么 BGP 不采用"最短路径优先",而是复杂的策略选路?如果全球都用 OSPF 互联,会出现什么问题?

  4. 查询真实 BGP 路由表大小:

    # 如果有 BGP 路由器权限
    show ip bgp summary
    # 全球 IPv4 前缀约 90 万条(2024 年数据)
    
上一页
路由基础与转发流水线
下一页
NAT 网络地址转换