首先,我们需要
5
台路由器(
4
台也可以),因为
MPLS
是主要运用于大型的网络之中的一种快速转发协议,例
ISP
的网络基本采用
MPLS
来提高数据包的转发速度。
分别编号
R1-R5
,接口地址见
topology
,全网起
OSPF
协议,
AREA 0
,目的是达到全网互通,以便于
LABEL
信息的传递。
MPLS
在网络中的实现很简单(因为是简单的配置嘛):
1、
把属于
MPLS
网络的接口划入
MPLS
网络
2、
启用
MPLS
下面简单说一下具体配置,首先,进入
R1
的
s1/3
端口,做如下命令:
R1(config)#int s1/2
R1(config-if)#mpls ip
把接口划入
MPLS
网络
R1(config-if)#exi
至于
R2-R4
的
S1/2
,
S1/3
,以及
R5
的
s1/3
在这里不一一赘述,原理和上面的一样。
这时,我们会看到如下提示:
*Mar 1 00:13:37.163: %LDP-5-NBRCHG: LDP Neighbor 23.0.0.1:0 (1) is UP
说明
MPLS
邻居建立成功,可以相互发送
LABEL
信息。
我们查看一下目前路由器的
LABEL
转发表,也就是和每条路由一一对应的标签编号。
R1#sh mpls forwarding-table
Local Outgoing Prefix Bytes tag Outgoing Next Hop
tag tag or VC or Tunnel Id switched interface
16 16 34.0.0.0/24 0 Se1/2 point2point
17 Pop tag 23.0.0.0/24 0 Se1/2 point2point
18 18 192.168.1.1/32 0 Se1/2 point2point
19 19 45.0.0.0/24 0 Se1/2 point2point
R1#
我们可以看到,
LOCAL
列,表示这条路由条目在本路由器的
label
编号,也是它通告给邻居
LSR
的编号。
OUTGOING
列,表示送往邻居
LSR
时应该打上的标签编号,也就是说,在把包交给邻居
LSR
之前,已经打上的
TAG
其实是对方
LSR
转发表里关于这条路由的
TAG
编号。
Pop tag
表示拆除
TAG
,因为目的网络是下一条的直连网络,所以不用
TAG
继续进行转发。
我们注意到,
bytes tag switched
这一列全部为
0
,这是因为我们还没有进行任何的数据包交换。
下面做如下操作:
R1#p 192.168.1.1 sou
R1#ping 192.168.1.1 source 10.1.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.1, timeout is 2 seconds:
Packet sent with a source address of 10.1.1.1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 104/198/304 ms
R1#sh mpls forwarding-table
Local Outgoing Prefix Bytes tag Outgoing Next Hop
tag tag or VC or Tunnel Id switched interface
16 16 34.0.0.0/24 0 Se1/2 point2point
17 Pop tag 23.0.0.0/24 0 Se1/2 point2point
18 18 192.168.1.1/32 0 Se1/2 point2point
19 19 45.0.0.0/24 0 Se1/2 point2point
我们发现,
PING
过以后
R1
上依然没有交换标签的
BYTE
流量,这是因为
MPLS
是不会对自己的直连网络打上
TAG
标签的,粗浅的理解就是直连网络直接转发就可以了,打上
TAG
不是更麻烦了吗?嘿嘿。
好,我们看
R2-R4
的转发表:
R2#sh mpls forwarding-table
Local Outgoing Prefix Bytes tag Outgoing Next Hop
tag tag or VC or Tunnel Id switched interface
16 Pop tag 34.0.0.0/24 0 Se1/2 point2point
17 Untagged 10.1.1.1/32 520 Se1/3 point2point
18 18 192.168.1.1/32 540 Se1/2 point2point
19 19 45.0.0.0/24 0 Se1/2 point2point
注意中间两行的标签字节交换数量已经出现变化,说明在
R2
上进行了标签交换。
此现象在
R3,R4
上基本相同,说明在
R3,R4
上同样进行着标签的交换。
再看
R4
,
R5
的情况:
R4#sh mpls forwarding-table
Local Outgoing Prefix Bytes tag Outgoing Next Hop
tag tag or VC or Tunnel Id switched interface
16 Pop tag 23.0.0.0/24 0 Se1/3 point2point
17 16 10.1.1.1/32 540 Se1/3 point2point
18 17 12.0.0.0/24 0 Se1/3 point2point
19 Untagged 192.168.1.1/32 520 Se1/2 point2point
R5#sh mpls forwarding-table
Local Outgoing Prefix Bytes tag Outgoing Next Hop
tag tag or VC or Tunnel Id switched interface
16 Pop tag 34.0.0.0/24 0 Se1/3 point2point
17 16 23.0.0.0/24 0 Se1/3 point2point
18 17 10.1.1.1/32 0 Se1/3 point2point
19 18 12.0.0.0/24 0 Se1/3 point2point
没有
TAG
交换!因为目标网络是自己的直连,所以在
R4
路由器把包交给
R5
之前,已经拆除
TAG
(看看
R4
的信息就可发现,在
R4
中去往
192.168
网段的
outgoing
是
untagged
,就是去往这个网络不应该带有标签的意思),在
R4
交给
R5
以后,
IP
包直接进行路由转发,而不是继续经由
MPLS
进行
TAG
交换。
以上只是简单的说了说
MPLS
的标签交换过程,下面我总结一下流程:
首先,
PING
包源:
10.1.1.1
目的:
192.168.1.1
进入
RI
以后,查找
forwarding-table
,发现去往
R2
,出接口时,打上
R2
可以正确判断的
18
号标签
----------
包进入
R2
后,查找
forwarding-table
,发现包应该交给
R3
,也应该打上
R3
识别的
19
号标签(即
outgoing
对应的出标签)
-----------
接着,给了
R3
,
R3
照旧给了
R4
,此时
R4
查询
forwarding-table
,发现
outgoing
对应的是
Untagged
,即转发到
192.168.1.0
这个网络的数据包此时不应该继续打上
TAG
,而是以正常的
IP
数据包格式进行路由转发。
Then
,数据包到达
R5
,路由成功。
附上路由器配置。
本人不才,如有错误还需大家多多指正。