北邮 大三下 现代交换原理 实验三 ATM交换实验报告

实验报告

wps_clip_image-7693

              课程名称:       现代交换原理与通信网技术     

              实验名称:             ATM交换实验           

                       级:              09211311              

                       号:                                     

                       名:               schnee               

              指导教师:                                     

实验三  ATM交换实验

1.   实验目的

该部分实验是让学生理解ATM交换机根据路由表转发ATM信元的过程。

2.   实验原理及设计

    ATM是面向连接的网络,在端到端的通信前必须建立连接。ATM连接建立以后,在ATM交换节点保存着ATM连接信息的路由表。ATM交换实际上完成ATM信元的选路、信头翻译与排队的3个基本功能。选路就是选择物理端口的过程,即从某个入线端口交换到某个出线端口的过程。信头翻译是指将信元的信头值(入VPI/VCI)变换为输出信头值(出VPI/VCI)的过程。信头翻译与选路功能合作共同完成ATM交换。信头翻译和选路功能的实现是根据翻译表进行的,这里翻译表就是ATM连接建立后保存在ATM交换节点的路由表。这里我们设计了一个查询路由表的实验。

3.   实验主要数据结构:

   函数功能:在一个给定的路由表中,设计一个根据入端口、入VPI和入VCI查询出端口、出VPI和出VCI的函数

函数原型:

#include   "aconstant.h"

extern "C"  _declspec(dllexport) int Atm_switch ( int in_port,int in_vpi, int in_vci ,RoutTableTypeItem  RoutTable[])

{    

}

主要数据结构说明:

头文件 "aconstant.h"信息

#define Max_Rout_Line  5

//每个路由表最大的表项数。

struct RoutTableTypeItem

{

                 int   in_port;

                 int   in_vpi;

                 int   in_vci;

                 int   out_port;

                 int   out_vpi;

                 int   out_vci;

};

//每一个表项记录入出路由信息

函数参数说明int in_port,入端口

int in_vpi,入VPI

int in_vci ,入VCI

RoutTableTypeItem  RoutTable[]路由表

函数要求,根据参数提供的信息,在给定的路由表中查询出端口和出VPI/VCI,返回该项信息所在路由表数组的下标,若找不到则返回-1。

4.   实验效果检验

     检测ATM转发是否能正确实现。

5.   实验代码

#include  "aconstant.h"

extern "C"  _declspec(dllexport) int

Atm_switch ( int in_port,int in_vpi, int in_vci ,RoutTableTypeItem  RoutTable[])

//在给定的路由表中查询出端口和出VPI/VCI,返回该信息所在路由表数组的下标

       for(int i=0; i<Max_Rout_Line; i++)   

{

if((in_port==RoutTable[i].in_port) && (in_vpi==RoutTable[i].in_vpi)

&& (in_vci==RoutTable[i].in_vci))

return i;

}

return -1;   //找不到则返回-1

}

6.   实验结果

       程序初始化后能正确进行ATM转发,与预计结果相符,试验成功。

7.   实验心得

这次实验非常简单,代码编写只是一个简单的列表查询。所以最重要的还是通过实验和演示加深对ATM交换机根据路由表转发ATM信元的过程的理解。

 

第二篇:北邮 大三下 现代交换原理 实验四 MPLS交换实验报告

实验报告

wps_clip_image-7693

              课程名称:       现代交换原理与通信网技术     

              实验名称:            MPLS交换实验            

                       级:              09211311              

                       号:                                          

                       名:               schnee               

              指导教师:                                     

实验四  MPLS交换实验

                                          之三  MPLS编程实验

1.   实验目的

安排的三个编程实验主要用于加强学生对MPLS交换中标记请求、标记分配与分发、标记分组转发的理解。

2.   实验原理及设计

    多协议标记交换MPLS(Multiple Protocol Labeled Switching)技术是将第二层交换和第三层路由结合起来的一种L2/L3集成数据传输技术。MPLS是一项面向连接的交换技术,因此有建立连接的过程。各个MPLS设备运行 路由协议,在标记分发协议LDP的控制下根据计算得到的路由在相邻的路由器进行标记分配和分发,从而通过标记的拼接建立起从网络入口到出口的标记交换路径LSP。

  在数据转发过程中,入口标记路由器LER根据数据流的属性比如网络层目的地址等将分组映射到某一转发等价类FEC,并为分组绑定标记。核心标记交换路由器LSR只需根据分组中所携带的标记进行转发即可。出口标记路由器LER弹出标记,根据分组的网络层目的地址将分组转发到下一跳。MPLS节点(MPLS标记交换路由器LSR或MPLS边缘路由器LER)均要创建和维护传统的路由表和标记信息库LIB。

路由表记录记录路由信息,用于转发网络层分组和标记分发从而建立标记交换路径。LIB记录了本地节点分配的标记与从邻接MPLS节点收到的标记之间的映射关系,用于标记分组的转发。

MPLS技术的核心实质在于:(1)网络中分组基于标记的转发(2)LDP协议控制下的进行标记分发从而建立标记交换路径LSP。

实验网络的拓扑结构(节点分布示意图):

111.jpg

3.   实验主要数据结构:

   所需要的头文件:"mplsconstant.h"

其中的主要数据结构为:

//发送的请求信息包数据结构

struct ReqType

{

int iFirstNode;     //请求信息包的源节点

int iEndNode;     //请求信息包的目的节点

double ipaddress;  //请求信息包包含的网络层目的IP地址前缀(例如197.42)

};

//路由表表项的数据结构

struct  routertype

{

double ipaddress;  //网络层目的地址前缀

int  nexthop;  //下一跳节点

int  lasthop;   //上一跳节点

int  inpoint;   //入端口号

int  outpoint;   //出端口号

};

//标记信息表表项的数据结构

struct  libtype

{

double ipaddress;   //网络层目的地址前缀

int  inpoint;     //入端口号

int  outpoint;    //出端口号

int  inlabel;     //入标记值

int  outlabel;    //出标记值

};

//发送的标记信息包数据结构

struct  LabelPack

{

int iFirstNode;  //源节点号

int iEndNode;  //目的节点号

int labelvalue;  //标签值

};

struct  funcusedtype

{

struct libtype libinfo;    //包含的标记信息表项

struct LabelPack labelinfo; //包含的标记信息包数据结构

};

//发送的标记分组信息包类型

struct  LabelledDataPack

{

int iFirstNode;                //源节点号

int iEndNode;                //目的节点号

struct MessageType  DataInfo;  //包含的标记分组类型信息

};

//标记分组类型

struct MessageType

{

double ipaddress;   //网络层目的地址前缀

int labelvalue;     //输出标签值

};

1:标记请求实验要求函数

extern  "C" _declspec(dllexport) struct ReqType req_process(int idnow,struct routertype routenow)

{

struct ReqType reqtemp;

return reqtemp; 

}

参数意义:

int idnow:当前的节点号;

struct routertype routenow:当前所指的路由表的表项;

函数要求:根据提供的当前节点号和路由表表项值产生标记请求包;

过程描述:

   标记请求包的源节点号由当前节点号提供,目的节点号和ip地址前缀由当前所指的路由表表项的下一跳节点和ip地址前缀提供;

2:标记分配与分发实验:

extern  "C" _declspec(dllexport) struct funcusedtype label_process(struct routertype routenow,int labelout,int idnow)

{

struct funcusedtype tempstruct;

return tempstruct;

}

参数意义:

struct routertype routenow:当前所指的路由表表项;

int labelout:分配的输出标签号;

int idnow:当前的节点号;

函数要求:

   该函数要求根据提供的路由表当前表项、分配的输出标签号和当前节点号,构造一funcusedtype信息包。注:各节点的输入标签可以自由选定,但必须是1-9的整数;

过程描述:

该funcusedtype信息包的libinfo部分可由当前的路由表表项、当前分配的标签号的有关部分构成;labelinfo部分由当前节点号和当前的路由表表项的有关部分构成;       

3.标记分组转发实验

extern  "C"  _declspec(dllexport) struct LabelledDataPack pack_process(struct routertype routenow,struct libtype libnow,int idnow)

{

struct LabelledDataPack packtemp;

return packtemp;

}

参数意义:

struct routertype routenow:当前所指的路由表表项;

struct libtype libnow:当前的标签信息表表项;

int idnow:当前的节点号;

函数要求:

   该函数要求根据提供的路由表表项、标签信息表表项和当前节点号,构造出一个标签数据信息包。

过程描述:

   该标签信息包的源节点、目的节点、IP地址前缀和标签值均可由当前节点号、路由表表项和标签信息表表项构成;

4.   实验效果检验

运行程序,观察一路上的包的信息,看是否连接建立成功,是否能顺利开始数据传输。

5.   实验代码

实验一:

#include   "mplsconstant.h"

extern  "C" _declspec(dllexport) struct ReqType req_process(int idnow,struct routertype routenow)

{

struct ReqType reqtemp;

reqtemp.iFirstNode=idnow;

reqtemp.iEndNode=routenow.nexthop;

reqtemp.ipaddress=routenow.ipaddress;

return reqtemp;

}

实验二:

#include   "mplsconstant.h" extern  "C" _declspec(dllexport) struct funcusedtype label_process(struct routertype routenow,int labelout,int idnow)

{

struct funcusedtype tempstruct;

tempstruct.libinfo.ipaddress=routenow.ipaddress;

tempstruct.libinfo.inpoint=routenow.inpoint;

tempstruct.libinfo.outpoint=routenow.outpoint;

tempstruct.libinfo.inlabel=7;

tempstruct.libinfo.outlabel=labelout;

tempstruct.labelinfo.iFirstNode=idnow;

tempstruct.labelinfo.iEndNode=routenow.lasthop;

tempstruct.labelinfo.labelvalue=tempstruct.libinfo.inlabel;

return tempstruct;

}

实验三:

#include   "mplsconstant.h" extern  "C"  _declspec(dllexport) struct LabelledDataPack pack_process(struct routertype routenow,struct libtype libnow,int idnow)

{

struct LabelledDataPack packtemp;

packtemp.iFirstNode=idnow;

packtemp.iEndNode=routenow.nexthop;

packtemp.DataInfo.ipaddress=routenow.ipaddress;

packtemp.DataInfo.labelvalue=libnow.outlabel;

return packtemp;

}

6.   实验结果

实验后,我们可以看到MPLS的三个过程。

一是发送请求标记的信息包,从实验软件上我们看到包的内容都是REQ+194.27。从源主机的边缘路由器一直到目的主机的边缘路由器。

二是从目的主机的边缘路由器返回一个分配的标记信息包。其中边缘路由器不会使用这个程序,比如我们设标记为7,则两个边缘路由器及两个普通路由器的出入标记为。(1,-)à(7,1)à(7,7)à(7,-),第一个为in,第二个为out。

三是之后连接建立,可以开始按照标记好的路径从源主机转发分组到目的主机。一路的路由进出标记和第二个部分建立的一致。

7.   实验心得

这次实验比较简单,代码实现基本就是赋值的操作,最重要的还是对MPLS原理和工作过程的理解。

我在实验中加强了自己对MPLS交换中标记请求、标记分配与分发、标记分组转发的理解,并且发现了原来标记分配与分发部分对边缘路由器不起作用,这是我之前在课程学习中没有注意到的。

实验虽然简单,但是仍然很有意义。

相关推荐