上图中,比如R4要看到数据包中有标签24,就能够正确往R6(目的地)的方向发,那么这个标签24对于R4来说就是本地标签,那么别人LSR把数据包发给R4之前,就得为它打上标签24才发出来,所以R4就把这个标签24告诉给它的邻居R3,邻居LSR收到标签之后,就认为是远程标签,所以R3认为远程标签是24,而自己要拿到一个数据后,是什么标签自己就会改成24发给R4呢,自己也会产生一个本地标签,可以看到,R3产生的本地标签是23,数据包中只要顶部标签是23,就能够让R3把标签改成24后发给R4,所以R3也把这个标签23发给了邻居R2,邻居R2也同样为路由产生一个本地标签,是22, 也就是说R2收到数据包标签为22的,就改成23,然后传给下一跳R3,最后R2也把对自己有利的标签22发给了R1,那么R1就知道发给R2之前,要把标签改成22,要不然R2就会转发出错的。
而因为R1是入站LSR,所以从外面发给它的数据包都是IP包,是不会有标签的,所以它是第一个向数据包加标签的LSR,可以看出只要它一开始往数据包里加上标签22后发给R2,最后就能一跳一跳地被发到R6,因为中间LSR的标签大家都是协商好的。在数据包到达R4时,R4就会将标签全部移除后发给 R6,因为是进入IP网络,没有必要再打标签发出去。要说明的是,该为一个路由条目产生什么样的本地标签,是LSR自己计算的,没有规则可言,从前面的传输过程可以看出,在MPLS网络中,LSR每次收到数据包,都要将标签改成对下一跳有利的标签才转发出去,这个对下一跳有利的标签就是自己看到的远程标签,也称为出口标签,这个标签就是邻居告诉自己的,因为看到什么标签才能正确转发,邻居是知道的,所以告诉给其它邻居之后,才能保证最终路径的正确。
打标签
所有LSR,根据路由表,将数据包打上标签,发出去,打的这个标签不能乱打,是有意义的,因为下一跳路由器要根据这个标签做出自己的决策,收到的路由器将 顶部标签(上一跳路由器加的标签)去除,再加入出站标签,然后再下一跳路由器重复之前的动作,所以每一台路由器都需要对路由条目的标签达成共识,要不然这 台路由器为数据包打上标签,给下一跳路由器,却不是按设想的接口发出去的,就不能到达目标网络。因此,每一台LSR必须明确哪个出站标签来交换哪个入站标 签,标签对于邻接LSR来说是本地有效,没有全局意义,这和帧中继的PVC是一个道理。所以,基于这些,需要有一种标签分发协议来为所有的LSR分发一个正确的标签,只有这样,LSR才能根据标签将数据包正确地发到目标网络。
标签分发方式
标签分发有两种方式:
1.在已存在的IP路由协议中分发标签。 2.使用一种独立的协议来分发标签。 1.在现有的路由协议中分发
距离矢量路由协议,比如EIGRP很好做,直接绑在前缀上,因为这样的路由协议可以随意修改路由条目的内容。
链路状态路由协议,比如OSPF和ISIS就比较难,因为是发链路状态,而链路状态必须毫无更改地发给邻居,更改链路状态数据包是违背原理。
所以也就没有IGP做标签分发的工作,但是BGP却可以同时发前缀和标签(注:BGP发标签是有条件限制的)。 2.标签分发协议
最终建议使用独立的分发协议,不影响路由协议,但需要在LSR上额外运行协议。
以下是可以分发标签的协议 标记分发协议(TDP) 标签分发协议(LDP) 资源预留协议(RSVP)
TDP是思科专有的标记分发协议,已经被LDP所取代。
LDP是IETF开发,功能广泛,所以只涉及LDP,因为TDP已不用了。 RSVP只用在MPLS TE中。
标签分发协议LDP
对于IP路由表中每一条IGP前缀,每台LSR都会进行本地捆绑,也就是为路由条目加上一个标签,这个标签称为本地标签,到时收到一个数据包后,看到顶部 标签如果是自己所拥有的本地标签,那么就根据这个标签从相应接口转发出去,所以邻居把数据包发给自己时,必须在数据包上写好自己对自己有利的标签,那么要 怎样才能让邻居写上一个能让自己看了就正确转发的标签呢,这就得自己把这个标签告诉邻居,自己把本地标签发给邻居后,这个标签对于邻居来说就称为远程标 签,每当邻居要发送数据包给自己的时候,就先把数据包的顶部标签改成远程标签,也就是改成之前发给邻居的标签,邻居改好标签后,把数据包发给我们,我们就能够做出正确转发了,那么邻居也会像我们一样,把自己的本地标签再发给它们的邻居,因为他要把数据正确发给我们,也是由它的邻居在数据包上写好标签告诉它 的。所以在邻居和邻居之后,是要大家协商好每条路由该写上什么标签后发给邻居。LSR把自己生成的本地标签,和邻居发过来的远程标签,不管是用的着的还是用不着的,统统都保存在一张标签表里,这个表称为LIB表(标签信息库)。LDP就是用来发送标签的协议。
已经介绍过,MPLS的标签,就像帧中继的PVC号码一样,只是每台设备唯一的,但是MPLS的标签,在设备上保持唯一还分两种,基于设备唯一和基于接口唯一。
如果基于设备,就是一条路由在一台设备上只有一个唯一的标签。
如果基于接口,就是一条路由在一台设备上,是每个接口都有一个唯一的标签。也就是说标签只要能保证在每个接口上是唯一的即可,在整台设备上可以重复多次。
但LSR可能有多个远程标签,因为可能有多个邻居LSR。
路由协议EIGRP会将所有邻居发给自己的路由条目存放在拓朴表里,再从拓朴表里选中最优最好的放到路由表也供自己使用,当路由表中的条目失效后,再从拓 朴表中拿出次优的使用。而MPLS标签交换的LSR也像EIGRP那样,会把所有邻居发来的标签都存放在LIB表里(就像EIGRP的拓朴表),然后会从路由条目的多个标签中选择一个最优的使用,这个选择方法可以通过IGP路由表,选到的下一跳是谁,那就用谁发来的标签,被选中的正在使用的标签,全部都是存放在LFIB(标签转发信息库)表里的,就像EIGRP的路由表。
注:IOS中,LDP不会为BGP的IPv4前缀捆绑标签。
标签的选择都是根据IGP最优路径。
标签也可以不是LDP分发,比如TE中,由RSVP分发,在MPLS VPN中,由BGP分发。
因为MPLS的标签是加在数据包的二层帧头之上,三层包头之下,三层包头,被认为是上层协议,也就是有效负载,中间的LSR并不知道上层协议类型,因为标签不会写,但它也不需要知道,自己只会根据标签来做出转发决定;但是出站LSR需要知道,所以会为FEC分配一个本地标签,以用作报文的入站标签,这样就可以了解有效负载了。
LSR在查看标签时,是要看基于接口还是设备,如果是基于接口,不能单看标签,还要看接口,如果是基于设备的那就只看标签。
注:在IOS中,所有的标签交换控制的ATM(LC-ATM)接口都采用基于接口的模式,
其它通通基于设备,也就是说CCIE R&S的考生,只需要关心基于设备的标签即可。
标签分发模式
LSR在向邻居分发标签的时候,有三个需要注意的地方,这三个地方分为: 1.标签分发模式 2.标签保持模式 3.LSP控制模式
1.标签分发模式:
是用来定义标签该什么时候发给邻居,分为两种方式: (1)下游被动DOD模式 (2)下游主动UD模式
(1)在DOD,即被动模式中,是LSR请求下游(路由表的下一跳)为某条路由分发标签,也就是说一台LSR并不知道某些路由自己该写上什么标签后发给下一跳,所以这时就去问邻居要,要来的自己就作为该路由的远程标签存放。
(2)在UD,即主动模式中,LSR不需要为路由请邻居请求标签,标签是邻居会主