MPLS:多协议标签交换 ----ISP
多协议:无论网络层运行什么协议,MPLS均可工作
标签交换:不同传统的包交换(基于ip地址查询路由表转发);在2.5层插入标签号,基于 标签号来进行数据的转发。
目前使用MPLS技术主要目的: 1、解决BGP的路由黑洞 2、MPLS VPN
3、MPLS TE(流量工程)
使用MPLS首先需要开启CEF;
1、CEF的表格可以被ASIC(硬件芯片)直接调用
2、CEF中将路由表在目标和出接口进行直接关联,解决了递归的问题;
MPLS生成的标签只能直接关联出接口,故必须基于CEF的FIB表来生成标签; 3、CEF是唯一种提供MPLS标签插入的转发机制;传统的路由表中不运行出现其他的信息; 但CEF生成的表格可以运行将标签等信息进行记录。
4、CEF生成FIB表,而TDP/LDP只能将标签记录到FIB中;
控制层面:交换路由信息;标签的分发(MPLS不为BGP的路由条目分发标签)
数据层面:基于路由表进行数据的转发;标签的压入和弹出,根据标签号进行数据的转发;
控制层面:通过IGP或EGP协议交互路由;在交互路由条目的同时,TDP/LDP将基于路由器所学习到的每一条路由条目分配一个标签号(BGP的路由除外); 控制层面工作完成后将生成:
FIB--转发信息数据库 LIB--标签信息数据库--目标网络号+标签号 再将FIB和LIB进行合并生成LFIB--标签信息转发数据库
数据层面:基于目标ip,或者数据包中的标签号进行转发;若数据包中存在标签号那么查看LFIB表。
MPLS封装:
MPLS数据被封装2.5层
MPLS数据包结构:
0-19位标签号; 0-15号被保留
20-22位:EXP---8个优先级,优于QOS策略
第23位:s--栈底位;MPLS可以最多同时封装3层标签信息;S为1标示本层标签为最后一层标签
24--31位:TTL--在标签压入时拷贝ip报头中的TTL值,每经过一个路由器减1;在标签弹 出时将标签中的TTL值覆盖到IP报头中;
多层标签:
普通的MPLS仅使用一层标签;MPLS VPN使用两层;MPLS TE使用三层;
MPLS标签信息压入后,二层的以太网数据帧中的类型字段: 0X8847 MPLS单播 0X8848 MPLS多播
名词注解: MPLS domain LSR(P路由器):标签交换机路由器,查看数据包中的标签号然后基于LFIB进行数据的转发
Edge LSR(PE路由器):边界标签路由器;在数据层面工作时第一台PE负责标签的压入,最后一台负责弹出;
CE客户端路由器,不工作于MPLS域内的路由器。
MPLS工作过程:
上下游区分基于数据层面;当本地从邻居处学习到关于X的路由条目时;本地的TDP/LDP协议将基于X网段分配一个标签号,然后将该标签号告知给所有的邻居;当真实访问X网段时,流量中的入标签为本地分配的号码,出标签为下游路由器(下一跳)标签号。
TDP和LDP基于FIB表中每个目标网络分配一个标签号(BGP路由除外),生成LIB表;
TDP:cisco私有 基于TCP/UDP 711端口 hello包:UDP 711 标签传给邻居:TCP711 LDP:公有 基于TCP/UDP 646端口 hello包:UDP 646 标签传给邻居:TCP646
MPLS的优化:
PHP次末跳优化---倒数第二跳---默认执行
在没有PHP下,最后一台PE路由器需要查看两种表格(LFIB/FIB);PHP是最后一跳PE发送给邻居3号标签;这样到时第二跳路由器将弹出标签后转发给最后一跳。
注:标签pop标示仅弹出最上层标签;untagged将弹出所有标签。
配置:
1、路由协议 2、CEF
3、开启MPLS
4、(可选)配置MTU大小;若不进行修改,可能导致被重新分片; 普通的MPLS+4 MPLS VPN +8 MPLS TE+12 1504 1508 1512
r1(config)#interface s1/1
r1(config-if)#mtu 1504 修改接口MTU
r2(config)#int s1/1
r2(config-if)#mpls ip 开启MPLS协议,在MPLS域内同邻居相连接口开启接口
注:开启协议后,默认cisco IOS版本12.4(3)以下默认使用TDP协议,以上LDP; r2(config)#mpls label protocol ? 修改协议 ldp Use LDP
tdp Use TDP (default)
配置完成后,hello包将建立邻居关系,生成邻居表: r5#show mpls ldp neighbor
Peer TDP Ident: 4.4.4.4:0; Local TDP Ident 5.5.5.5:0 TCP connection: 4.4.4.4.711 - 5.5.5.5.51152 State: Oper; PIEs sent/rcvd: 0/4; Downstream Up time: 00:00:18
TDP discovery sources:
Serial1/0, Src IP addr: 45.1.1.1 Addresses bound to peer TDP Ident:
34.1.1.2 45.1.1.1 4.4.4.4
存在RID,RID的选举规则同OSPF一致;另外注意,默认将以RID的ip地址来作为建邻时的源目ip地址;故所路由器上配置了环回,那么环回一定要宣告到路由协议中,否则IP不可达,导致MPLS邻居无法建立。
r5(config)#mpls ldp router-id serial 1/0 ? 修改默认的RID接口 force Forcibly change the LDP router id 立即生效
r5#show mpls ldp bindings 查看LIB表--记录本地和邻居关于某个网段分配标签号 r3#show mpls forwarding-table 查看LFIB表
MPLS解决BGP的路由黑洞问题:
MPLS不会给BGP的路由条目单独分配标签;而是使用BGP条目的下一跳地址标签号;当访问BGP目标时,携带下一跳的标签号,使中间的黑洞路由器根据标签号将流量转发到BGP下一跳处。
MPLS VPN:
通过公网传输私有路由和数据,ISP操作
1、CE端和PE间传递私网路由
2、如何区分不同CE端相同的路由条目;RD--路由区分器 一个标示;64位 X:X
3、PE存储不同CE端的私网路由;VRF--虚拟路由转发;是一个存储空间,基于每个CE端不同的空间
4、私网路由携带RD值后存储在VRF空间内,普通的路由协议不能对其进行转发; 这种路由被称为VPNV4路由====普通路由+RD+RT 只有MP-BGP才可以传递VPN V4路由;
5、RT值是一种社团属性,格式同RD一致;区别相同网络号不同的目标;
6、使用两层标签,外层标签用于解决BGP的路由黑洞,内层标签拥有让PE路由查找对应VRF空间路由;
配置: ISP部分: 1)CEF 2)MPLS
3)定义VRF空间,同时关联接口;再定义RT/RD值,在两端PE上配置 r2(config)#ip vrf ce1 创建VRF的空间CE1 r2(config-vrf)#rd 1:1 配置RD值 r2(config-vrf)#route-target 1:1 RT值 r2(config-vrf)#exit
r2(config)#interface s1/0 进入需要关联的接口
r2(config-if)#no ip address 必须先将该接口从普通的路由内删除,再转移到VRF空间内 r2(config-if)#ip vrf forwarding ce1
r2(config-if)#ip address 12.1.1.2 255.255.255.0
r2# show ip route vrf ce1 查看VRF 空间ce1的路由表
r2#ping vrf ce1 12.1.1.1 使用该空间的路由表来进行通信测试
4)使用MP-BGP传递VRF路由条目
首先建立普通的BGP邻居关系,再激活MP-BGP关联,类似IPV6下的配置 在两端的PE上进行
r2(config)#router bgp 1
r2(config-router)#b router-id 2.2.2.2
r2(config-router)#neighbor 5.5.5.5 remote-as 1
r2(config-router)#neighbor 5.5.5.5 update-source loopback 0 r2(config-router)#address-family vpnv4 进入MP-BGP关系配置
r2(config-router-af)#neighbor 5.5.5.5 activate 建立MP-BGP邻居关系
r2(config-router-af)#neighbor 5.5.5.5 send-community 开启社团属性的传递性,否则RT值将不能被传递