作用
早期网络设备性能有限,用标签来代替数量庞大的路由,随着网络设备性能提高,MPLS高速转发就不再有优势了。
MPLS支持多层标签和转发平面面向连接的特性,使其在VPN(Virtual Private Network)、QoS(Quality of Service)等方面得到广泛应用。
结构
MPLS由控制平面(control plane)和转发平面(forwarding plane)组成
控制平面:负责产生和维护路由信息以及标签信息。
- 路由信息表RIB(Routing Information Base):由IP路由协议(IP Routing Protocol)生成,用于选择路由。
- 标签分发协议LDP(Label Distribution Protocol):负责标签的分配、标签转发信息表的建立、标签交换路径的建立、拆除等工作。
- 标签信息表LIB(Label Information Base):由标签分发协议生成,用于管理标签信息。
转发平面:即数据平面(Data Plane),负责普通IP报文的转发以及带MPLS标签报文的转发。
- 转发信息表FIB(Forwarding Information Base):从RIB提取必要的路由信息生成,负责普通IP报文的转发。
- 标签转发信息表LFIB(Label Forwarding Information Base):简称标签转发表,由标签分发协议在LSR上建立LFIB,负责带MPLS标签报文的转发。
转发等价类
MPLS将具有相同特征的报文归为一类,称为转发等价类FEC(Forwarding Equivalence Class)。属于相同FEC的报文在转发过程中被LSR以相同方式处理。
FEC可以根据源地址、目的地址、源端口、目的端口、VPN等要素进行划分。例如,在传统的采用最长匹配算法的IP转发中,到同一条路由的所有报文就是一个转发等价类。
标签
标签(Label)是一个短而定长的、只具有本地意义的标识符,用于唯一标识一个分组所属的FEC。在某些情况下,例如要进行负载分担,对应一个FEC可能会有多个入标签,但是一台设备上,一个标签只能代表一个FEC。
MPLS报文与普通的IP报文相比增加了MPLS标签信息,MPLS标签的长度为4个字节。MPLS标签封装在链路层和网络层之间,可以支持任意的链路层协议
- Label:20bit,标签值域。
- Exp:3bit,用于扩展。现在通常用做CoS(Class of Service),当设备阻塞时,优先发送优先级高的报文。
- S:1bit,栈底标识。MPLS支持多层标签,即标签嵌套。S值为1时表明为最底层标签。
- TTL:8bit,和IP报文中的TTL(Time To Live)意义相同。
标签栈(Label Stack)是指标签的排序集合。如图所示,靠近二层首部的标签称为栈顶MPLS标签或外层MPLS标签(Outer MPLS label);靠近IP首部的标签称为栈底MPLS标签或内层MPLS标签(Inner MPLS label)。理论上,MPLS标签可以无限嵌套。目前MPLS标签嵌套主要应用在MPLS VPN中。
标签的取值范围
0~15:特殊标签。
16及以上:LDP、MP-BGP(MultiProtocol Border Gateway Protocol)等动态信令协议的标签空间。
0 | IPv4 Explicit NULL Label | 表示该标签必须被弹出(即标签被剥掉),且报文的转发必须基于IPv4。如果出节点分配给倒数第二跳节点的标签值为0,则倒数第二跳LSR需要将值为0的标签正常压入报文标签值顶部,转发给最后一跳。最后一跳发现报文携带的标签值为0,则将标签弹出。 |
1 | Router Alert Label | 只有出现在非栈底时才有效。类似于IP报文的“Router Alert Option”字段,节点收到Router Alert Label时,需要将其送往本地软件模块进一步处理。实际报文转发由下一层标签决定。如果报文需要继续转发,则节点需要将Router Alert Label压回标签栈顶。 |
2 | IPv6 Explicit NULL Label | 表示该标签必须被弹出,且报文的转发必须基于IPv6。如果出节点分配给倒数第二跳节点的标签值为2,则倒数第二跳节点需要将值为2的标签正常压入报文标签值顶部,转发给最后一跳。最后一跳发现报文携带的标签值为2,则直接将标签弹出。 |
3 | Implicit NULL Label | 倒数第二跳LSR进行标签交换时,如果发现交换后的标签值为3,则将标签弹出,并将报文发给最后一跳。最后一跳收到该报文直接进行IP转发或下一层标签转发。 |
4~13 | 保留 | - |
14 | OAM Router Alert Label | MPLS OAM(Operation Administration & Maintenance)通过发送OAM报文检测和通告LSP故障。OAM报文使用MPLS承载。OAM报文对于Transit LSR和倒数第二跳LSR(penultimate LSR)是透明的。 |
15 | 保留 | - |
LSP的建立
动态LSP的标签发布协议
动态LSP通过标签发布协议动态建立。标签发布协议是MPLS的控制协议(也可称为信令协议),负责FEC的分类、标签的分发以及LSP的建立和维护等一系列操作。
MPLS可以使用多种标签发布协议:
- LDP(Label Distribution Protocol)是专为标签发布而制定的协议。LDP根据IGP、BGP路由信息通过逐跳方式建立LSP。
- RSVP-TE(Resource Reservation Protocol Traffic Engineering)是对RSVP的扩展,用于建立基于约束的LSP。它拥有普通LDP LSP没有的功能,如发布带宽预留请求、带宽约束、链路颜色和显式路径等。
- MP-BGP(Multiprotocol Border Gateway Protocol)是在BGP协议基础上扩展的协议。MP-BGP支持为MPLS VPN业务中私网路由和跨域VPN的标签路由分配标签。
动态LSP的基本建立过程
签由下游LSR分配,按从下游到上游的方向分发。如图,由下游LSR在IP路由表的基础上进行FEC的划分,并根据FEC分配标签,通告给上游的LSR,以便建立标签转发表和LSP。
MPLS转发
基本概念
标签操作类型包括标签压入(Push)、标签交换(Swap)和标签弹出(Pop),它们是标签转发的基本动作。
- Push:当IP报文进入MPLS域时,MPLS边界设备在报文二层首部和IP首部之间插入一个新标签;或者MPLS中间设备根据需要,在标签栈顶增加一个新的标签(即标签嵌套封装)。
- Swap:当报文在MPLS域内转发时,根据标签转发表,用下一跳分配的标签,替换MPLS报文的栈顶标签。
- Pop:当报文离开MPLS域时,将MPLS报文的标签剥掉。在最后一跳节点,标签已经没有使用价值。这种情况下,可以利用倒数第二跳弹出特性PHP(Penultimate Hop Popping),在倒数第二跳节点处将标签弹出,减少最后一跳的负担。最后一跳节点直接进行IP转发或者下一层标签转发。默认情况下,设备支持PHP特性,支持PHP的Egress节点分配给倒数第二跳节点的标签值为3。
基本转发过程
以支持PHP的LSP为例
- Ingress节点收到目的地址为4.4.4.2的IP报文,压入标签Z并转发。
- Transit节点收到该标签报文,进行标签交换,将标签Z换成标签Y。
- 倒数第二跳Transit节点收到带标签Y的报文。因为Egress分给它的标签值为3,所以进行PHP操作,弹出标签Y并转发报文。从倒数第二跳转发给Egress的报文以IP报文形式传输。
- Egress节点收到该IP报文,将其转发给目的地4.4.4.2/32。
LSP连通性
在MPLS网络中,如果通过LSP转发数据失败,负责建立LSP的MPLS控制平面将无法检测到这种错误,加大了网络维护的难度。MPLS Ping/MPLS Tracert为用户提供了发现LSP错误、并及时定位失效节点的机制。
MPLS Ping
LSR_1上建立了一条目的地为LSR_4的LSP。从LSR_1对该LSP进行MPLS Ping时的处理如下:
- LSR_1查找该LSP是否存在。如果不存在,返回错误信息,停止Ping。如果存在,则继续进行以下操作。
- LSR_1构造MPLS Echo Request报文,IP头中的目的地址为127.0.0.1/8,IP头中的TTL值为1,同时将4.4.4.4填入Echo Request报文中的目的FEC中。然后查找相应的LSP,压入LSP的标签,将报文发送给LSR_2。
- 中间节点LSR_2和LSR_3对MPLS Echo Request报文进行普通MPLS转发。如果中间节点MPLS转发失败,则中间节点返回带有错误码的MPLS Echo Reply报文。
- 当MPLS转发路径无故障,则MPLS Echo Request报文到达LSP的出节点LSR_4。然后检查目的FEC中包含的目的地址4.4.4.4是否为自己的Loopback接口地址,以此来确认LSR_4是该FEC的真正出口后,返回正确的MPLS Echo Reply报文。至此整个MPLS Ping过程结束。
MPLS Tracert
从LSR_1对4.4.4.4/32进行MPLS Tracert时的处理如下:
- LSR_1检查LSP是否存在。如果不存在,返回错误信息,停止Tracert,否则继续进行如下处理。
- LSR_1构造MPLS Echo Request报文,IP头中的目的地址为127.0.0.1/8,同时将4.4.4.4填入MPLS Echo Request报文中的目的FEC中,然后查找相应的LSP,压入LSP的标签并且将MPLS TTL设置为1,将报文发送给LSR_2。此MPLS Echo Request报文中包含Downstream Mapping TLV(用来携带LSP在当前节点的下游信息,主要包括下一跳地址、出标签等)。
- LSR_2收到LSR_1发送来的报文后,将MPLS Echo Request中MPLS TTL减1为0后发现TTL超时,然后LSR_2需要检查是否存在该LSP,同时检查报文中Downstream Mapping TLV的下一跳地址、出标签是否正确,如果两项检查都正确,返回正确的MPLS Echo Reply报文,并且报文中必须携带LSR_2本身的包含下一跳和出标签的Downstream Mapping TLV给LSR_1。如果检查有不正确,则返回错误的MPLS Echo Reply报文。
- LSR_1收到正确的MPLS Echo Reply报文后再次发送MPLS Echo Request报文,报文的封装方式跟步骤2类似,只是将LSP标签的MPLS TTL设置为2,此时的MPLS Echo Request报文中的Downstream Mapping TLV是从MPLS Echo Reply报文中复制过来的。然后LSR_2收到该报文后进行普通MPLS转发。LSR_3收到此报文,标签的TTL超时,跟步骤3同样的处理方式后返回MPLS Echo Reply报文。
- LSR_1收到正确的MPLS Echo Reply报文后重复步骤4把LSP标签的MPLS TTL设置为3,复制Downstream Mapping TLV后发送MPLS Echo Request报文。LSR_2和LSR_3对该报文进行普通MPLS转发。LSR_4收到此报文,重复步骤3处理方式对报文进行处理,同时检查目的FEC中包含的目的IP 4.4.4.4为自己的Loopback接口地址,以此来发现已经是该LSP的出节点,因此返回不带下游信息的MPLS Echo Reply报文,至此整个MPLS Tracert过程结束。
基于MPLS的VPN
私有网络间数据在公网上的传送
- CE(Customer Edge)是用户边缘设备,可以是路由器,也可以是交换机或主机。
- PE(Provider Edge)是IP/MPLS骨干网的边缘设备。
- P(Provider)是IP/MPLS骨干网的骨干设备,不与CE直接相连。P设备只需要具备基本MPLS转发能力,不维护VPN信息。
- PE负责对VPN用户进行管理、建立各PE间LSP连接、同一VPN用户各分支间路由信息发布。
- PE之间发布VPN用户路由信息通常是用MP-BGP协议实现。
- 支持不同分支间IP地址复用和不同VPN间互通。
LDP简介
LDP协议规定了标签分发过程中的各种消息以及相关的处理过程。通过LDP,LSR可以把网络层的路由信息映射到数据链路层的交换路径上,进而建立起LSP。
LDP消息类型
- 发现(Discovery)消息:用于通告和维护网络中LSR的存在,如Hello消息。
- 会话(Session)消息:用于建立、维护和终止LDP对等体之间的会话,如Initialization消息、Keepalive消息。
- 通告(Advertisement)消息:用于创建、改变和删除FEC的标签映射。
- 通知(Notification)消息:用于提供建议性的消息和差错通知。
为保证LDP消息的可靠发送,除了Discovery消息使用UDP(User Datagram Protocol)传输外,LDP的Session消息、Advertisement消息和Notification消息都使用TCP(Transmission Control Protocol)传输
LDP建立过程
1.LDP会话的建立
通过Hello消息发现邻居后,LSR之间开始建立LDP会话。会话建立后,LDP对等体之间通过不断地发送Hello消息和Keepalive消息来维护这个会话。
- LDP对等体之间,通过周期性发送Hello消息表明自己希望继续维持这种邻接关系。如果Hello保持定时器超时仍没有收到新的Hello消息,则删除Hello邻接关系。邻接关系被删除后,本端LSR将发送Notification消息,结束该LDP会话。
- LDP对等体之间通过LDP会话连接上传送的Keepalive消息来维持LDP会话。如果会话保持定时器(Keepalive保持定时器)超时仍没有收到任何Keepalive消息,则关闭TCP连接,本端LSR将发送Notification消息,结束LDP会话。
2.LDP LSP的建立
会话建立后,LDP通过发送标签请求和标签映射消息,在LDP对等体之间通告FEC和标签的绑定关系,从而建立LSP。
实验MP-BGP
1.P、PE之间配置OSPF,实现IGP互通。
2.PE、P上配置MPLS、MPLS LDP,建立MPLS LSP公网隧道,传输VPN数据。
mpls lsr-id x.x.x.x
mpls
mpls ldp
注意:接口使能MPLS MPLS LDP
3.PE1和PE2之间配置MP-IBGP,交换VPN路由信息。
\\以R5为例
R5-bgp]dis this
#
bgp 567
peer 7.7.7.7 as-number 567
peer 7.7.7.7 connect-interface LoopBack0
#
ipv4-family unicast
undo synchronization
undo peer 7.7.7.7 enable
#
ipv4-family vpnv4
policy vpn-target
peer 7.7.7.7 enable
#
4.PE1和PE2上配置VPN实例,分公司只与总公司通信,分公司之间不可以通信
vpn-target设计
vpn实例CE1
1:234 输出
2:234 3:234 4:234 输入
vpn实例CE2
2:234 输出
1:234 输入
vpn实例CE3
3:234 输出
1:234 输入
vpn实例CE4
4:234 输出
1:234 输入
R5:
ip vpn-instance CE1
ipv4-family
route-distinguisher 1:567 //唯一标识(跟OSPF RID作用一样)
vpn-target 1:234 export-extcommunity
vpn-target 2:234 3:234 4:234 import-extcommunity
ip vpn-instance CE2
ipv4-family
route-distinguisher 2:567
vpn-target 2:234 export-extcommunity
vpn-target 1:234 import-extcommunity
#
interface GigabitEthernet0/0/0
ip binding vpn-instance CE1
ip address 15.0.0.5 255.255.255.0
#
interface GigabitEthernet0/0/1
ip binding vpn-instance CE2
ip address 25.0.0.5 255.255.255.0
ip route-static vpn-instance CE1 10.1.1.0 24 15.0.0.1
ip route-static vpn-instance CE2 10.2.2.0 24 25.0.0.2
\\在BGP中引入静态路由
BGP
ipv4-family vpn-instance CE1
import-route static
#
ipv4-family vpn-instance CE2
import-route static
R7
ip vpn-instance CE3
ipv4-family
route-distinguisher 3:567
vpn-target 3:234 export-extcommunity
vpn-target 1:234 import-extcommunity
ip vpn-instance CE4
ipv4-family
route-distinguisher 4:567
vpn-target 4:234 export-extcommunity
vpn-target 1:234 import-extcommunity
interface GigabitEthernet0/0/1
ip binding vpn-instance CE3
ip address 37.0.0.7 255.255.255.0
#
interface GigabitEthernet0/0/2
ip binding vpn-instance CE4
ip address 47.0.0.7 255.255.255.0
ip route-static vpn-instance CE3 10.3.3.0 24 37.0.0.3
ip route-static vpn-instance CE4 10.1.1.0 24 47.0.0.4
BGP
ipv4-family vpn-instance CE3
import-route static
#
ipv4-family vpn-instance CE4
import-route static
#
<R5>dis ip routing-table vpn-instance CE1 P bgp
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
CE1 routing table : BGP
Destinations : 3 Routes : 3
BGP routing table status : <Active>
Destinations : 3 Routes : 3
Destination/Mask Proto Pre Cost Flags NextHop Interface
10.2.2.0/24 BGP 255 0 RD 25.0.0.2 GigabitEthernet
0/0/1
10.3.3.0/24 IBGP 255 0 RD 7.7.7.7 GigabitEthernet
0/0/2
10.4.4.0/24 IBGP 255 0 RD 7.7.7.7 GigabitEthernet
0/0/2
5.分公司B、C需要互相通信,请自行实验
vpn实例CE2
2:234 输出
3:234 1:234 输入
vpn实例CE3
3:234 输出
2:234 1:234 输入
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)