MPLS的静态搭建(LSP)
静态搭建需要在沿途所有的LSR上进行对应的配置,任何环节出错,都可能导致流量转发中断。并且静态LSP无法基于拓扑变化而自动收敛,当拓扑结构发生变化时,需要手工修改。因此,静态LSP仅适用于规模较小,并且拓扑稳定的网络
入站LSR:
①定义设备的LSR-ID
LSR-ID类似于RID,也是由32位二进制构成,按照IP地址的格式进行配置,但是只能手动配置。一般使用设备的环回接口的IP地址作为LSR-ID
[r1]mpls lsr-id 1.1.1.1
②激活MPLS
1,在全局激活MPLS
[r1]mpls
Info: Mpls starting, please wait... OK!
2,在接口激活MPLS --- 所有属于MPLS域中的接口都需要激活
[r1]int g0/0/0
[r1-GigabitEthernet0/0/0]mpls
③手工配置入站LSP
[r1]static-lsp ingress lxb destination 4.4.4.0 24 nexthop 12.0.0.2 out-label 10
0
#nexthop必须要在本地的路由表中可达目标网段的下一跳相同
#out-label:出站标签,数据从R1发出后被压入的标签号
中转LSR:
①定义设备的LSR-ID
[r2]mpls lsr-id 2.2.2.2
②激活MPLS
[r2]mpls
Info: Mpls starting, please wait... OK!
[r2]int g0/0/0
[r2-GigabitEthernet0/0/0]mpls
[r2-GigabitEthernet0/0/0]int g0/0/1
[r2-GigabitEthernet0/0/1]mpls
③设置中转的标签
[r2]static-lsp transit lxb incoming-interface GigabitEthernet 0/0/0 in-label 100
nexthop 23.0.0.2 out-label 101
#in-label:入站标签。数据进入时,识别的标签需要和前面的出站标签一致
R3同理
[r3]mpls lsr-id 3.3.3.3
[r3]mpls
Info: Mpls starting, please wait... OK!
[r3-mpls]q
[r3]int g0/0/0
[r3-GigabitEthernet0/0/0]mpls
[r3-GigabitEthernet0/0/0]int g0/0/1
[r3-GigabitEthernet0/0/1]mpls
[r3-GigabitEthernet0/0/1]q
[r3]static-lsp transit lxb incoming-interface GigabitEthernet 0/0/0 in-label
101 nexthop 34.0.0.2 out-label 102
出站LSR:
①定义设备的LSR-ID
[r4]mpls lsr-id 4.4.4.4
②激活MPLS
[r4]mpls
Info: Mpls starting, please wait... OK!
[r4-mpls]q
[r4]int g0/0/0
[r4-GigabitEthernet0/0/0]mpl
[r4-GigabitEthernet0/0/0]mpls
[r4-GigabitEthernet0/0/0]q
③设置出站LSR信息
[r4]static-lsp egress lxb incoming-interface GigabitEthernet 0/0/0 in-label 10
2
配置一条目标网段的静态路由:
//R1
[r1]ip route-static 4.4.4.0 24 12.0.0.2
//R4
[r1]ip route-static 1.1.1.0 24 34.0.0.1
#配置静态路由的目的,是让本地路由表知道到达目标网段该走哪里
查看静态LSP:
[r4]display mpls static-lsp
TOTAL : 1 STATIC LSP(S)
UP : 1 STATIC LSP(S)
DOWN : 0 STATIC LSP(S)
Name FEC I/O Label I/O If Status
lxb -/- 102/NULL GE0/0/0/- Up
分析MPLS的数据包:
MPLS的动态搭建(LDP):
标签分发协议(LDP):主要服务于MPLS的控制层面。LDP协议是运行在IGP协议上的,所以需要先创造路由环境(IGP是LDP的基础)。
LDP协议主要的功能:分配标签和传递标签
分配标签:
激活LDP后,LDP会在本设备上为FEC分配标签。并不是对所有的FEC都分配标签,只有当自己是某个FEC的出站LSR时,才主动为这个FEC分配标签
分配方式:
①有序方式:只有当自己是某个FEC的出站LSR时才会主动分配标签,其他设备分配标签需要先收到FEC和标签的对应关系,之后会进行检查(检查自己路由表中是否存在到达这个FEC的路由,以及 下一跳和通告者是否相同),检查通过后才去分配标签
华为设备默认采用的是有序分配方式
②独立方式:设备可以自己自主对FEC分配标签而不需要等待其他设备的通告。
传递标签:
出站LSR将标签和FEC的映射关系传递给中转LSR的前提条件是:出站LSR和中转LSR必须是LDP对等体关系,而建立对等体关系的前提是出站LSR和中转LSR之间必须建立LDP会话。
LDP对等体关系分为两种:
①本地LDP会话:直连的两个设备之间建立LDP会话
②远程LDP会话:并不一定是直连设备,可以通过手工指定的方式去远程建立LDP会话。
使用TCP进行非直连建邻,实现远程LDP会话
建立LDP对等体:
LDP在进行本地LDP会话建立时,是不需要手工指定(LPD ID为本地的最大环回地址)。本地LDP会话会周期性的发送组播hello包进行发现邻居。因为Hello包是组播发送,所以传输层只能使用UDP协议进行封装。(使用的是TCP/UDP的646号端口)
①先在LSR上激活LDP协议,LSR的接口将开始周期发送hello包来发现LDP对等体。
Hello包采用UDP的646号端口进行通讯。源/目标端口号都是646。Hello包中将携带自己的LDP ID和传输地址等。
传输地址:默认使用的是配置的LSR-ID。这个传输地址在后续将作为TCP会话建立的通讯地址,所以,在配置LSR-ID时,一定要保证该地址可用,且IGP要保证彼此 地址间可达。
LDP ID:要求所有激活LDP协议的设备都需要具有一个 LDP ID。由48位二进制构成,一般构成方式LSR-ID:X (前32位为LSR ID,后16位位标签空间)
②双方收到彼此发送的Hello包之后,此时获取到对方的传输地址。然后基于对方的传输地址,去建立TCP会话。而为了避免重复建立TCP会话,LDP会选择传输地址大的一方作为主动方,主动发起TCP会话连接请求。LDP在建立TCP会话连接之前,也会像BGP一样,去检查传输地址的可达性,如果可达,则建立连接,如果不可达, 则不建立连接。
此时要注意,主动方的源端口为随机端口,但是目标端口为646!!!
③在完成TCP会话建立之后,传输地址更大的一方将优先发送初始化报文,初始化报文将携带本地的LDP相关的参数,对端收到后,将对这些参数进行检查,如果认可,则将发送自己的初始话报文,并发送一个keeplive报文,代表确认收到的参数。对端收到初始化报文后,如果认可其中的参数,则也将反馈一个keeplive报文作为确认。双方都收到对端的 keeplive报文后,则将代表LDP会话建立完成。
LDP的上游与下游(标签传递方式):
搭建一条指向192.168.4.0/24网段的LDP,则数据层流量将从R1指向R4, 则R1称为R2的上游,R2称为R1的下游。而标签传递是控制层流量,则其传递方向是从下游传递给上游(即R4传给R3)。
标签传递的方式:
①DU模式(下游自主模式):下游设备主动发送标签,华为设备默认使用DU模式
②DoD模式(下游按需模式):下游设备只有在收到上游设备发送的请求报文之后,才会发送标签。 只有上游设备会去收集下游设备的标签。(如图,此时R3作为R2的下游,在收到R2的标签请求后会发送给R2,但是R4作为R3的下游,在R3发送标签信息时,将不会记录该标签)
PHP优化:
从1.1.1.1去往4.4.4.4的标签信息(静态是的取值范围为16-1023),此时R1去往4.4.4.4需要查询本地的FLB(到达路由表)和LFLB(带标签的转发表)表格,而R2与R3则只需要查询本地的LFIB表,而R4也需要查询本地LFIB和FIB表(先通过LFIB表剥离标签,FIB查询到达4.4.4.4网段信息)
而此时为了优化出入站的查表时间,引入PHP优化(次末跳弹出机制),即在入站时,内嵌标签信息,进而不用查询FIB表,并在次末出站的LSR上将标签置位为NULL(相当于在R4时直接查询FIB表)
次末跳弹出机制:需要利用特殊标签号3(隐式空标签)
作用:如果一个LSR看到一个数据的出站标签为3时,则将直接把该标签弹出。华为设备默认开启PHP优化 机制
LDP配置:
[r1]mpls lsr-id 192.168.1.1
#声明LSR-ID
[r1]mpls
Info: Mpls starting, please wait... OK!
[r1-mpls]q
[r1]mpls ldp
[r1-mpls-ldp]q
#开启MPLS和MPLS LDP
[r1]interface g0/0/0
[r1-GigabitEthernet0/0/0]mpls
[r1-GigabitEthernet0/0/0]mpls ldp
#接口上开启MPLS和MPLS LDP
此时去R1上查看LDP信息
[r1]display mpls ldp peer
#查看LDP对等体
[r1]display mpls ldp session
#查看LDP会话建立情况
[r1]display mpls ldp lsp
#查看LDP搭建的LSP信息(LIB)
[r1]display mpls lsp
#查看所有LSP信息(LFIB)
<r1>display mpls ldp peer
LDP Peer Information in Public network
A '*' before a peer means the peer is being deleted.
------------------------------------------------------------------------------
PeerID TransportAddress DiscoverySource
------------------------------------------------------------------------------
192.168.2.1:0 192.168.2.1 GigabitEthernet0/0/0
------------------------------------------------------------------------------
TOTAL: 1 Peer(s) Found.
<r1>display mpls ldp session
LDP Session(s) in Public Network
Codes: LAM(Label Advertisement Mode), SsnAge Unit(DDDD:HH:MM)
A '*' before a session means the session is being deleted.
------------------------------------------------------------------------------
PeerID Status LAM SsnRole SsnAge KASent/Rcv
------------------------------------------------------------------------------
192.168.2.1:0 Operational DU Passive 0000:00:40 162/162
------------------------------------------------------------------------------
TOTAL: 1 session(s) Found.
查看LDP的LSP信息
查看所有LSP信息
因为华为设备的LDP默认只给32位主机路由分配标签,主要是为了防止路由条目过多时导致LSP数量太大,造成设备负担。
[r4-mpls]lsp-trigger all
#执行该命令后,会给路由表中所有的路由条目分配标签
MPLS解决路由黑洞问题:
此时打开R1的FIB表,发现在数据转发时,没有标签的数据会去根据IP报文匹配FIB表,如果FIB表中的tunnelID为非0值,则代表需要走标签交换,而如果为0,则需要走包交换
而在我们之前在BGP中讲到的,防BGP的路由黑洞主要使用的是MPLS技术。
此时如图,R2-R3-R4之间运行的是IGP协议,而我们之前为了解决路由黑洞则是使用IBGP之间互相建邻的方式,而通过MPLR技术,我们可以使用标签交换技术,使得R2和R4在IBGP对等体进行标签交换。AS1的路由信息通过EBGP对等体发送到R2,然后再通过标签交换技术发送给R4(AS3的信息同理)。
但是这中间存在一个问题,就是AS1的路由信息通过R2发送给R5,但是R2上没有到达R5的标签,所以需要通过R2与R4的标签交换管道,由R2标签转发给R5。
此时在R2的FIB表上查看,有到达R5的路由信息,但是到达R5的tunnelID为0,需要进行将R2-R5递归到R2-R4上
[r2]route recursive-lookup tunnel
#在递归查找时,如果有隧道则递归到隧道中
此时就可以做到R2与R4路由黑洞的解决
MPLS VPN:
MPLS VPN不只是单一VPN技术,是一种由多种技术结合的综合解决方案
存在两个公司A和B,而A和B分别有自己的分站点1和2,而客户A和B的分站点的私网网段都为192.168.1.0/24,发往各自的分站2的192.168.2.0/24。
其中PE为服务提供商边界设备 ,CE为客户边界设备
此时存在的问题:①PE无法去区分VPN发送方来自哪个客户,②在PE发送给分站点后无法正确的发送到对应的分站点,③无法建立客户各个站点间的信息稳定安全传输
VRF技术:
为了保证不同客户的CE设备传递的路由信息可以隔离开,需要使用VRF技术(虚拟路由转发,VPN instance )创建多个VRF相当于创建多个虚拟设备,每台设备拥有独立的路由表,FIB表,动态路由协议及接口等
RD与RT:
RD(路由区分码,64位二进制构成的数值)
RD构成AS:NN(AS号:自定义数值)将64位的RD值放在32位的IP路由前缀前面,形成96位的路由前缀,形成VPNV4路由条目。
此时需要运行的BGP协议为MP-BGP(BGP V4的拓展版,支持多种地址族,包括IPV4,VPNV4, IPV6…. )
RT (路由目标值,也称为VPN Target ,32位二进制构成)
一个VPN V4路由中可以携带一个或多个RT值。通过BGP的社团属性来携带。
RT分为两种:出站RT和入站RT
出站RT:PE1为不同的VRF空间定义的发出路由时社团属性中携带RT值
入站RT:PE2为不同VRF空间定义的比对值
只有当PE1的出站RT和PE2的入站RT相同时,才会建立和发送数据
两层标签:
在控制层面可达后,为保证数据层面的正常传递,我们在通过MPLS域时需要打双层标签。外层标签被称为公网标签,内层标签被称为私网标签。
公网标签:由LDP协议分配,目的是为了让数据可以通过MPLS域
私网标签:由MP-BGP协议分配,目的是为了区分不同的VRF空间,通过BGP的社团属性携带
ML-VPN的运行过程:
①由于存在私网地址相同的问题,我们先使用VRF技术,将不同客户传递的信息区分开来
②在信息通过VRF处理后压入PE设备后,需要使用RD来区分这个信息的来源(源地址信息,96位二进制,AS:XX:IP地址),RD值在到达对端的PE站点后会被剥离
③而由于RD值在到达对端PE后会被剥离,所以需要使用PE来确认是否为同一个客户的不同站点信息传输,需要使用RT标签PE1入站点和PE2出站点进行数值比对(RD和RT标签是控制层面上的,协议上可达,但不一定数据可达)
④此时在控制层面上已经做到数据可达,但是在数据层面上无法做到数据可达,此时需要在数据上加入双层标签(一层用来通过公网的MPLS,一层用来区分不同的VRF空间)