该示例资源主要解决如下两个问题,其一就是解决SpringBoot集成DWR3.0.2-RELEASE版本,无配置文件快速简洁完成集成工作,省去dwr.xml等DWR框架初始化需要的配置文件;其二就是解决了集成后的SpringBoot项目在开发环境和外置Tomcat环境下运行正常,但是以内置Tomcat独立JAR形式运行时,DWR框架无法初始化,项目无法正常运行的问题,这块主要修改了DWR源码资源加载相关代码。示例中包含一份完整的集成示例代码及其可独立运行的JAR文件示例,还包括修改后重新打包的DWR3.0.2-RELEASE资源jar文件。



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)是透明的;