什么是LDP
1、动态LSP需要通过标签发布协议动态建立。
2、标签发布协议是MPLS的控制协议(也可称为信令协议),负责FEC的分类、标签的分发和LSP的建立和维护等一系列的操作。
常用的标签发布协议:LDP(标签分发协议),全称:Label Distrbution Protocol
应用场景:LDP广泛的应用在VPN服务上,具有组网、配置简单、支持基于路由动态建立LSP、支持大容量LSP等优点
工作过程主要分为两部分:
1、LSR之间建立LDP会话
2、LSR之间基于LDP会话动态交换标签与FEC的映射信息,并根据标签信息建立LSP
LDP ID
LDP ID是由LSR ID和标签空间标识
空间标识为0的时候,是基于设备(或者基于平台的)的标签空间
空间标识不为0的时候,是基于接口的
默认的时候是基于平台的,也就是一个标签会从本地所有接口转发出去。
基于接口的时候是该接口单独分发一个标签。
LDP会话建立
在运行了MPLS协议之后,设备就会周期性发送hello包,目的地址是组播地址224.0.0.2,UDP端口号为646。发现邻接体之后,使用tcp协议进行连接。传输地址大的那一方为主动方,小的为被动方,主动方发起TCP连接,双方进行三次握手。TCP建立成功之后,就开始建立LDP会话,主动方发送LDP初始化报文,被动方收到初始化报文后,会回复一个keepalive报文回去,并且也会发送一个自己的初始化报文,主动方回应keepalive就代表会话建立成功,之后就会周期性(15s)发送keepalive报文来保持建立。
Hello包的间隔时间为5s,死亡时间为15s
Keepalive的间隔时间为15s,死亡时间为45s
上游与下游
(数据层面,ping的时候就是数据层面)数据方向:总是从上游流向下游
(控制层面,OSPF的LSA报文)路由方向:总是从下游传给上游
标签发布方式
1、DU(下游自主)模式:
就是将一个特定的FEC,LSR会主动将自己为FEC捆绑的标签发送给上游邻居
2、DoD(下游按需)模式:
就是当上游的邻居需要访问192.168.3.0/24网段的时候,会像下游请求标签映射的时候,这时候R3才会通告标签映射给该邻居
标签分配控制方式
1、独立(Independent)模式:
就是本地LSR可以自主的分配一个标签并且绑定到某一个FEC,并通告给上游LSR,无需等待下游的标签
如上图,当R1需要访问192.168.4.0/24网段的时候,R2运行了DU+独立模式,那么R2就不需要再等下游传上来,而是自己生成一个标签,自己向上游通告。
R2 当运行了DoD+独立模式的时候,也不用再等下游传上来,而是自己生成一个标签并且绑定192.168.4.0/24这个路由,等R1像我请求的时候,我直接通告给R1,不需要再向下游请求。
2、有序(Ordered)模式:
只有当该LSR已经具有这条FEC下一跳的标签映射消息、或者这个LSR就是这个FEC的出站路由器的时候,这个LSR才可以向上游发送此FEC的标签映射。
如上图,在DU+有序模式的时候,如果R3没有收到来自R4的标签,那么R3是不会自己生成一个标签向上游通告的,只有R4这个出站路由器可以向上游通告192.168.4.0/24网段的标签,当R3收到来R4的标签,那么R3就可以生成一个标签并且向上游通告标签。
如上图,当DoD+有序模式的时候,如果R3向R4请求标签,R4并没有回复,那么R3是不能够自己生成标签并且向上游通告的,只有R4能向上游通告标签,因为R4是出站路由器,当R3向R4请求标签成功后,收到192.168.4.0/24网段的标签,R3就可以自己生成一个标签,并且向上游通告标签。
标签保留
1、自由(Liberal)模式:
LSR可能收到的标签映射有两个,可能来自下一跳,也可能来自非下一跳。
在自由模式下,无论邻居LSR是否是自己的下一跳都保留标签。
2、保守(Conservative)模式
与自由模式不同,如果收到标签映射的时候,只有邻居LSR是自己的下一跳才会保留。
PHP特性
PHP(Penultimate Hop Popping,次末跳弹出),以上图为例,在PHP特性中,那么R3作为192.168.3.0/24这条路由里面的Egress LSR(出站LSR),那么他在通告给R2路由器标签的时候,FEC上会分配上一个标签值为3的特殊标签,这个标签被称为隐式空标签(默认情况下是开启的)。
然后当有数据来访问192.168.3.0/24网段的时候,R2作为到达192.168.3.0/24网段的次末跳(倒数第二跳),发现出标签为3,那么就会将标签头部弹出,将IP报文转发给R3,而R3则仅需执行一次查询操作(查询FIB表)即可获得相应的转发信息,转发效率得到了提升。
显示空标签机制,出站路由器给倒数第二跳分配特殊标签0
已上图为例,因为标签报文里面的EXP字段是关于QOS的,如果提前弹出,那么QOS就无用了,所以,当R3在转发标签报文的时候,若出标签封装为0,那么就不会将标签头部弹出,这样标签头部中QoS信息得以保存,等R4在收到带0标签的报文的时候,就会直接弹出,省去了查找ILM表的时间。
在MPLS视图下,执行命令•label advertise { explicit-null | implicit-null | non-null },配置向倒数第二跳分配的标签。
根据参数不同,可以配置Egress向倒数第二跳分配不同的标签:
1、缺省情况下,使用的是implicit-null,Egress向倒数第二跳节点分配隐式空标签,值为3。
2、如果配置的是Explicit-null,Egress节点向倒数第二跳分配显示空标签,值为0。当需要支持MPLS QoS属性时,选用Explicit-null。
3、如果配置的是non-null,Egress向倒数第二跳正常分配标签,即分配的标签值不小于16。