NS3中文教程详解.docx_第1页
NS3中文教程详解.docx_第2页
NS3中文教程详解.docx_第3页
NS3中文教程详解.docx_第4页
NS3中文教程详解.docx_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

一、简介1. 什么是NS-3?NS是一个离散事件驱动网络模拟器。官方定义:(from /)ns-3 is a discrete-event network simulator for Internet systems, targeted primarily for research and educational use. ns-3 is free software, licensed under the GNU GPLv2 license, and is publicly available for research, development, and use.ns-3 is intended as an eventual replacement for the popular ns-2 simulator. The project acronym “nsnam” derives historically from the concatenation of ns (network simulator) and nam (network animator).2. NS-3 vs NS-2NS-3虽然冠以一个“3”,但事实上跟它广泛流行的前任NS-2并非一脉相承,或者从使用角度上说,仅仅继承了一个名称而已。NS-3基本上是一个新的模拟器,不支持NS-2的API。NS-3是完全用C+编写的(也有可选的Python接口),而NS-2一部分模块使用C+而另一部分使用 OTcl。因而NS-3最大的特点就是脚本可以C+或Python语言,而在NS-2中,我们使用的是OTcl。NS-3的功能仍旧在开发中,因此它远没有NS-2完善(当然NS-2的维护也在进行中)。NS-3并不包含目前所有NS-2的功能,但它具有某些新的特性:正确的多网卡处理、IP寻址策略的使用、更详细的802.11模块等等。Latest stable release: ns-3.2.1 (November 20, 2008)4. NS-3的一些名词解释POSIX:Portable Operating System Interface可移植的操作系统的接口一组操作系统API的协议/标准族,最开始为了Unix系统上的可移植性而开发的,也适用于其他操作系统。Doxygen:Documentation Generator支持C+、C、Java、Objective-C、Python、IDL、Fortran、VHDL、PHP、C#等各种语言的文档生成器,用于从源代码中生成说明文档。(类似于我之前使用过的Sandcastle,貌似更加强大些,有必要得学习一下。)nam:Network Animator基于Tcl/TK的网络动画演示工具,能提供拓扑和包级别的动画以及数据流观察。(参考/nsnam/nam/)MercurialNS-3代码维护使用的源码版本控制管理系统WafNS-3项目使用的新一代的基于Python的构建系统(Build System)WireShark一种GUI包嗅探器。由于NS-3能生成.pcap文件,因此可以使用类似于WireShark的软件对数据进行分析tcpdump另一种包嗅探器。在Linux下使用CLI进行数据分析2 资源/docs/release/tutorial/tutorial_5.html#Resources2.1 网络资源NS-3用户有必要知道几个重要的网站: 主站点位于,提供NS-3系统的基本信息。详细文档位于主站点的/documents.html. 您也可以从这个网页上得到系统架构的相关信息。维基百科网页/wiki可以作为NS-3主站点的补充。您可以在那里找到用户和开发者的FAQs,以及相关问题的解决途径,第三方的共享代码、论文等等。NS-3的源码可以在找到。读者也可以在名为ns3-dev的源码仓库找到当前的NS-3开发树。还有NS-3的之前发行版本和最新测试版本的代码。2.2源码管理系统Mercurial复杂的软件系统需要一种途径,用于管理和组织对现有代码和文档的修改。有很多种方法可以实现这种管理,读者可能已听说过某些版本控制软件,CVS(Concurrent Version System)或许是其中最常见的一个。NS-3项目采用Mercurial系统作为它的源码管理系统。尽管读者在阅读本教程时不需要知道太多的Mercurial相关知识,但我们建议读者能够熟悉Mercurial,并用于查看NS-3源码。Mercurial的网址为/mercurial/,读者可以从上面获取到这个软件配置管理系统(Software Configuration management, SCM)的二进制程序和源码。Mercurial的开发者Selenic提供了一个Mercurial教程,网址为/mercurial/wiki/index.cgi/Tutorial/,以及快速入门指南:/mercurial/wiki/index.cgi/QuickStart/ .在NS-3的主页上,读者也可以获取到有关Mercurial和NS-3配合使用的最常用信息。2.3 编译系统Waf 读者下载NS-3的源码到本地系统之后,需要对源码进行编译来生成可执行程序。正如源码管理方式多种多样,编译源码也有多种工具。最常用的工具是make. Make最出名的一点:它可能是编译大型和高可配置型系统最难的一种方法。因此,有很多替代工具被开发出来。最近,大型高可配置系统的编译工具大多选择用Python语言来开发。NS-3的编译系统采用了Waf。它是用Python开发的新一代编译管理系统。读者不必掌握python,即可编译现有的NS-3项目。如果读者想要扩展现有的NS-3系统,大多数情况只需了解Python知识的很少且非常直观的一个子集。对于想了解Waf细节的读者,可以访问/p/waf/ .2.4 开发环境正如以上所述,NS-3的脚本由C+或者Python编写。从NS-3.2开始,NS3的API提供了python语言接口,但是所有的模块都是由C+编写的。这里,我们假定读者掌握C+知识和了解面向对象的相关概念。我们将在用到一些高级的概念或者读者可能不熟悉的语言特性、习惯用语或设计模式时适当地花些时间复习它们。但是我们也不希望本教程变成C+教程,所以我们希望读者能够掌握基本的C+命令。在网站上和书籍中,你可以找到无数的关于C+知识的信息。如果读者是个C+新手,那么您在继续阅读本指南之前可能需要找一些C+教程或者网站,至少必须熟悉一下C+的基本语言特征。例如,Cplusplus教程。NS-3系统开发过程中使用了许多的GNU 工具链(toolchain)组件。所谓软件的工具链是指在给定环境中可用编程工具的集合。如果读者想要快速地了解一下GNU 工具链所包含的内容,请浏览/wiki/GNU_toolchain . NS-3使用gcc,GNU binutils,以及gdb. 但是,我们并不使用GNU编译系统工具(build system tools),既不用make,也不用autotools,而是使用Waf来作为编译管理工具。通常,NS-3使用者的工作环境为Linux或者类Linux系统。对于Windows环境,有几种可以不同程度模拟Linux环境的软件,比如Cygwin。NS-3支持在Cygwin环境下的开发。Windows用户可以浏览/获取该软件(虽然有许多工程维护者使用MinGW,但是MinGW现在还没有得到官方支持)。Cygwin可以提供许多流行的Linux系统命令。但是,某些情况下它也会出现问题,因为它毕竟只是Linux系统的模拟。Cygwin和Windows中其他程序的交互也有可能会导致程序出现问题。如果读者正在使用Cygwin或者MinGW;并使用着Logitech的某些软件产品,我们或许可以让您少点麻烦:建议您去看一看MinGW FAQ。搜索Logitech并阅读FAQ条目:“为什么当我编译源码时,make经常崩溃,留下一个sh.exe.stackdump文件”。无论您相信与否,当运行Logitech时,Logitech 进程监视器潜入了每个正在系统中运行的动态连接库(DLL)当中。它可能导致您的Cygwin或者MinGw的动态连接库奇怪地中止,常常也会阻止调试器的运行。所以当运行Cygwin的时候,一定要小心您的Logitech软件。替代Cygwin的一种选择是安装虚拟机,比如在VMware上安装Linux虚拟机。2.5 套接字编程我们假定读者对本教程所举例子中的Berkeley套接字API基本熟悉。如果您不了解套接字,我们建议您学习一下这些API和一些常见的使用例程。TCP/IP Sockets in C这本书可以帮助您很好地理解TCP/IP套接字。网站/donahoo/practical/CSockets/包含了Socket in C书中所举例子的源码。如果读者理解了该书中的前四章(如果读者没有这本书的话,可以看上面网站中的源代码),您会更好的理解本教程的内容。这里还有一本关于多播套接字(Multicast Sockets)的书籍(Multicast Sockets, Makofske and Almeroth)。如果您想学习本书中有关多播的例子,该书里面有些资料您可能需要了解。NS3的两个例子/* -*- Mode:C+; c-file-style:gnu; indent-tabs-mode:nil; -*- */ /Emacs模式行,GPL boilerplate#include ns3/core-module.h /#include ns3/simulator-module.h#include ns3/node-module.h#include ns3/helper-module.h/ Default Network Topology/ / n0 - n1 n2 n3 n4/ point-to-point | | | |/ =/ LAN using namespace ns3;NS_LOG_COMPONENT_DEFINE (SecondScriptExample);int main (int argc, char *argv)bool verbose = true; /定义变量,用于决定是否开启两个UdpApplication的Logging组件;默认true开启uint32_t nCsma = 3; /LAN中另有3个nodeCommandLine cmd;cmd.AddValue (nCsma, Number of extra CSMA nodes/devices, nCsma);cmd.AddValue (verbose, Tell echo applications to log if true, verbose); /命令行参数设置是否开启loggingcmd.Parse (argc,argv);if (verbose)LogComponentEnable(UdpEchoClientApplication, LOG_LEVEL_INFO);LogComponentEnable(UdpEchoServerApplication, LOG_LEVEL_INFO);nCsma = nCsma = 0 ? 1 : nCsma; /三目运算符还可以这样写。/*网络拓扑部分*/创建使用P2P链路链接的2个nodeNodeContainer p2pNodes;p2pNodes.Create (2);/创建另一个NodeContainer类对象,用于总线(CSMA)网络NodeContainer csmaNodes;csmaNodes.Add (p2pNodes.Get (1); /将之前P2P的NodeContianer的第二个节点(索引1)添加到CSMA的NodeContainer,以获得CSMA device;这个node将会有两个devicecsmaNodes.Create (nCsma); /再创建Bus network上另外的node/设置传送速率和信道延迟,同first.ccPointToPointHelper pointToPoint; /注意使用Helper的固定格式:/1/helper对象声明及属性设置;/2/devices对象声明及接收helper对象安装方法的返回列表,安装方法的参数为节点对象!pointToPoint.SetDeviceAttribute (DataRate, StringValue (5Mbps);pointToPoint.SetChannelAttribute (Delay, StringValue (2ms);/安装P2P网卡设备到P2P网络节点,同first.ccNetDeviceContainer p2pDevices;p2pDevices = pointToPoint.Install (p2pNodes);/类似于P2PHelper,CsmaHelper帮助创建和连接CSMA设备及信道CsmaHelper csma;csma.SetChannelAttribute (DataRate, StringValue (100Mbps); /数据率由channel属性指定,而非Device属性;/因为CSMA不允许同一信道上有多个不同数据率的设备!csma.SetChannelAttribute (Delay, TimeValue (NanoSeconds (6560); /speed-of-light delay?NetDeviceContainer csmaDevices;csmaDevices = csma.Install (csmaNodes);/安装网络协议InternetStackHelper stack;stack.Install (p2pNodes.Get (0); /P2P链路中的第一个节点stack.Install (csmaNodes); /P2P链路中的第二个节点包含在csmaNodes中Ipv4AddressHelper address; /两个网段的IP地址类对象address.SetBase (, ); /安排P2P网段的地址Ipv4InterfaceContainer p2pInterfaces;p2pInterfaces = address.Assign (p2pDevices);address.SetBase (, ); /安排CSMA网段地址Ipv4InterfaceContainer csmaInterfaces;csmaInterfaces = address.Assign (csmaDevices);/*网络拓扑部分结束*/*应用程序部分*/UdpEchoServerHelper echoServer (9);ApplicationContainer serverApps = echoServer.Install (csmaNodes.Get (nCsma); /将Server服务安装在CSMA网段的最后一个节点上,nCsma是可变的,所以不能用3serverApps.Start (Seconds (1.0);serverApps.Stop (Seconds (10.0);UdpEchoClientHelper echoClient (csmaInterfaces.GetAddress (nCsma), 9); /同first.ccechoClient.SetAttribute (MaxPackets, UintegerValue (1);echoClient.SetAttribute (Interval, TimeValue (Seconds (1.);echoClient.SetAttribute (PacketSize, UintegerValue (1024);ApplicationContainer clientApps = echoClient.Install (p2pNodes.Get (0); /同first.ccclientApps.Start (Seconds (2.0);clientApps.Stop (Seconds (10.0);/*应用程序部分结束*/*调用全局路由Helper帮助建立网络路由*/Ipv4GlobalRoutingHelper:PopulateRoutingTables (); /全局路由管理器根据节点产生的链路通告为每个节点建立路由表/*开启pcap跟踪*/pointToPoint.EnablePcapAll (second); /开启P2PHelper类对象的pcap;second为保存文件的前缀名,两句的名称相同了?/前缀后的节点号是,不用担心名称相同!/csma.EnablePcap (second, csmaDevices.Get (1), true); /开启csmaHelper类对象的pcap/使用csma网段索引为1的设备(第二个)进行sniff,True开启Promiscuous mode/NodeContainer类对象的Get方法用于获得容器中给定索引下的节点,返回指向请求节点的指针!/Node类对象的GetId返回节点的全局ID(即节点列表中的索引号)?/注意之前使用的Get是NetDevice类的方法,以下使用的是Node类的方法!/NetDevice不用取得ID,可以直接使用(已验证);但Node需要进一步查找ID!(已验证,不使用GetId无法通过)/所以后边的两句和这样的两句是等效的(已验证)/ “csma.EnablePcap (second, csmaDevices.Get (nCsma), 0);”/ “csma.EnablePcap (second, csmaDevices.Get (nCsma-1), 0);”pointToPoint.EnablePcap (second, p2pNodes.Get (0)-GetId (), 0);/最后一项为explicitFilename,默认false,不加也可;若true,将prefix作为文件名/倒数第二项promiscuous,默认false,此处仅想跟踪一个设备,故设为0(false);当有一个节点和设备的promiscuous模式设为true时,CSMA网段其它节点便不再产生trace文件。csma.EnablePcap (second, csmaNodes.Get (nCsma)-GetId (), 0, false);csma.EnablePcap (second, csmaNodes.Get (nCsma-1)-GetId (), 0, false);Simulator:Run ();Simulator:Destroy ();return 0; 2、加入wifi网络view plaincopy to clipboardprint?1. /*-*-Mode:C+;c-file-style:gnu;indent-tabs-mode:nil;-*-*/2. /*3. *Thisprogramisfreesoftware;youcanredistributeitand/ormodify4. *itunderthetermsoftheGNUGeneralPublicLicenseversion2as5. *publishedbytheFreeSoftwareFoundation;6. *7. *Thisprogramisdistributedinthehopethatitwillbeuseful,8. *butWITHOUTANYWARRANTY;withouteventheimpliedwarrantyof9. *MERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.Seethe10. *GNUGeneralPublicLicenseformoredetails.11. *12. *YoushouldhavereceivedacopyoftheGNUGeneralPublicLicense13. *alongwiththisprogram;ifnot,writetotheFreeSoftware14. *Foundation,Inc.,59TemplePlace,Suite330,Boston,MA02111-1307USA15. */16. #includens3/core-module.h17. #includens3/simulator-module.h18. #includens3/node-module.h19. #includens3/helper-module.h20. #includens3/wifi-module.h21. #includens3/mobility-module.h22. /DefaultNetworkTopology23. /24. /Wifi25. /AP26. /*27. /|28. /n5n6n7n0-n1n2n3n429. /point-to-point|30. /=31. /LAN32. usingnamespacens3;33. NS_LOG_COMPONENT_DEFINE(ThirdScriptExample);34. int35. main(intargc,char*argv)36. 37. boolverbose=true;38. uint32_tnCsma=3;39. uint32_tnWifi=3;40. CommandLinecmd;41. cmd.AddValue(nCsma,NumberofextraCSMAnodes/devices,nCsma);42. cmd.AddValue(nWifi,NumberofwifiSTAdevices,nWifi);43. cmd.AddValue(verbose,Tellechoapplicationstologiftrue,verbose);44. cmd.Parse(argc,argv);45. if(verbose)46. 47. LogComponentEnable(UdpEchoClientApplication,LOG_LEVEL_INFO);48. LogComponentEnable(UdpEchoServerApplication,LOG_LEVEL_INFO);49. 50. NodeContainerp2pNodes;51. p2pNodes.Create(2);52. PointToPointHelperpointToPoint;53. pointToPoint.SetDeviceAttribute(DataRate,StringValue(5Mbps);54. pointToPoint.SetChannelAttribute(Delay,StringValue(2ms);55. NetDeviceContainerp2pDevices;56. p2pDevices=pointToPoint.Install(p2pNodes);57. NodeContainercsmaNodes;58. csmaNodes.Add(p2pNodes.Get(1);59. csmaNodes.Create(nCsma);60. CsmaHelpercsma;61. csma.SetChannelAttribute(DataRate,StringValue(100Mbps);62. csma.SetChannelAttribute(Delay,TimeValue(NanoSeconds(6560);63. NetDeviceContainercsmaDevices;64. csmaDevices=csma.Install(csmaNodes);65. NodeContainerwifiStaNodes;66. wifiStaNodes.Create(nWifi);67. NodeContainerwifiApNode=p2pNodes.Get(0);68. YansWifiChannelHelperchannel=YansWifiChannelHelper:Default();69. YansWifiPhyHelperphy=YansWifiPhyHelper:Default();70. phy.SetChannel(channel.Create();71. WifiHelperwifi=WifiHelper:Default();72. wifi.SetRemoteStationManager(ns3:AarfWifiManager);73. NqosWifiMacHelpermac=NqosWifiMacHelper:Default();74. 75. Ssidssid=Ssid(ns-3-ssid);76. mac.SetType(ns3:NqstaWifiMac,77. Ssid,SsidValue(ssid),78. ActiveProbing,BooleanValue(false);79. NetDeviceContainerstaDevices;80. staDevices=wifi.Install(phy,mac,wifiStaNodes);81. mac.SetType(ns3:NqapWifiMac,82. Ssid,SsidValue(ssid);83. NetDeviceContainerapDevices;84. apDevices=wifi.Install(phy,mac,wifiApNode);85. MobilityHelpermobility;86. mobility.SetPositionAllocator(ns3:GridPositionAllocator,87. MinX,DoubleValue(0.0),88. MinY,DoubleValue(0.0),89. DeltaX,DoubleValue(5.0),90. DeltaY,DoubleValue(10.0),91. GridWidth,UintegerValue(3),92. LayoutType,StringValue(RowFirst);93. mobility.SetMobilityModel(ns3:RandomWalk2dMobilityModel,94. Bounds,RectangleValue(Rectangle(-50,50,-50,50);95. mobility.Install(wifiStaNodes);96. mobility.SetMobilityModel(ns3:ConstantPositionMobilityModel);97. mobility.Install(wifiApNode);98. InternetStackHelperstack;99. stack.Install(csmaNodes);100. stack.Install(wifiApNode);101. stack.Install(wifiStaNodes);102. Ipv4AddressHelperaddress;103. address.SetBase(,);104. Ipv4InterfaceContainerp2pInterfaces;105. p2pInterfaces=address.Assign(p2pDevices);106. address.SetBase(,);107. Ipv4InterfaceContainercsmaInterfaces;108. csmaInterfaces=address.Assign(csmaDevices);109. address.SetBase(,);110. address.Assign(staDevices);111. address.Assign(apDevices);112. UdpEchoServerHelperechoServer(9);113. ApplicationContainerserverApps=echoServer.Install(csmaNodes.Get(nCsma);114. serverApps.Start(Seconds(1.0);115. serverApps.Stop(Seconds(10.0);116. UdpEchoClientHelperechoClient(csmaInterfaces.GetAddress(nCsma),9);117. echoClient.SetAttribute(MaxPackets,UintegerValue(1);118. echoClient.SetAttribute(Interval,TimeValue(Seconds(1.);119. echoClient.SetAttribute(PacketSize,UintegerValue(1024);120. ApplicationContainerclientApps=121. echoClient.Install(wifiStaNodes.Get(nWifi-1);122. clientApps.Start(Seconds(2.0);123. clientApps.Stop(Seconds(10.0);124. Ipv4GlobalRoutingHelper:PopulateRoutingTables();125. Simulator:Stop(Seconds(10.0);126. pointToPoint.EnablePcapAll(third);127. phy.EnablePcap(third,apDevices.Get(0);128. csma.EnablePcap(third,csmaDevices.Get(0),true);129. Simulator:Run();130. Simulator:Destroy();131. return0;132. NS3中文教程:3下载及编译软件首先感谢此稿的翻译工作人员,正是因为他们的劳动才让我们这些初学者有捷径可取。3.1 下载ns-3从现在起,我们假定读者使用的工作环境为Linux或者仿Linux环境(Linux, Cygwin等等.) 并且已经安装了可用的GNU工具链,而且还安装了Mercurial(分布式版本控制系统)和Waf软件。细节已经在ns-3网页中详述过,参见以下链接:/getting_started.html.ns-3源码可以在网站上的Mercurial源码库下载到.你也可以从链接/releases/处下载一个tar格式压缩包,或者直接使用Mercurial从源码库下载。除非有特殊需要,我们推荐使用Mercurial从源码库下载。tar格式压缩包下载,请参见本节最后部分。最简单的方法就是使用Mercurial源码库下载一个ns-3-allinone压缩包,此压缩包内含一套脚本集来管理各种子系统下的ns-3下载和安装。我们推荐你使用这个压缩包来简化你的ns-3安装。3.1.1 使用Mercurial下载ns-3作为练习,我们首先在home目录下建立一个目录并取名为repos,用来存放本地Mercurial源码库,注意:在本教程随后内容中,我们假定你已经这样做了。如果使用如下的方法,可以在Linux的shell中下载到一份ns-3-allinone软件包(假定你已经安装了Mercurial):cdmkdir reposcd reposhg clone /ns-3-allinone当Mercurail的hg命令执行后,可以看到如下结果:destination directory: ns-3-allinonerequesting all changesadding changesetsadding manifestsadding file changesadded 31 changesets with 45 changes to 7 files7 files updated, 0 files merged, 0 files removed, 0 files unresolved当clone命令运行结束以后,在前述建立的repos目录下,会出现一个ns-3-allinone目录,而且含有如下文件:build.py* constants.py dist.py* download.py* README util.py注意:你实际上仅仅下载了一些Python脚本,下一步就是利用这些脚本根据需要下载并来安装ns-3软件包。如果你访问如下链接:/就会发现若干源码库,其中很多是ns3开发团队专用的。其中在源码库org/你会发现名为ns-3.1的源码库,这是ns-3的第一个稳定版本。还有一些分散的源码库名为ns-3.1-reftraces,它为ns-3.1保留了参考记录。保持这些文件的一致性是非常重要的,尤其是当你想对源码库做一个回归测试时。至少做一次测试来验证所有的程序都正确编译了。当前的开发版ns-3的快照存放在/ns-3-dev/中;相关的参考记录存放在链接/ns-3-dev-ref-traces/中。 ns3开发人员会尽量保持源码库中的代码处于一致,工作的状态,但是他们仍在开发中,有一些未发布过的代码。所以如果你不需要最新的特性的话还是考虑使用发行版。由于发布版的版本号在变化中,我在指南中还是继续使用通常不变的ns-3-dev,但是你可以根据自己的需要选择其他的版本,并替换这里的”ns-3-dev”,(例如, ns-3.6或ns-3.6-ref-traces),在下文中,你可以通过访问源码库列表或者访问ns3开始网页找到最新的ns-3发布版软件。当你从源码库下载完后,继续切换进入你自己建立的ns-3-allinone目录中。我们现在使用download.py脚本来下载ns-3需要使用的各个部件。继续在你的shell中输入以下命令 (如果你想使用任意发行版你可以将ns-3-dev替换为你选择的发行版的名字,例如ns-3.6 和ns-3.6-reftraces)。./download.py -n ns-3-dev -r ns-3-dev-ref-traces注意,-n选项的默认参数为ns-3-dev,-r选项的默认参数为ns-3-dev-ref-traces,所以上述命令中这两个选项的参数实际上是多余的。我们使用这个例子来描述如何指定源码库。你只需简单键入如下命令就可以使用默认参数来下载ns-3-dev:./download.py当hg (Mercurial)命令执行时,你可以看到如下的信息:# Get NS-3#Cloning ns-3 branch=hg clone /ns-3-dev ns-3-devrequesting all changesadding changesetsadding manifestsadding file changesChapter 3: Getting Started 8added 4634 changesets with 16500 changes to 1762 files870 files updated, 0 files merged, 0 files removed, 0 files unresolved这些输出信息显示下载脚本已经从源码库中下载到了实际的ns-3源码,紧接着,你就会看到这样的信息:# Get the regression traces#Synchronizing reference traces using Mercurial.=hg clone /ns-3-dev-ref-traces ns-3-dev-ref-tracesrequesting al

温馨提示

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

最新文档

评论

0/150

提交评论