4、MPLS转发的实现
LDP通过发送标签请求和标签映射消息,在LDP对等体之间通告FEC和标签的绑定关系,从而建立一条LSP,才能进行报文转发。用户1访问用户2建立一条当报文进入MPLS网络时,就可以进行MPLS转发。报文进行MPLS转发的过程分为三个不同的阶段:
(1)、标签压入,也称为Push,是报文从非MPLS网络进入MPLS网络,在PE标签边界路由器上标签操作方式;
(2)、标签交换,也称为SWAP,报文在MPLS网络内部所有LSR标签交换路由器上,都按照这个阶段的操作方式;
(3)、标签弹出,也称为POP。这个阶段是报文最终离开MPLS网络需要的操作。
4.1、标签压入PUSH
MPLS标签已分发完成,建立了一条LSP,其目的地址为22.1.1.1/24。
标签压入PUSH:数据包从IP网进入MPLS网络,压入一个或者多个标签。
先从控制平面(控制平面进行LSR之间的路由信息和标签信息的交换):用户1访问用户2,报文从用户1终端设备进入到R1标签边界设备PE,此时的报文是一个普通的IP包,PE路由器按照IP转发流程,查询IP路由表,匹配22.1.1.0/24网段的路由表项,并发现对应路由表项有与之关联的标签转发表,然后PE路由器对该报文启动MPLS转发。
在转发平面,数据的转发过程。包括标签的六种动作(Push、SWAP 、POP、untag、aggregate、recursive)等。PE路由器对该报文启动MPLS转发,就是对这个IP报文加上一个MPLS头,MPLS头内的出标签值就是OUT标签转发表项的出标签值"1025",这个过程称为压标签操作,这样原IP报文转变为MPLS报文,PE路由器GE0/0/1接口发送该MPLS报文。
4.2、标签交换SWAP
标签交换SWAP:将标签置换为另一个或多个标签。只能为一对一或一对多置换。
MPLS报文进入R2 LSR的入接口,对于MPLS报文就无需再查询路由表,检查IP头,而是查询标签转发表,匹配入标签值为"1025"的表项,找到该表项后将MPLS报文头部所携带的出标签值转成下游LSR分配的标签,将"1025"的标签值转换为"1026"的标签值,从下一跳端口GE0/0/2发送出去。
MPLS标签转发表
IN interface | IN label | FEC | OUT interface | OUT label |
---|
GE0/0/1 | 1025 | 22.1.1.0/24 | GE0/0/2 | 1026 |
MPLS标签转发表中只会有唯一的一个标签转发表项,R2 LSR其入标签值1025与接收到的MPLS报文所携带的标签值相同。所以在MPLS转发中只需一次查询表就能完成对该报文的转发,比较IP转发多次查询路由表达到最大匹配的转发方式,效率高很多。
4.3、标签弹出POP
POP:标签的跳出,一次跳出一个标签。
MPLS报文进入R3 LSR的入接口,查询标签转发表,匹配入标签值为"1026"的表项,,找到该表项后将MPLS报文头部所携带的出标签值转成下游LSR分配的标签,这里的出标签值是"3",“3"为隐式空标签,用于倒数第二跳弹出。LSR设备先查LFIB(标签转发表),查询标签转发表中标签值是"3"的表项,对应的出标签值是"NULL”,这表示此LSR的下一跳为FEC的最下游设备。再查LIB(标签信息数据库)后去掉标签,将直接将MPLS报文中的MPLS报头除去后。按照标签转发表对应的出接口将报文发出。
隐式空(3):该行为使得上游路由器执行pop动作。在一条LSP的终点使用隐式空标签的行为成为PHP(倒数第二跳弹出)主要是为了避免多次查表;在倒数第二跳就不再打标签,直接发给最后一个路由器,省得它再去查两次表;最后一个路由器会发一个值为3(保留)的标签给自已的邻居.这个倒数第二跳是一个绝对的概念;实际上PHP就是路由器对自已的直连路由,会向自已的邻居发送一个POP标签。隐式空还用在标签栈中多个标签的报文中,这样向出站LSR传递的标签报文的标签数量就会少一个,这样出站LSR就不会执行两个标签的查找了。隐式空永远不会出现在MPLS报文的标签栈中。
显式空(0):隐式空跳出了顶层标签,但是标签可能有用于QOS(优先级)的EXP位。显示空用来解决这个问题,这样出站LSR向倒数第二跳通告显式空标签,出站LSR就会收到带有0标签的包。LSR不能通过在LFIB中查找标签0来转发这样的报文,因为这个值可以分配给很多FEC,LSR只是去除0标签,进行另外的查找,但是这样就可以获取EXP信息。最下游路由器收到不带标签值的报文,这样不用执行两次查表。 MPLS转发的最后阶段是标签弹出,这个阶段是MPLS报文通过PE边界路由器转换为IP包,当MPLS报文到达PE边界路由器R3时,查询标签转发表中标签值是"3"的表项,对应的出标签值是"NULL",这表示此LSR为FEC的倒数第二跳设备,PE边界路由器将直接将MPLS报文中的MPLS报头除去后,按照标签转发表对应的出接口将报文发出。
4.4、华为设备转发过程
1、标签压入PUSH PE入端口接收到IP数据包,首先查看FIB表,检查目的IP地址对应的Tunnel ID值是否为0x0。Tunnel ID值为0x0,则进入正常的IP转发流程;如果Tunnel ID值不为0x0,则进入MPLS转发流程。
通过查询FIB表和NHLFE表指导报文的转发。
2、Transit的处理 通过查询ILM表和NHLFE表指导MPLS报文的转发。 如果标签值>=16,则用新标签替换MPLS报文中的旧标签,同时处理TTL,然后将替换完标签的MPLS报文发送给下一跳。
如果标签值为3,则直接弹出标签,同时处理TTL,然后进行IP转发或下一层标签转发。
4.5、MPLS对TTL的操作
-
MPLS对TTL的操作(label到label的TTL): 如果在带标签的报文上实施的标签操作是swap的话,入站标签的TTL值会减去1以后复制到交换到的标签中。 如果操作是移除,那么入站标签的TTL减去1以后再复制到新的顶部标签中去。如果TTL值比新的顶部标签TTL要大,就不进行复制了。 -
MPLS对TTL的操作(ip到label或label到ip): 入站LSR:IP中TTL减去1后复制到label中。出站LSR:label的TTL减1后复制到IP的TTL中。但如果所接收到的带标签报文中的TTL比该报文中IP的TTL大的话就不会复制。
|