一、LDP ---标签分发协议---主要应用在MPLS的控制层面
MPLS控制层面需要完成的工作主要就是分配标签和传递标签。分配标签的前提是本地路由表中得先存在标签,传递标签的前提也是得先具备路由基础。所以,LDP想要正常工作,则需要IGP作为基础。
1、分配标签
分配标签并不是所有设备都针对自己本地路由表中所有的路由条目分配标签,而是 在判定自己是到达某网段的出站LSR时,才会主动分配标签。
当然,在构成到达目标网段的LSP过程中,所有中间的LSR都需要给对应的FEC分配标签才行。则其他设备只有在收到标签和目标网段的映射关系后,才会被动的分配标签。分配标签之前需要完成检查动作,主要检查目标网段本地路由表是否可达,以及下一跳和通告者是否相同。检查通过则可以分配标签,不通过则不能分配标签。
LDP的标签分配方式:
(1)有序方式 --- 华为设备默认选择的是有序方式分配标签
(2)独立方式 --- 不需要确认自己是出站LSR,也可以主动给路由表中路由条
目分配标签。
2、传递标签
出站LSR分配完标签之后,需要传递给其他的LSR设备,传递的前提条件是彼此之间得先是LDP对等体关系。而LDP对等体关系建立的前提条件是需要先建立LDP会话。
本地LDP会话 --- 直连的两个设备之间建立LDP会话
远程LDP会话 --- 非直连设备之间,可以通过手工指定的方式来创建远程的LDP会话。
LDP协议在建立本地的LDP会话时,不需要手动指定邻居的IP地址,可以自动的发现邻居关系。主要是因为LDP首先会总过组播(224.0.0.2)的形式周期性发送hello包来发现邻居。hello包使用UDP 646端口来完成。
二、本地LDP会话的建立过程:
1、在LSR上激活LDP之后,首先周期性的发送hello包来完成对等体的发现工作。
在HELLO包中需要携带一些参数,其中包含传输地址和LDP ID。
传输地址:这个地址主要是后面建立TCP会话时需要用到的地址,默认情况下,我们将使用该设备的LSR ID来作为这个地址。所以要求,LSR ID必须是可用且可达的IP地址。
LDP ID:所有激活LDP协议的LSR设备都要求必须具有一个LDP ID,这个ID是由48位二进制构成,表达方式位32位:16位,前32位使用是LSR ID,后16位用0来表示。这个和标签空间有管,所有基于设备的标签空间,其值都为0。
hello包的发送周期默认为5s,保活时间为3倍hello时间,即默认15秒。
2、双方在交互完hello包之后,将获取到对方传输地址,则将根据这个传输地址来建立TCP会话。
在建立TCP会话之间,LDP也存在检查动作,需要先确认收到的传输地址,在本地路由表中是否可达,可达则可以正常建立TCP会话。
如果双方都建立TCP会话,则将创建两条双向通道,造成资源浪费。则在收到对端hello包中的传输地址后,将和本地的传输地址进行对比,传输地址大的一方,我们称为主动方,主动方则可以主动建立TCP会话,而被动方则不建立。
3、完成TCP会话建立之后,传递地址大的一方将优先使用初始化报文,里面包含一些协商的参数发给被动方。对方如果确认里面的参数,则将回复keeplive报文进行确认,同时发送自己本地的初始化报文,携带自己的参数。主动方收到后也将对参数进行确认,如果没问题则也将发送keeplive报文。双方都收到keeplive报文,则代表参数协商成功,LDP会话建立成功。
之后,也需要周期性的发送keeplive报文进行保活,发送周期默认为15S,保活时间为3倍的周期发送时间,则默认为45秒。
上下游关系 --- 由数据层流量流动方向来决定,数据发送方为上游,接受方为下游。从控制层的角度来看,则标签传递的方向应该是从下游发送到上游。之后上游设备会去收集下游的标签。
标签传递方式 --- DU模式 --- 下游自主模式 --- 华为设备默认采用这种模式,所有LSR在分配好标签之后,可以主动的将标签传递给其他LSR
--- 如果选择的是下游自主模式,则设备在传递标签时,无法判断上下游关系的,则会将标签发给所有的对等体关系。当设备收到标签之后,则将可以基于路由表判断上下游关系。华为设备,只有上游设备会记录下游设备发送的标签,而上游设备发送的标签将不保存。(还有一种标签的保存模式是上下游标签都保存。)
DOD模式 --- 下游按需模式 --- 只有下游设备在收到上游设备通知之后,才会给上游设备发送标签。
三、数据层面流动过程
在数据层面流量通过的过程当中,入站LSR设备和出战LSR设备都需要查询两张表,一张FIB表,一张LFIB包才能完成转发过程,导致效率降低,需要优化。
优化思路:
入站LSR --- 因为入站的数据包中不包含标签,所以,必须查看FIB表。则可以直接将出站标签添加到FIB表中,这样则将不再需要查看LFPB表。
出站LSR --- PHP --- 次末跳弹出机制 ---- 出站LSR设备在给FEC分配标签时直接分配特殊标签3(隐式空标签),之后,将这个标签传递给自己上游设备,上游将会把这个标签作为出站标签记录在LFIB表中。当有数据来到设备上,匹配LFIB时发现出站标签为3,则他将直接把这个标签弹出。则这样出站LSR设备收到的将是一个不带标签的数据包,则他可以直接查看FIB表来实现转发。
华为设备默认开启次末跳弹出机制。
四、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 ldp
[r1-GigabitEthernet0/0/0]mpls
[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表的细节信息
五、MPLS VPN技术
MPLS VPN是一种由运营商提供的,专门解决虚拟专线安全及带宽问题的综合解决方案。
站点 --- 可以理解为是一个组织机构在不同地理位置设置的不同的IP网络。
PE --- 服务提供商边界设备 --- 需要连接CE(客户网络的边界设备)设备,则需要接受客户私网的路由信息。他还需要将私网的路由信息传递到远端的PE设备上。这部分路由的传输主要使用BGP协议来进行传递。则中间的P设备(服务提供商的设备),只需要完成路由信息的高速转发即可。
VRF --- 虚拟路由转发 --- VPN instance(VPN实例) --- 我们可以将一台真实的物理设备抽象出多台虚拟的设备。每一个虚拟的设备就被称为一个VRF空间,每个VRF空间都拥有独立的路由表,FIB表,动态路由协议,及接口。
RD值 --- 路由区分码 --- 由64位二进制构成的,华为设备最常用的表达方式是AS:NN(前面AS代表所在的AS号,后面NN代表自定义值)
VPNV4路由 --- IPV4路由信息前面添加上RD值之后,从原来的32位变为96位,则将变成VPNV4路由。
MP-BGP --- 可以针对多种地址组的路由信息来进行携带。如果需要传递VPNV4路由,则需要使用MP-BGP来进行传递。
RT --- 路由目标值 --- VPN Target --- 32位二进制构成 --- 由BGP的社团属性来携带
出站RT值 --- Export RT --- PE设备为不同VRF空间配置不同的出站RT,发出由社团属性携带,需要和远端PE设备上的入站RT对应。
入站RT值 --- Import RT --- PE设备为不同VRF空间配置不同的入站RT,根据社团属性中携带的值进行比对,将其放入对应的VRF空间当中。
数据层流量 --- 数据层流量主要是在到达远端PE设备上时无法分辨到底加入到哪个VRF空间中,所以,需要使用双层标签来进行区分。---- 外层标签(靠近二层) --- 公网标签 --- 由LDP协议来分配,其目的是为了保证数据可以正常的通过MPLS域,到达远端PE。
---- 内层标签(靠近三层) --- 私网标签 --- 由MP-BGP协议来分配,目的是在远端PE设备上弹出外层标签后,可以根据内层标签判断到底是到达哪个VRF的数据流量。内层标签需要和VRF空间存在对应关系,这个标签是由MP-BGP分配后,通过社团属性随着路由传递到达对端PE。
配置:
创建VRF空间:
[r2]ip vpn-instance a --- 注意,华为设备大小写敏感
[r2-vpn-instance-a]
[r2-vpn-instance-a]route-distinguisher 100:100 --- 配置RD值
[r2-vpn-instance-a-af-ipv4]
[r2-vpn-instance-a-af-ipv4]vpn-target 100:1 export-extcommunity --- 配置出站RTEVT Assignment result:
Info: VPN-Target assignment is successful.
[r2-vpn-instance-a-af-ipv4]vpn-target 100:2 import-extcommunity --- 配置入站RTIVT Assignment result:
Info: VPN-Target assignment is successful.
[r2-GigabitEthernet0/0/0]ip binding vpn-instance a --- 将接口划入到VRF空间
Info: All IPv4 related configurations on this interface are removed!
Info: All IPv6 related configurations on this interface are removed!
[r2]display ip routing-table vpn-instance a --- 查看VRF空间中的路由表
[r2]ping -vpn-instance a 192.168.2.1 --- 根据VRF空间的路由信息发送数据包
[r2]ip route-static vpn-instance a 192.168.1.0 24 192.168.2.1 --- 往VRF空间中添加静态路由
[r2-bgp]ipv4-family vpnv4 --- 启动MP-BGP
[r2-bgp-af-vpnv4]peer 4.4.4.4 enable
[r2-bgp]ipv4-family vpn-instance a ---- 在VPN空间中导入路由
[r2-bgp-a]import-route static
[r2-bgp-a]import-route direct
[r4]display bgp vpnv4 vpn-instance b routing-table --- 查看VRF空间中的BGP表
[r2]rip 1 vpn-instance a --- 在空间中启动动态路由协议
[r4]ospf 2 vpn-instance b router-id 4.4.4.4