路由协议基础回顾: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。
- 启动时: 路由器启动RIP后,会广播一个Request报文,问邻居:「你们都有哪些路由?」
- 响应: 邻居收到Request,回复Response报文,把自己的路由表全盘托出。
- 定期更新: 之后每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的邻居建立过程,我简单说一下:
- Down -> Init: 路由器发送Hello报文。
- Init -> 2-Way: 收到邻居的Hello,且邻居列表中包含自己。
- 2-Way -> ExStart: 选举DR/BDR(指定路由器/备份指定路由器)。
- ExStart -> Exchange: 交换DBD报文,比较数据库摘要。
- Exchange -> Loading: 发送LSR请求缺失的LSA。
- 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的连接建立过程,我简单梳理一下:
- Idle状态: 初始状态,等待连接。
- Connect状态: 主动发起TCP连接。
- Active状态: TCP连接失败,等待对端发起。
- OpenSent状态: 发送Open报文,等待对端回复。
- OpenConfirm状态: 收到对端的Open报文,发送Keepalive。
- 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这三个协议,是路由攻防的基础。你只有把它们的原理和报文交互流程吃透了,后面才能理解攻击者是怎么「钻空子」的。
我个人建议,你最好在模拟器里抓个包,亲眼看看这些报文长什么样。嗯,光看书是记不住的。