4.4.3. Processing RRO
Typically, a node initiates an RSVP session by adding the RRO to the
Path message. The initial RRO contains only one subobject - the
sender's IP addresses. If the node also desires label recording, it
sets the Label_Recording flag in the SESSION_ATTRIBUTE object.
//通常,节点把RRO对象添加到PATH消息中。最初的RRO对象只包含一个子对象
//——首节点的IP地址。如果节点还希望记录标签,它就设置SESSION_ATTRIBUTE
//的Label_Recording位。
When a Path message containing an RRO is received by an intermediate
router, the router stores a copy of it in the Path State Block. The
RRO is then used in the next Path refresh event for formatting Path
messages. When a new Path message is to be sent, the router adds a
new subobject to the RRO and appends the resulting RRO to the Path
message before transmission.
//当中间节点收到带RRO的PATH消息时,则保存该RRO到PSB中。用于下次PATH刷
//时格式化PATH消息。当本节点发出PATH时,添加一个新的子对象到RRO中,且
//在PATH消息发出前,把该RRO添加进去。
The newly added subobject MUST be this router's IP address. The
address to be added SHOULD be the interface address of the outgoing
Path messages. If there are multiple addresses to choose from, the
decision is a local matter. However, it is RECOMMENDED that the same
address be chosen consistently.
//新添加的子对象必须是本节点的IP地址。且是PATH消息的出接口地址(理解为
//路由器,一个路由器至少有2个IP地址吧)。如果有多个可选的地址,由本地
//节点决定。当然,建议总是选择同一个地址(对同一个会话而言?)。
When the Label_Recording flag is set in the SESSION_ATTRIBUTE object,
nodes doing route recording SHOULD include a Label Record subobject.
If the node is using a global label space, then it SHOULD set the
Global Label flag.
//当SESSION_ATTRIBUTE中的Label_Recording置位,节点记录路由时应该包括
//LABEL RECORD子对象。如果节点使用全局标签空间,应该设置Global Label
//位。
The Label Record subobject is pushed onto the RECORD_ROUTE object
prior to pushing on the node's IP address. A node MUST NOT push on a
Label Record subobject without also pushing on an IPv4 or IPv6
subobject.
//LABEL RECORD子对象先于IP地址压入RRO对象中(一个栈结构)。节点不能单单
//记录一个LABEL RECORD而不记录IP地址。
Note that on receipt of the initial Path message, a node is unlikely
to have a label to include. Once a label is obtained, the node
SHOULD include the label in the RRO in the next Path refresh event.
//收到PATH时, 节点无法记录一个标签。当分配标签后,在下一个PATH刷新时,
//节点将把标签包含在RRO对象中。
If the newly added subobject causes the RRO to be too big to fit in a
Path (or Resv) message, the RRO object SHALL be dropped from the
message and message processing continues as normal. A PathErr (or
//当添加子对象后(RRO会变大),导致PATH(或RESV)消息太大,整个RRO应该被丢
//弃,继续按正常流程处理PATH(或RESV)消息。应该发送一个错误码为"Notyfy"
Awduche, et al. Standards Track [Page 35]
RFC 3209 Extensions to RSVP for LSP Tunnels December 2001
ResvErr) message SHOULD be sent back to the sender (or receiver). An
error code of "Notify" and an error value of "RRO too large for MTU"
is used. If the receiver receives such a ResvErr, it SHOULD send a
PathErr message with error code of "Notify" and an error value of
"RRO notification".
//错误值为"RRO too large for MTU"的PATHERR(或RESVERR)消息给首(或末)节点
//如末节点收到该RESVERR,它应该发送一个错误码为"Notyfy"错误值为"RRO
//notification"的PATHERR给首节点。
A sender receiving either of these error values SHOULD remove the RRO
from the Path message.
//首节点收到以上两种PATHERR的任何一个,应该将RRO对象从PATH中移除(是否
//继续发PATH消息?)
Nodes SHOULD resend the above PathErr or ResvErr message each n
seconds where n is the greater of 15 and the refresh interval for the
associated Path or RESV message. The node MAY apply limits and/or
back-off timers to limit the number of messages sent.
//节点应该每隔n秒重传以上所述的PATHERR(或RESVERR),其中n选15和相应的
//PATH(或RESV)刷新周期的大者。节点可能限制重传次数,或递增定时器以限定
//重传消息的数量。
An RSVP router can decide to send Path messages before its refresh
time if the RRO in the next Path message is different from the
previous one. This can happen if the contents of the RRO received
from the previous hop router changes or if this RRO is newly added to
(or deleted from) the Path message.
//当收到的PATH中携带的RRO与前一个的不同,路由器可以决定是否在刷新间隔
//之前发送PATH消息。当上游路由器改变或者有RRO被添加(或删除)到PATH
//消息时,该情景会发生。
When the destination node of an RSVP session receives a Path message
with an RRO, this indicates that the sender node needs route
recording. The destination node initiates the RRO process by adding
an RRO to Resv messages. The processing mirrors that of the Path
messages. The only difference is that the RRO in a Resv message
records the path information in the reverse direction.
//当会话的目的节点收到带RRO的PATH消息时,表明首节点需要记录路由。目的
//节点添加一个RRO对象到RESV消息。处理过程与PATH一致。唯一不同的是,
//RESV中的RRO记录反向信息(记录RESV的出接口?)。
Note that each node along the path will now have the complete route
from source to destination. The Path RRO will have the route from
the source to this node; the Resv RRO will have the route from this
node to the destination. This is useful for network management.
//路径上的每个节点都有该会话的全部路由信息。PATH中的RRO包含首节点
//到本节点的路由;RESV中的RRO包含本节点到目的节点的路由。这对网络维
//护很有用。(貌似不是完全知道,只知道PATH的出口,和RESV的出口)
A received Path message without an RRO indicates that the sender node
no longer needs route recording. Subsequent Resv messages SHALL NOT
contain an RRO.
//收到的PATH中没有RRO表明发送者不需要记录路由。后续的RESV消息也将不
//包含RRO对象。
4.4.4. Loop Detection
As part of processing an incoming RRO, an intermediate router looks
into all subobjects contained within the RRO. If the router
determines that it is already in the list, a forwarding loop exists.
//作为处理收到的RRO一部分,中间节点查看RRO中的所有子对象。如果发现
//自己已经在子对象中,说明存在环路。
An RSVP session is loop-free if downstream nodes receive Path
messages or upstream nodes receive Resv messages with no routing
loops detected in the contained RRO.
//如果下游节点收到PATH且上游节点收到RESV时,在RRO中没有发现环路,
//说明本会话未成环路。
Awduche, et al. Standards Track [Page 36]
RFC 3209 Extensions to RSVP for LSP Tunnels December 2001
There are two broad classifications of forwarding loops. The first
class is the transient loop, which occurs as a normal part of
operations as L3 routing tries to converge on a consistent forwarding
path for all destinations. The second class of forwarding loop is
the permanent loop, which normally results from network mis-
configuration.
//共有两种广义的转发环路。第一类是瞬时循环,该情况发生在****。第二种是
//永久性循环,该情况通常由网络错误的配置导致。
The action performed by a node on receipt of an RRO depends on the
message type in which the RRO is received.
//节点根据携带RRO的消息类型处理RRO对象。
For Path messages containing a forwarding loop, the router builds and
sends a "Routing problem" PathErr message, with the error value "loop
detected," and drops the Path message. Until the loop is eliminated,
this session is not suitable for forwarding data packets. How the
loop eliminated is beyond the scope of this document.
//如果PATH消息检测到转发环路,路由器发送一个“Routing problem”Path Err
//消息,错误码为"loop detected",并丢弃该PATH消息。环路不消除,该会话
//不使用于转发数据包。环路如何消除超出了本文档的范围。
For Resv messages containing a forwarding loop, the router simply
drops the message. Resv messages should not loop if Path messages do
not loop.
//如果RESV消息检测到转发环路,路由器只是丢弃该消息。如果PATH消息不存在
//环路,RESV消息时不应该出现环路。
4.4.5. Forward Compatibility
New subobjects may be defined for the RRO. When processing an RRO,
unrecognized subobjects SHOULD be ignored and passed on. When
processing an RRO for loop detection, a node SHOULD parse over any
unrecognized objects. Loop detection works by detecting subobjects
which were inserted by the node itself on an earlier pass of the
object. This ensures that the subobjects necessary for loop
detection are always understood.
//RRO可能定义新的子对象。处理时,不认识的子对象将被忽略。当环路检测
//时,节点应当解析所有不认识的对象。环路检测通过判断那些被它自己插入
//子对象。这保证了环路检测涉及的子对象都可识别。
4.4.6. Non-support of RRO
The RRO object is to be used only when all routers along the path
support RSVP and the RRO object. The RRO object is assigned a class
value of the form 0bbbbbbb. RSVP routers that do not support the
object will therefore respond with an "Unknown Object Class" error.
//仅当路径上的所有路由器都支持RSVP和RRO对象时,才使用RRO对象。RRO对象
//的class值为0bbbbbbb形式。RSVP路由器不支持该对象将回应一个"Unknown
//Object Class"错误。
4.5. Error Codes for ERO and RRO
In the processing described above, certain errors must be reported as
either a "Routing Problem" or "Notify". The value of the "Routing
Problem" error code is 24; the value of the "Notify" error code is
25.
//综上所述,某些错误都以"Routing Problem"或"Notify"消息上报。错误码
//"Routing Problem"的值为24;错误码"Notify"的值为25.
Awduche, et al. Standards Track [Page 37]
RFC 3209 Extensions to RSVP for LSP Tunnels December 2001
The following defines error values for the Routing Problem Error
Code:
Value Error:
1 Bad EXPLICIT_ROUTE object
2 Bad strict node
3 Bad loose node
4 Bad initial subobject
5 No route available toward destination
6 Unacceptable label value
7 RRO indicated routing loops
8 MPLS being negotiated, but a non-RSVP-capable router
stands in the path
9 MPLS label allocation failure
10 Unsupported L3PID
For the Notify Error Code, the 16 bits of the Error Value field are:
ss00 cccc cccc cccc
The high order bits are as defined under Error Code 1. (See [1]).
When ss = 00, the following subcodes are defined:
1 RRO too large for MTU
2 RRO notification
3 Tunnel locally repaired