Skip to main content

RSVP报文格式

RSVP(Resource Reservation Protocol),资源预留协议,工作在传输层,但不参与应用数据的传送,是一种网络上的控制协议,类似于ICMP。各类消息都包含一个通用头部,随后是多个可变长度、类型的消息对象。

协议栈结构

RSVP工作在传输层,协议栈结构如下图所示。

RSVP报文封装示例
+----------------+
| RSVP message |
+----------------+
|   IP header   |
+----------------+
|   L2 header   |
+----------------+

报文格式

RSVP消息格式
          0             1              2             3
  +------+------+-------------+---------------------------+
  | Vers | Flags| Msg Type   |       RSVP Checksum       |
  +------+------+-------------+---------------------------+
  | Send_TTL   | Reserved   |       RSVP Length       |
  +-------------+-------------+---------------------------+
  |                                                       |
  ~                   Objects                           ~
  |                                                       |
  +-------------------------------------------------------+
RSVP消息字段解释
字段 长度 描述
Vers 4比特 RSVP版本号,当前版本为1。
Flags 4比特 标识位,一般值为0。RFC2961扩展其用来标识是否支持摘要刷新(Srefresh)。如果支持Srefresh,则Flags置为0x01。
Message Type 8比特 表示消息的类别,下面列出一些类别: 1-Path 2-Resv 3-PathErr 4-ResvErr 5-PathTear 6-ResvTear 7-ResvConf 8-DREQ 9-DREP 10-ResvTearConfirm 11-Unassigned 12-Bundle 13-ACK 14-Reserved 15-Srefresh 20-Hello 21-Notify Message 25-Integrity Challenge 26-Integrity Response 66-DSBM_willing 67-I_AM_DSBM
RSVP Checksum 16比特 表示RSVP的校验和,值为消息的补码的反码。如果值为0,表示消息传输过程中不进行检验和检查。
Send TTL 8比特 IPv4的TTL的值,随报文一起发送。当节点接收到RSVP消息时,通过比较Send_TTL和IP首部的TTL值可以计算出该报文在非RSVP域中经过的跳数。
Reserved 8比特 保留。
RSVP Length 16比特 报文总长度,包括公共头及后面的TLV objects,以字节为单位。
Objects 变长 消息对象。每个RSVP消息都包含多个对象。不同类型的消息,包含的对象不同。详见消息对象格式
消息对象格式
 0             1              2             3         
+---------------------------+-------------+-------------+        
|       Length (bytes)     | Class-Num |   C-Type   |        
+---------------------------+-------------+-------------+        
|                                                       |        
//                 (Object contents)                   //        
|                                                       |        
+---------------------------+---------------------------+
消息对象字段
字段 长度 说明
Length 16bits 表示对象的总长度,以字节为单位。Length必须是4的倍数,最小值为4。
Class Num 8bits 对象类别编号。详细的对象类型编码所对应的类型名称和含义请参见表 对象类型编码所对应的类型名称和含义
C-Type 8bits 表示对象类型,表示同一类对象中不同的类型。Class_Number与C-Type唯一标识了一个对象。
Object Content 可变 对象内容,可变长度。

对象类型编码

对象类型编码所对应的类型名称和含义
Class Num Class Name 描述
0 NULL 它的长度至少为4,但是可以是任意4的倍数。NULL对象可以出现在对象序列中的任意位置,它的内容会被接收者忽略掉。
1 SESSION RSVP会话相关信息,包括:Destination Address、Tunnel ID、Extend Tunnel ID。 Class = 1, C-Type = 1:IPv4/UDP SESSION object Class = 1, C-Type = 2:IPv6/UDP SESSION object
2 - unassigned
3 RSVP_HOP 发送Path消息的上一跳的出接口地址和接口句柄。 Class = 3, C-Type = 1:IPv4 RSVP_HOP object Class = 3, C-Type = 2:IPv6 RSVP_HOP object
4 INTEGRITY 携带了验证源节点的加密数据,它用于验证这个RSVP消息的内容。
5 TIME_VALUES 包含了消息创建者使用的刷新周期,在每个Path消息和Resv消息中必须存在。Class = 5,C-Type = 1:TIME_VALUES Object
6 ERROR_SPEC 指定了在PathErr、ResvErr消息中的Error,或者在ResvConf消息中的确认。 Class = 6, C-Type = 1: IPv4 ERROR_SPEC object Class = 6, C-Type = 2: IPv6 ERROR_SPEC object 错误码的值及对应的含义如下: Error Code = 00: 确认 Error Code = 01: 准入控制失败 Error Code = 02: 策略控制失败 Error Code = 03: Resv消息没有路径信息。 Error Code = 04: Resv消息没有发送者信息 Error Code = 05: 冲突的预留风格 Error Code = 06: 不可识别的预留风格 Error Code = 07: 冲突的目的端口 Error Code = 08:冲突的发送者端口 Error Code = 09, 10, 11: (保留) Error Code = 12:服务抢占 Error Code = 13: 不可识别的对象Class Error Code = 14: 不可识别的对象C-Type Error Code = 15-19: (保留) Error Code = 20: 为API保留 Error Code = 21: 流量控制错误 Sub-code = 01:服务冲突 Sub-code = 02:不支持的服务 Sub-code = 03:不正确的流规范值 Sub-code = 04:不正确的Tspec值 Sub-code = 05:不正确的Adspec值 Error Code = 22: 流量控制系统错误 Error Code = 23: RSVP系统错误 Error Code = 24: 路由错误 Sub-code = 01: 错误的ERO Sub-code = 02: 错误的严格显式路径节点 Sub-code = 03: 错误的松散显式路径节点 Sub-code = 04: 错误的初始子对象 Sub-code = 05: 没有到目的地址的可用路由 Sub-code = 06: 不可接受的标签值 Sub-code = 07: RRO包含了路由环路 Sub-code = 08: MPLS正在协商,但是路径上存在不支持MPLS的路由器 Sub-code = 09: MPLS标签分配错误 Sub-code = 10: 不支持的L3PID Error Code = 25: 错误通告 Sub-code = 01: 超过MTU值的RRO Sub-code = 02: RRO通告 Sub-code = 03: 隧道本地修复
7 SCOPE 携带了一个朝向信息转发方向的发送者主机的显式列表。可能出现在Resv、ResvErr或者ResvTear消息中。 Class = 7, C-Type = 1: IPv4 SCOPE List object Class = 7, C-Type = 2: IPv6 SCOPE List object
8 STYLE 定义了预留风格和在FLOWSPEC或者FILTER_SPEC对象中没有提及的指定风格的信息。在每个Resv消息中必须存在。Class = 8, C-Type = 1: STYLE object
9 FLOWSPEC 指明了数据流的QoS特征,存在于Resv消息中。 Class = 9, C-Type = 1: Reserved (obsolete) flowspec object Class = 9, C-Type = 2: Inv-serv Flowspec object
10 FILTER_SPEC 发送节点的IP地址和LSP ID,存在于Resv消息中。 Class = 10, C-Type = 1: IPv4 FILTER_SPEC object Class = 10, C-Type = 2: IPv6 FILTER_SPEC object Class = 10, C-Type = 3: IPv6 Flow-label FILTER_SPEC object
11 SENDER_TEMPLATE 指定了发送节点的IP地址和LSP ID,存在于Path消息中。(将会成为Resv消息中的FILTERSPEC对象的内容。) Class = 11, C-Type = 1: IPv4 SENDER_TEMPLATE object Class = 11, C-Type = 2: IPv6 SENDER_TEMPLATE object Class = 11, C-Type = 3: IPv6 Flow-label SENDER_TEMPLATE object
12 SENDER_TSPEC 指明了数据流的流量特征。存在于Path消息中。(将会成为Resv消息中的FLOWSPEC对象的内容。)Class = 12, C-Type = 2: Intserv SENDER_TSPEC object
13 ADSPEC 用于收集路径上的实际QoS相关参数,例如,路径带宽估计、最小路径时延、Path MTU。存在于Path消息中。Class = 13, C-Type = 2: Intserv ADSPEC object
14 POLICY_DATA 携带了允许一个本地策略模块来决定一个相关的预留是否是可管理的许可的信息。可能出现在Path、Resv、PathErr或者ResvErr消息中。Class = 14, C-Type = 1: Type 1 POLICY_DATA object
15 RESV_CONFIRM 预留确认请求,携带了请求预留确认的节点的IP地址。 Class = 15, C-Type = 1: IPv4 RESV_CONFIRM object Class = 15, C-Type = 2: IPv6 RESV_CONFIRM object
16 RSVP_LABEL 表示分配的标签。Class = 16, C-Type = 1: Type 1 Label
19 LABEL_REQUEST 标识LABEL_REQUEST对象,只在Path消息中携带。 Class = 19, C-Type = 1: Without Label Range Class = 19, C-Type = 2: With ATM Label Range Class = 19, C-Type = 3: With Frame Relay Label Range
20 EXPLICIT_ROUTE ERO(Explicit Route Object)描述LSP经过的路径信息,可以为严格显式路径也可以是松散显式路径。Path消息沿ERO指定的路径转发,不受IGP最短路径约束。 ERO包含了包含了C-Type=1的子对象: 1:IPv4前缀 2:IPv6前缀 32:AS号
21 ROUTE_RECORD RRO(Record Route Object)记录了Path消息实际途经的LSR的列表。RRO可用于收集实际的路径信息,发现路由环路,还可以被复制到下一条Path消息中以实现路由锁定。 RRO包含了C-Type=1的子对象: 1:IPv4地址 2:IPv6地址 3:标签
22 HELLO C_Type = 1: HELLO REQUEST对象 C_Type = 2 : HELLO ACK对象
207 SESSION_ATTRIBUTE 指定了建立优先级、保持优先级、预留风格、亲和属性等属性。 C_Type = 1: LSP_TUNNEL_RA C_Type = 7: LSP Tunnel

参考标准

标准 描述
RFC 2205 Resource ReSerVation Protocol
RFC 3209 Resource ReSerVation Protocol (RSVP) -- Version 1 Message Processing Rules
RFC 2209 RSVP-TE: Extensions to RSVP for LSP Tunnels