一、LDP协议的概述
1.LDP会话
- 本地会话:LSR之间是直连的,双方使用组播地址224.0.0.2建立会话
- 远程会话:LSR之间可以是非直连的,双方建立会话是使用单播建立的
缺省是本地会话
2.LDP领接体
只要双方建立了会话之后就建立了邻接体
3.LDP对等体
在建立邻接体关系的基础上,两台LSR之间交互LDP会话消息,建立起LDP会话,两台设备之间形成LDP对等体关系
4.LDP ID
- LDP ID的长度为48bit,由32bit的LSR ID与16bit的标签空间标识符(Label Space ID)构成
- LDP ID以“LSR ID : 标签空间标识”的形式呈现。例如2.2.2.2:0
- 缺省情况下,路由器使用LSR ID作为LDP ID的
标签空间形态
- 值为0:表示基于设备(或基于平台)的标签空间
- 值非0:表示基于接口的标签空间
5.LDP消息
- Discovery Message:用来发现LDP邻居,hello消息是用来发现LDP的邻居,在接口上开启的LDP协议之后就会使用hello消息来发现邻居,hello报文里面包含着LSR作为传输地址,默认情况下路由器以LSR ID作为传输
Session Message:用来建立、维护和终止LDP之间的会话,Initializations是用来和邻居之间协商参数的,KeepAlive·是邻居建立成功之后就会发送这个报文,用来维护LDP的邻居
Advertisement Message:用来改变和删除FEC的标签映射,Address用来宣告地址,Label Mapping是标签映射,LDP如果想要访问邻居的地址就是用标签映射的地址去访问
Notification Message:用来宣告告警和错误信息
除了发现阶段的Discovery Message用的UDP传输,其他的消息类型都是用的TCP传输
6.LDP的状态
- Non-Existent:初始状态,表示没有任何的LDP会话
- Initialized:初始化状态,LSR发现了LDP邻居之后就会和邻居连接TCP三次握手,如果TCP三次握手建立失败就会进入到Non-Existent状态,这个状态下也会发送消息来协商参数,被动方接收到可接收的Init和KeepAlive报文之后进入到openrec状态。主动方发送init进入到OpenSent状态
- Opensent:等待被动方回答Initialization消息和KeepAlive消息,如果收到的Initialization消息中的参数可以接受则转向OpenRec状态,如果参数不能接受或Initialization消息超时则断开TCP连接转向Non-Existent状态
- openRec:在此状态不管主动方还是被动方都是发出KeepAlive后的状态,在等待对方回应KeepAlive,只要收到KeepAlive消息就转向Operational状态;如果收到其它消息或KeepAlive超时则转向Non-Existent状态
- Operational状态:该状态是LDP Session成功建立的标志。在此状态下可以发送和接收所有其它的LDP消息。在此状态如果KeepAlive超时或收到致命错误的Notification消息(Shutdown消息)或者自己主动发送Shutdown消息主动结束会话,都会转向Non-Existent状态
7.LDP的会话建立
- 发现阶段
- LSR通过发送hello报文来建立LDP邻居,hello报文里面携带了自己的传输地址,默认情况下是把自己的LSD ID作为传输地址,传输地址大的作为主动端,小的成为被动端口,由主动端和被动端使用自己的传输地址建立TCP的三次握手,如果TCP三次握手成功就会进入到会话建立阶段
- 会话的建立与保持
- 主动方发送初始化消息给被动方,如果被动方接收这个参数,则回应keeplive报文同时也会发送自己的初始化报文,这样是为了提高发送的效率,主动方如果能接收被动方发送过来的报文则建立起来了会话信息
8.标签的发布和管理
- 上游:以LSP作为判断,距离目的地址远的作为上游
- 下游:距离目的地址近的作为下游
- 标签的发布模式
下游自主方式(Downstream Unsolicited,DU):LSR无需从上游获得标签请求消息即进行标签分配与分发
下游按需方式(Downstream on Demand,DoD):LSR只能从上游获得标签请求消息即进行标签分配与分发
DU模式跟DOD模式有什么区别:
如果使用DU模式的话就无需请求标签,所以转发的效率也会变高,但是的话会占用内存
如果使用DOD的话就需要请求标签,所以转发效率会变慢,华为默认是DU模式
9.标签分配控制方式
- 什么是标签分配控制方式?标签分配控制方式是指在LSP的建立过程中,LSR分配标签的时候采用的处理方式
- 独立模式:在没有收到下游路由器发送过来的FEC的标签映射时,自己就可以像上游路由器发送标签路由器,配合DU模式使用,在没有收到下游LSR发送过来的标签的时候就可以自己向上游路由器发送标签,配置DOD模式使用,在没有收到下游的LSR发送过来的标签的时候,只有收到上游的LSR标签才可以向上游LSR发送标签
- 有序模式:只有当下游LSR向自己发布了标签,才会想上游LSR发布标签,配合DU模式使用,只有下游的LSR向自己发布了标签映射,上游的LSR没有给自己发送标签请求信息,才可以向上上游LSR发布标签映射,配合DOD使用只有下游LSR向自己发布了特定标签映射,上游的LSR给自己发送了标签请求的时候才会向上游发布标签映射
10.标签的保留
- 标签以什么形式保留在路由器上,华为默认是自由模式
- 自由模式
- 不管接收到的标签映射消息的下一跳是不是最优的都会保留,
- 保守模式
- 只有最优的下一跳标签才会保留,次优的是不会保留的
11.MPLS的转发原理
- 根据MPLS的数据转发原理,出站LSR在收到数据包之后需要把MPLS标签的头部弹出,然后变成普通的ip报文,转发给ip网络,在弹出标签的时候需要查看标签表,转发报文的时候需要ip路由表,这样子的话就会加重路由器的负担
12.PHP
- 隐式空:为了解决MPLS转发数据的时候带来的问题,可以使用PHP来解决这个问题,出节点在发布标签的时候,会发布一个特殊标签3给上游的LSR,如果有数据转发,则路由器查找转发表,看到FEC对应的出标签是3,那么将会直接弹出标签,发给出站LSR,那出节点收到的数据就是普通的ip报文了,所以出站LSR只需要查找ip路由表就好了
- 显式空:由于PHP的特点,出站LSR在收到的数据是没有MPLS头部的,如果MPLS域部署了qos,要知道MPLS的报文是EXP字段是用来部署QOS环境下去使用的,如果MPLS的头部没有了,那这个EXP的字段也就没有了,这样子会出现一些问题,出站LSR分配一个特殊的标签0给上游的LSR,路由器查找标签表发现特定的FEC的出标签是0的话就会保留当中的EXP的字段,其他字段则为空