📄 rfc3063.txt
字号:
[leaf] (bl,1) (bl,2)
图16 网络状态
然后R4将它的下一跳从R9换到R5。
因为R4正扩展一个桔黄色线程,它先发送一个拆卸消息给旧的下一跳R9以撤销旧路由上的桔黄色线程。接着,它创建一个具未知跳数黄色线程并发送一带属性为(ye,U,255)的请求给R5。
由于R5是出口节点,黄色线程就要回绕。R5返回一个标签映射消息。当标签映射消息逐跳被返回至上游时,线程回绕程序就在每个节点处被执行。
如果R1在接收R11的桔黄色线程的撤销消息之前收到一个标签映射消息时,R1就返回一个标签映射消息给R11。一接收到桔黄色消息的撤销消息,R1为了通知具已知跳数的下游,它会立刻创建一个透明色的线程并通过发送一带(tr,1,255)属性的更新消息来扩展它。
否则,如果R1在接收到标签映射消息之前就收到了桔黄色线程的撤销消息,R1就会移去被滞留的输入桔黄色链接并等待输出桔黄色线程的回绕。最终,当R1从R2收到一标签映射消息时,它就创建一属性为(tr,1,255)透明色的线程并将它扩展至下游。
在两种情况下,一个合并的LSP((R1->R2),(R6->R7->R8))->R3->R4->R5) 被创建并且每一个节点获得正确的跳数。最终的网络如图17所示。
R11 <------ R10 <-------------------- R9
| | |
| | |
| | |
v | |
R1 -------> R2 --------> R3 --------> R4 --------> R5
[leaf] (tr,1) (tr,2) ^ (tr,4) (tr,5)
|
| (tr,3)
|
R6 -------> R7 --------> R8
[leaf] (tr,1) (tr,2)
图17 最终的网络状态
7.2. 第二个例子
+----- R6----> R7----- +
| |
| v
R1---->R2 R4----->R5
| ^
| |
+--------->R3---------- +
图18 MPLS网络的例子 (2)
假设在图18中存在一个已建立的LSP R1->R2->R3->R4->R5,R2的下一跳从R3变化到R6。R2发送一个带红色线程(re,2,255) 的请求给R6。当带有属性( re,4,253)的请求到达R4时,它改变线程的颜色并将之扩展到R5。因此,一个新的绿色线程在R4处被创建并被通过发送一带属性为(gr,5,255)的更新消息扩展到R5。
当R5收到一更新消息时,它就将输入链接的跳数更新为5并且返回一个更新应答(也就是带有成功代码的通知消息)。当R4收到一个更新应答时,它就返回一个标签映射消息给R7。
当R2在新路由上收到一标签映射消息时,它就发送一个拆卸消息给R3。当R4收到一个拆卸消息时,由于Hmax没有改变,故它并不发送更新消息给R5。现在就得到了一个已建立的LSP R1->R2->R6->R7->R4->R5。
然后,R2处的下一跳又从R6变到R3。
R2发送一带蓝色线程(bl,2,255) 的请求给R3。R3将属性改为(bl,3,254) 转发请求给R4。
当R4收到请求后,因此时Hmax没有改变,所以它立刻返回一个标签映射消息给R3。
当R2在新路由上收到一标签映射消息时,它就发送一拆卸消息给R6。拆卸消息到达R4,引起一带透明色线程(tr,4,255) 的更新消息给R5,因为此时Hmax从4减少到了3。R5将输入链接跳数更新为4,而不返回应答。
8. 线程控制时钟
每一节点的每一个LSP中都有一个线程控制时钟(TCB),TCB可能含有下面的信息:
- FEC
- 状态
- 输入链接
每个输入链接有如下属性:
邻居:上游邻居节点地址
颜色:接收的线程颜色
跳数: 接收的线程跳数
标签
S-标记: 表明是一个滞留链接
- 输出链接
每个输出链接有如下属性
邻居:下游邻居节点地址
颜色:接收的线程颜色
跳数:接收的线程颜色
标签
C-标记:表明当前下一跳的链接
如果在一个输入链接上接收到一个透明色线程,而该线程没有被分配标签,或者一个非透明色被存储,那么此线程会被丢弃而不进入FSM。一个错误消息可能会返回给发送者。
无论什么时候输入链接收到一个线程,在进入FSM之前必须采取一些措施:(1)将接收线程的颜色和跳数存储在链接上以代替旧线程的颜色和跳数(2)设置下面的标记用于“Recv 线程”事件(参看8.1)中的交换事件。
颜色标记 (CL-flag):
如果接收线程是有颜色的,则设置此标记
环标记 (LP-flag):
如果接收线程形成了一个环,则设置此标记
到达新链接标记 (NL-flag):
如果接收线程到达一个新的输入链接,则设置此标记
如果一个 LP-flag被设置,除了接收链接外,则必定存在一个输入链接L,存储与接收链接一样的线程颜色。属于链接L的TCB被看作是“检测TCB”。如果接收LSR能够进行VC合并,则检测TCB与接收TCB是一样的,否则,两个TCBs 不同的。
在执行线程扩展前,TTL线程被减1。如果最后TTL变为0,线程不是被扩展而是被静静地丢弃。否则,线程被扩展并且扩展的线程颜色和跳数被存储到输出链接中。
当一个节点接收到一个线程回绕事件时,如果接收线程颜色和扩展线程颜色不同,节点会丢弃事件而不进入FSM。
8.1. 有限状态机制
由FSM中一个动作预先按排的事件必须在动作完成后立刻被传递。
FSM中所使用的变量如下:
Ni: 非滞留输入链接的数目
Hmax: 最大的输入链接跳数
Hout: 当前节点下一跳的输出链接跳数
Hrec: 接收线程的跳数
在FSM中,如果Hmax=未知的,则值(Hmax+1)就是未知跳数加1。例如,如果Hmax=未知的=255,值(Hmax+1)就变为256。
一个TCB有三个状态:Null,Colored和Transparent。当TCB在状态Null时,没有输出链接且Ni=0。状态Colored意味着节点正在输出链接上为它的下一跳扩展一个有颜色的线程。状态Transparent意味着节点是出口节点或输出链接是透明的。
标记值为“1”代表标记被设置,“0”则代表标记未被设置,“*”意味着标记值或为1或为0。
FSM允许在旧的下一跳上有一个透明的输出链接和在当前下一跳上有一个带颜色的输出链接。然而,不允许在旧的下一跳上有一个带颜色的输出链接。
状态 Null:
事件 动作 新状态
Recv 线程
标记
CL LP NL
0 * * 无动作 无变化
1 0 * 如果一个节点是出口节点,它会 Transparent
产生一个回绕线程并将接收链接
变为透明色。
否则,不改变颜色地扩展接收线程 Colored
1 1 * 滞留接收线程;如果Hrec<unknown,No change
则为检测TCB预先安排“初始化为
未知值”事件
下一跳的 如果是符合条件的叶节点,创建一带 Colored
获得 颜色线程并扩展它。
其它 静态忽略事件 No change
状态Colored:
事件 动作 新状态
Recv 线程
标记
CL LP NL
0 * * 如果Hmax+1<Hout<unknown,则创 No change
建一带颜色线程并扩展它。否则,什
么都不做
1 0 * 如果 Hmax<Hout, 合并接收线程。否则 No change
就扩展线程--如果 NL=1,则改变颜色
如果 NL=0,则不改变颜色 。
1 1 * 滞留接收线程,如果Ni=0 并且节点是 Null
一个符合条件的叶节点,就引发线程
的撤销。
如果Ni>0 并且 Hrec<unknown, 为检测 No change
TCB预先安排“初始化为未知值”事件。
否则什么都不做 No change
回绕 将回绕线程传播至前面扩展一带颜色线 Transparent
程的跳;将所有的输入输出链接存储的
颜色都改为透明色;如果Hmax+1<Hout,
扩展透明色线程。撤销那些C-flag=0的
输出链接上的线程。
撤销 移去相应的输入链接
如果Ni=0并且节点不是一符合条件的叶 Null
节点,将线程的撤销传播至所有的下一跳。
否则,如果Hmax+1<Hout<unknown,创 No change
建一带颜色线程并扩展它。
否则,什么都不做。 No change
下一跳 如果下一跳已存在一个输出链接,则什么 Transparent
的获得 都不做(这种情况只有在节点仍留在旧路
径上时才会发生)
否则,创建一带颜色线程并扩展它。 No change
下一跳 如果输出链接是透明色的并且节点被允许 No change
的丢失 留在链接中,而下一跳又是存在的,则什
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -