高级计算机网络实验报告-ns3模拟数据中心_第1页
高级计算机网络实验报告-ns3模拟数据中心_第2页
高级计算机网络实验报告-ns3模拟数据中心_第3页
高级计算机网络实验报告-ns3模拟数据中心_第4页
高级计算机网络实验报告-ns3模拟数据中心_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上Project1-ns3模拟数据中心实验要求根据上面的数据中心拓扑图,完成以下要求:1. 根据给定的数据中心的拓扑结构,利用ns3进行仿真2. 模拟两种通信模式(traffic pattern)o all-to-all:每个服务器都发送消息给其他服务器消息,由拓扑结构可知,超过50%的消息传送将跨越两个簇(cluster)o many-to-one:每个服务器都发送消息给其中一个服务器3. 测量两种模式下网络的仿真可以达到的吞吐量,找出网络瓶颈,并且说明如何改进注:拓扑中的网络都是Ethernet网实验内容数据中心模拟实现及主要代码解释a. 设置自定义的attribu

2、te为了做实验方便,设置如下自定义attribute:· pattern:通信模式,all-to-all或many-to-one,默认为1· defaultDst:多对一模式下,接收消息的默认服务器序号,默认为0· verbose:enable或者disable PacketSink和OnOffApplication的日志,默认为false· DataRate1:定义数据中心拓扑第一层的数据传输速率(Mbps),默认为1.0· DataRate2:定义数据中心拓扑第二层的数据传输速率(Mbps),默认为1.0· DataRate3:定

3、义数据中心拓扑第三层的数据传输速率(Mbps),默认为1.5实现代码如下: uint16_t pattern = 1; uint16_t nodesNum = 8; uint16_t defaultDst = 0; float DataRate1 = 1.0; float DataRate2 = 1.0; float DataRate3 = 1.5; uint16_t port = 50000; bool verbose = false; CommandLine cmd; cmd.AddValue("pattern", "number of traffic pat

4、tern", pattern);/pattern1:all-to-all pattern2:many-to-one cmd.AddValue("defaultDst", "default destination server node in pattern 2", defaultDst); cmd.AddValue("DataRate1", "data rate of csma network at level 1", DataRate1); cmd.AddValue("DataRate2&qu

5、ot;, "data rate of csma network at level 2", DataRate2); cmd.AddValue("DataRate3", "data rate of csma network at level 3", DataRate3); cmd.AddValue ("verbose", "Tell sink and onoff applications to log if true", verbose); cmd.Parse(argc, argv); LogCom

6、ponentEnable ("DataCenterSimulation", LOG_LEVEL_INFO); if (verbose) LogComponentEnable ("PacketSink", LOG_LEVEL_INFO); LogComponentEnable ("OnOffApplication", LOG_LEVEL_INFO); b. 创建结点根据实验要求,总共需要创建15个结点,包括:· 8 servers· 4 ToR switches· 2 Aggregation switche

7、s· 1 Core switch实现代码如下: /create nodes NodeContainer n1_8; n1_8.Create(8); NodeContainer t1_4; t1_4.Create(4); NodeContainer a12; a12.Create(2); NodeContainer c1; c1.Create(1);c. 创建CSMA网络节点整个数据中心网络拓扑从下往上可以分为三层,即· 第一层:由服务器与ToR组成的ethernet网络,共有4个,编号为CSMA11,CSMA12,CSMA13,CSMA14· 第二层:由ToR与A

8、ggregation组成的ethernet网络,共有2个,编号为CSMA21,CSMA22· 第三层:由Aggregation与Core组成的ethernet网络,共有1个,编号为CSMA3将创建好的15个网络结点分配到这7个CSMA网络中,实现代码如下: /create csma nodes NodeContainer csmaNodes11 = NodeContainer(n1_8.Get(0),n1_8.Get(1),t1_4.Get(0); NodeContainer csmaNodes12 = NodeContainer(n1_8.Get(2),n1_8.Get(3),t1

9、_4.Get(1); NodeContainer csmaNodes13 = NodeContainer(n1_8.Get(4),n1_8.Get(5),t1_4.Get(2); NodeContainer csmaNodes14 = NodeContainer(n1_8.Get(6),n1_8.Get(7),t1_4.Get(3); NodeContainer csmaNodes21 = NodeContainer(t1_4.Get(0),t1_4.Get(1),a12.Get(0); NodeContainer csmaNodes22 = NodeContainer(t1_4.Get(2)

10、,t1_4.Get(3),a12.Get(1); NodeContainer csmaNodes3 = NodeContainer(a12.Get(0),a12.Get(1),c1.Get(0);d. 设置CSMA网络attribute,并将其安装到相应结点上根据实验要求中的网络拓扑,设置相应网络的属性· 所有直接相连的两个结点之间的延迟都为500ns· 第一层和第二层CSMA网络的数据传输速率都为1.0Mbps,第三层为1.5Mbps然后安装到相应的网络结点上,实现代码如下(DataRate可以通过命令行参数设置,默认值即为原实验要求): /create the chan

11、nels first without any IP addressing information CsmaHelper csma1; sprintf(buf,"%1.1fMbps",DataRate1); csma1.SetChannelAttribute ("DataRate", StringValue (buf); csma1.SetChannelAttribute ("Delay", StringValue ("500ns"); NetDeviceContainer csmaDevices11 = csma1

12、.Install (csmaNodes11); NetDeviceContainer csmaDevices12 = csma1.Install (csmaNodes12); NetDeviceContainer csmaDevices13 = csma1.Install (csmaNodes13); NetDeviceContainer csmaDevices14 = csma1.Install (csmaNodes14); CsmaHelper csma2; sprintf(buf,"%1.1fMbps",DataRate2); csma2.SetChannelAttr

13、ibute ("DataRate", StringValue (buf); csma2.SetChannelAttribute ("Delay", StringValue ("500ns"); NetDeviceContainer csmaDevices21 = csma2.Install (csmaNodes21); NetDeviceContainer csmaDevices22 = csma2.Install (csmaNodes22); CsmaHelper csma3; sprintf(buf,"%1.1fMbps

14、",DataRate3); csma3.SetChannelAttribute ("DataRate", StringValue (buf); csma3.SetChannelAttribute ("Delay", StringValue ("500ns"); NetDeviceContainer csmaDevices3 = csma3.Install (csmaNodes3);e. 分配网络IP根据实验要求,为每个结点安装协议栈,并为7个CSMA网络分配IP,实现代码如下 /assign IP address NS_LO

15、G_INFO ("Assign IP address."); InternetStackHelper stack; stack.Install (n1_8); stack.Install (t1_4); stack.Install (a12); stack.Install (c1); Ipv4AddressHelper address; address.SetBase ("10.0.1.0", "255.255.255.0"); Ipv4InterfaceContainer csmaInterfaces11 = address.Ass

16、ign (csmaDevices11); address.SetBase ("10.0.2.0", "255.255.255.0"); Ipv4InterfaceContainer csmaInterfaces12 = address.Assign (csmaDevices12); address.SetBase ("10.0.3.0", "255.255.255.0"); Ipv4InterfaceContainer csmaInterfaces13 = address.Assign (csmaDevices13

17、); address.SetBase ("10.0.4.0", "255.255.255.0"); Ipv4InterfaceContainer csmaInterfaces14 = address.Assign (csmaDevices14); address.SetBase ("10.1.1.0", "255.255.255.0"); Ipv4InterfaceContainer csmaInterfaces21 = address.Assign (csmaDevices21); address.SetBase

18、 ("10.2.1.0", "255.255.255.0"); Ipv4InterfaceContainer csmaInterfaces22 = address.Assign (csmaDevices22); address.SetBase ("192.168.1.0", "255.255.255.0"); Ipv4InterfaceContainer csmaInterfaces3 = address.Assign (csmaDevices3);f. 初始化路由表这里直接调用了ns3自带的路由实现,实现代码如下

19、 / Create router nodes, initialize routing database and set up the routing / tables in the nodes. Ipv4GlobalRoutingHelper:PopulateRoutingTables ();g. 创建和分配PacketSink和OnOffClient首先,创建sink和OnOff,实现代码如下 /Create sinkApp and OnOffClient ApplicationContainer clientAppnodesNum4; ApplicationContainer sinkAp

20、pnodesNum;然后,分配sink到所有的server结点上,实现代码如下(其中nodesNum表示server个数): for(unsigned int i = 0;i < nodesNum; i+) PacketSinkHelper packetSinkHelper ("ns3:TcpSocketFactory", getAddress(i,port,csmaInterfaces11,csmaInterfaces12,csmaInterfaces13,csmaInterfaces14); sinkAppi = packetSinkHelper.Install

21、(n1_8.Get (i); sinkAppi.Start(Seconds (1.0); sinkAppi.Stop(Seconds (60.0); 再然后,分配OnOffClient到server结点上,并且根据pattern不同,进行不同的配置· pattern 1:每个服务器都发送消息给其他服务器消息,即发送消息给在另一个簇上面的4个服务器(每个服务器上建立4个OnOffClient)· pattern 2:每个服务器都发送消息给同一个服务器,可以默认为n1(每个服务器(n1除外)上建立1个OnOffClient)实现代码如下 for(int i = 0; i <

22、; nodesNum; i+) uint16_t dst = 0; if(pattern=1)/all-to-all pattern for(int j = 0 ;j < 4; j+) if(i<=3) dst = j+4; else dst = j; OnOffHelper client("ns3:TcpSocketFactory",getAddress(dst,port,csmaInterfaces11,csmaInterfaces12,csmaInterfaces13,csmaInterfaces14); client.SetAttribute (&quo

23、t;OnTime", StringValue("ns3:ConstantRandomVariableConstant=50"); client.SetAttribute ("OffTime", StringValue("ns3:ConstantRandomVariableConstant=0"); client.SetAttribute ("DataRate", DataRateValue (DataRate ("1.0Mbps"); client.SetAttribute (&quo

24、t;PacketSize", UintegerValue (2000); clientAppij = client.Install (n1_8.Get (i); clientAppij.Start(Seconds (1.0); clientAppij.Stop (Seconds (51.0); sprintf(buf,"OnOffClient Node %d aims at Server Node %d",i+1,dst+1); NS_LOG_INFO (buf); else if(pattern=2)/many-to-one pattern if(i = def

25、aultDst)continue; dst = defaultDst; OnOffHelper client("ns3:TcpSocketFactory",getAddress(dst,port,csmaInterfaces11,csmaInterfaces12,csmaInterfaces13,csmaInterfaces14); client.SetAttribute ("OnTime", StringValue("ns3:ConstantRandomVariableConstant=50"); client.SetAttribu

26、te ("OffTime", StringValue("ns3:ConstantRandomVariableConstant=0"); client.SetAttribute ("DataRate", DataRateValue (DataRate ("1.0Mbps"); client.SetAttribute ("PacketSize", UintegerValue (2000); clientAppi0 = client.Install (n1_8.Get (i); clientAppi0

27、.Start(Seconds (1.0); clientAppi0.Stop (Seconds (51.0); sprintf(buf,"OnOffClient Node %d aims at Server Node %d",i+1,dst+1); NS_LOG_INFO (buf); 这里解释一下一个函数· getAddress:根据server的标号产生相应的IP:port地址getAddress实现代码如下InetSocketAddress getAddress(int i,uint16_t port,Ipv4InterfaceContainer i1,Ip

28、v4InterfaceContainer i2,Ipv4InterfaceContainer i3,Ipv4InterfaceContainer i4) switch(i) case 0: return InetSocketAddress(i1.GetAddress(0),port);break; case 1: return InetSocketAddress(i1.GetAddress(1),port);break; case 2: return InetSocketAddress(i2.GetAddress(0),port);break; case 3: return InetSocke

29、tAddress(i2.GetAddress(1),port);break; case 4: return InetSocketAddress(i3.GetAddress(0),port);break; case 5: return InetSocketAddress(i3.GetAddress(1),port);break; case 6: return InetSocketAddress(i4.GetAddress(0),port);break; case 7: return InetSocketAddress(i4.GetAddress(1),port);break; default:

30、return InetSocketAddress("10.0.0.1",port); h. 配置相应的trace这里采用pcap文件来trace所有的device,方便利用wireshark来分析实验结果,实现代码如下csma1.EnablePcapAll ("DataCenterSimulation");实验结果与分析a. pattern 1 实验结果执行命令./waf -run "scratch/DC -pattern=1"(scratch/DC.cc为本次实验源程序文件),实验运行结果如下所示从上面的结果可以看出,每个结点上的O

31、nOffClient都有一半以上跨越了两个簇,产生的pcap文件如下所示为了分析patten 1的网络吞吐量,根据all-to-all模式下网络的对称性,选取测量位置· CSMA11:通过server n1(node 0/device 0)来估计· CSMA21:通过ToR t1(node 8/device 1)来估计· CSMA3 :通过Aggregation a1(node 12/device 1)来估计选取的测量标准为吞吐量,具体方法是· 使用wireshark分析相应的pcap文件中的tcp包· 使用statistics-&g

32、t;TCP Stream Graph->Throughput Graph来查看整个过程中该结点上的吞吐量变化情况· 使用statistics->Summary来查看当前结点上网络平均吞吐量,以此估计相应CSMA网络的吞吐量server n1上的测量结果如下Throughput GraphSummaryToR t1上的测量结果如下Throughput GraphSummaryAggregation a1上的测量结果如下Throughput GraphSummaryb. pattern 1 实验结果分析首先对实验结果进行简单汇总网络结点带宽(Mbps)网络平均吞吐量(Mbps

33、)CSMA11server n11.00.255CSMA21ToR t11.00.541CSMA3Aggregation a11.50.993从上面的结果可以看出· 第1层CSMA网络平均吞吐量是0.255Mbps,带宽利用率为25.5%;· 第2层CSMA网络平均吞吐量是0.541Mbps,带宽利用率为54.1%;· 第3层CSMA网络平均吞吐量是0.993Mbps,带宽利用率为66.2%。c. pattern 1 瓶颈及改进· 瓶颈根据以上的实验结果可以看出来,从网络的平均吞吐量来看:第3层CSMA>第2层CSMA>第1层CSMA2,从带

34、宽利用率上看也是这样,所以作为core switch连接两个子网络但带宽过小的第三层网络成了整个网络的瓶颈。· 改进可以加大第3层网络的带宽,防止数据流量过大出现拥塞的情况发生。因此最后确定的网络带宽如下所示:o CSMA11-14:1.0Mbpso CSMA21-22:1.0Mbpso CSMA3 :2.0Mbps· 改进结果执行命令行./waf -run "scratch/DC -DataRate1=1.0 -DataRate2=1.0 -DataRate3=2.0",以相同方式测量网络,得到的结果如下:网络结点带宽(Mbps)网络平均吞吐量(Mbp

35、s)CSMA11server n11.00.306CSMA21ToR t11.00.523CSMA3Aggregation a12.00.990从上面的结果可以看出加大第三层网络的带宽,确实提高了整个网络的吞吐量,尤其是对最底层的server结点来说。d. pattern 2 实验结果执行命令./waf -run "scratch/DC -pattern=2",实验运行结果如下所示从上面的结果可以看出,8个OnOffClient都将数据传输到n1,产生的pcap文件如下所示为了分析patten 2的网络吞吐量,根据网络拓扑的对称性,选取测量位置· CSMA11:通

36、过server n1(node 0/device 0)来估计· CSMA12:通过server n3(node 2/device 0)来估计· CSMA13:通过server n5(node 4/device 0)来估计· CSMA21:通过ToR t1(node 8/device 1)来估计· CSMA22:通过ToR t3(node 10/device 1)来估计· CSMA3 :通过Aggregation a1(node 12/device 1)来估计选取的测量标准为吞吐量,具体方法是· 使用wireshark分析相应

37、的pcap文件中的tcp包· 使用statistics->TCP Stream Graph->Throughput Graph来查看整个过程中该结点上的吞吐量变化情况· 使用statistics->Summary来查看当前结点上网络平均吞吐量,以此估计相应CSMA网络的吞吐量server n1上的测量结果如下Throughput GraphSummaryserver n3上的测量结果如下Throughput GraphSummaryserver n5上的测量结果如下Throughput GraphSummaryToR t1上的测量结果如下Throughput GraphSummaryToR t3上的测量

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论