路由协议基础回顾:OSPF、BGP、RIP核心原理与报文交互流程

各位同学,咱们今天先不急着上手敲命令。做攻防演练,最怕的就是连基础协议都搞不清楚,就开始瞎打。我见过太多人,抓个包回来,看到OSPF的Hello报文,愣是不知道它在干嘛。

所以,这一节咱们把三个最核心的路由协议——RIP、OSPF、BGP——从头捋一遍。我会结合我这些年踩过的坑,把它们的核心原理和报文交互流程讲清楚。

核心观点: 路由协议的本质,就是让路由器之间「交换信息,达成共识」。攻击者利用的,恰恰是这个「信任」机制。

1. RIP:距离矢量协议的「老前辈」

RIP,全称Routing Information Protocol。说白了,它就是个「传话」的协议。每个路由器只告诉邻居:「我能到哪儿,跳数是多少」。邻居听了,再告诉下一个邻居。

我记得刚入行那会儿,在一家小公司做网络运维。公司网络不大,用的就是RIP。当时觉得这协议真简单,配置几行命令就完事了。后来出了问题,才发现RIP的收敛速度慢得让人抓狂。

1.1 核心原理

  • 距离矢量算法: 每个路由器维护一张路由表,表里记录着「目标网络」和「跳数」。
  • Bellman-Ford算法: 通过邻居的路由表,计算自己的最优路径。
  • 最大跳数限制: 15跳。16跳就是不可达。这是RIP最大的硬伤。

1.2 报文交互流程

RIP的报文交互其实很简单,就两种报文:Request和Response。

  1. 启动时: 路由器启动RIP后,会广播一个Request报文,问邻居:「你们都有哪些路由?」
  2. 响应: 邻居收到Request,回复Response报文,把自己的路由表全盘托出。
  3. 定期更新: 之后每30秒,路由器会主动广播一次自己的完整路由表。

我的经验: 我曾经在攻防演练中,利用RIP的「定期广播」特性,伪造了一个虚假的路由器,向目标网络发送恶意路由条目。结果,整个网络的数据流都被我引到了中间人设备上。嗯,这个后面咱们会详细讲。

2. OSPF:链路状态协议的「扛把子」

OSPF,Open Shortest Path First。它跟RIP完全不是一个思路。RIP是「我告诉你我能到哪儿」,OSPF是「我告诉你我的网络长什么样」。

你想想看,每个路由器都把自己知道的链路状态(比如接口IP、带宽、邻居关系)广播给整个区域。这样,每台路由器手里都有一张完整的网络拓扑图。然后,它自己用SPF算法(Dijkstra算法)算最短路径。

为什么会这样设计?因为OSPF的设计者受够了RIP的慢收敛和环路问题。OSPF的收敛速度,比RIP快了一个数量级。

2.1 核心原理

  • 链路状态数据库(LSDB): 每台路由器都维护一个LSDB,里面存着整个区域的链路状态信息。
  • SPF算法: 以自己为根,计算到每个目标的最短路径树。
  • 区域划分: 为了减少计算量,OSPF引入了区域(Area)概念。骨干区域(Area 0)是核心。

2.2 报文交互流程

OSPF的报文交互比RIP复杂得多。它一共有五种报文:Hello、DBD、LSR、LSU、LSAck。我建议你记住这五个名字,因为攻击者经常在这些报文上做手脚。

报文类型 作用 我的备注
Hello 发现邻居、维护邻居关系 攻击者常伪造Hello报文,干扰邻居建立
DBD 描述LSDB的摘要信息 用于同步数据库,攻击者可篡改摘要
LSR 请求缺失的LSA 攻击者可发送大量LSR,耗尽CPU
LSU 发送完整的LSA 伪造LSU是OSPF攻击的经典手法
LSAck 确认收到LSA 攻击者可伪造确认,导致重传风暴

OSPF的邻居建立过程,我简单说一下:

  1. Down -> Init: 路由器发送Hello报文。
  2. Init -> 2-Way: 收到邻居的Hello,且邻居列表中包含自己。
  3. 2-Way -> ExStart: 选举DR/BDR(指定路由器/备份指定路由器)。
  4. ExStart -> Exchange: 交换DBD报文,比较数据库摘要。
  5. Exchange -> Loading: 发送LSR请求缺失的LSA。
  6. Loading -> Full: 收到LSU,更新LSDB,发送LSAck确认。

避坑指南: 我曾经在一次攻防演练中,遇到一个奇葩情况。目标网络的OSPF邻居状态一直卡在ExStart,死活进不去Exchange。后来抓包一看,是攻击者伪造了DBD报文,把序列号改成了一个超大值,导致邻居双方无法协商。嗯,这种攻击手法,咱们后面会专门讲。

3. BGP:路径矢量协议的「互联网脊梁」

BGP,Border Gateway Protocol。如果说OSPF是园区网的王者,那BGP就是互联网的基石。整个互联网的路由,全靠BGP在撑着。

BGP跟OSPF最大的区别是什么?OSPF关心的是「最短路径」,BGP关心的是「策略」。说白了,BGP允许你根据各种策略(比如AS路径长度、本地优先级、MED值)来选择路径。

3.1 核心原理

  • 路径矢量: BGP不传递链路状态,而是传递「路径信息」。每条路由都带着一个AS_PATH属性,记录了经过的自治系统编号。
  • TCP传输: BGP使用TCP 179端口建立连接。这意味着BGP的可靠性由TCP保证。
  • 策略驱动: BGP有丰富的路径属性,用于控制路由的选择和传播。

3.2 报文交互流程

BGP的报文只有四种:Open、Keepalive、Update、Notification。我个人习惯把这四种报文称为「BGP四件套」。

报文类型 作用 攻击场景
Open 建立BGP连接,协商参数 伪造Open报文,建立非法BGP会话
Keepalive 维持连接,周期性发送 攻击者可伪造Keepalive,维持僵尸会话
Update 通告或撤销路由 伪造Update报文,注入恶意路由
Notification 报告错误,断开连接 攻击者可发送Notification,强制断开BGP会话

BGP的连接建立过程,我简单梳理一下:

  1. Idle状态: 初始状态,等待连接。
  2. Connect状态: 主动发起TCP连接。
  3. Active状态: TCP连接失败,等待对端发起。
  4. OpenSent状态: 发送Open报文,等待对端回复。
  5. OpenConfirm状态: 收到对端的Open报文,发送Keepalive。
  6. Established状态: 收到对端的Keepalive,BGP连接建立成功。

我的经验: 我记得有一次做BGP攻防演练,我伪造了一个Update报文,把目标AS的流量全部引到了我的设备上。结果,目标网络的运维人员一脸懵,完全不知道发生了什么。后来他们查了BGP日志,才发现是AS_PATH被篡改了。嗯,这个攻击手法,咱们后面会详细拆解。

4. 三种协议的核心对比

为了方便你记忆,我把三种协议的核心差异整理成了一张表。你想想看,理解了这张表,你就知道攻击者为什么会对不同的协议采用不同的攻击手法了。

特性 RIP OSPF BGP
算法 距离矢量 链路状态 路径矢量
度量标准 跳数 开销(Cost) 多种属性
收敛速度 慢(分钟级) 快(秒级) 中等
传输方式 UDP 520 IP 89 TCP 179
应用场景 小型网络 大型园区网 互联网/跨AS
攻击面 伪造路由、路由毒化 伪造LSA、DR/BDR攻击 路由劫持、路径篡改

5. 知识体系框架图

下面这张SVG图,是我为你梳理的本章知识体系。它把RIP、OSPF、BGP的核心逻辑和攻击面串在了一起。你可以把它当作一张「攻防地图」来用。

路由协议攻防知识体系 RIP OSPF BGP 距离矢量 · 跳数 · UDP 520 Request / Response 报文 攻击面:路由毒化、伪造 链路状态 · SPF · IP 89 Hello / DBD / LSR / LSU / LSAck 攻击面:伪造LSA、DR/BDR攻击 路径矢量 · 策略 · TCP 179 Open / Keepalive / Update / Notification 攻击面:路由劫持、路径篡改 核心攻防逻辑 攻击者利用「信任」机制,伪造或篡改路由协议报文 防御者需要「验证」和「过滤」,打破这种信任

好了,这一节的内容就到这里。RIP、OSPF、BGP这三个协议,是路由攻防的基础。你只有把它们的原理和报文交互流程吃透了,后面才能理解攻击者是怎么「钻空子」的。

我个人建议,你最好在模拟器里抓个包,亲眼看看这些报文长什么样。嗯,光看书是记不住的。


专注资料整理