下面解析RIPng报文的格式、路由表条目结构以及报文处理流程。
一、RIPng报文结构概览
RIPng报文分为报文头 和路由表项两部分:
1. 报文头(固定8字节)
0 1 2
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+---------------+
| command | version | 必须为零 |
| (1) | (1) | (2) |
+---------------+---------------+---------------+
| 路由表项1 (RTE) (20字节) |
| ... |
| 路由表项N (RTE) (20字节) |
+-----------------------------------------------+
-
Command(报文类型,1字节)
-
0x01:Request报文 → 请求路由信息
-
0x02:Response报文 → 通告/回应路由信息
-
-
Version(版本号,1字节):对于RIPng,固定为1
-
必须为零(2字节):保留字段,填充0
2. 路由表项(RTE,20字节)
这是RIPng的核心改进点,引入了两种类型的RTE:
| RTE类型 | 结构 | 作用 |
|---|---|---|
| 下一跳RTE | 前16字节为下一跳的IPv6地址 后4字节的特殊值 | 为紧随其后的一组前缀RTE指定下一跳地址 |
| 前缀RTE | 前16字节为目的IPv6前缀 后4字节为路由标签+前缀长度+度量值 | 携带具体的路由信息 |
关键关系 (第3张图展示):一个"下一跳RTE"后面可以跟随多个"前缀RTE",这些前缀共享这个下一跳地址,直到出现下一个"下一跳RTE"为止。这能有效减少报文长度。
二、路由表项RTE详解
RIPv2的RTE结构(20字节)
Address Family Identifier (2) | Route Tag (2)
------------------------------|---------------
IP Address (4) | Subnet Mask (4)
------------------------------|---------------
Next Hop (4) | Metric (4)
-
地址族标识符:标识地址类型(如IPv4)
-
路由标签:标记路由来源
-
IP地址:目标网络地址(IPv4)
-
子网掩码:明确网络位长度
-
下一跳:到达目标的下一跳IPv4地址
-
度量值:到达目标的距离(跳数,1-15)
RIPng的RTE结构(20字节)
IPv6 prefix (16)
-------------------------------------
route tag (2) | prefix len (1) | metric (1)
-
IPv6前缀(16字节):目标网络的IPv6前缀
-
路由标签(2字节):同RIPv2
-
前缀长度(1字节):0-128,替代了IPv4的"子网掩码"
-
度量值(1字节):跳数,有效范围1-15,16表示不可达
核心差异总结:
| 对比项 | RIPv2 | RIPng |
|---|---|---|
| 目标地址 | 4字节 IPv4地址 | 16字节 IPv6前缀 |
| 网络位标识 | 4字节 子网掩码 | 1字节 前缀长度 |
| 下一跳 | 每个RTE都包含(4字节) | 独立为"下一跳RTE",可被多个前缀共享 |
| 度量值 | 4字节 | 1字节 |
RIPng的设计更加紧凑,专门为IPv6的大地址空间优化,用"前缀长度"替代"掩码"更灵活,用"下一跳RTE"共享机制减少冗余。
三、RIPng报文处理流程
1. Request报文(请求报文)
触发时机:
-
路由器启动时
-
收到特定指令手动更新时
报文类型:
| command=0x01 | version=1 | 必须为零=0 |
细分两种:
-
通用Request报文
-
通常包含一项特殊的前缀RTE:IPv6前缀和前缀长度都为0,度量值=16
-
含义:"请把你的整个路由表都发给我"
-
目的:路由器启动时快速学习全网路由
-
-
指定Request报文
-
包含具体的前缀RTE,指定了要查询的IPv6网络
-
含义:"请告诉我到达这个特定网络的路由信息"
-
目的:用于网络故障诊断或按需查询
-
发送方式 :都以组播 形式发送到FF02::9(所有RIPng路由器)
2. Response报文(响应报文)
触发时机:
-
收到Request报文后
-
路由信息发生变化时(触发更新)
-
周期性(默认30秒)发送
报文内容:
| command=0x02 | version=1 | 必须为零=0 |
| 下一跳RTE1 (可选) | 前缀RTE1 | 前缀RTE2 | ... |
包含实际的、完整的路由信息。
发送方式:
-
响应Request时:可单播回复请求者,或组播
-
触发/周期更新时:组播到
FF02::9
四、完整处理流程示例
场景:一台RIPng路由器R1刚启动。
-
启动后立即:
-
R1构建一个通用Request报文(一个RTE,前缀全0,度量16)
-
组播(
FF02::9)发送出去:"大家好,我是新来的,把你们知道的路由都告诉我"
-
-
邻居路由器R2收到:
-
识别为Request报文(command=0x01)
-
检查RTE:发现是"通用请求"(前缀全0)
-
准备一个Response报文,包含自己的全部路由表
-
组播或单播回复给R1
-
-
R1收到Response:
-
识别为Response报文(command=0x02)
-
解析报文中的RTE序列
-
遇到"下一跳RTE",记录其IPv6地址
-
后续的"前缀RTE"都使用这个下一跳,直到遇到新的"下一跳RTE"
-
将解析出的路由(目标网络+下一跳+度量)加入路由表
-
-
后续维护:
-
每30秒,R1也会组播自己的Response报文
-
如果R1的路由发生变化,立即发送触发更新的Response
-
如果收到对特定网络的Request,发送对应的指定Response
-
五、核心要点总结
-
报文结构:RIPng报文 = 8字节头部 + N×20字节RTE
-
RTE创新 :引入"下一跳RTE"和"前缀RTE"两种类型,下一跳可被多个前缀共享,节省带宽
-
IPv6适配:用"前缀长度"替代"子网掩码",用16字节字段存IPv6地址
-
处理机制:Request/Response模式,支持"通用请求"(要全部)和"指定请求"(要特定)
-
效率优化:组播发送,减少网络负担;触发更新,加快收敛
RIPng在继承了RIP简单易用优点的同时,通过重新设计RTE结构,完美适配了IPv6的地址特点和现代网络对效率的需求。