资源描述
网络协议设计实验设计文档基于click自定义协议软件路由器的设计与实现二一四年十二月目 录一、实验概要及实验设计1(一)实验概要1(二)实验目的1(三)实验分析11、协议分析12、协议设计2二、实验设计4(一)实验流程4(二)click路由器总体设计51.路由器报文分类概要设计52。路由器报文转发概要设计63。Label标签信息库结构94.优先级调度概要设计95。基于优先级的限速功能的概要设计10(三)click路由器转发流程设计111.PSP路由转发流程详细设计112.Label报文转发详细设计12(四)主要组件设计141。Fastpspsource组件142。LableRouteTable153.LableLookup154。RateLimit16三、实验演示17(一)PSP路由转发测试171。实验拓扑图172。实验测试方法173.配置文件174。测试结果185。结果总结20(二)基于Label的路由转发测试211。实验拓扑图212。配置文件213。测试结果214.结果总结21(三)优先级队列调度功能测试211。实验拓扑图212.实验测试方法213.配置文件224。测试结果235。结果总结24(四)标签流按优先级分别进行限速功能测试241.实验拓扑图242。配置文件253。测试结果264。结果总结27四、实验分工2717一、实验概要及实验设计(一)实验概要 本实验目的为基于已有的click开源软件实现一个自定义协议的软件路由器完整转发流程,具体包含五个核心任务:报文分类处理;PSP报文分组转发流程(包含PSP头检查、TTL减一、转发表);定长标签交换流程(包含标签头解封装、标签表、标签头封装);标签流8个优先级队列调度;标签流按照优先级分别进行限速。(二)实验目的通过实验设计,深入理解软件路由器的基本原理、组成和实现,掌握计算机网络研究所需的基本设计技能,包括系统设计能力、软件编程能力、整体表述能力和新思想的实验验证能力,为开展计算机网络方向的深入研究奠定实际验证基础。(三)实验分析1、协议分析一个完整的路由协议需要完成的功能包含以下内容:制定指导数据报文分组从一个网络到另一个网络的规定和标准;创建路由表,并维护网络拓扑结构;运行路由协议,执行路由选择和分组转发功能。这对我们接下来的协议设计提出了基本的要求,即对于网络中的每一层都需要定义报文的格式,然后对于报文在网络中的发送、接收和转发都有稳定的拓扑结构.2、协议设计一个自定义的协议簇(ABC),包括地址编址结构、网络互连与路由转发等多个简单协议,对其进行详细说明如下:(1) 地址编制结构(64位),其中前16位为网络标识,后48为接口标识。实际操作中,接口标识为该接口的MAC地址,与前16位拼接为64位地址。(2) 链路层协议,规定了以太网的封装格式如下:其中,IP报文类型定义为0x6000,标签(LABEL)报文类型定义为0x6001。(3) 2。5层标签交换协议,规定了标签交换头的封装格式,并约定标签交换头后默认为PSP格式的报文。(4) 网络层协议,定义了网络层报文头格式。其中TOS为015,表示报文的传输优先级;标识符标注报文的序号;载荷长度为不包括报文头的报文内容长度;下一报头类型为1时表示为ABC_ICMP协议,为2时表示为ABC_UDP协议;跳数限制最大为64,并且每经过一个路由器,其值减1,其值为0时报文被丢弃;源地址和目的地址分别记录发送方和目的方地址。(5) 定义了ABC_UDP(ABC不可靠传输协议)报文头格式。(6) 基本实验拓扑如图所示,根据以太网报文头中包含的以太网的目的地址、源地址和报文类型, ABC协议就能实现一个简单的报文收发过程。(7) 包含转发过程的实验拓扑一个简单的转发过程包含以下的步骤:从发送方接收报文;更改报文的源地址以及目的地址;通过端口发出报文.示意图如下:二、实验设计(一)实验流程 1. 准备工作a) 下载修改后的Click源代码;b) 安装Fedora虚拟机,配置开发、测试环境;c) 编译源码,运行Demo实验;d) 学习Click基础知识,查看源码,了解组件的设计方法和组件的配置文件。2. 系统概要设计充分了解实验任务,进行初步的概要设计,设计包括组件的功能和组织。3. 编码4. 实验环境搭建5. 代码集成和测试首先各个组件需要通过单元测试,最后集成起来进行系统测试。6. 编写实验报告文档(二)click路由器总体设计1. 路由器报文分类概要设计报文主要分为四种类型:ARP Query报文、ARP Response报文、PSP报文、Label报文。从输入组件中获取数据包,发送到数据包分类器.概要图如下图所示:其中,根据以太网头部类型信息进行分类,如下所示:类型码0x08060x60000x60010x08062. 路由器报文转发概要设计路由器报文转发的概要设计图如下所示,其中包含两条主线:一是基于PSP协议的路由转发,二是基于Label标签的路由转发.两条主线的公用组件的作用如下表所示:FromDevice从指定端口获取数据包,转发给下一个组件Classifier数据包类型分类器,根据以太网头部类型信息把数据分为四类:ARP Query 、ARP Response 、PSP 报文、Label 报文TTL 1将报文的TTL 进行减一操作,当TTL为时,不再转发报文ARP Query查询目的IP对应的Mac地址Modify Ether Header修改以太网头部ToDevice将数据包发送到指定端口对于PSP报文的路由转发,其中的两个组件功能如下:Get Dest Address获取PSP报文的目的地址Lookup Router Table查询路由表,得到要转发的端口对于Label报文的路由转发,其中的两个组件的功能如下:Lookup LIB根据标签号,查询标签信息库,得到新的标签号和转发端口。Modify Label for next jump修改标签头部信息中的标签号为查表得到新标签号(1) 对于PSP报文路由转发,首先根据PSP头部中的目的地址查询路由表,得到转发端口;然后进行TTL1、修改Ether头部中的目的Mac,然后从查询到的转发端口进行发送.(2) 对于急于标签的路由转发,首先根据Label头部的标签号查询标签信息库,得到新的标签号和转发端口,并修改Label头部的标签号为新的标签号。然后进行TTL1,修改Ether头部中的目的Mac,然后从查询到的转发端口进行发送。3. Label标签信息库结构标签信息库维护基于标签交换的路由转发信息。当一个带有标签的报文进入路由器的时候,首先根据标签头部的Label ID查找标签信息库,得到下一跳的Label ID和转发端口。其结构信息如下:4. 优先级调度概要设计对于标签交换,当输入组件获取数据包,经数据分类器分类后,确定为Label报文,转发给优先级分类器。优先级分类器根据Label头部中的QOS字段进行优先级判定,分别加入不同优先级的队列中.优先级调度组件根据优先级调度算法进行调度,从不同优先级的队列中获取数据包,发送到待发送数据队列。其中,调度算法是为了保证低优先级的报文不至于饿死,采用时间片轮转的方式,即给高优先的队列分配更多的时间。5. 基于优先级的限速功能的概要设计(三)click路由器转发流程设计1. PSP路由转发流程详细设计组件/流程功能描述FastPSPSource组件按照一定的速度产生PSP报文,模拟发送端FromDevice组件从指定的端口获取数据包,转发到下一个组件Classifier组件数据包分类器,根据以太网头部的类型信息进行分类,PSP报文的类型信息为0x6000Get Dest Address该步骤从PSP报文头部获取目的地址,用来查询路由表,获取转发端口Lookup Router table根据目的地址,查找路由表,获取转发端口TTL1将报文TTL进行减一操作ARP QueryARP查询,获取下一跳的目的Mac地址Modify Ethernet Header根据查询到的下一跳目的Mac地址,修改报文以太网头部目的Mac字段Add to Queue添加到待发送数据包的队列中ToDevice组件从Queue中获取数据包,从指定网口发送出去2. Label报文转发详细设计发送者生成PSP报文,经过AddLabelHeader组件添加标签头,发送到路由器;Click 路由器从网口接受数据,进过分类器后,确定为基于标签交换的报文。然后查询标签信息库,并修改下一条标签号,经过TTL1,目的MAC地址修改,转发到相应端口。接受者从网口获取数据包,丢掉LabelHeader。组件/流程功能介绍AddLabelHeader在普通PSP数据包上添加标签头信息,让路由器可以基于标签进行交换Lookup LIB查询标签信息库,获取下一跳Label ID和输出端口Modify Label for next jump修改标签头 Label ID字段,让下一跳路由可以转发Remove Label Header移除Label Header,得到PSP报文(四)主要组件设计 1. Fastpspsource组件组件名字Fastpspsource功能描述按照一定的速度生成PSP报文端口类型PORTS_0_1 0个输入端口,一个输出端口处理方式PULL方式参数描述FASTPSPSOURCE(RATE, LIMIT, LENGTH, SRCETH, SRCIP, SPORT, DSTETH, DSTIP, DPORT)RATE:发送速度;LIMIT:生成最大报文数量;LENGTH:报文的长度SRCETH:源Mac地址SRCIP:源IP地址SPORT:源端口号DSTETH:目的Mac地址DSTIP:目的IP地址DPORT:目的端口号2. LableRouteTable主要功能:定义标签信息结构,维护标签信息库,可以向里面添加、查询、删除标签信息.3. LableLookup组件名字LableLookup功能描述(1) 静态配置标签信息库(2) 实现基于标签的查找转发端口类型一个输入端口,多个输出端口处理方式PUSH方式当一个带有标签的报文发送到LabelLookup组件,首先获取Label标签头部的标签号,查找标签信息库,以获取“Out Label”和“Out Port”,然后修改标签头部的标签号为“Out Label”,并从“Out Port”端口发送出去。流程图如下:4. RateLimit组件名字RateLimit功能描述限制一个报文流的速度,即每秒发送多少报文端口类型PORTS_1_1 1个输入端口,1个输出端口处理方式PULL参数描述RateLimit (RATE)RATE:报文流的最大速率,即最多每秒发送多少个报文三、实验演示(一)PSP路由转发测试1. 实验拓扑图2. 实验测试方法实验拓扑图如下所示:Client 从Eth1网口发送数据到Router1 Eth1,Router1转发到Router2,Router2收到数据后再次转发给Client 的Eth2,Client收到数据后打印消息内容.3. 配置文件i. Client 发送报文配置文件FastPSPSource(2,2000,128,00:0C:29:0E:9F:0D,0x0100000A,2345, 00:0C:29:61:C0:3E , 0x0200000A,2346) PSPPrint() ToDevice(eth1);ii. Client 接受报文配置文件FromDevice(eth2) - PSPPrint() - Discard;iii. Router1 转发报文配置文件psp :: Print(”Forward PSP Pkt) rt : PSPLookup( 10.0.0.1.0。0。0.0 0, 10。0。0.2。0.0。0.0 0) ;c0 :: Classifier(12/0600, );out0 :: Queue(200) todevice0 : ToDevice(eth1);FromDevice(eth1) c0;c00psp;c01-Discard;rt0- PSPMacap(00:0C:29:F4:DD:E6) Print(rt2) - out0;iv. Router2 转发报文配置文件psp : Print(Forward PSP Pkt”) rt :: PSPLookup( 10.0。0。1。0。0。0。0 1, 10。0。0。2.0.0.0。0 1) ;c0 : Classifier(12/0600, -);out0 : Queue(200) - todevice0 : ToDevice(eth2);FromDevice(eth1) - c0;c00-psp;c01-Discard;rt0Discard;rt1 PSPMacap(00:0C:29:0E:9F:17) Print(rt2) - out0;4. 测试结果v. 客户端发送报文vi. Router1 建立路由表以及转发vii. Router2 建立路由表以及转发viii. Client 接受到数据包并打印5. 结果总结实验采用通过模拟两台路由器之间的路由转发来测试,从实验结果来看,Client 从Eth1网口发送出去的数据包,进过Router1和Router2的路由转发后,能成功到达目的端。该实验结果说明,基于PSP报文的路由转发功能完整实现。(二)基于Label的路由转发测试1. 实验拓扑图2. 配置文件3. 测试结果4. 结果总结(三)优先级队列调度功能测试1. 实验拓扑图2. 实验测试方法Client发送优先级不同的数据包到Router1.Router1在接收到数据包后,根据数据包优先级不同,放置到相应的优先级队列中。由于采用包限流调度算法,越高的优先级队列能在一秒内通过更多的数据包,越低的优先级队列通过的数据包个数越少。因此,低优先级的数据包会被缓存在队列中,高优先级的数据包能尽快地从队列中被读出,使得从优先级队列中读出数据包的顺序和Client发送数据包的顺序会有差异。通过对比读出数据包和发送数据包的顺序,我们就可以验证优先级队列调度的功能是否正常、合理。Client发送数据包顺序如下:依次分别发送5个优先级为n的数据包,其中n从8变化到1,并循环往复.即发送5个优先级为8的数据包,再发送5个优先级为7的数据包,并循环往复.其中我们设定数据包QoS位的范围为18。其中1代表最高优先级,8代表最低优先级.3. 配置文件1) Router1接收端部分配置文件如下所示:c : Classifier(14/41, 14/42, 14/43, 14/44, 14/45, 14/46, 14/47, 14/48, -);ps :: PrioSched;queue1 :: Queue(100);queue2 :: Queue(100);queue3 :: Queue(100);queue4 :: Queue(100);queue5 : Queue(100);queue6 : Queue(100);queue7 : Queue(100);queue8 :: Queue(100);queue9 : Queue(100);FromDevice(eth1) c;c0- queue1 Shaper(6) ps;c1 queue2 Shaper(6) 1ps;c2- queue3 - Shaper(3) 2ps;c3- queue4 Shaper(3) - 3ps;c4- queue5 - Shaper(2) 4ps;c5- queue6 - Shaper(2) - 5ps;c6- queue7 Shaper(1) - 6ps;c7 queue8 - Shaper(1) 7ps;c8 queue9 - Shaper(10) - 8ps;ps - Discard;根据数据包QoS的不同,定义一个输出端口数为9的分类器。优先级调度组件PrioSched采用时间片调度方式。同时,定义了9个大小为100的队列,最后一个队列处理其他的数据包.4. 测试结果1) Client数据包发送顺序如下图所示:2) Router1从优先级队列中读出数据包的顺序如下图所示:对比以上数据包顺序,可以发现,产生数据包的优先级是从大变化到小,而通过优先级队列的调度,从队列中读出的数据包的优先级从小变化到大.由于对每秒读出各队列的数据包数量进行了限制,因此不会有产生低优先级被饿死的现象.5. 结果总结(四)标签流按优先级分别进行限速功能测试1. 实验拓扑图1) 实验测试方法针对不同的优先级,设置RateLimit组件不同的参数以达到限速的目的,报文由发送方产生并在一秒钟之内发送200个报文给接收方,接收方接收时进行基于优先级的限速,并将结果进行打印.2. 配置文件a) 报文发送端FastPSPSource(200,200, 128, 00:0c:29:34:3e:ad, 0x800a000a, 2345,00:0C:29:eb:05:0f,0x810a000a,2346) - ToDevice(eth1);b) 报文接收端:: Classifier(13/0041, 13/0042, 13/0043, 13/0044, 13/0045, 13/0046, 13/0047, 13/0048, -);queue1 :: Queue(100);queue2 :: Queue(100);queue3 : Queue(100);queue4 :: Queue(100);queue5 : Queue(100);queue6 : Queue(100);queue7 :: Queue(100);queue8 : Queue(100);queue9 :: Queue(100);ps : PrioSched;FromDevice(eth1) c;c0- queue1 -Print(enter 0”)RateLimit(5)- ps;c1 queue2 Print(enter 1”) RateLimit(4) 1ps;c2- queue3 - RateLimit(3) -Print(enter 2) 2ps;c3- queue4 - RateLimit(2) Print(”enter 3”) 3ps;c4- queue5 RateLimit(1) -Print(enter 4)- 4ps;c5 queue6 RateLimit(1) Print(enter 5)- 5ps;c6- queue7 RateLimit(1) Print(enter 6)- 6ps;c7- queue8 - RateLimit(1) -Print(”enter 7)- 7ps;c8- queue9 RateLimit(0) -Print(”enter 8”)- 8ps;ps - Discard;3. 测试结果a) 将所有优先级速率设为1(即一秒钟接收一个报文)的情况时,结果如下:这样的限速结果等同于一个纯优先级队列。b) 将最高优先级(0)速率设为5,然后低优先级递减的情况下,结果如图所示:由于发送与接收是同时进行的,所以结果看起来比较散乱,但是还是可以发现存在着明显的优先级关系以及最多存在最高优先级连续的5个报文,这说明限速过程是有效的 。4. 结果总结四、实验分工
展开阅读全文