LDP协议
LDP协议 --- 标签分发协议
MPLS控制层面需要完成的工作主要就是分配标签和传递标签。分配标签的前提是本地路由表中得先存在标签,传递标签的前提也是得先具备路由基础。所以,LDP想要正常工作,则需要IGP作为基础。
LDP协议主要需要完成的任务:
1.分配标签
2.传递标签
注意:
因为LDP协议需要完成以上两个任务,所以,我们需要先保证MPLS域中运行IGP协议来获取信息 --- IGP协议是LDP协议的基础
1.分配标签
LDP激活后需要先在设备上为FEC分配标签 --- 如果该设备是这个FEC的出站LSR时,LDP才会主动为这个FEC分配标签。
例如:R4是4.0网段的出站LSR,则R4会主动为4.0网段分配一个标签。但是R1,R2,R3均不是出站LSR,则都不会主动分配标签。但是构建LSP时也需要有4.0网段的标签。所以,当R4将自己的标签信息传递到R3时,R3收到后,将进行循环检查 --- 查看路由表中是否存在到达4.0网段的路由信息,且路由表中的下一跳是否和通告者相同,如果检查成功,则R3也会为4.0网段分配一个标签。以此类推 --- 这种标签分配方式我们称为有序模式 --- 华为设备默认选择的是有序模式
LDP的标签分配方式:有序方式 --- 华为设备默认选择的是有序方式分配标签独立方式 --- 不需要确认自己是出站LSR,也可以 自主的 给路由表中路由条目分配标签。
2.传递标签
传递标签的前提条件是设备之间必须是LDP对等体关系才行,而对等体关系建立的前提条件是需要先建立LDP会话。
LDP会话存在两种类型 :
本地会话 --- 直连设备之间建立的LDP
远程会话 --- 并不一定是直连设备,可以通过手工指定的方式去创建远程LDP会话。(LDP会话可以实现非直连建邻)
LDP会话在建立本地会话时,不需要指定邻居关系,也可以建立 --- 因为LDP协议会先以组播(224.0.0.2本地链路组播 --- 所有路由器都会监听的本地链路组播地址)的形式发送hello包发现邻居关系。 --- hello包将使用UDP协议封装,源项目端口均为646号端口
本地LDP会话建立的过程:
1.在激活了LDP之后,LSR的端口首先会周期的发送Hello包(默认5s为周期,保活时间默认为3倍周期,15s)来完成对等体的发现工作
hello包在发现邻居的过程中,会携带的一些参数,主要有两个参数,一个是传输地址,一个是LDP ID
传输地址 --- 这个传输地址是后续需要进行TCP会话建立使用的地址。这个传输地址默认使用配置的LSR-ID,所以,我们配置设备LSR-ID时要求必须使用环回接口的IP地址,并且保证该地址可达,因为后面需要使用这个地址建立TCP会话
LDP ID --- 如果主设备激活了LDP协议,则需要具有一个LDP ID --- 由48位二进制构成 --- 32:16 --- 前32位二进制使用的就是LSR-ID。后16位一般写0
2.双方交互完成hello包之后,则获取到对方的传输地址,之后将基于这个传输地址,建立TCP会话。
在建立TCP会话之前,也需要进入检查环节 --- 检查传输地址的可达性
注意:
双方都收到了对方的传输地址,则都将发起TCP会话的建立,这样造成资源浪费,因为一方发起则建立的是一个双向的通道,所以,LDP在发起TCP会话之前,会先比较传输地址,谁的传输地址大,谁就是主动方,则可以主动发起TCP会话请求
3.完成TCP会话之后,将开始建立LDP会话。传输地址大的一方,优先发送初始化的报文,里面将包含需要协商建立LDP会话的参数。对端收到后,如果认可,可以将自己的初始化报文发送,并且同时发送一个Keeplive报文,进行确认
LDP协议也会周期性发送Keeplive来保保活会话 --- 周期时间为15s,失效时间为3倍周期时间,默认45s
标签的传递方式
上下游关系 --- 在标签交换中,我们将以数据流动的方向为准,区分上下游关系,数据发出设备处于上游,而接受设备处于下游。 --- 控制流量流动的方向是和数据层流动方向相反,即从下游传递到上游。---- 上游需要获取下游的标签,而下游不需要获取上游的标签
DU模式(下游自主模式)
DU模式 --- 在分配完成标签之后,设备将主动的传递标签,因为设备本身无法分辨上下游关系,所以这个标签将传递给自己的上游和下游
DoD模式(下游按需模式)
DoD模式 --- 就是下游在给上游传递标签之前,需要先获取上游发送的数据包,之后才可以传递标签信息
标签的保存方式
保守模式 --- 只保留下游传递的标签
自由模式 --- 所有标签均保存
华为默认 --- DU模式与保守模式
数据层面流动过程
在数据传输过程中,入站LSR和出站LSR都将查看两张表(FIB和LFIB),这样将导致传输效率下降
入站LSR的优化 --- 将LFIB表中的出站标签记录在FIB表中
出站LSR的优化 --- PHP --- 次末弹出机制 --- 需要用到一个特殊标签值 -- 3(隐式空标签),当一条条目中的出站标签为3时,则他将把标签弹出 --- 出站LSR在分配标签时,分配3号标签,之后传递给次末跳。之后,数据转发时,标签将在次末跳上弹出,在出站LSR上只需要查看FIB进行路由转发即可
华为设备默认开启PHP机制
LDP的配置
1.先在所有LSR上启动IGP协议,保证路由基础
2.配置MPLS的LSR ID
[r1]mpls lsr-id 1.1.1.1
3.激活MPLS和LDP
全局激活
[r1]mpls
Info: Mpls starting, please wait... OK!
[r1]mpls ldp
接口激活
[r1-GigabitEthernet0/0/0]mpls
[r1-GigabitEthernet0/0/0]mpls ldp
[r1]display mpls ldp peer --- 查看LDP对等体关系
[r1]display mpls ldp session --- 查看LDP会话
[r4]display mpls lsp --- 查看LFIB表
注意:华为设备默认只给32位的主机路由分配标签,因为MPLS 并没有 主要应用在 数据转发 上,如果路由表中 路由条目太多 ,则将导致 生成过多LSP , 造成资源浪费 。
[r4-mpls]lsp-trigger all -- 这个命令可以让设备给出来/32主机路由外的路由分配标签
MPLS解决路由黑洞问题
[r2]route recursive-lookup tunnel --- 在进行路由递归查找的时候,如果有隧道则递归进隧道
[r2]display fib verbose --- 查看FIB表的细节信息