一。MPLS(多协议标签交换)简介:
标签交换:数据包再进入到的MPLS的域内后,将在第2层和第3层中间压入标签号,使得域内的路由器在转发数据包的时候,++路由器基于2.5层的标签号进行路由行为,在数据包的2.5层压入标签号。路由器基于2.5的标签号查询本地的LFIB表(标签转发信息数据库),++ 即可进行数据转发,第一跳路由器压入标签,最后一跳弹出标签,最初在包交换仅支持原始交换的时候,++标签的意义在于更快的查询++,但是随着包交换的加速,使用标签交换失去了快速查表的优势
包交换:包为网络层的PDU,故包交换是基于IP地址进行数据转发,就是路由器的路由行为(路由器和终端基于3层的ip地址进行数据转发路由行为)
两张表:路由表,ARP(下一跳,目标MAC)
1.原始包交换:需要路由器和ARP表,数据包进入路由器后,路由器需要查询本地的路由表(RIB-路由信息数据库),再基于下一跳或者目标ip查询ARP表,才能进行数据的转发
2.快速包交换:一个数据流的第一个数据包进行原始交换,过程中生成转发规则缓存,改数据流剩下的数据包全部基于缓存中规则进行转发(一次路由多次交换,每个数据流中的第一个包被基于原始包交换规则转发,过程中生成缓存列表,记录整个通讯过程,改数据流量剩余数据包仅查询缓存记录即可)
3.特快交换:无需路由,直接交换 路由器表->FIB ARP->ADJ,产生LFIB表
二。MPLS控制与数据层面
1.MPLS控制层面
路由协议(直连,动态,静态)完成路由收敛后--路由器生成RIB-FIB
MPLS的执行协议LDP--++基于本地本地的FIB表中的每一个目标网段,分配一个本地唯一的标签号++ ,存于本地的LIB中,然后与上下游邻居共享LIB表,最后本地基于完整的LIB表加上本地的FIB表,生成最佳标签转发规则--LFIB
LDP:基于UDP和TCP的646端口工作,先使用udp发送组播hello包认识邻居,获取邻居ip地址,再和该直连邻居建立TCP会话,邻居建立后,为了邻居间关系的稳定,一般使用设备的环回地址来建立TCP会话,建立设置环回地址为mpls协议的router-id,将该id值将携带再组播收发hello报文中,之后自动建立tcp会话
2.MPLS数据层面:
数据包进入第一跳路由器后,压入下一跳设备分配的标签号,然后将流量转发给下一跳路由器,之后域中路由器基于数据包中的2.5层标签号,查询本地的LFIB表来进行数据包的转发,以及标签号的替换,当数据到达最后一跳路由器,将弹出标签号
三。标签号:
标签被压入在2层和3层之间,称为2.5层(标签的格式:32位,4个字节)
前20位为标签号,2*20个标签号,其中1-15号保留,作为特殊编号
第21-23位为exp(策略位),3为8个数,为优先级,用于QOS策略使用
第24位为栈底位,该位1标识该标签的最后一层标签,MPLS最大可以在一个数据包中封装3次标签
普通的MPLS一层标签 MPLS VPN两层标签 MPLS TE 3层标签
TTL 生存时间 在第一次压入标签时,将当前数据包中的3层TTL复制到标签中,之后查询一次标签TTL减一,在最后一次弹出标签时将2.5层的TTL复制到3层报头中
四。MPLS的次末跳:倒数第二跳,默认执行
过程:第一台发出一个不带标签的包,进入路由器(FIB表找到下一跳,++并且打上标签++ ),传入下一台,有标签则通过标签(LFIB)找下一跳,到达倒数第二台,不查询FIB表直接弹出该标签号,这时候到达最后一台路由器则没有标签,终究会查询FIB表
解释:边界LSR将本地的直连网段传递给MPLS域内邻居的时候,LDP分配标签号为3,告知倒数第二跳设备它的身份,导致倒数第二跳设备在查询LFIB表后,使得转发路径的前提下提前弹出标签,使得最后一跳路由器均只需要查询FIB表,否则最后一跳路由器在查询LFIB后,弹出标签还需要查询FIB
五。MPLS配置:
查看tcp关系:dis tcp status
查看mpls邻居表:display mpls ldp peer
查看LIB表,查看标签号:display mpls ldp lsp
查看FIB表:display fib
[R3]mpls lsr-id 3.3.3.3
[R3]mpls
Info: Mpls starting, please wait... OK!
[R3-mpls]mpls ldp
[R3-mpls-ldp]int g0/0/0
[R3-GigabitEthernet0/0/0]mpls(接口配置)
[R3-GigabitEthernet0/0/0]mpls ldp
注释:华为默认只为32号开启标签号,如果希望全部都开启:
mpls
lsp-trigger all
六.解决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 VPN--ISP
1.CE将私有路由传递给PE端
2.PE端收到不同CE发过来的相同网段路由时,使用RD值进行区分--格式X:X 32位
3.PE端将附在RD的私有路由不能直接装载于本地共有路由中,需要放置到对应的VRF(虚拟路由转发)空间内,之后再路由赋RT值,用于传递到对端的PE设备,进行端区分信息
VPNV4路由=普通IPV4路由+RD+RT
4.VPNV4路由需要MP-BGP来进行传递,对端基于RT值,将路由装载到对应的VRF空间内,再共享给对应的CE
5.控制层面工作完成后,数据层面需要基于MPLS来工作,由于数据层面不能携带RD/PT值,故MPLS将在数据包中压入两层标签,++外层标签用于穿越中间设备,打破BGP路由黑洞,内层标签用于对应的VRF空间++
配置方法:
ip vpn-instance a1(空间名为a1)
ipv4-family(进入IPV4的配置模式下)
++route-distinguisher 1:1(++配置RD值为1:1)
++vpn-target 1:1(++配置RT值为1:1,必须对端PE的RT值一致)
int g0/0/0(进入与私有相连的接口内)
ip binding vpn-instance a1(将接口绑定到a1空间内)
ip add 192.168.1.2 24 (再对接口进行配置ip地址)
注释:需要命令display ip routing-table vpn-instance a1才能查看配置的ip地址
同理ping:ping -vpn-instance a1 192.168.2.1才能进行私有的访问
如果是bgp配置VPN:
bgp 1
ipv4-family vpnv4
peer 4.4.4.4 enable
如果是配置路由(如rip和ospf):
对于rip: 对于ospf:
rip 1 vpn-instance a1 ospf 2 vpn-instance a2
version 2 area 0
network 192.168.2.0 network 192.168.2.1 0.0.0.0
如果是重发布:
bgp 1
ipv4-family vpn-instance a1(进入空间内)
import-route rip 1
查看bgp路由:display bgp vpnv4 vpn-instance a1 routing-table
查看内层标签表:display mpls lsp vpn-instance a2