mpls实验

概念

MPLS(Multiprotocol Label Switching)多协议标签转发复习总结
首先我们要先知道MPLS是为何出现的?
MPLS是基于传统IP网络(RIP,OSPF等)的缺陷由IETF确定的

顺便先复习一下路由器查路由表 转发的过程:

传统的IP转发中,物理层从交换机的一个端口收到一个报文,上送到数据链路层。数据链路层去掉链路层封装,根据报文的协议域上送给相应的网络层。网络层首先看报文是否是送给本机的,若是,去掉网络层封装,上送给它的上层协议。若不是,则根据报文的目的地址查找路由表,若找到路由,将报文送给相应端口的数据链路层,数据链路层封装后,发送报文。若找不到路由,将报文丢弃。传统的IP转发采用的是逐跳转发,数据报文经过每一台交换机,都要执行上述过程(如图中SWA收到目的地址为10.2.0.1的数据包,SWA会依次查找路由表,根据匹配的路由表项的进行转发,SWB、SWC、SWD都会进行类似的处理),所以速度缓慢。并且所有的交换机需要知道全网的路由或者默认路由。另外,由于传统IP转发是面向无连接的,所以无法提供好的Qos保证。

传统IP网络基于IGP Metric计算最优路径,这是远远不够的,往往在现实网络中还需考虑带宽、链路属性等其他因素;基于IP的流量工程是基于IGP面向目的地址的转发,是hop-by-hop(逐跳)的转发,无法实现根据来源来控制流量转发;另外基于IP的流量工程是面向无连接的,不能实现显式路径(Explicit Routing)。
上图中,SWB和SWD之间存在两条路径。传统的IP转发中IGP根据Metric选择最优的路由SWB-SWC-SWD转发所有从Network A和Network B到Network C的IP报文,而SWB-SWG-SWH-SWD链路则闲置,当网络中流量过大,有可能导致最优路径拥塞,但次优路径却空载没有被充分利用。

MPLS的出现
从A到走到B有三种方法:
1.广播(如以太网):直接把数据发给每一个地方
2.逐跳寻径:走到一个地方,问一下路接下来该怎么走(也就是上面说的根据路由协议,查路由表)
3.源路由:提前规划好路线,到哪里怎么走,不常用。

MPLS是第四种走法:
跟在“向导”后面走,向导在走过的路上做好标记,你只要沿着标记的指示走就可以了。这也就是“标签交换”

MPLS结合了三层路由技术与二层交换技术,所以可以把它看成“2.5层”的
其中的MP多协议指的是支持多种网络协议,如ipv4,ipv6,CLNP,IPX等

MPLS是一种标签转发技术,它采用无连接的控制平面和面向连接的数据平面(具体的MPLS架构下面还有介绍),无连接的控制平面实现路由信息的传递和标签的分发,面向连接的数据平面实现报文在建立的标签转发路径上传送。MPLS域内,交换机不需要查看每个报文的目的IP地址,只需要根据封装在IP头外面的标签进行转发即可,这样可以大大提高效率

MPLS转发与IP逐跳转发的关系
MPLS是IP的承载层:MPLS转发与IP转发不冲突,它们的关系是如果能够使用MPLS转发,那么IP包会先封装成MPLS数据帧来转发。如果不能MPLS转发,就还是原来的ip逐跳转发。
(也就是尽量优先MPLS,因为它会更快)

mnvc7761

看上面的图,我们需要理解:整个MPLS域(可以进行MPLS转发的区域)是嵌在IP域上的,也就是MPLS域外部是IP域,它本身也运行IP域。

MPLS中一些基本概念,名词
标签(Label):是一个定长的,比较短的,只具有本地意义的标识。
FEC(转发等价类):一组或一类数据,这组数据分配的标签相同
LSP(标签交换通道):一个FEC的数据流,在不同的节点被赋予确定的标签,数据转发按照
这些标签进行。数据流所走的路径就是LSP。
LSR(Label Switching Router): LSR是MPLS的网络的核心交换机,它提供标签交
换和标签分发功能。
LER(Label Switching Edge Router):在MPLS的网络边缘,进入到MPLS网络的流量由LER分为不同的FEC,并为这些FEC请求相应的标签。它提供流量分类和标签的映射、标签的移除功能。

从IP域进入MPLS域的时候,LER(标记边缘路由器)要做一个压入(push),出MPLS域的时候做一个弹出(pop),而LSR(标记交换路由器)负责转发。所以LER实际工作量比LSR大很多。LSP(标记交换路径)就是从进入到离开 走的路径。这条路径是在转发报文之前就已经通过各种协议确定并建立的,报文会在特定的LSP上传递。(也可以把LSP看成一个隧道)

标签报文格式:

MPLS Header长度为32bits,包括长度为20bits的标签(Label),该标签用于报文转发;长度为3bits的EXP通常用来承载IP报文中的优先级;长度为1bit的栈底标志S用来表明是否是最后一个标签(MPLS标签可以多层嵌套);长度为8bits的TTL,作用类似IP头部的TTL,用来防止报文环路等。

事实上MPLS封装有两种方式,上面说的是帧模式,Ethernet和PPP都是帧模式封装;还有一个信元封装模式(ATM采用)。
MPLS的 LSP 与标签转发表

MPLS转发过程

mplszfgc813341

1.Push:首先从IP数据包从ip域进入MPLS域,入口LER做 push 操作,分析转发等价类,为数据包“打上标签”,绑定LSP通道;图中A的标签转发表内容大概如下:

a008298

2.Swap:B,C两个LSR根据标签转发表,用下一跳分配的标签,替换MPLS报文的标签并转发

bc66327448

3.Pop:转发到出口LER D时,进行pop弹出操作,去掉标签

MPLS转发的过程到这里结束。

d4kg2110

PHP(倒数第二跳弹出。Penultimate Hop Popping ,和web开发的php可没关系):上面的过程我们可以发现,C在发给D时,其实带标签的数据已经没有意义,因为下一跳就要弹出标签了,所以完全可以在C就把标签弹出,然后以ip报文形式转发给D。
这样可以大大降低最后的出口LER的工作量,是现在MPLS普遍采用的方法。
默认情况下,设备支持PHP特性,支持PHP的Egress节点即出口LER 分配给倒数第二跳节点的标签值为3。

MPLS标签转发表与LDP

我们知道,
交换机中的MAC地址表是通过逆向学习法产生的;
路由器中的路由表是通过路由协议学习或自己配置静态路由产生的。
那么MPLS中标签转发表是怎么产生的呢?

答案是也会有一个类似的路由器学习的协议,这个协议叫做LDP(Label Distribution Protocol 标签分发协议),这个也是MPLS技术的核心协议之一。LDP来完成标签的分配控制和保持

从整个MPLS架构看这个协议的位置:

jiegoutu666299

以上是MPLS架构图
MPLS包括两个平面:控制平面和数据平面。
控制平面负责产生和维护路由信息以及标签信息。数据平面负责普通IP报文的转发以及带MPLS标签报文的转发。
控制平面中路由协议模块(Routing Protocol)用来传递路由信息,生成路由信息表;标签分发协议模块(Label Distribution Protocol)用来完成标签信息的交换,建立标签转发路径。
数据平面包括IP转发表和标签转发表,当收到普通IP报文时(Incoming IP Packets),如果是普通IP转发,则查找IP路由表转发,如果需要标签转发,则按照标签转发表转发;当收到带有标签的报文时(Incoming Labeled Packets)时,如果需要按照标签转发,根据标签转发表转发,如果需要转发到IP网络,则去掉标签后根据IP转发表转发。

LDP的标签管理与保留方式主要内容有下面三部分

  1. 标签分配模式

DoD:下游按需标记分发
DU:下游自主标记分发
2. 标签控制模式

有序方式
独立方式

  1. 标签保持模式

保守模式
自由模式
最常用的组合是 下游自主(DU) + 有序 + 自由

下面来具体介绍什么意思

shangxiayou6291

这里先要理解上游,下游的概念,MPLS入口出为最上游;出口处为最下游。标签的产生可以理解为是下游为上游产生的,下游产生的IN标签作为上游的OUT标签(比如图中R3左边要接收的IN标签为100,那么R2向右的OUT标签就要是100,因为R3只要为100的标签)

然后具体介绍上面的三个部分:
Ⅰ.标签的控制模式(即标签是怎么产生的):
有序(常用):只有最下游路由器才能产生标签,最下游的上游收到最下游的标签映射消息后,然后才能再往自己的上游发送标签映射关系。
独立:中间的路由器也可以直接产生标签

Ⅱ.标签的分发模式:
下游按需 :需要的时候上游再向下游询问标签信息;
下游自主:不管有没有问,下游路由器都自主的向上游发送标签映射信息(主动向上汇报)
Ⅲ.标签的保留模式:如果有两条路径,也就会有两个标签,那么路由器保留哪个。
保守:只保留路由表中的”最佳路径“,跳数比较少的;
自由:保留所有的标签,虽然占用了更多的标签空间,但是收敛会快

基础实验

tuoputump181224

配置步骤:

完成ip和ospf配置:

R1的配置如下:

[R1] interface GigabitEthernet0/0/0

[R1-GigabitEthernet0/0/0] ip address 12.1.1.1 24

[R1] interface loopback0

[R1-Loopback0] ip address 1.1.1.1 32

[R1] ospf 1 router-id 1.1.1.1

[R1-ospf-1] area 0

[R1-ospf-1-0.0.0.0] network 12.1.1.0 0.0.0.255

[R1-ospf-1-0.0.0.0] network 1.1.1.1 0.0.0.0

R2的配置如下:

[R2] interface GigabitEthernet0/0/0

[R2-GigabitEthernet0/0/0] ip address 12.1.1.2 24

[R2] interface GigabitEthernet0/0/1

[R2-GigabitEthernet0/0/1] ip address 23.1.1.2 24

[R2] interface loopback0

[R2-Loopback0] ip address 2.2.2.2 32

[R2] ospf 1 router-id 2.2.2.2

[R2-ospf-1] area 0

[R2-ospf-1-0.0.0.0] network 12.1.1.0 0.0.0.255

[R2-ospf-1-0.0.0.0] network 23.1.1.0 0.0.0.255

[R2-ospf-1-0.0.0.0] network 2.2.2.2 0.0.0.0

R3的配置如下:

[R3] interface GigabitEthernet0/0/0

[R3-GigabitEthernet0/0/0] ip address 23.1.1.3 24

[R3] interface GigabitEthernet0/0/1

[R3-GigabitEthernet0/0/1] ip address 34.1.1.3 24

[R3] interface loopback0

[R3-Loopback0] ip address 3.3.3.3 32

[R3] ospf 1 router-id 3.3.3.3

[R3-ospf-1] area 0

[R3-ospf-1-0.0.0.0] network 23.1.1.0 0.0.0.255

[R3-ospf-1-0.0.0.0] network 34.1.1.0 0.0.0.255

[R3-ospf-1-0.0.0.0] network 1.1.1.1 0.0.0.0

R4的配置如下:

[R4] interface GigabitEthernet0/0/0

[R4-GigabitEthernet0/0/0] ip address 34.1.1.4 24

[R4] interface loopback0

[R4-Loopback0] ip address 4.4.4.4 32

[R4] ospf 1 router-id 4.4.4.4

[R4-ospf-1] area 0

[R4-ospf-1-0.0.0.0] network 34.1.1.0 0.0.0.255

[R4-ospf-1-0.0.0.0] network 4.4.4.4 0.0.0.0

激活mpls并激活ldp

(全局和接口下都需要激活)

R1的配置如下:

[R1] mpls lsr-id 1.1.1.1

#配置MPLS LSR ID

[R1] mpls

#全局激活MPLS

[R1-mpls] quit

[R1] mpls ldp

#全局激活LDP

[R1-mpls-ldp] quit

[R1] Interface GigabitEthernet 0/0/0

[R1-GigabitEthernet0/0/0] mpls

#在接口上激活MPLS

[R1-GigabitEthernet0/0/0] mpls ldp

#在接口上激活LDP

R2的配置如下:

[R2] mpls lsr-id 2.2.2.2

[R2] mpls

[R2-mpls] quit

[R2] mpls ldp

[R2-mpls-ldp] quit

[R2] Interface GigabitEthernet 0/0/0

[R2-GigabitEthernet0/0/0] mpls

[R2-GigabitEthernet0/0/0] mpls ldp

[R2] Interface GigabitEthernet 0/0/1

[R2-GigabitEthernet0/0/1] mpls

[R2-GigabitEthernet0/0/1] mpls ldp

R3的配置如下:

[R3] mpls lsr-id 3.3.3.3

[R3] mpls

[R3-mpls] quit

[R3] mpls ldp

[R3-mpls-ldp] quit

[R3] Interface GigabitEthernet 0/0/0

[R3-GigabitEthernet0/0/0] mpls

[R3-GigabitEthernet0/0/0] mpls ldp

[R3] Interface GigabitEthernet 0/0/1

[R3-GigabitEthernet0/0/1] mpls

[R3-GigabitEthernet0/0/1] mpls ldp

R4的配置如下:

[R4] mpls lsr-id 4.4.4.4

[R4] mpls

[R4-mpls] quit

[R4] mpls ldp

[R4-mpls-ldp] quit

[R4] Interface GigabitEthernet 0/0/0

[R4-GigabitEthernet0/0/0] mpls

[R4-GigabitEthernet0/0/0] mpls ldp

验证

display mpls ldp peer

LDP Peer Information in Public network

A ‘*’ before a peer means the peer is being deleted.

-—————————————————————————–

PeerID TransportAddress DiscoverySource

-—————————————————————————–

2.2.2.2:0 2.2.2.2 GigabitEthernet0/0/0

-—————————————————————————–

TOTAL: 1 Peer(s) Found.

以上输出的是R1的LDP邻居表,从表中可以看出R1已经发现了一个LDP邻居,那就是R2。

disp mpls ldp session verbose

LDP Session(s) in Public Network

-—————————————————————————–

Peer LDP ID : 2.2.2.2:0 Local LDP ID : 1.1.1.1:0

TCP Connection : 1.1.1.1 <- 2.2.2.2

Session State : Operational Session Role : Passive

Session FT Flag : Off MD5 Flag : Off

Reconnect Timer : — Recovery Timer : —

Keychain Name : —

Negotiated Keepalive Hold Timer : 45 Sec

Configured Keepalive Send Timer : —

Keepalive Message Sent/Rcvd : 153/153 (Message Count)

Label Advertisement Mode : Downstream Unsolicited

Label Resource Status(Peer/Local) : Available/Available

Session Age : 0000:00:38 (DDDD:HH:MM)

Session Deletion Status : No

Capability:

Capability-Announcement : Off

P2MP Capability : Off

Outbound&Inbound Policies applied : NULL

Addresses received from peer: (Count: 3)

2.2.2.2 12.1.1.2 23.1.1.2

-—————————————————————————–

以上输出的是LDP会话的详细信息,邻居的状态必须为Operational才是最终的稳态,另外从TCP连接1.1.1.1 < 2.2.2.2可以验证一点,LDP的会话建立是由传输地址大的一方发起的。

display mpls ldp lsp

LDP LSP Information

-——————————————————————————

DestAddress/Mask In/OutLabel UpstreamPeer NextHop OutInterface

-——————————————————————————

1.1.1.1/32 3/NULL 2.2.2.2 127.0.0.1 InLoop0

*1.1.1.1/32 Liberal/1026 DS/2.2.2.2

2.2.2.2/32 NULL/3 - 12.1.1.2 GE0/0/0

2.2.2.2/32 1026/3 2.2.2.2 12.1.1.2 GE0/0/0

3.3.3.3/32 NULL/1024 - 12.1.1.2 GE0/0/0

3.3.3.3/32 1024/1024 2.2.2.2 12.1.1.2 GE0/0/0

4.4.4.4/32 NULL/1025 - 12.1.1.2 GE0/0/0

4.4.4.4/32 1025/1025 2.2.2.2 12.1.1.2 GE0/0/0

-——————————————————————————

TOTAL: 7 Normal LSP(s) Found.

TOTAL: 1 Liberal LSP(s) Found.

TOTAL: 0 Frr LSP(s) Found.

A ‘*’ before an LSP means the LSP is not established

A ‘*’ before a Label means the USCB or DSCB is stale

A ‘*’ before a UpstreamPeer means the session is stale

A ‘*’ before a DS means the session is stale

A ‘*’ before a NextHop means the LSP is FRR LSP

以上输出的是R1的LFIB(标签转发信息库),可以看到已经建立好的LSP。

实际上,当我们再R1、R2、R3、R4上运行OSPF后,全网的路由已经被打通,也就是每台路由器都拥有全网的路由,其中包括互联网段的路由,以及各设备的Loopback路由。随后我们激活各设备的MPLS和LDP,每台设备会基于自己的路由表中的路由前缀进行标签捆绑,并且将为路由前缀(FEC)所捆绑的标签分发给自己的LDP邻居。默认情况下在我司的设备上,仅为/32的主机路由分发标签,并且默认水平分割规则并未打开。

现在,来测试一下,从R1去tracert 4.4.4.4:

tracert lsp ip 4.4.4.4 32

LSP Trace Route FEC: IPV4 PREFIX 4.4.4.4/32 , press CTRL_C to break.

TTL Replier Time Type Downstream

0 Ingress 12.1.1.2/[1025 ]

1 12.1.1.2 20 ms Transit 23.1.1.3/[1024 ]

2 23.1.1.3 20 ms Transit 34.1.1.4/[3 ]

3 4.4.4.4 20 ms Egress

从tracert的结果我们可以看到数据包行走的路径,以及被压入的标签。