目录
前言:
一、MPLS标签
1、定义:
2、标签结构:
3、标签识别:
二、标签分配协议---LDP(Lable Distribution Protocol)
1、定义:
2、标签分配协议的种类:
3、LDP消息类型
4、LDP会话建立和维护
5、LDP邻居状态机
6、标签转发表
7、LSP建立流程(标签分配的过程)
8、标签通告模式
9、标签控制模式
10、标签保持方式
11、带标签的MPLS报文转发流程
前言:
在MPLS技术基础知识一文中,我们了解到MPLS、MPLS VPN、BGP MPLS VPN都是现在非常重要并且常见的技术,接下来我们将深入学习MPLS标签与它的分配协议—LDP。
一、MPLS标签
1、定义:
-
一个短的、易于处理的、不包含拓扑信息、只具有局部意义的信息内容。Lable短是为了易于处理,通常可以用索引直接引用;只具有局部意义是为了便于分配。例如:一个路由器上的IN和OUT都是1500,并不会对转发产生啥影响。
-
标签通常位于二层和三层的头部之间
-
LSR根据MPLS标签决定如何转发数据
2、标签结构:
标签只有4个字节,32个bits
分为4个区域:
(1)label:标签值,长度20bits,是标签转发的关键索引。
0-15为保留标签:0表示该标签必须弹出,交给IPV4处理;2表示该标签必须弹出,交给IPV6处理;3表示倒数第二跳弹出;
16-1024为静态标签;
1024-65536位动态标签。
(2)TC位:Traffic Class field,流量类别字段,用于QOS标识优先级,长度3bits,数字越大,优先级越高。
EXP ,Experimental Use,实验性使用字段,预期用途是作为“服务等级”(Class of Service,CoS) 字段;
注意:TC和EXP所表示的意思是一样的,有的文档里用的EXP,有的文档里用的是TC,现在EXP”字段被重命名为“TC”字段
(3)S:栈底标识,长度1bits。
S为1表示为最后一个标签;
S为0表示后续还有标签。这就意味着我们可以多次封装标签,嵌套标签。这在MPLS VPN和BGP MPLS VPN中会被使用,如下图:
(4)TTL:存活时间,长度8bits,用于当网络出现环路时,防止标签报文被无限制转发。
它有两种处理模式:
1,Uniform:IP报文进入mpls网络时,拷贝IP头部的TTL至标签交换,每经过一次标签交换,标签TTL-1,经过出节点时,把标签TTL再次-1后替 换到原IP头部的TTL。
2, pipe:IP头部进入MPLS时,IP头部TTL-1,MPLS标签中的TTL为固定值,每经过一次标签交换,标签TTL-1,直到经过出节点时,将IP头部TTL-1。
这两种模式最大的区别在于Uniform可以使接收设备感到TTL值的变化,可以知道自己经过了几个路由器,而pipe做不到。
3、标签识别:
以太网帧中,通过Type字段对MPLS进行识别
Type=8847,代表承载的是MPLS报文
Type=0800,代表承载的是IP报文
二、标签分配协议---LDP(Lable Distribution Protocol)
1、定义:
用于LSR之间分配标签,建立LSP,简单可靠,是MPLS网络中应用最广泛的标签分配协议之一。
2、标签分配协议的种类:
LDP
RSVP-TE
MP-BGP----专门在BGP网络中,支持标签分配协议的,适合用IPV4
MP-BGP(BGP4+)----专门在BGP网络中,支持标签分配协议的,适合用IPV6
3、LDP消息类型
发现消息(discovery messages):用于LDP邻居的发现和维持。
会话消息(session messages):用于LDP邻居会话的建立、维持和中止。
通告消息(advertisement messages):用于LDP实体向LDP邻居宣告Label、地址等信息。
通知消息(Notification messages):用于向LDP邻居通知事件或错误。
4、LDP会话建立和维护
5、LDP邻居状态机
6、标签转发表
LDP会话建立完成后,路由器根据路由表进行标签分配,形成MPLS标签转发表
标签转发表包含入标签、出标签和出接口
入标签:接收到的报文携带的标签
出标签:转发数据把入标签替换为出标签
出接口:报文数据发出的接口
7、LSP建立流程(标签分配的过程)
上游与下游:
设备的上下游,与数据转发的方向相对,数据先到达的地方是上游,后到达的地方是下游。
流程:
注:标签分配的过程必须基于全网通的情况下
每台路由器是怎么知道自己是上游还是下游?假设用户A要和用户B通信,全网通,这3台路由器都已经配置了LDP协议,并且邻居已起来
过程描述:
-
从A发出的数据包应该是这个样子:D:20.0.0.1+S:10.0.0.1,LSR1收到后会查看路由表,得知其下一跳是LSR2的左边接口,这也就意味是LSR1发现这个数据包的下一跳是自己的LDP邻居,于是LSR1就知道自己是这个数据包中去往目的地的上游,此时LSR1会向LSR2发起标签分配的请求,请求LSR2给LSR1分配一个去往20.0.0.1的标签。
-
LSR2收到数据包后也会查路由表寻找下一跳,也会向LSR3发起标签分配的请求,请求LSR3给LSR2分配一个去往20.0.0.1的标签。
-
LSR3收到数据包后也会查路由表,发现其下一跳不是自己的LDP邻居,这就意味着这个数据包的终点是自己,自己是最后一跳。
有一种复杂的情况:R1-R3都配置了LDP协议,唯独R4没有配置LDP协议
此时LSR3收到LSR2的数据包后,会查路由表找到目的地的下一跳,发现下一跳是LSR4,但LSR4不是自己的LDP邻居,这会让LSR3同样的认为自己就是这个数据包的终点,自己值最后一跳
-
当LSR3知道自己是终点,是最后一跳时,LSR3会产生一个IN和OUT标签,但此时OUT标签是空的(因为它已经知道自己是最后一跳,就没必要给自己给标签了),IN标签是随机产生的,但是因为自己是最后一跳,所以,根据情况可以有三个选择:
0表示该标签必须弹出,交给IPV4处理;
2表示该标签必须弹出,交给IPV6处理;
3表示倒数第二跳弹出。
假设,这个图上配置的地址是IPV4地址,此时的IN标签应该为0,出接口没有(因为是最后一跳),最后LSR3会把自己的标签值通过标签通告报文(advertisement messages),传给自己的上游LSR2。
-
当LSR2收到LSR3传的标签通告报文后,会将收到报文的接口S1/1作为自己的出接口,LSR3的IN标签作为自己的出标签,自身的IN标签可自动给出一个随机值,比如:IN=1200
-
当LSR1收到LSR2传的标签通告报文后,会将收到报文的接口S0/1作为自己的出接口,LSR2的IN标签作为自己的出标签,自身的IN标签可自动给出一个随机值,但因为自己是起点,所以没有IN标签
-
此时LSP的建立流程(标签分配的流程)就结束了。
总结:
(1)出节点LSR收到上游标签分配请求后,建立LSP
-
出标签为空
-
入标签设置为3或者0或者2,视情况而定
-
出接口为IP路由表中目的网段的出接口
(2)出节点LSR向上游LSR发布标签映射消息,通告本机LSR的入标签
(3)上游LSR根据标签映射消息建立LSP
-
出标签为下游LSR通告的入标签
-
入标签随机产生
-
出接口为收到标签映射消息的接口
(4)LSR继续向上游发布标签映射消息,直到入节点
(5)入节点LSR建立LSP
-
出标签为下游LSR通告的入标签
-
入标签为空
-
出接口为收到标签映射消息的接口
8、标签通告模式
(1)DOD:downstream-on-demand,下游按需标记分配,默认模式
特征:上游LSR先向下游LSR发送标签请求信息;下游LSR收到标签请求消息后,为此FEC分配标签,并向上游逐层通告。
优点:没有访问需求的地址,不会建立LSP,减轻路由器的性能负担。
缺点:有访问需求才会触发建立LSP,会导致触发报文的前几个无法连通(LSP的建立需要过程,在每个路由器标签没有分配好前,有访问需求,会导致访问失败)。
(2)DU:downstream unsolicited,下游自主标记分配
特征:下游LSR在LDP会话建立后,主动向上游LSR通告标签映射消息,无需等待上游请求。
优点:无需统一访问请求触发,不会存在一组FEC前几个包不通的情况。
缺点:路由器会主动建立所有路由表中下一跳为非LDP邻居的网段的LSP,导致大量的LSP信息,而且很多可能是暂时无用的。
9、标签控制模式
有序:只有从最下游的LSR开始建立标签后,才能逐层通告
无序(独立):不管有没有收到下游的标签映射消息,都立即向上游发送标签映射消息(即使标签重复也无所谓)
10、标签保持方式
(1)保守模式:只保留最优路径的,来自下一跳邻居的标签,丢弃所有非下一跳邻居发来的标签;
如果IP路由表中存在等价路由,LSP会建立等价路径,做负载均衡。
特征:
增加LSP的收敛时间;(一旦主路故障了,需要启动备用路径,重新建立标签分配的过程)
节省内存空间和标签。
(2)自由模式:保留所有邻居标签
特征:
减少LSP收敛时间;
需要更多的内存和标签空间。
11、带标签的MPLS报文转发流程
-
报文进入MPLS网络,入节点检查标签转发表,进行PUSH操作,如下图:
-
报文在Transilt LSR中传输时,路由器检查标签,并在标签转发表中匹配,进行标签SWAP操作
-
报文到达出节点,路由器弹出pop标签,并按照普通数据报文进行报文