技术背景
90年代初期,互联网流量快速增长,而由于当时硬件技术的限制,路由器采用最长匹配算法逐跳转发数据包,成为网络数据转发的瓶颈;于是快速路由技术成为当时研究的一个热点;在各种方案中,IETF确定了MPLS协议作为标准的协议;MPLS采用短而定长的标签进行数据转发,大大提高了硬件限制下的转发能力(当然现在硬件已经没有限制,MPLS更多用于营运商做MPLS VPN,流量工程和服务质量);而且MPLS可以扩展到多种网络协议;
传统IP转发示意图
提示:如上图所示,用户A想要和用户B通信,首先数据包发送R1以后,路由器会根据数据包的目标ip地址进行路由查找,从而实现将数据包最终转发到用户B;这种ip转发采用最长匹配原则,需要多次查表,算法效率不高;况且当时路由器多采用CPU进行转发处理,这意味着来一个数据包都会上交给cpu处理,很显然这会额外带来性能上的开销;从而影响路由器性能;
ATM转发示意图
提示:如上图所示,用户A想要和用户B通信,首先用户A将数据包发送给R1,R1收到用户数据包,通过查看数据包携带的标签,从而在ATM转发表里查找对应标签表项,然后将对应数据包,从对应接口转发出去并打上对应标签;这种ATM转发采用唯一匹配,一次查表,很显然比上述的ip转发效率要高;但是ATM控制指令复杂,成本高昂,难以普及;所以ATM技术没能成功得到推广;
ATM技术虽然没能成功,但其中的心法口诀却属创新;首先ATM摒弃了繁琐的路由查找,改为简单快速的标签交换;即通过标签交换来实现数据包的转发;其次ATM将具有全局意义的路由表改为只有本地意义的标签表;
MPLS简介
MPLS借鉴了ATM的思想,用标签交换来实现快速路由;MPLS是Multi-Protocol Label Switching的首字母缩写,翻译成中文就是多协议标签交换;该协议是一种根据标签转发的技术;可承载在各种链路层协议之上(如,ppp、ATM、帧中继、以太网);同时它还能承载各种网络层报文,如ipv4、ipv6;采用无连接的控制平面,实现路由信息的传递和标签的分发,采用面向连接的数据平面,实现报文在建立的标签转发路径上传送;所以MPLS定义为2.5层,又称2.5层技术;如下图所示
提示:MPLS协议工作在二层之上三层之下的中间层,主要可以起到承上启下的作用;即它能够工作在很多二层协议之上,同时承载三层网络协议;
MPLS数据转发过程
提示:如上图所示,用户A和用户B通信,首先用户A发送IP数据报文给用户端的网关,用户端网关收到数据报文以后,根据路由将对应数据包转发给营运商的边界网关,营运商的边界路由器收到对应数据包会根据规则(lsp)给对应数据打上对应的标签;随后从对应的接口发送给下一个路由器;在营运商的内部路由器中传输用户A的数据,路由器不再根据目标ip地址来查找路由表项进行数据转发,而是根据数据包的标签和LSP(标签路径)来进行转发;最终数据包在来到营运商靠近B用户侧的边界网关,此时边界网关会根据标签路径表将对应数据中的标签剥离,然后发送给用户;从而实现用户A和用户B的数据通信;从上述过程来看,MPLS协议只关心对应数据包的标签,根据标签和结合标签路径表来转发对应数据包;并不会关心对应目标ip地址是多少,是否有路由等;所以标签的分发和lsp的建立就显得尤为重要;
MPLS实际应用场景
随着硬件技术的发展,ip转发性能也大大提高,MPLS在这方面并未发挥优势,但由于MPLS结合了IP网络强大的三层路由功能和二层网络高效的转发机制,所以目前MPLS主要应用于VPN技术,TE(Traffic Engineering,流量工程)以及QOS(Quality of Service,服务质量);
MPLS VPN应用
提示:基于MPLS的VPN通过LSP将私有网络的不同分支连接起来,形成一个统一的网络,用户设备无需为VPN配置GRE、L2TP等隧道;网络延时也会被降至最低;
MPLS TE应用
提示:所谓流量工程是通过动态监控网络的流量和网络单元的负载,实时调整流量管理参数、路由参数和资源约束参数等;使网络运行状态迁移到理想状态,优化网络资源的使用,避免负载不均衡导致的拥塞;
MPLS报文结构
提示:Label字段主要用于报文转发,占20bits;exp(experimental Use)字段主要用于承载IP报文中的优先级,占3位二进制,即有8个优先级别,0-7;S字段表示栈底标志,占1位,即表明是否是最后一个标签(MPLS标签可以多层嵌套),如果是最后一个标签,对应s字段会置为1,否则为0;TTL字段类似ip头部的TTL字段,用来防止报文环路,占8位二进制;
MPLS标签
MPLS标签有较短,定长,*本地意义的特点,主要用于唯一标识去往同一目的地址的报文分组,标签控件如下;
所谓标签空间就是指标签的取值范围,不同取值范围,对应作用不同;
0-15是特殊保留标签
0:IPv4 Explicit NULL Label(显示空标签),表示该标签必须被弹出(即标签被剥掉),且报文的转发必须基于IPv4。如果出节点分配给倒数第二跳节点的标签值为0,则倒数第二跳LSR需要将值为0的标签正常压入报文标签值顶部,转发给最后一跳。最后一跳发现报文携带的标签值为0,则将标签弹出;
1:Router Alert Label 路由告警标签,只有出现在非栈底时才有效。类似于IP报文的“Router Alert Option”字段,节点收到Router Alert Label时,需要将其送往本地软件模块进一步处理。实际报文转发由下一层标签决定。如果报文需要继续转发,则节点需要将Router Alert Label压回标签栈顶;
2:IPv6 Explicit NULL Label,表示该标签必须被弹出,且报文的转发必须基于IPv6。如果出节点分配给倒数第二跳节点的标签值为2,则倒数第二跳节点需要将值为2的标签正常压入报文标签值顶部,转发给最后一跳。最后一跳发现报文携带的标签值为2,则直接将标签弹出。
3:Implicit NULL Label(隐式空标签),倒数第二跳LSR进行标签交换时,如果发现交换后的标签值为3,则将标签弹出,并将报文发给最后一跳。最后一跳收到该报文直接进行IP转发或下一层标签转发;
14:OAM Router Alert Label,MPLS OAM(Operation Administration & Maintenance)通过发送OAM报文检测和通告LSP故障。OAM报文使用MPLS承载。OAM报文对于Transit LSR和倒数第二跳LSR(penultimate LSR)是透明的;
4-13、15:保留;
16~1023:静态LSP和静态CR-LSP(Constraint-based Routed Label Switched Path)共享的标签空间;
1024及以上:LDP、RSVP-TE(Resource Reservation Protocol-Traffic Engineering)、MP-BGP(MultiProtocol Border Gateway Protocol)等动态信令协议的标签空间;
MPLS标签多层嵌套
提示:对于一个LSR(标签路由器)来说,只处理第一个(最顶层)标签;多层标签主要应用于MPLS VPN、MPLS TE;
提示:MPLS在二层以太网网络协议号中使用8847或8848,IP协议号为0800;
MPLS标签转发行为
提示:报文进入MPLS网络,Ingress LSR设备(LSR1)发现报文的目标ip地址与其关联的标签转发表项,遂进行标签压入(push)操作,即打标签;报文在MPLS网络中间进行转发时,在LSR2上进行标签交换(SWAP),设备只需要查询标签转发表项即可完成报文转发;报文在转出MPLS网络时,LSR3发现自己为该LSP的最下游设备,完成弹出标签(POP)操作,即剥离标签,还原为最初数据包的结构;随后通过ip路由转发数据包到达用户主机,完成数据通信;简单讲就是靠近发送端用户的MPLS路由器为ingress,做标签压入操作,中间路由器做标签交换操作,靠近接收端的MPLS路由器做标签剥离操作;通过上述的压入,交换,弹出标签的操作来达到数据包的转发;
LSP的建立
提示:LSP是Label Switched Path的缩写,标签交换路径;即MPLS标签路径;作用类似ip路由表;LSP的建立有两种方式,一种是静态LSP,即通过手动方式为各个FEC分配标签建立转发隧道,类似静态路由;一种是动态LSP,即通过标签发布协议动态建立转发隧道;动态标签发布协议类似动态路由协议;
提示:标签分配的方向和数据流的方向相反;
静态LSP
提示:所谓静态LSP是指不使用标签发布协议,不需要交互控制报文,资源消耗较小;通过静态方式建立的LSP不能根据网络拓扑变化动态调整,需要管理员手动调整;这种方式适用于拓扑结构简单且稳定的小型网络;配置静态LSP原则是上游节点出标签等于下游节点入标签;配置之前应提前规划好,避免出错;
动态LSP
提示:动态LSP是指通过标签发布协议(LDP、MP-BGP、RSVP-TE)动态建立,类似动态路由协议;管理员只需要配置好标签发布协议即可实现对FEC的分类、标签的分配以及LSP的建立和维护;这种方式组网配置简单,易于管理和维护,能够根据网络拓扑变化而即时做出对应的调整;标签由下游LSR分配,按从下游到上游的方向分发;
MPLS转发过程
提示:Tunnel ID是为了给使用隧道的上层协议(如VPN、路由管理)提供统一的接口;系统自动为隧道分配一个ID,也称为Tunnel ID;该Tunnel ID的长度为32比特,只是本地有效;NHLFE是下一跳标签转发表项;主要用于指导MPLS报文的转发;该表项包括Tunnel ID、出接口、下一跳、出标签、标签操作类型等信息;FEC到一组NHLFE的映射成为FTN(FEC-To-NHLFE);FIB表中的Tunnel ID值不为0x0的表项,能够获取FTN的详细信息;FTN只在ingress存在;ILM,Incoming Label Map,入标签映射;入标签到一组下一跳标签转发表项的映射;包括Tunnel ID、入标签、入接口、标签操作类型等信息;ILM在Transit节点的作用是将标签和NHLFE做绑定;通过标签索引ILM表,就相当于使用目标ip地址查询FIB,能够得到所有的标签转发信息;MPLS转发就是通过上述三张表项进行数据转发;
MPLS环路检测机制
MPLS环路检测可以通过IGP环路检测机制,如RIP,OSPF等各自的防环机制;除此之外也可以通过TTL环路检测,其中帧模式的MPLS中使用TTL,信元模式的MPLS中没有TTL,使用LDP环路检测机制;而LDP环路检测机制中有两种方式,一种是距离向量法,一种最大跳数法;
MPLS对TTL的处理模式
Uniform模式
提示:这种模式MPLS TTL和IP TTL相互同步,中间节点只处理MPLS TTL;这种模式不能隐藏MPLS网络真实网络节点数量;
Pipe模式
提示:这种模式MPLS TTL设置为固定值,IP TTL只在入和出节点分别减1;这种模式可以有效隐藏MPLS网络真实节点数量;
TTL环路检测
提示:TTL环路检测和IP环路检测一样,只要TTL值为0以后,对应数据包就被丢弃,从而有效阻断环路继续发生;
LDP环路检测
距离向量法
提示:距离向量法,类似RIP里的水平分割,LSR发送标签请求时,添加自己的LSR ID,如果收到的LSR发现了自己的LSR ID,对应数据包就直接丢弃;
最大跳数法
提示:最大跳数法是LSR发送标签请求时,更新Hop Conut ,如果到达预定的最大值,对应数据包被丢弃;类似TTL,不同于TTL的是TTL是每经过一个路由器就减1,直到TTL值为0时对应数据包才被丢弃;而Hop Count是每经过一个路由器就加1,直到到达预定的最大值,对应数据包才会被丢弃;