MPLS:多协议标签交换
多协议:可以基于多种不同的3层协议来生成2.5层的标签信息;
包交换—包为网络层的PDU,故包交换是基于IP地址进行数据转发;就是路由器的路由行为;
原始的包交换:数据包进入路由器后,路由器需要查询本地的路由表(RIB-路由信息数据库),再基于下一跳或者目标ip查询本地的ARP表,才能进行数据的转发;
快速的包交换:一次路由多次交换;每个数据流中的第一个包将被基于原始包交换规则转发;过程中生成缓存列表,记录整个通讯过程,该数据流量剩余数据包仅查询缓存记录即可;
基于原始包交换规则发一遍,然后就记住了,之后这个数据流量剩下的包看缓存记录,用不着看表了,更快了。牛儿。
特快的包交换:无需路由,直接交换; CEF-cisco特快交换,为cisco私有技术;非cisco厂商设备均存在和cef转发机制相同的技术;
路由表、ARP –转换为 FIB(转发信息数据库)表 流量转发过程中仅查询FIB表即可;
FIB的特点:在将路由器表转换过程中,存储递归查询结果;同时将新封装的二层地址进行绑定;
IP fast0/0 172.16.20.115(7)
(递归后的出接口) 0 packets, 0 bytes
epoch 0
sourced in sev-epoch 357
Encap length 14
701CE7662A97|68EFBD1D24C5|0800 ------ 新的二层封装
目标MAC ------------- 源MAC ------- 类型号
路由表rib–>FIB--------结合为FIB
ARP表–>adj----------------------↑
FIB与adj这两张表是二进制,不需要编译,而且FIB查表不需要递归,不像路由表rib查表需要递归,所以速度很快,牛儿。
标签交换:数据包在进入到的MPLS的域内后,将在第2层和3层中间压入标签号;使得域内的路由器在转发该数据包时,基于2.5层的标签号仅需要查询本地的一张LFIB表(标签转发信息数据库)
最初在包交换仅支持原始交换时,标签的意义在于更快的查询;但随着包交换的加速,使用标签交换失去了快速查表的优势;
当下MPLS存在的意义:
1、解决BGP的路由黑洞
2、MPLS VPN
3、MPLS TE 流量工程
另外:随着包交换的加速,使得今天的MPLS技术也开始基于FIB表工作;来提高MPLS的工作效率;
现状: CEF与MPLS合到一块用去了。
想一想:MPLS基于RIB与基于FIB的区别在哪?
答:FIB表是已经算好了,路由表还得去算,从递归的角度上讲基于FIB表更好,MPLS与CEF相结合更不戳。
一、
工作过程
控制层面:路由协议工作,生成RIB,流量的方向即为控制流量;
数据层面:设备基于路由表访问目标,产生数据流量;与控制层面方向相反;
控制层面:
1)在没有MPLS时控制层面仅生成RIB(路由表)和FIB(转发信息数据库);FIB是基于RIB生成;
2)MPLS协议会启动TDP(cisco私有)或LDP(公有),直连设备间将建立邻居关系;
LDP-- 基于UDP和TCP的646端口工作;先使用udp发送组播hello包发现邻居,获取邻居ip地址,再和该直连邻居建立TCP的会话;邻居关系建立后;为了邻居关系间的稳定,一般使用设备的环回地址来建立tcp会话;建议设置环回地址为mpls协议的route-id,该id值将携带在组播收发的hello报文中,之后自动进行tcp会话建立;
总结:MPLS协议需要在直连邻居间使用router-id地址来进行TCP的会话;故前提条件为,route-id必须为设备真实使用的ip地址,建议为环回地址—稳定;
组播hello包在直连的物理接口上收发,来获取对端的router-id,自然也要求router-id值间路由可达;
因此正常在建立LDP的邻居关系间,路由协议已经收敛完成,RIB和FIB表已经生成;
3)MPLS在建立邻居关系后,生成邻居表;LDP协议再基于FIB表中学习到的路由条目生成标签号;
cisco设备默认基于FIB表中所有学习到的路由条目生成标签号,华为设备默认仅基于FIB表中32位掩码的主机路由生成标签号;原因在于正常32位主机路由为ospf学习的环回接口,正常工程中只有BGP和MPLS VPN才会基于环回通讯,使用标签转发;其他普通流量还是基于特快包交换来进行;反观cisco在启动mpls以后,所有流量将基于标签转发,降低了转发效率(前提为默认)
cisco与华为生成标签号的区别。
4)标签号生成后,将存储于本地的LIB表-标签信息数据库;LIB表将在邻居间共享;
LIB表中装载本地及邻居为每条路由分发的标签号;
5)运行MPLS协议的设备,将LIB和FIB进行结合,将标签号和最佳路径的关系映射生成LFIB表(标签转发信息数据库)
注:控制层面生成的表格
RIB—》FIB—》LIB—》LFIB 前两张表为路由协议工作后生成,后两张表为MPLS的LDP协议生成;
数据层面:
1)没有MPLS协议,基于FIB表正常转发即可
2)名词:MPLS domain – MPLS的工作半径
edge LSR(PE)–边界标签交换路由器 工作mpls域的边缘,连接域外设备
LSR (P) – 标签交换路由器 整体工作MPLS域内
3)当流量进入到第一台pe设备时, 在没有特快交换之前,路由器基于目标IP地址查询本地的RIB;
之后还要在LIB表中对应才能确定流量是否应该压入标签,需要两张表的查询;
在存在特快交换时,流量进入第一pe时,直接查询FIB表,表中关联标签号,将直接确定是否压入标签;
流量再到P路由器,接收到流量中若存在标签基于LFIB表转发,若没有标签基于FIB表即可;
流量从最后一台边界离开MPLS 域时将弹出标签;
存在标签号的流量,进入路由器时,入标签表应该为本地路由器分配的编号,出标签为本地的下游(下一跳)设备分配的标签号; 上下游的概念基于数据层面进行标定;
名词解释:
MPLS域:MPLS的范围 [multi protocol label switch]
LSP:标签交换路径,MPLS域里那条路径。 [label switch path]
LSR:标签转发路由器--------------------------简称P [label switch router]
EdgeLSR:边界转发标签路由器-------------简称PE
CE:连接MPLS域的客户机-------------------叫CE。
二、
标签号
标签被压入在2层与3层之间,称为2.5层
标签的格式—32位,4个字节
前20位为标签号,2^20个标签号;其中1-15号保留,作为特殊编号;
第20-22位exp,3位8个数,为优先级,用于QOS策略使用;
第23位为栈底位,该位为1标识该标签为最后一层标签;MPLS最大可以在一个数据包中封装3次标签;
普通的MPLS —一层标签
MPLS VPN —两层
MPLS TE —三层
TTL 生存时间 在第一次压入标签时,将当前数据包中的3层TTL复制到标签中;之后查询一次标签TTL减一,在最后一跳设备弹出标签时将2.5层的TTL复制到3层报头中;
因为不看三层报头,所以需要在2.5层的标签有ttl值。
标签在数据层面上,次末跳的方向是数据层面方向
MPLS的次末跳 – 倒数第二跳
默认执行
边界LSR将本地的直连网段传递给MPLS域内邻居后,LDP分配标签号为3,告知倒数第二跳设备它的身份;导致倒数第二跳设备在查询LFIB表后,已知转发路径的前提下提前弹出标签,使得最后一跳路由器均只需要查询FIB表; 否则最后一跳路由器在查询LFIB表后,弹出标签还需要查询FIB;
(让最后一跳路由器少查一次LFIB表)
(最后一跳路由器:我告诉你我是谁,你提前弹出标签,别让我再查LFIB表)
已知转发路径的前提下~~~
次末跳只针对于边界路由器直连的。例如下图Y网段底下的pc是非直连的。次末跳就不得行了。PE直接靠近客户端的。
四、
MPLS的配置
1、IP可达— 使用路由协议全网可达
2、配置MPLS – LDP
[r2]mpls lsr-id 2.2.2.2 必须先定义mpls的router-id,要为本地设备的真实ip地址,且邻居可达,因为
该地址将用于建立TCP会话,建议使用环回地址
[r2]mpls 再开启mpls协议
[r2-mpls]mpls ldp 再激活LDP协议
[r2-mpls-ldp]q
之后需要在所有标签经过的接口上开启协议
[r2]interface GigabitEthernet 0/0/1
[r2-GigabitEthernet0/0/1]mpls 先开启MPLS
[r2-GigabitEthernet0/0/1]mpls ldp 再激活LDP协议
当启动配置完成后,邻居间使用UDP报文组播收发hello包;之后基于hello包中的router-id地址进行TCP会话的建立;
[r3]display tcp status
TCPCB Tid/Soid Local Add:port Foreign Add:port VPNID State
b4cf3d64 167/6 3.3.3.3:646 4.4.4.4:50858 0 Established
b4cf3adc 167/3 3.3.3.3:50806 2.2.2.2:646 0 Established
当tcp会话建立后,邻居间基于TCP会话再建立邻居关系,生成邻居表:
[r3]display mpls ldp peer
再然后基于本地的FIB表,默认华为仅针对32位的主机路由生成标签号;存储于LIB表中,之后邻居间共享LIB表;
[r3]display fib 查看FIB表
[r4]display mpls ldp lsp 查看LIB表,装载本地和邻居为各条路由分配的标签号
最后路由器将LIB和FIB集合,生成最佳路径的标签转发规则—LFIB
[r4]display mpls lsp 查看LFIB表
注:默认华为仅针对32位主机路由分配标签
[r3]mpls
[r3-mpls]lsp-trigger all 开启功能,将针对fib表中所有路由进行标签号的分配
[r2]tracert -v -a 2.2.2.2 56.1.1.2
五、
使用mpls解决BGP的路由黑洞
MPLS协议并不会为通过BGP协议学习的路由条目分配标签号;
而是在访问这些BGP路由目标网段时,在流量中压入到达这些网段的BGP下一跳设备地址的标签号;
例:R2从BGP邻居5.5.5.5 学习到6.6.6.0 网段的路由;R2在访问6.6.6.0 时,将在数据包中压入到达5.5.5.5ip地址的标签号,来穿越中间没有运行BGP协议的设备;实现打破路由黑洞;
注:华为设备默认不为BGP协议执行下一跳标签机制,cisco默认执行;
华为设备需要开启 route recursive-lookup tunnel 路由基于隧道进行递归查找
给标签让他穿
六、
MPLS 未皮恩
1、CE将私有路由传递到PE端
2、PE端在收到不同CE发送过来的相同网段路由时,使用RD值进行区分—格式X:X 32位
3、PE端将附上RD的私有路由不能直接装载于本地公有路由表中,需要放置到对应的VRF(虚拟路由转发)空间内;之后再路由付RT值,用于传递到对端PE设备,对端区分信息;
未皮恩V4路由=普通IPV4路由+RD+RT
4、未皮恩V4路由需要MP-BGP来进行传递;对端基于RT值,将路由装载到对应的VRF空间内,再共享给对应的CE;
5、控制层面工作完成后,数据层面需要基于MPLS来工作,由于数据层面不能携带RD/RT值;
故mpls将在数据包中压入两层标签,外层标签用于超越中间设备,打破BGP路由黑洞;
内层标签用于对应VRF空间;
RD:区分用户–route-distinguisher --翻译:路由区别
RT:对上空间—vpn-target–翻译:vpn目标
CE:客户
PE:运营商
公网ospf路由是基础;
mpls创建一条骨干道路;
bgp是业务地址(vpn路由)的统筹分配控制者。
rt和rd是定义区分vpn的基础概念
配置:
1、ISP部分:
1)IGP路由
2)MPLS域
3)配置MPLS 未皮恩
[r2]ip vpn-instance a 创建名为a的vrf空间
[r2-vpn-instance-a]ipv4-family 进入IPV4的配置模式下
[r2-vpn-instance-a-af-ipv4]route-distinguisher 1:1 RD值
[r2-vpn-instance-a-af-ipv4]vpn-target 1:1 RT值 必须对端的PE端一致
[r2]interface GigabitEthernet 0/0/0 进入链接CE端的接口
[r2-GigabitEthernet0/0/0]ip binding vpn-instance a 关联到vrf空间
[r2-GigabitEthernet0/0/0]ip address 192.168.2.2 24 配置私有ip地址
注:在关联到vrf空间前不能配置接口ip,否则该地址的直连路由将进入公有路由表;
[r2]display ip routing-table vpn-instance a 查看空间内的私有路由表
[r2]ping -vpn-instance a 192.168.2.1 正常测试将在公有路由表中查询记录;该命令为基于VRF空间
a进行路由查询
4)PE与PE间建立MP-BPG邻居关系
[r2]bgp 2
[r2-bgp]router-id 2.2.2.2
先和对端建立正常BGP邻居关系,可用于传递正常的公网路由
[r2-bgp]pe 4.4.4.4 as-number 2
[r2-bgp]pe 4.4.4.4 connect-interface LoopBack 0
[r2-bgp]pe 4.4.4.4 next-hop-local
同时还需要再在IPV4的家族模式中,与对端建立一个VPNV4的关系,用于传递VPNV4路由
[r2-bgp]ipv4-family vpnv4
[r2-bgp-af-vpnv4]peer 4.4.4.4 enable
[r2-bgp]display bgp vpnv4 all peer 查看mp-bgp邻居关系
5)CE端与PE端交互路由
静态
CE端直接编写静态路由即可;
PE端编写到VRF空间内的静态路由
[r2]ip route-static vpn-instance a 192.168.1.0 24 192.168.2.1
将本地vrf空间内的静态和直连路由重发布到BGP协议传递到对端的PE
[r2]bgp 2
[r2-bgp]ipv4 vpn-instance a
[r2-bgp-a]import-route direct
[r2-bgp-a]import-route static
[r4]display bgp vpnv4 vpn-instance a routing-table 查看mp-bpg的BGP表
OSPF:
CE端正常启动OSPF即可
PE端,启动VPNV4专用的ospf协议
[r4]ospf 2 vpn-instance a
[r4-ospf-2]area 0
[r4-ospf-2-area-0.0.0.0]network 192.168.3.1 0.0.0.0
之后使用双向重发布,实现路由共享
[r4]bgp 2
[r4-bgp]ipv4-family vpn-instance a
[r4-bgp-a]import-route ospf 2
[r4]ospf 2 vpn-instance a
[r4-ospf-2]import-route bgp
[r4]display mpls lsp vpn-instance a 查看双层标记的内层标签号