实验报告学院:计算机学院课程名称:现代交换原理与通信网技术实验名称:MPLS编程实验班级:2009211311姓名:horizon学号:指导老师:丁玉荣现代交换原理实验MPLS编程实验计算机学院horizon2一.实验目的加强学生对MPLS交换中标记要求、标记分配与分发、标记分组转发的理解。二.实验原理及设计多协议标记交换MPLS(MultipleProtocolLabeledSwitching)技术是将第二层交换和第三层路由结合起来的一种L2/L3集成数据传输技术。MPLS是一项面向连接的交换技术,因此有建立连接的过程。各个MPLS设备运行路由协议,在标记分发协议LDP的控制下根据计算得到的路由在相邻的路由器进行标记分配和分发,从而通过标记的拼接建立起从网络入口到出口的标记交换路径LSP。在数据转发过程中,入口标记路由器LER根据数据流的属性比如网络层目的地址等将分组映射到某一转发等价类FEC,并为分组绑定标记。核心标记交换路由器LSR只需根据分组中所携带的标记进行转发即可。出口标记路由器LER弹出标记,根据分组的网络层目的地址将分组转发到下一跳。MPLS节点(MPLS标记交换路由器LSR或MPLS边缘路由器LER)均要创建和维护传统的路由表和标记信息库LIB。路由表记录记录路由信息,用于转发网络层分组和标记分发从而建立标记交换路径。LIB记录了本地节点分配的标记与从邻接MPLS节点收到的标记之间的映射关系,用于标记分组的转发。MPLS技术的核心实质在于:(1)网络中分组基于标记的转发(2)LDP协议控制下的进行标记分发从而建立标记交换路径LSP。实验网络的拓扑结构(节点分布示意图):三.实验主要数据结构所需要的头文件:mplsconstant.h其中的主要数据结构为:现代交换原理实验MPLS编程实验计算机学院horizon3//发送的请求信息包数据结构structReqType{intiFirstNode;//请求信息包的源节点intiEndNode;//请求信息包的目的节点doubleipaddress;//请求信息包包含的网络层目的IP地址前缀(例如197.42)};//路由表表项的数据结构structroutertype{doubleipaddress;//网络层目的地址前缀intnexthop;//下一跳节点intlasthop;//上一跳节点intinpoint;//入端口号intoutpoint;//出端口号};//标记信息表表项的数据结构structlibtype{doubleipaddress;//网络层目的地址前缀intinpoint;//入端口号intoutpoint;//出端口号intinlabel;//入标记值intoutlabel;//出标记值};//发送的标记信息包数据结构structLabelPack{intiFirstNode;//源节点号intiEndNode;//目的节点号intlabelvalue;//标签值};structfuncusedtype{现代交换原理实验MPLS编程实验计算机学院horizon4structlibtypelibinfo;//包含的标记信息表项structLabelPacklabelinfo;//包含的标记信息包数据结构};//发送的标记分组信息包类型structLabelledDataPack{intiFirstNode;//源节点号intiEndNode;//目的节点号structMessageTypeDataInfo;//包含的标记分组类型信息};//标记分组类型structMessageType{doubleipaddress;//网络层目的地址前缀intlabelvalue;//输出标签值};四.实验要求函数1:标记请求实验要求函数:externC_declspec(dllexport)structReqTypereq_process(intidnow,structroutertyperoutenow){structReqTypereqtemp;returnreqtemp;}参数意义:intidnow:当前的节点号;structroutertyperoutenow:当前所指的路由表的表项;函数要求:根据提供的当前节点号和路由表表项值产生标记请求包;过程描述:标记请求包的源节点号由当前节点号提供,目的节点号和ip地址前缀由当前所指的路由表表项的下一跳节点和ip地址前缀提供;2:标记分配与分发实验:现代交换原理实验MPLS编程实验计算机学院horizon5externC_declspec(dllexport)structfuncusedtypelabel_process(structroutertyperoutenow,intlabelout,intidnow){structfuncusedtypetempstruct;returntempstruct;}参数意义:structroutertyperoutenow:当前所指的路由表表项;intlabelout:分配的输出标签号;intidnow:当前的节点号;函数要求:该函数要求根据提供的路由表当前表项、分配的输出标签号和当前节点号,构造一funcusedtype信息包。注:各节点的输入标签可以自由选定,但必须是1-9的整数;过程描述:该funcusedtype信息包的libinfo部分可由当前的路由表表项、当前分配的标签号的有关部分构成;labelinfo部分由当前节点号和当前的路由表表项的有关部分构成;3.标记分组转发实验externC_declspec(dllexport)structLabelledDataPackpack_process(structroutertyperoutenow,structlibtypelibnow,intidnow){structLabelledDataPackpacktemp;returnpacktemp;}参数意义:structroutertyperoutenow:当前所指的路由表表项;structlibtypelibnow:当前的标签信息表表项;intidnow:当前的节点号;函数要求:该函数要求根据提供的路由表表项、标签信息表表项和当前节点号,构造出一个标签数据信息包。过程描述:该标签信息包的源节点、目的节点、IP地址前缀和标签值均可由当前节点号、路由表表项和标签信息表表项构成;五.实验代码现代交换原理实验MPLS编程实验计算机学院horizon61.标记请求实验#includemplsconstant.hexternC_declspec(dllexport)structReqTypereq_process(intidnow,structroutertyperoutenow){structReqTypesomeReqType;someReqType.iFirstNode=idnow;//标记请求包的源节点号由当前节点号提供someReqType.iEndNode=routenow.nexthop;//目的节点号由当前所指的路由表表项的下一跳节点提供someReqType.ipaddress=routenow.ipaddress;//ip地址前缀由ip地址前缀提供returnsomeReqType;}2.标记分配与分发实验#includemplsconstant.hexternC_declspec(dllexport)structfuncusedtypelabel_process(structroutertyperoutenow,intlabelout,intidnow){funcusedtypesomefuncused;//标记信息来自当前的路由表表项somefuncused.libinfo.ipaddress=routenow.ipaddress;//网络层目的地址前缀somefuncused.libinfo.inpoint=routenow.inpoint;//入端口号somefuncused.libinfo.outpoint=routenow.outpoint;//出端口号//发送的标记信息包信息来自当前节点号和当前的路由表表项somefuncused.labelinfo.iFirstNode=idnow;//当前节点号somefuncused.labelinfo.iEndNode=routenow.lasthop;//当前的路由表表项的上一跳节点somefuncused.labelinfo.labelvalue=labelout;//分配的输出标签号//当前分配的标签号的有关部分somefuncused.libinfo.outlabel=1;//出标记值somefuncused.libinfo.inlabel=somefuncused.labelinfo.labelvalue;//入标记值returnsomefuncused;}3.标记分组转发实验现代交换原理实验MPLS编程实验计算机学院horizon7#includemplsconstant.hexternC_declspec(dllexport)structLabelledDataPackpack_process(structroutertyperoutenow,structlibtypelibnow,intidnow){structLabelledDataPackpacktemp;packtemp.DataInfo.ipaddress=libnow.ipaddress;packtemp.DataInfo.labelvalue=libnow.outlabel;packtemp.iFirstNode=idnow;packtemp.iEndNode=routenow.nexthop;returnpacktemp;}六.实验结果建立连接阶段、数据传输阶段、拆除阶段,三阶段均可正常进行。七.实验心得这次实验虽说是要编写三个程序,但是只要对于给定的每个结构都理解好了,然后对照于指导书上所给的内容就能很很容易完成了,实际就是一个赋值的过程。总体来讲本次实验让我对于MPLS有了进一步的理解,了解到了协议标记交换MPLS技术是将第二层交换和第三层路由结合起来的一种L2/L3集成数据传输技术。MPLS是一项面向连接的交换技术,因此有建立连接的过程。这次实验对于看演示程序也让我有了更加直观的了解。