实验目的:了解MPLS基础及路由器配置,了解LDP(Label Distribution Protocol), MPLS网络基础(TTL, MTU)等。

实验流程:
1、配置网络拓扑,并设置ip;
2、配置OSPF;
3、MPLS配置并分析;
4、ACL在MPLS的运用。

拓补图结构如下:

另加四个Loopback地址,PE1 1.1.1.1/32;PE2 2.2.2.2/32;P1 3.3.3.3/32;P2 4.4.4.4/32

在GNS3模拟环境下,我们使用一张简化的拓扑图:

配置ip及OSPF的部分不多说了,都是基础的东西,几点需要注意的地方提一下。

在接线部分,我们可以通过命令(sh cdp nei)查看所有与此设备相连的思科设备及相连端口,用来检查接线是否正确,如下图在P1上执行此命令:

 

在配置路由器之前,强烈建议输入以下两条命令:
Router(config)# ip arp proxy disable
Router(config)# no ip domain lookup

OSPF里要把lookpback声明,否则后面的ACL没东西做hhh

进入正题,解释一下MPLS的三个Base,FIB(Forwarding Information Base),LIB(Label Information Base) 和LFIB(Label Forwarding Information Base)。

FIB的查询命令是:Router# sh ip cef
这张表主要是对应网络的下一跳及发出端口,是一张由路由表创建的动态MAC地址及对应端口表。从路由表上我们可以查出对应网络的下一跳,那么由CEF(Cisco Express Forwarding)可得知某特定下一跳的ip对应的发出端口,所以在查询路由表的时候我们也可以看到相应的发出端口。因此,CEF是必须启用的,可以先打命令:
Router(config)# ip cef
以确保CEF启用,默认思科的路由器上都是启用CEF的。

LIB的查询命令是:Router# sh mpls ip binding
这张表是对应网络的本地标签,及LDP建立会话的邻居针对此网络使用的标签。

LFIB的查询命令是:Router# sh mpls forwarding-table
这张表个人感觉是LIB和FIB的结合体(建议还是看一下NAS的课件,好像是RIB和LIB互相联系,由RIB创建FIB,由LIB创建LFIB),这张表主要是对于某一网络的本地标签,及需替换的标签(邻居的本地标签,发出包的标签),输出端口及下一跳ip。

LIB和LFIB都是mpls配起来之后才有的,如果没配的话是没有这两个信息的。

如果是一个网络直接与路由器相连,这个网络在此路由器上是没有标签的,也就是imp-null,他的邻居发往这个网络也不用标签,显示POP TAG。

给路由器配置的loopback默认是LDP中的LSR-ID。

分配好各个路由器各自所属的标签之后就可以启用mpls网络了,在PE1和PE2的f0/1和P1,P2的所有端口全部输入以下命令:Router(config-if)# mpls ip

LDP第一步首先要找到需要建立会话的邻居,所有开启mpls的端口都会周期性使用646端口用UDP给224.0.0.2(子网中所有路由器)的646端口发送Hello Message,如果发现了邻居就会建立LDP会话。

建立LDP会话使用TCP,LSR-ID大的一方发起连接,首先建立TCP当然要三次握手,然后发送Initialization Message ,LSR-ID小的回复Intialization Message Keep Alive Message,之后就可以开始交换标签信息了。这一部分LSR-ID大的一方是随机大端口与LSR-ID小的一方646端口相互传输信息。下图可以看到TCP传输的完整过程:

IP的TTL和MPLS的TTL是相通的,所以此拓扑下最小的TTL=5,因为有4个路由器。

MTU最大是1468字节:默认1500,减去IP报文头20,减去MPLS报文头4,再减去ICMP报文头8。

最后我们把所有loopback的标签都过滤掉,在每个路由器上都执行以下操作:
Router(config)# access-list 1 deny host 1.1.1.1
Router(config)# access-list 1 deny host 2.2.2.2
Router(config)# access-list 1 deny host 3.3.3.3
Router(config)# access-list 1 deny host 4.4.4.4
Router(config)# access-list 1 permit any
Router(config)# no mpls ldp advertise-labels
Router(config)# mpls ldp advertise-labels for 1
随后重置以下LDP会话
Router# clear mpls ldp neighbor *
之后再看LFIB就会发现所有的loopback都Untagged了。

Update:
忘记放路由器的配置文件了,因为wp不允许放cfg文件,所以放了txt,如果要导入GNS3的话把扩展名改成.cfg。

P1_i2_startup-config

P2_i3_startup-config

PE1_i1_startup-config

PE2_i4_startup-config

Update2:
OSPF需要把loopback作为Router-ID,所以需要我们在OSPF里把loopback写在第一个,这样默认就是Router-ID。如果手滑了的话需要用命令更改:
Router(config)# router ospf 10000
Router(config-router)# router-id x.x.x.x