思科Cisco MPLS多协议标签交换原理与配置操作教程
本文讲述了思科Cisco MPLS多协议标签交换原理与配置操作。分享给大家供大家参考,具体如下:
一、MPLS:多协议标签交换
支持多种网络层协议,协议(3层)无关性,也叫2.5层协议
基于标签交换进行数据转发
1.1 IP数据转发方式
进程转发:每个数据包过来查找路由(与操作--->最长匹配---->递归查找),也叫基于数据包的转发
快速转发:每个流量中的第一个数据包进行路由查找,后续数据基于第一个数据包的缓存转发,一次路由、多次交换,也叫基于缓存的转发(区分源IP、目的IP、源端口、目的端口、协议号)
CEF:cisco私有,特快交换,所有数据包无需查看路由转发,直接查看CEF(FIB)表进行转发,该表项是自动适应路由表,也叫基于拓扑的转发方式; 无需路由、直接交换,将路由表变为FIB表(递归完成后的表,目标对接口),ARP表变为ADJ表(接口+MAC),这两张表均为二进制表,可以被硬件直接编译,基于FIB+ADJ的综合表进行转发
1.2 标签交换与传统数据包交换对比
标签交换转发效率优于传统数据包交换(已不明显)
MPLS支持MPLS VPN,支持MPLS TE。
1.3 MPLS的主要应用场景
解决BGP的路由黑洞问题
MPLS VPN
MPLS TE(流量工程)
使用MPLS的前提是设置均基于CEF工作,还要保证IGP收敛。
启动CEF后,表格可以被ASIC(硬件芯片)直接调用
CEF解决了递归的问题,便于MPLS生成标签转发表格
CEF工作后生成FIB表,只有FIB可以存储标签表
1.4 控制层面和数据层面
控制层面:通过IGP或EGP交互路由条目,生成路由表,然后CEF基于路由表生成FIB表;MPLS使用TDP/LDP基于FIB表中的每一条信息(本地所有的路由条目)生成一个标签号,然后告知所有邻居;
数据层面:普通的数据包将基于FIB表转发,若数据包中存在标签号基于LFIB进行转发,标签的impose和pop也是在数据层面生成
1.5 MPLS模式
Frame:帧模式,电路交换,二层协议为Ethernet、HDLC、PPP、FR(非ATM)
Cell:信元模式,ATM模式,带有标签的数据信元
1.6 MPLS术语
FEC:转发等价类,具有相同的处理方式的一类数据称为一个转发等价(基于目标IP,源IP,VPN地址,QoS行为,出接口) LSR:标签交换路由器,标签交换(swap),查看数据包中的标签号然后基于LFIB表进行转发
E-LSR:边界标签交换路由器(PE),标签压入(impose)和弹出(pop)
LSP:标签交换路径
LIB:标签信息数库,存放本本路由器上针对所有FEC所分配的标签以及所有LDP邻居分配自己学习到的标签
LFIB:标签转发信息库,真正转发标签,由FIB和LIB共同生成,包含入标签和出标签
CE:客户端路由器,不工作于MPLS域,使用FIB表转发流量
二、MPLS的数据包格式
Label:20bit,范围(16-2^20),0-15为保留标签
EXP:3bit,用于在label中标记标签中优先级,用来做QoS
S:1bit,栈底位,代表标签是否到达栈底S=0表示未到达栈底;S=1表示到达栈底,最多可以存在3层标签
一层标签为普通MPLS,主要用于解决BGP路由黑洞
二层标签为MPLS VPN使用
三层标签为MPLS TE使用
TTL:8bit生存时间,用于MPLS label交换中防环,当标签号被impose时,将复制三层包头的TTL值,然后每经过一个路由器减1,当标签号被pop时,复制回IP包头中使用MPLS后,二层若依然为以太网封装,那么类型号将变化
0x8847 MPLS 单播
0x8848 MPLS 多播
三、标签分发协议
1.LDP和TDP
LDP:工业标准,基于TCP或UDP封装,使用端口号646,组播发送224.0.0.2(所有支持组播功能的路由器都接收该地址),支持认证
LDP邻居发现阶段:使用LDP的hello包建立邻居,不分配标签使用UDP方式,进行TCP三次握手
LDP的会话建立阶段:进行LDP初始化报文的发送,发送keepalive,并发送LDP的标签分发信息
TDP:cisco私有,应用层协议,基于TCP或UDP封装,使用端口号711,广播发送255.255.255.255,不支持认证
2.MP-BGP
3.RSVP
3.1 标签分发时的注意点
标签分发仅具有本地意义
标签分发是异步的
标签分发只会给本地直连、静态以及IGP路由分发标签,不会为BGP路由分发标签。BGP不分发标签,只会在数据层面为路由条目的下一跳添加标签。
标签分发、压入、弹出和交换通常只发生在运营商网络,客户端永远不可能收到带标签的报文。
四、MPLS的工作过程
当控制层面使用路由协议传递路由条目后,路由器上使用LDP/TDP为本地FIB表中每一条存在的路由条目均分配一个标签号,装载于LIB表中,同时传递给邻居,LIB中还记录邻居传递到本地标签号;之后路由器基于本地的FIB和LIB表生成LFIB(标签号的最佳对应路径)
数据层面工作时,第一跳路由器负责标签的impose,中间路由器基于标签号转发流量,进行标签号的替换,最后一跳路由器负责标签的pop。
入标签号为本地分配的标签号,出标签号为下一跳(下游)分配的标签号;存在上下游路由器的概念,基于数据层面定义
4.1 倒数第二跳弹出(次末跳弹出)
最后一跳路由器在默认情况下需要查看LFIB表后在查看FIB表,然后转发数据;PHP可以使倒数第二跳在已知出接口、下一跳等信息时便将标签号pop,然后基于出接口转发流量,导致最后一跳路由器仅查看FIB表
最后一跳路由器,将本地直连路由传递给邻居时使用label3来告知对方为倒数第二跳,非直连路由正常分配标签号;针对域外非直连路由,域内的最后一跳路由器需要查询两张表;建议PE路由器直接连接用于,不再连接其他路由器。
对于一条路由条目,如果该路由器路由表中该路由条目的出接口是一个没有启用MPLS的接口,则该接口就是最后一跳;或者该路由条目对应的下一跳邻居不是本地的TDP/LDP邻居时,该路由器同样为最后一跳路由器;只要一台路由器收到了关于一跳路由条目的标签是3,则该路由器就为倒数第二跳路由器
pop标签仅弹出最上层标签,仅仅只是倒数第二跳;untagged标签弹出所有标签,意味着离开了MPLS域。
倒数第一跳路由器向倒数第二跳路由器发送一个label3空标签,使倒数第二跳路由器提前弹出标签
五、MPLS配置
5.1 配置步骤
运行IGP
启用CEF(cisco设备默认开启CEF)
在接口上启用MPLS
修改链路MTU
物理接口启用MPLS,在标签号所有需要经过的接口上配置
Route(config)# int s1/1
Route(config-if)# mpls ip
或者
Route(config)# int s1/1
Route(config-if)# tag-switching ip
修改接口MTU
Route(config)# int s1/1
Route(config-if)# mtu 1504
修改MPLS标签的范围
Route(config)# mpls label range 200 299
修改Root ID为接口s0/1的地址;回车重启生效,force立即生效
Route(config)# mpls ldp router-id serial 1/1 ?
force Forcibly change the LDP router id
<Cr>
协议开启后,邻居间使用hello建邻,生成邻居表
存在Root ID,选举同OSPF一致。Root ID同时作为了建立TCP会话的源目IP,若存在环回,那么默认使用环回作为Root ID,此时就必须将环回宣告到路由协议中
Route# sh mpls ldp neighbor -----查看MPLS的LDP邻居表
Peer LDP Ident: 3.3.3.3:0; Local LDP Ident 2.2.2.2:0
TCP connection: 3.3.3.3. 47452 - 2.2.2.2.646
State: Oper; Msgs sent/ rcvd: 22/22; Downstream
Up time: 00:07:37
LDP discovery sources:
Serial1/1, Src IP addr: 23.1.1.3
Addresses bound to peer LDP Ident:
23.1.1.3 34.1.1.3 3.3.3.3
当邻居关系建立后,邻居间会将基于FIB表生成的标签号传递给邻居,保存于LIB表中,之后将LIB表和FIB表进行结合,生成LFIB表,基于该表进行标签流量转发
Route# sh mpls Ldp bindings -----查看LIB表
tib entry: 1.1.1.0/24, rev 4
local binding: tag: 17
remote binding: tsr: 3.3.3.3:0, tag: 16
tib entry: 2.2.2.0/24, rev 6
local binding: tag: imp-null
remote binding: tsr: 3.3.3.3:0, tag: 17
tib entry: 3.3.3.0/24, rev 8
local binding: tag: 18
remote binding: tsr: 3.3.3.3:0, tag: imp- null
tib entry: 4.4.4.0/24, rev 10
local binding: tag: 19
remote binding: tsr: 3.3.3.3:0, tag: 18
Route# sh mpls forwarding- table ------查看LFIB表
Local Outgoing Prefix Bytes tag Outgoing Next Hop
tag tag or VC or Tunnel Id switched interface
16 Pop tag 34.1.1.0/24 0 Sel/1 point2point
17 Untagged 1.1.1.0/24 0 Sel/0 point2point
18 Pop tag 3.3.3.0/24 0 Sel/1 point2point
19 18 4.4.4.0/24 0 Se1/1 point2point
20 19 5.5.5.0/24 0 Sel/1 point2point
21 21 45.1.1.0/24 0 Se1/1 point2point
用traceroute测试MPLS
Route# traceroute 4.4.4.4 source 2.2.2.2
Type escape sequence to abort.
Tracing the route to 4.4.4.4
1 23.1.1.3 [MPLS: Label 18 Exp 0] 28 msec 52 msec 24 msec
2 34.1.1.4 20 msec 24 msec 20 msec
让Route只把某些路由分发的标签传递给邻居,实现标签分发的过滤
Route(config)# mpls ldp advertise-labels for 10 to 20
文章来源:https://www.jb51.net/it/718012.html
感谢访问李梦园个人博客-静水流深
版权声明:本文由静水流深发布,如需转载请注明出处。