多协议标签交换MPLS
数据转发时,只在网络边缘分析IP报文头,而不用在每一跳都分析IP报文头,节约了处理时间
MPLS基于标签进行转发,
LSR :进行MPL标签交换和报文转发的网络设备,区域内部的LSR称为核心LSR
MPLS域 :由LSR构成的网络区域
边缘路由器LER : 位于MPLS域边缘,连接其他网络的LSR
标签交换路径LSP : IP报文在MPLS网络经过的路径
FEC转发等价类 : 描述一组具有相似或者相同特征的数据包,以相同方式转发
LSP的入口LER称为入节点(Ingress);位于LSP中间的LSR称为中间节点(Transit);LSP的出口LER称为出节点(Egress)
运行了MPLS体系架构分为了控制平面和转发平面
查到tunnelID后查nhlfe表、查找要进行的标签动作。查看nhlfe表: display mpls nhlfe
MPLS标签长度4个字节,共分为4个字段
Label : 20bit,标签值域内
Exp : 3bit,用于扩展,现在常用作CoS(Class of Service)当设备发生阻塞,优先发送优先级高的报文
S : 1bit,栈底标识,MPLS支持多层标签,即标签嵌套,S值为1时表明是为最底层标签
TTL :8bit,和IP报文中的TTL(time to live)意义相同
标签值域,标签空间取值划分:
0-15 : 特殊标签,如标签3,称为隐式空标签,用于倒数第二跳弹出
16-1024 : 静态LSP和静态CR-LSP ,共享的标签空间(Constration-based Routed Label Switched Path)
1024及以上 : LDP,RSVP-TE,MP-BGP等动态信令协议的标签空间
建立LSP方式,静态LSP,动态LSP
静态LSP配置:前一节点出标签的值等于下一个节点入标签的值。
@确定哪条FEC(路由)创建LSP
@确定该LSP的入节点和出节点
配置LSR ID用来在网络中唯一标识一个MPLS路由器,默认没有配置,必须手工配置
mpls lsr-id 1.1.1.1
在MPLS域内的所有节点与相应的接口上开启MPLS,命令:mpls
在入节点配置:
static-lsp ingress new1 destination 1.1.1.1 nexthop 2.2.2.2 outgoing-interface g0/0/0 out-label 16
中间节点配置:
static-lsp transit new1 incoming-interface g0/0/0 in-label 16 nexthop 1.1.1.1 outgoing-interface g0/0/0 out-label 16
出节点配置:
static-lsp egrsee new1 incoming-interface g0/0/0 in-lable 16 lsrid ingress-lsid tunnel-id ****
MPLS的动态LSP是由LDP协议完成
lsp-trigger {host/all/ip-preix/none} //命令用来设置触发建立LSP的策略,仅对入节点和出节点有效。
如果触发条件为host时,该命令效果:
在ingress节点执行该命令时,触发所有32位路由建立LSP MPLS
在engress节点执行该命令时,触发本地32位路由建立LDP LSP,
egress就是本机路由始发路由器
ingress就是非主机路由始发路由
在transit节点的处理:
Transit LSR根据MPLS的标签值查看对应的ILM表,得到Tunnel ID
根据ILM表的Tunnel ID找到对应的nhlfe表项
查看nhlfe表项,得到出接口,下一跳,出标签和标签操作类型,标签操作类型为Swap则交换标签
Egress LSP的处理:
Egress根据ILB表项查询到该标签对应的操作为Pop,说明需要剥离该标签
根据当前标签头部的下一层报文头部进行下一步处理
S=1表明该标签是最后一层标签直接进行ip转发,S=0标签还有下一层标签
LDP会话建立过程:
1、设备周期性地发送LDP链路Hello报文(LDP Link Hello),实现LDP基本发现机制
使用UDP,目的地址是组播224.0.0.2,如果在某个接口接收到LDP链路Hello表明该接口存在LDP临接体
2、Hello报文中携带传输地址。双方后续将使用传输地址建立LDP会话
传输地址大的一方将作为主动方主动发起建立TCP链接
LDP协议的工作机制:
1,相邻的LDP路由器会建立邻居
接口发送LDP报文的hello报文,目的IP为 224.0.0.2 ,使用TCP的646端口,默认 5s 周期性的发送,自动建立邻居并维护邻居关系,邻居失效时间 15s
2,hello 报文中携带的传输地址,默认是LSR-ID
3,建立邻居后,传输地址大的一方向传输地址小的一方发起 TCP 646 连接
进行LDP会话的建立
注意,LDP会话是建立在传输地址之间的
4,发送初始化消息进行参数协商,协商成功后发送 keeplive 报文,会话建立成功
5,LDP的邻居通过hello报文维护,LDP会话通过keeplive报文维护
本地LDP会话通过组播hello报文建立的邻居会话
远端LDP会话通过单播hello报文建立起来的LDP会话
华为创建LSP默认策略:
直连lo口主机路由为egress创建LSP
非直连主机路由做为ingress和transit创建LSP
MPLS两个流派
基于帧的MPLS(分组网络,IP网络)DU方式
基于信源的MPLS(电路交换,ATM) DOD方式
- 标签发布方式
- 标签分配控制方式:
indepedent(独立标签分配控制方式) :本地LSR可以自主地分配一个标签绑定到某个IP分组,并通告给上游路由器,无需等待下游地标签
Ordered(有序标签分配控制方式) :只有当该LSR已经具有此IP分组的下一跳的标签,或者该LSR就是该IP分组的出节点时,该LSR才可以向上游发送此IP分组的标签
华为默认采用两种方式发布标签,始发节点采用Ordered,上游节点采用indepedent
- 标签的保持方式:
当有多个LDP邻居给我同一LSR的出口标签时,
Liberal(自由标签保持方式/默认):对于从邻居LSR收来的标签,无论邻居LSR是不是自己的下一跳都保留
Conservaive(保守标签保持方式):对于从邻居LSR收到的标签映射,只有当邻居LSR是自己的下一跳时才保留
查看MPLS邻居会话消息:display mpls ldp session verbose
PHP倒数第二跳标签弹出操作:
最后一条路由器会为一条LSP生成一个入标签是3的发给上游节点
上游节点对进入的报文查找LFIB表,发现分配的标签是隐式空标签3,于是执行弹出标签操作,最后一跳路由器执行IP转发
GRE隧道配置:
MPLS VPN
虚拟专用网络,在公共网络上实现私有网络通信
VPN 在技术上需要通告隧道解决,隧道的本质是对私有报文重新封装,利用封装后的包头执行转发
LSP 看起来是提高报文的转发效率,但本质上也是一种隧道技术
淡出的MPLS技术,目前已经失去价值,因为现在的硬件都是并行查表,利用芯片,效率极高
MPLS目前更多的是隧道能力,支持MPLS VPN,VPLS,MPLS-TE等业务
PE : 运营商边缘设备,负责用于,私网路由的接入
CE : 用户边缘设备
1,PE如果接入多个私有网络,而私有内网路由冲突,导致PE无法正确处理
PE本地私网路由冲突
site独享PE,通告不同的PE解决PE上私网路由冲突的问题
site共享PE,在PE上创建虚拟的路由表和CE进行私网路由的学习。每张虚拟路由表运行独立的路由协议和独立的地址空间,相互隔离避免路由冲突
虚拟的路由表绑定一组接口,运行独立的路由协议,称为VPN-instance
PE需要维护公网路由信息,也要维护不同VPN-instance路由信息
将VPN实例中的路由引入到入到BGP协议时,BGP如何解决路由区分的问题?
- 为这些路由添加RD,并和IPv4前缀组合起来,形成VPNv4格式的路由
- RD 路由区分符号,每个VPN-instance只有配置一个RD,在同一台PE上不同的VPN实例配置不同的RD
- RD作用:区分不同VPN-instance中相同的私网路由
- PE收到VPNv4路由,根据RD可以判断VPNv4路由是否来自同一个VPN-instance
- RD的长度8字节
BGP默认建立的是IPv4单播地址族、但不适应vpn场景,BGP激活vpn IPv4地址族邻居:ipv4-family vpnv4
RD如何规划:1、所有的vpn-instance配置全网唯一的RD
2、同一个vpn的不同vpn-instance配置相同的RD,不同vpn的不同vpn-instance不能配置相同的RD
MPLS VPN中的VPN指的是可以实现互通的site组成的私有隧道
当PE收到vpnv4路由,如何将vpnv4路由引入到本地的vpnv4实例:
- 通过RT(route-traget)属性解决vpnv4路由传递问题,RT为扩展的BGP团体属性
- Export rt 属性:vpnv4路由发送时添加该属性
- import rt 属性:表达该vpn-instance 对哪些vpnv4路由感兴趣
- 如果export rt 和 import rt 只要有一个相同则可以引入到该vpn-instance中
RT属性有两种格式type字段为0x0002或者0x0102时表示RT
私网报文如果直接发送到公网肯定不通,如何解决?
- 使用LSP来解决,即隧道技术,将私网报文迭代到该私网路由的下一跳地址的LSP中进行转发
当PE收到私网报文时,如何判断这个私网报文属于哪个vpn-instance?
- 本端为发布的vpnv4路由通过MP-BGP分配唯一的私网标签
- 私网标签:PE根据私网标签判断该报文应该用哪个vpn-instance进行转发
- 公网标签:将私网报文迭代到该LSP隧道中,进行公网转发,LDP负责分配
将ipv4私网路由变vpnv4路由:
bgp视图下: ipv4-family vpn-instance xxx ,在BGP路由表中创建vpnv4实例xxx的路由表
然后将私网路由 import 到vpn实例路由表
查看vpnv4路由表 : dis bgp vpnv4 all routing-table
当OSPF的路由引入到vpnv4路由表时会有ospf的扩展团体属性,携带了三个参数:OSPF domain id、OSPF RT、OSPF router id
如果是PE直连路由引入到vpnv4表变成bgp路由时不会有这三个参数
- OSPF RT(OSPF路由类型的团体属性) 标识这条路由引入到mpls vpn之前是属于ospf哪个区域的(实际就是PE的ospf所在的区域)
OSPF RT <0.0.0.0 : 1 : 0> 0.0.0.0标识从哪个区域算出该路由,1:表示PE从哪类LSA算出该路由的,
最后一个字段是option选项:描述对于外部路由才有意义,对于5、7类LSA路由才有意义0,
如果该值为0表示该路由外部路由开销类型为1。
如果该值为1则该路由外部路由开销类型是2
2. OSPF route id:描述PE自己在进程下的route id
3. OSPF domain id:华为设备上默认是0.0.0.0、如果是思科设备默认情况下该值是PE的ospf的进程号,例:如果进程号是1,该值为0.0.0.1
当对端PE收到该路由并引入到本地OSPF路由表后会进行判断,如果ospf domain id相同则认为我们在同一个AS内
RT中的信息1类和三类LSA会变成本地3类LSA计算,5类传过来还是5类,
对端PE的直连路由传过来因为连domain id都没有则当成外部5类路由。advroute都会变成该PE的Route id
当路由从IGP引入到vpnv4表中后会将metric+1,
后门问题:
两个站点间有一条带宽小的备份线路,建立OSPF邻居的话传递过来如果是1类LSA会盖住由MP-BGP学来的3类LSA
shamlink 伪连接:在两个站点之间建立可以建立OSPF邻居,这样就直接以1、2类LSA计算路由,防止后门问题
在两台PE上在创建出一个环回口,将环回口口绑定到vpn实例,通过MPBGP宣告出去
然后在OSPF视图下 sham-link (本端地址)(对端环回口地址)
PE上建立sham link后,PE依然使用VPNv4来计算路由,不适应shame link传递的LSA进行OSPF路由计算,因为通过shamlink计算出的OSPF路由在PE上没有私网标签
PE通过shamlink计算出的路由比通过后门链路计算出的路由开销小,就优先使用shamlink的路径并使用BGP路由进表
在一端的站点会收到sham-link传来的1类的LSA,以及相同的3类LSA由MP-BGP特性得来
apply-label per-instance 为一个实例的私网路由都分配一个相同的标签
双PE场景下的路由防环机制有两种:
1,PE传递的路由传给igp的ospf,5,7类lsa会生成dn位置
2,生成route tag防环路
vpnv4的路由引入到igp中时,如果是ospf的五类lsa则会自动为路由生成一个route tag
前两个字节默认是0xD000 后面的是自己的as号,如果as是1,则route tag是 0XD0000001,这是16进制,转成十进制就是route tag
双PE场景下,vpnv4的路由传递为igp路由会携带该route tag,如果对端PE接收到携带了同样的tag的路由则不会进行学习
这是dn比特位后的第二个防环机制
MPE:当stie间需要内部业务进行vpn隔离得话就需要在CE上就创建出vpn实例
PE与CE对接就需要同时承载多个vpn实例,可以在PE上创建出子接口实现
MPLS VPN跨域的三种方案:
optionA:在PE-ASBR和对端之间建立VPN实例,把vpnv4路由转换为ipv4私网路由传递给对端PE-ASBR
optionB:
PE-ASBR之间直接建立MP-BGP的邻居关系,ASBR需要接收域内和域外传过来的所有跨域VPN-IPv4路由,再把VPN-IPv4路由发布出去
ASBR需要配置undo policy vpn-target,ASBR相连链路之间需要开启MPLS链路功能,但不需要开启LDP
VPNv4跨域,每个域都有自己私网标签的划分。从其他域过来的VPNv4必须要使用本地域的私网标签,才能保证私网标签的唯一性。
VPNv4从IBGP邻居得到传给EBGP邻居时,下一跳会自动改变。
VPNv4从EBGP邻居得到传给IBGP邻居时,下一跳也会自动改变。
VPNv4只要下一跳改变时,会生成新的私网标签。
原理
ASBR之间建立VPNv4邻居,直接传输VPNv4路由,所以ASBR无需建立VPN实例。由于直接传递VPNv4路由,所以两端PE设置的RT要匹配。ASBR之间也会产生一条VPN lSP。
配置思路
1. AS域内IGP做通。
2. 配置LDP协议,创建公网LSP。
3. 在ASBR之间建立VPNv4-EBGP邻居关系。
4. 在PE与ASBR之间建立VPNv4-IBGP邻居关系。
优点
1. OptionB方案不受ASBR之间互连链路数目的限制。
2. 不需要创建子接口和VPN实例。
3. 新增实例,ASBR之间配置无需任何改动。
缺点
VPN的路由信息是通过AS之间的ASBR来保存和扩散的,当VPN路由较多时,ASBR负担重,容易成为故障点。因此在MP-EBGP方案中,需要维护VPN路由信息的ASBR一般不再负责公网IP转发。
路由传递过程:
1、PE将IPv4 VPN实例路由引到BGP中,成为IPv4 VPN实例BGP路由。PE根据VPN实例所设置的RD,生成VPNv4路由,下一跳改为PE自己,并为VPNv4路由生成私网标签。
2、PE将VPNv4路由传递给VPNv4-IBGP邻居-本端ASBR,本端ASBR由于在VPNv4地址足下关闭了过滤策略,所以直接接收。
3、本端ASBR将VPNv4路由传递给VPNv4-EBGP邻居-对端ASBR,下一跳改为本端ASBR自己,并为VPNv4路由生成新的私网标签,一同传递给对端ASBR。
4、对端ASBR由于在VPNv4地址族下关闭了过滤策略,所以直接接收。
5、对端ASBR将VPNv4路由传递给VPNv4-IBGP邻居-对端PE,下一跳改为对端ASBR自己,并为VPNv4路由生成新的私网标签,一同传递给对端PE。
6、对端PE判断VPNv4路由的RT值与自身的VPN实例设置的RT匹配,于是接收VPNv4路由并转化成IPv4 VPN实例BGP路由。
7、对端PE将IPv4 VPN实例BGP路由引入至对应的IGP协议进程中,下一跳改为对端PE自己。
数据转发过程:
1、PE收到来自CE的私网IP报文,目标地址为对端CE私网地址,查找对应的VPN实例转发表,查到下一跳为本端ASBR,并为TUNNELID为非0。然后查找标签转发表,打上由本端ASBR产生的VPNv4私网标签。
2、由于PE到本端ASBR不是本地链路可达,于是再查找转发表。查到去往本端ASBR的路由下一跳为本端P设备,并且TUNNELID为非0。然后查找标签转发表,打上由本端P设备产生的LDP公网标签。
3、PE到本端P设备为本地链路可达,PE将公网标签报文从出标签对应的出接口发出。
4、本端P设备收到公网标签报文后,查找标签转发表,发现出标签为3,是个隐式出标签,于是剥离公网标签。并将私网标签报文从隐式出标签所对应的出接口发出。
5、本端ASBR收到私网标签报文后,查找标签转发表,将私网标签替换成由对端ASBR产生的VPNv4私网标签,并将私网标签报文从私网出标签所对应的出接口发出。
6、对端ASBR收到私网标签报文后,查找标签转发表,将私网标签替换成由对端PE产生的VPNv4私网标签。
7、由于对端ASBR到对端PE不是本地链路可达,于是再查转发表。查到去往对端PE的路由下一跳为对端P设备,并且TUNNELID为非0.然后查找标签转发表,打上由对端P设备产生的LDP公网标签。
8、对端ASBR到对端P设备为本地链路可达,对端ASBR将公网标签报文从公网标签对应的出接口发出。
9、对端P设备收到公网标签报文后,查找标签转发表,发现出标签为3,是个隐式出标签,于是剥离公网标签。并将私网标签报文从隐式出标签对应的出接口发出。
10、对端PE收到私网标签报文后,查找标签转发表,发现出标签为NULL,于是剥离私网标签,并查询私网标签所对应的VPN实例转发表,将IP报文转发至对端私网中。
optionC:PE与PE之间直接BGP邻居,传递VPNv4路由,
RR场景下需要配置RR向对端RR传递vpnv4路由时的下一跳保持不变 peer 1.1.1.1 next-hop-inbariable
使用LDP来分配标签:
将bgp路由引入进入igp,然后在mpls视图下为bgp的标签路产生LDP的标签:lsp-trigger bgp-label-route