IP转发对比标签表:
普通IP转发,逐跳转发数据包,在经过的每一跳处,必须进行路由表的最长匹配查找(可能多次),速度缓慢。
MPLS的标签转发,通过事先分配好的标签,为报文建立了一条标签转发通道(LSP),在通道经过的每一台设备处,只需要进行快速的标签交换即可(一次查找)。
MPLS(Multi Protocol Label Switching):多协议标签交换
基于label转发
封装在数据链路层和网络层之间
MPLS采用短而定长的标签进行数据转发,大大提高了硬件限制下的转发能力;而且MPLS可以扩展到多种网络协议(如IPv6,IPX等)。
MPLS体系结构
1. 控制平面
2. 转发平面(数据平面)
MPLS术语:
FEC:转发等价类
具有相同转发处理方式的一组数据报文,例如固定的接口进来固定的接口出去的相同动作的路由。
LSP:标签交换路径,
一个FEC的数据流,在不同的节点被赋予确定的标签,数据转发按照这些标签进行,数据流所走的路径就是LSP
两种模式:①静态LSP:标签需要自动配置
②动态LSP:标签自动获取
LSR:标签交换路由器
运行了MPLS协议,并且提供标签交换和标签分发功能。
LER:标签压入/弹出路由器
在MPLS的网络边缘,有一个邻居不允许MPLS。变IP转发为标签转发。提供标签分类和标签的映射、标签的移除功能。
每台路由器只会给入方向分配标签
LFIB:标签转发信息表
LDP:标签分发协议
标签转发表:
标签转发表中的IN和OUT,是相对于标签转发而言,不是相对于标签分配的IN和OUT。
口诀:入标签是我分给别人的,出标签是别人分给我的。
我分配的标签是给别人用的,我不会添加到报文中。
MPLS头部:占4字节
(1) 标签,存放标签的,定长的,占20bit,标签只具有本地意义,所以不会出现像IPv4不够用的问题,标签通常位于数据链路层和三层数据包之间,标签通过绑定过程同FEC相映射。
(2) Exp,用来区分数据包,占3bit
(3) S,栈底位,是否为最后一层,1代表是最后一层;占1bit;如果S置为1表示剥去MPLS头部,后边是普通的网络层头部。
(4) TTL,占8字节
理论上,标记栈可以无限嵌套,从而提高无限的业务支持能力,这是MPLS技术最大的魅力所在。
标签空间:
- 0~15:特殊标签
- 16~1023:静态LSP标签
- 1024~2^20:动态LSP标签
倒数第二跳弹出:
3号标签:隐式空标签,类似于空值,去掉标签;和静态的NULL的区别是有下一跳,直接从出接口发出;指的是倒数第二跳弹出,目的是减轻最后一跳的压力
基本工作原理:
LER边缘路由器负责接收IP报文,查找标签转发表,给IP报文打标签操作(PUSH),在出MPLS时对标签报文进行弹出操作(POP),按IP路由进行转发。
内层有LSR标签交换路由器组成,负责对标签报文进行快速的标签交换操作。
一个MPLS报文所经过的转发路径就是LSP。
FEC的优点:
不同目的地址(属于相同的网段)的IP报文,在Ingress处被划分为相同的FEC,具有相同的标签,这样在LSR处,只需根据标签做快速的交换即可。
而对传统的IP路由,在每一处实际上都是一次重新划分FEC的过程。
FEC的缺点:
对于一条FEC来说,沿途所有的设备都必须具有相同的路由(前缀和掩码必须完全相同)才可以建立一条LSP。
使用MPLS转发的所有沿途设备上,对于要使用标签转发的路由,都不能做路由聚合的操作。
当一个链路层协议收到一个MPLS报文后,它是如何判断这是一个MPLS报文,应该送给MPLS处理,而不是像普通的IP报文那样,直接送给IP层处理?
答:
在以太网中,数据链路层帧头的type字段:0x8847(单播)和0x8848(组播)表示上层是MPLS报文;
在PPP中,增加了一种新的NCP:MPLSCP,使用0x8281来标识
配置:
mpls lsr-id 2.2.2.2 //配置lsr-id
mpls //全局开启MPLS,作用是识别标签
interface g0/0/1
mpls //接口下开启MPLS
静态LSP
static-lsp ingress 1 destination 192.168.2.0 24 outgoing-interface Ethernet0/0/1 nexthop 10.1.23.3 out-label 100
动态LSP:
动态LSP通过LDP(标签分发协议)实现对FEC的分类、标签的分配及LSP的建立和维护等操作。
interface g0/0/1
mpls //接口下开启MPLS
mpls ldp
LDP 标签分发协议
LDP与IP中的动态协议十分相像,都具备如下的几大要素:
Ÿ 邻居(或者叫消息)
Ÿ 邻居的自动发现和维护机制
Ÿ 一套算法,用来根据搜集到的信息计算最终结果
只不过前者计算的结果是标签,后者是路由
1、Hello邻居发现
互发Hello报文
基于UDP封装,端口号:646
目的IP地址:224.0.0.2,代表所有路由器/交换机(网络设备)
Hello间隔:5s
超时时间(hold time):15s
TLV:类型、长度、值
IPv4 transport address:发送方的LSR-ID
2、TCP三次握手
IP地址大的一方主动发起,TCP,端口号646
3、发送init消息,协商参数(lsr-id、标签空间、keepalive时间)
4、发送keepalive消息(保活消息),维护邻居关系
周期性时间:15s
超时时间:45s
5、发送address消息(携带了自己的接口地址)
6、发送label mapping(标签映射)消息,携带标签和FEC
期间收到任何差错消息,均关闭会话,断开TCP连接
上游和下游:在一条LSP上,沿数据包传送的方向,相邻的LSR分别叫上游LSR(upstream LSR)和下游LSR(downstream LSR)。下游是路由的始发者,数据的终点。
标签的发布方式
DU方式:主动向上游通告标签
DoD方式:上游向下游发请求,下游收到请求才会向上游通告标签
标签的分配控制方式
有序Independent:下游无论收没收到标签,都会向上游发送标签
独立Ordered:当从下游收到标签,才会向上游发送标签
标签的保持方式
*标签保持方式:收到的标签不论是不是最优的都会保留
保持标签保持方式:只收最优的
*方式(Liberal retention mode) 保留来自邻居的所有发送来的标签
优点:当IP路由收敛、下一跳改变时减少了lsp收敛时间
缺点:需要更多的内存和标签空间。
保守方式(Conservative retention mode) 只保留来自下一跳邻居的标签,丢弃所有非下一跳邻居发来的标签。
优点:节省内存和标签空间。
缺点:当IP路由收敛、下一跳改变时lsp收敛慢 比较流行的是*方式。
数据转发流程:
以PC1给PC2发送数据为例
1.R1首先根据FIB表查找相应的转发条目,转发条目中包含Tunnel ID字段
①如果Tunnel ID为0x0,则进行IP转发
②如果Tunnel ID为非0x0,则进入MPLS转发流程
2.Ingress的处理,查询fib表和下一跳标签转发表项指导报文的转发
①首先查FIB表,根据目的IP地址找到对应的Tunnel ID(0x7);
②根据FIB表的Tunnel ID找到对应的下一跳标签转发表,将fib和标签转发表关联起来;
③查看标签转发信息表LFIB,可以知道出接口、下一跳、出标签、标签的操作类型(PUSH);
④在ip报文中压入标签,同时处理TTL,然后将封装好的MPLS报文发送给下一跳。
3.Transit的处理,通过查看标签转发信息表指导mpls报文的转发
①查看标签转发信息表,可以知道出接口、下一跳、出标签和标签的操作类型(SWAP)
②mpls报文的处理方式根据不同的label而不同
1)如果label大于等于16的话,则用新的标签替换MPLS报文的旧标签,同时处理TTL,然后将替换完的标签的mpls报文发送给下一跳;
2)如果label等于3,则直接弹出标签,同时处理TTL,然后进行ip转发或下一层标签转发。
4.Egress处理,通过查看标签转发信息表或者查看路由表指导ip报文的转发
①如果Egress收到ip报文,则查看路由表,进行ip转发
②如果Egress收到mpls报文,则查看标签转发信息表知道标签的操作类型(POP),同时处理TTL
1)如果标签中的栈底标识S=1,表明该标签是栈底标签,然后进行ip转发
2)如果标签中的栈底标识S=0,表明还有下一层标签,继续进行下一层标签转发。