MPLSMPLSMPLSMPLSandandandandVPNVPNVPNVPNself-stadyself-stadyself-stadyself-stadyguideguideguideguide似水年华作品似水年华作品似水年华作品似水年华作品我的学习讨论技术群:我的学习讨论技术群:我的学习讨论技术群:我的学习讨论技术群:684164766841647668416476684164761MPLSMPLSMPLSMPLSandandandandVPNVPNVPNVPNself-stadyself-stadyself-stadyself-stadyguideguideguideguide----------------似水年华MPLSMPLSMPLSMPLSandandandandVPNVPNVPNVPNself-stadyself-stadyself-stadyself-stadyguideguideguideguide似水年华作品似水年华作品似水年华作品似水年华作品我的学习讨论技术群:我的学习讨论技术群:我的学习讨论技术群:我的学习讨论技术群:684164766841647668416476684164762写作目的:已完成:《TCP/IPTCP/IPTCP/IPTCP/IP路由技术学习手册》《多层交换技术学习手册》学习完了MPLSMPLSMPLSMPLS和vpnvpnvpnvpn体系结构这本书后,一直有想法。把书中的知识点结合到一本手册上来。方便大家快速的寻找到重点和难点,用比较通俗的语言来解释难点。用比较简单的实验台子来架构相对难的实验目的。MPLSMPLSMPLSMPLS作为当今ISPISPISPISP方向重要的一门技术。我也学艺不精,只能大概讲点自己所知道的,自己所想象的。自己也未从事过ISPISPISPISP方面的工作,希望大家能够给予理解。似水年华:CCNPCCNPCCNPCCNP,ciscociscociscocisco技术爱好者,喜欢阅读ciscociscociscocisco的各种文档,也喜欢和朋友一起交流ciscociscociscocisco网络技术。EmailEmailEmailEmail:124zzr@sina.com124zzr@sina.com124zzr@sina.com124zzr@sina.comIIIIbelievebelievebelievebelieve,I,I,I,Icancancancanfly!!fly!!fly!!fly!!MPLSMPLSMPLSMPLSandandandandVPNVPNVPNVPNself-stadyself-stadyself-stadyself-stadyguideguideguideguide似水年华作品似水年华作品似水年华作品似水年华作品我的学习讨论技术群:我的学习讨论技术群:我的学习讨论技术群:我的学习讨论技术群:684164766841647668416476684164763在叙说MPLSMPLSMPLSMPLSANDANDANDANDVPNVPNVPNVPN之前,我首先想就资本书的结构来做一次说明,本自学手册将围绕着3W1H3W1H3W1H3W1H来进行,所谓的3W1H3W1H3W1H3W1H就是whywhywhywhywhatwhatwhatwhatwherewherewherewherehowhowhowhow也就是MPLSMPLSMPLSMPLSandandandandVPNVPNVPNVPNself-stadyself-stadyself-stadyself-stadyguideguideguideguide似水年华作品似水年华作品似水年华作品似水年华作品我的学习讨论技术群:我的学习讨论技术群:我的学习讨论技术群:我的学习讨论技术群:684164766841647668416476684164764PartPartPartPart1111:whywhywhywhyweweweweneedneedneedneed!当今网路环境,在IPIPIPIP环境中,依靠路由协议的转发,实现的是逐跳查找方式,使得转发的效率大大降低,对路由器的要求极高,因为每一跳都需要CPUCPUCPUCPU处理,不仅转发速度慢,CPUCPUCPUCPU处理也将增大很多,那么有什么方法能够解决这个问题呢,后来引入了MPLSMPLSMPLSMPLS技术,依靠路由协议来发现路由,然后根据路由使用tdp/ldptdp/ldptdp/ldptdp/ldp来分发标签,数据的传输依靠标签的指示来完成,不仅可以做到快速转发,而且不需要cpucpucpucpu来处理,直接硬件处理,使得转发速率明显加强。那么究竟什么是mplsmplsmplsmpls,mplsmplsmplsmpls到底怎么架构的呢,mplsmplsmplsmpls到底怎么工作的呢?下面我们就开始讨论mplsmplsmplsmpls!PartPartPartPart2222:whatwhatwhatwhatisisisisitititit?MplsMplsMplsMpls的标签分发是建立在FIBFIBFIBFIB表项在之上的一项技术,只有fifififibbbb表象支持标签的插入和分配,那么要学习mplsmplsmplsmpls之前我必须对交换的三种方式做一个阐述。1111进程交换::::进程交换也就是每个数据包都需要cpucpucpucpu进行处理,,,,这种交换的延迟较大,,,,现在一般已经不在使用....2222快速交换::::快速交换和进程交换的区别是,,,,第一个数据包进入设备的时候还是采用进程交换,,,,也就是需要cpucpucpucpu处理,,,,然后转发规则会保存cachcachcachcacheeee表里,,,,后面进入的数据包就依照cachcachcachcacheeee表来进行转发,,,,就是所谓的一次路由多次交换....3CEF:3CEF:3CEF:3CEF:cefcefcefcef的工作机理和前面两种有着截然不同的规则,,,,首先cefcefcefcef会将设备的路由表arparparparp表项做一个镜像,routing,routing,routing,routingtabletabletabletable镜像成fifififibbbbMPLSMPLSMPLSMPLSandandandandVPNVPNVPNVPNself-stadyself-stadyself-stadyself-stadyguideguideguideguide似水年华作品似水年华作品似水年华作品似水年华作品我的学习讨论技术群:我的学习讨论技术群:我的学习讨论技术群:我的学习讨论技术群:684164766841647668416476684164765表,,,,而arparparparp表镜像成adjadjadjadj表,,,,进来的数据包依照fibfibfibfib和adjadjadjadj来做转发,fi,fi,fi,fibbbb和adjadjadjadj表项都是能够被硬件所读取的,,,,依靠硬件来做转发,,,,转发速率得到了大幅度的提升....MplsMplsMplsMpls就是构架在cefcefcefcef之上的一种技术,,,,依靠cefcefcefcef来形成fibfibfibfib表,,,,然后根据fibfibfibfib表使用TDP/LDPTDP/LDPTDP/LDPTDP/LDP来分发标签,,,,后续的labellabellabellabelpacketpacketpacketpacket就会根据labellabellabellabel来进行转发....要想学习mplsmplsmplsmpls我们首先来介绍tdp/ldptdp/ldptdp/ldptdp/ldp这两种标签分发机制;;;;1111tdptdptdptdp:tdp:tdp:tdp:tdp为ciscociscociscocisco私有协议,使用tcp/udptcp/udptcp/udptcp/udp711711711711端口,tdtdtdtdpppp是自动发现邻居的,不需要我们手动来指定邻居,依靠的就是UDPUDPUDPUDP协议,首先hello(hello(hello(hello(间隔5S)5S)5S)5S)会使用udpudpudpudp711711711711端口发向广播地址255.255.255.255255.255.255.255255.255.255.255255.255.255.255,如果收到来自邻居路由器的hellohellohellohello报文,那么再建立TCPTCPTCPTCP连接,目标端口为711711711711用来传送labellabellabellabel信息。2ldp:ldp2ldp:ldp2ldp:ldp2ldp:ldp和tdptdptdptdp类似,,,,只不过是ietfietfietfietf的一个标准化协议,,,,使用的是tcp/udptcp/udptcp/udptcp/udp646646646646端口,,,,运作流程也是类似的....那么现在我们知道了标签分发的机制,,,,那么标签到底是什么样子的呢,,,,到底该加入到报文的哪个地方呢????LabelLabelLabelLabel的格式::::一个labellabellabellabel总共占用32bit32bit32bit32bit。其中又分为:120bit120bit120bit120bitlabellabellabellabel字段(0-15(0-15(0-15(0-15被保留))))23bit23bit23bit23bitexpexpexpexp位置((((类似与IPIPIPIP包头的tostostostos字段,,,,做qosqosqosqos的))))MPLSMPLSMPLSMPLSandandandandVPNVPNVPNVPNself-stadyself-stadyself-stadyself-stadyguideguideguideguide似水年华作品似水年华作品似水年华作品似水年华作品我的学习讨论技术群:我的学习讨论技术群:我的学习讨论技术群:我的学习讨论技术群:68416476684164766841647668416476631bit31bit31bit31bitSSSS位((((标识是否是栈底))))48bit48bit48bit48bitTTLTTLTTLTTL位既然labellabellabellabel已经知道了....那么到底封装在数据包的哪个地方呢????我们知道,MPLS,MPLS,MPLS,MPLS支持多协议,,,,那么MPLSMPLSMPLSMPLS一定与3333层的协议无关,,,,那么labelabelabelabellll一定是在3333层封装完了再去封装,,,,所以labelabelabelabellll应该封装在2222层和3333层之间....那么既然labellabellabellabel封装在了2222层和3333层之间,,,,那么路由器怎么知道这个数据包是打了标签的呢????这里我们就要用到2222层的typtyptyptypeeee字段来标识此包是labellabellabellabel包....那么到底是怎么标识的呢....我们知道普通的IIIIPPPP报文2222层ethernetethernetethernetethernettyptyptyptypeeee是0x0800,0x0800,0x0800,0x0800,而ipvipvipvipv6666是0x86d0x86d0x86d0x86ddddd用这个字段来区分三层不同的协议,,,,这里也是同样的道理....就一些常用的标识这里做一个阐述::::10x884710x884710x884710x8847ethernetethern