子网划分与流量监控_第1页
子网划分与流量监控_第2页
子网划分与流量监控_第3页
子网划分与流量监控_第4页
子网划分与流量监控_第5页
免费预览已结束,剩余5页可下载查看

付费下载

下载本文档

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

文档简介

1、第16章IP子网划分与流量监控 在TCP/IP体系结卞中,IP协议属于网络层。网络层的功能是控制路由,确定信息传递的路径。路由是根据32位IP地址来决定的。IP地址至少可以分为两部分,分别用于标识网络和设备。作为IP编址策略的扩充,通常还会将设备部分进一步划分出子网部分,从而形成Internet层次化编址方案。层次化是组织和管理大规模复杂事物的最基本的方法,如图书、行政、物种、学科、邮政等等的组织和管理采用的都是层次化树形结构。 路由器的转发工作是基于网络的:与接收接口属于相同网络的分组不转发,否则要进行转 发。 那么如何确定两个IP地址是否属于同一个网络呢?答案是使用一个称为网络掩码(或子网

2、掩码)的位屏蔽地址指示器。在二进制表示的网络掩码中,网络地址部分为连续全1,设备 地址部分为连续全0。子网掩码告知路由器,地址的哪一部分是网络地址,哪一部分是主机地址,从而使路由器能够正确判断任意IP地址是否与接收接口在同一网段,从而正确地进行路 由和转发。实际运算方法是:将一个IP地址和相应的子网掩码进行按位的“与”运算可以得 到其网络地址标识,和网络掩码的反码进行按位的“与”运算可以得到其设备地址标识。对于 路由器来说,在判断一个IP地址是否与接收接口IP地址属于相同网络时,分别用这两个IP 地址与路由器接收接口的网络掩码进行按位的“与”运算,若运算的结果相同则表明两个IP 地址属于相同的

3、网&否则,表示它们属于不同的网络。对于主机来说,判断方法是相同的,只是判断结果说明的是两个IP地址是否属于相同的LAN网段。需要注意的是,不正确的子网 掩码配置会导致两种运行问题。一种是应该转发时却没有转发,数据包将在本子网内循环,直 到超时被抛弃,数据不能正确到达目的主机,导致网络传输错误;另一种是本来属于同一子网内的主机之间的通信被当作是跨网传输,数据包都交给缺省网关处理,增加了缺省网关的负担, 造成网络效率下降。所以,子网掩码不能任意设置。 在最初的分类地址方案中,网络掩码是确定的,A类、B类和C类地址的网络掩码分别 为255.0.0.0、255.255.0.0和255.255.255.

4、0,或分别表示为/8、/16和/24。可以看出,分类地址并不属于层次编址方案。这不仅使得这种地址在使用时不够灵活,而且更为严重的是这种 地址方案对网络地址的消耗很快,并造成路由表规模快速增长,相应造成路由设备对系统和网 络资源的需求以及所造成的负荷更快增长,工作效率快速下降。为此,编址方法转变为使用变 长子网掩码(VLSM,VariableLengthSubnetMask)和无类别域间路由(CIDR,ClasslessInterDomainRouting),从而可以形成层次化的路由方案。使用层次化路由方案,不仅降低了IP地址的消耗速度,而且通过尽可能的地址汇聚而急速降低了路由表的规模,相应地,

5、路由器对系统和网络资源的需求和造成的负荷减少了,工作效率也得以极大得提高。16.1 IP子网划分 16.1.1IP子网划分的策略 当从ISP或上级管理部门获得一组可自主分配使用的连续的IP地址块后,通常不能简单 无规划地按需要或申请顺序直接进行分配使用,而是要根据通信流量和性能的考虑将IP地址 中作为设备地址的部分进一步规划出网络层次,以更好地使用这些IP地址,这个过程就称为 IP子网划分。除了减少网络流量和提高网络性能的考虑以外,简化网络的管理和维护、扩大网络通信的地理范围等也是进行IP子网划分的原因。概念“IP子网划分”和“网络规划”很 容易被混淆。网络规划的目的是将一个大的网络划分为若干

6、较小的网络,通过网关将它们连接 起来,形成易于组织、管理和维护的层次化网络运行结构。 由于IP子网划分是借用设备地址位中最高的连续若干位转用作标识子网的网络地址位,从而将原来的设备地址划分到各个层次化的子网中,因此,用于标识子网的地址位数越多,相 应标识设备的地址位数就越少,也就是说,每个子网中可容纳的设备地址就越少。在进行IP 子网划分时,首先考虑的问题应该是网络流量和网络性能问题,即网络不宜划分得过粗而由于 流量饱和造成网络性能下降。在此前提下,网络也不宜划分得过细而使得管理复杂化。一般来 说,一个子网中的节点数太多,网络会因为广播通信而饱和,所以,网络中的主机数量的增长 是有限的,也就是

7、说,在条件允许的情况下,会将更多的主机位用于子网位。另外,由于设备地址为全0或全1的IP地址被保留用于代表网络地址和网络广播地址,不能被分配作为设备地址来使用,所以,还有两点必须明确: (1)用作网络标识的地址位最多只能为30位(即设备地址位至少要保留2位)。 (2)借位时最少要借用2位。 下面通过两个例子来说明在子网划分过程中确定网络地址位和主机地址位时应该注意的一些问题。 示例1:给定一个1个C类IP地址块:192.168.1.0/24,要求划分三个子网: 其中一个子网含有100个用户,另外两个子网含有50个用户。 通常会首先想到借用两个主机位而使用26位的子网掩码,从而可以得到4个子网,

8、它们 分别是:192.168.1.0/26,192.168.1.64/26,192.168.1.128/26和192.168.1.192/26。可是这样划分的每个子网中可用的IP地址都只有62个,不能满足其中一个子网100个用户的要求。若使 用25位的子网掩码,虽然可以满足其中一个子网100个用户的要求,但是只能获得两个子网。 要求本身并没有问题,一个C类子网的可用地址是254个,完全可以满足所有用户使用。解 决办法是先划分两个子网,然后在第二个子网上用同样方法再分一次。得到的结果是: 192.168.1.0/25,192.168.1.128/26和192.168.1.192/26。这样第一个

9、子网的IP地址有126个,第二和第三个子网的IP地址各有62个。这样就满足了给定的要求。 示例2:对于一个含有14台主机的子网最少应该保留多少个主机地址位。 常犯的错误是保留4个主机地址位,划分出一个具有16个IP地址空间的子网,而忘记了给网关分配一个地址。正确的子网划分方法是至少保留5个主机地址位,因为在这个子网中至 少需要17个IP地址:14台主机的IP地址、1个网关地址、1个网络地址和1个广播地址。所以,至少要划分一个包含32个IP地址的子网,子网掩码为255.255.255.224。 16.1.2IP子网划分的编程实践 在进行IP子网划分时,不仅要考虑目前的需要,还要了解将来可能的扩展

10、,根据具体情 况在子网地址和主机地址上都要留出适当的余量。在进行IP子网划分之前要明确以下问题: (1) 目前组织网络被规划为了几个层次? (2) 每个层次分别需要多少子网? (3) 每个层次将来可能会再扩充多少子网? (4) 每个层次中预期的最大子网规模是多少? (5) 每个层次的子网中最大的子网含有多少台主机? 以下编程实践将有助于理解IP子网划分中所涉及的若干概念。 subnet.cpp /8位组IP地址到点分表示的转换模块,在Win32中有inet_ntoa()函数。 #defineMAX_IPADDR_LEN_DOT16/包括结束符NULLchar*ToFormatDot(unsig

11、nedlongipaddr_octet) char*ipaddr_dot=newcharMAX_IPADDR_LEN_DOT; strcpy(ipaddr_dot,); for(inti=3;i=0;i-)/从高位到低位读取4个8位组 intvalue=(unsignedchar*)&ipaddr_octet)i; charstrMAX_IPADDR_LEN_DOT/4;intradix=10; _itoa(value,str,radix);strcat(ipaddr_dot,str);strcat(ipaddr_dot,.); memset(ipaddr_dot+strlen(ipaddr_

12、dot)-1,0 x00,1);/去掉最后的点分符 returnipaddr_dot; 一 / /8位组IP地址到二进制表示转换模块 char*ToFormatBin(unsignedlongipaddr_octet) char*ipaddr_bin=newcharMAX_IPADDR_LEN_BIN; strcpy(ipaddr_bin,); for(inti=3;i=0;i-)/从高位到低位读取4个8位组 intvalue=(unsignedchar*)&ipaddr_octet)i; charstrMAX_IPADDR_LEN_BIN/4; intradix=2; _itoa(value

13、,str,radix); for(intii=strlen(str);iiMAX_IPADDR_LEN_DOT-2|/长度检查和内容字符检查 (cloneindex9)&cloneindex!=.) returnRV_ERROR_FORMAT; if(cloneindex=.)cloneindex=NULL; index+; ipaddr_octet=0; char*fieldptr=clone; for(inti=3;i=0;i-)/4个字段 intvalue=0; value=atoi(fieldptr); fieldptr+=strlen(fieldptr)+1; if(value256

14、) ipaddr_octet|=valuemaxhosts_net)/主机数过多 returnRV_ERROR_TOO_MANY_HOSTS;intbits=0; inthosts=subnet.m_hosts+3;/ while(hosts0) bits+; hosts=1; intmask=0 x80000000; for(inti=1;i=1; subnet.m_mask_subnet=mask; subnet.m_maxhosts=mask-3;/子网可容纳主机数(不包括网关) returnRV_OK; 一 subnet.cpp unsignedlongunsignedlongunsi

15、gnedlongunsignedlongunsignedlong m_ip_net; m_mask_net; m_hosts; m_mask_subnet; m_maxhosts; /网络IP地址 /网络掩码 /子网主机数 /子网掩码 /子网最多主机数 /计算所需要的主机位数 加上网络地址、广播地址和网关地址 /计算子网掩码 16.2IP流量监控 IP流量监控的基本概念 对IP网络的性能进行测量、分析、评价、控制和调整工作一直是网络管理的重要内容,在网络管理中占有核心地位,而IP流量监控则是进行网络性能优化的基础。流量监控包括测 量、分析和控制三个方面。 流量测量 流量测量通常在网络的重要环节

16、进行,以检测网络性能。流量测量可以直接使用路由器或 交换机自身具备的流量测量功能,也可以在IP传输链路中串入或并入流量分析设备来获得流 量信息。在前一种方式中,大流量的数据采集会消耗设备的CPU和存储资源,采用抽样技术 却又使得相对观测粒度较粗;而在后一种方式中,则需要在网络设备中或在网络中添加专用的 高速接口数据采集和流量监测设备,增加了系统的成本投入。 流量分析 流量分析是指对被监测的流量进行过滤、存储、聚合、分析和报表等操作,可以在数据包 (Packet)、数据流(Flow)或SNMP级别进行操作。流量分析通常是从带宽、协议、网段业务、网络异常、应用服务异常等方面进行综合分析。 流量控制

17、 流量控制是指根据分析的结果和目标需求,按照一定策略对网络实施宏观(网络)或微观 (终端)的控制。相对于传统电信网严格的控制,对IP网络的控制是非常薄弱的。 IP流量监控的目的 流量监控在网络管理中占有核心地位,通过流量监控可以达到以下目的。 优化网络性能 通过流量监控可以有效发现和预防网络瓶颈,为通过流量工程设计使网络达到最优性能提 供依据。例如,通过带宽流量分析可以明确各应用所占带宽比例、重要应用是否得到了最佳带 宽、队列设置和网络优化是否生效,等等。 管理和控制业务流量 由于大多数组织的不同业务系统通常是通过VLAN来进行逻辑隔离的。因此,可以通过 积极主动地对不同VLAN的流量进行监控

18、,来实现对不同业务系统流量的分析与管理,使企业可以把握组织的核心业务,在保证服务水平的同时不断改进服务,从而为组织节约成本和创造效益。 实现对信息资产的保护 通过对异常流量的持续监控和分析,可以学习到包括网络总体流量水平、流量分布、波动 幅度、时间周期等多种网络流量测度,自动建立当前流量的置信度区间作为流量异常监测的基 础,从而可以及时发现和报警攻击流量,防止网络攻击对信息资产所造成的损失。 实现基于流量的收费 IP流量信息的标准化 IPFIX(IPFlowInformationExport,IP流信息输出规范)是IETF在2004年制订的一项规范, 目的是使网络流量统计信息的输出格式趋于标准

19、化。该协议独立于任何厂商的路由器产品 和管理系统平台,用于输出基于路由器的流量统计信息。流量监控系统一般以七个关键域来区 分不同的数据流: 源IP地址、 目的地IP地址、 源端口、 目的端口、 第三层协议类型、 服务类型(Type-of-service)字节、输入逻辑接口。此外,还允许流量监控系统使用一些附加的非关键域来对网络进行统计和跟踪,包括源IP掩码、目的IP掩码、源地址自治系统(Autonomous System)、目的地址自治系统、TCP标志、目白接口、IP下一跳,等等。 PSAMP(PacketSAMPling,IP数据包采样规范)是IETF的制订的另一项标准,它规定了对IP数据包

20、进行选择、采样和过滤的方法。虽然目前存在专门的数据包捕获设备,但其硬件成本和排它性的实施方法阻碍了它的进一步发展。PSAMP标准的推出,使得包捕获这一过 程完全可以在数据通过路由的同时来完成。更重要的是,可以在这一标准基础上,根据不同应 用环境而灵活采用不同的采样或过滤算法来实现包捕获,从而提高应用系统的灵活性和鲁棒性。在这个标准中定义了若干包捕获方法,主要有基于内容的采样、均衡的伪随机采样、根据 哈希函数的采样等。基于PSAMP协议的数据分析模块可以根据具体需求而采用相应的取样算法,可以根据实际需要来对网络流量进行选择、过滤和抽取,以减少传输和分析处理的数据量。 IP流量测量和协议分析编程

21、Windows网络体系结构与ISO/OSI模型和TCP/IP模型的对应关系如图16.1所示。从图中 可以看出,在Windows操作系统环境下,捕获数据包可以下的网络数据包可以在两个层面进行,即用户态(user-mode)和核心态(kernel-mode)。在用户态下进行网络数据包的捕获可以使用WinSock接口和WinCap接口,使用用户态接口的缺陷在于它不能阻塞、过滤和控制同一 台主机中各程序之间的通信数据,而只能监听共享网络上传送的数据报。因此,它不适用于流 量整形、QoS调度以及防火墙等软件系统的开发。在核心态进行网络数据包的拦截和处理可以使用三种方式:挂接TDI(TransferDat

22、aInterface)和SPI(ServiceProviderInterface)接口、员椁日TCP/IPWindows 网络体系结构网结体装结构 应用层表示居 应用层 应用层 应用星 用户态 会话层 会话层 WinSockAPI 传输层 传输控制层 TCPUDP protoco1 驱动程序层 tcpip,sys 网络层 网际互连层IP 数据 链路层 I.LC 网络接口层 网爆接口层 NDIS MAC子层 miniport 驱动程序呈 MC 驱动程序NDIS 物理层 物理层 HIC 图16.1Windows网络体系结构与ISO/OSI模型和TCP/IP模型的对应关系 使用ip巾ltdrv.sy

23、s提供的接口或开发NDIS中间层驱动程序。其中,挂接TDI(TransferData Interface)和SPI(ServiceProviderInterface)接口的方法不能进行网络协议栈中较低层协议的 处理;ipfiltdrv.sys接口结构简单且易于实现,但正因为其结构过于简单,并且依赖于ipfiltdrv.sys,因此,Microsoft并不推荐使用该接口。Microsoft推荐的开发方法是开发NDIS 中间层驱动程序 (NDISIntermediateDriver)。Microsoft在其免费驱动开发工具包 (DriverDevelopmentKits,DDK)中还提供了一个中间

24、层驱动程序的源代码范例Passthru,它提供 了中间层驱动程序的总体框架,可以帮助开发人员迅速掌握中间层驱动程序的实现方法。 NDIS中间层驱动程序 NDIS是Microsoft公司和3Com公司于1989年联合开发的网络驱动程序间的标准API接 口,用于屏蔽与底层NIC硬件实现密切相关的设备驱动程序,使得应用编程独立于底层NIC 硬件实现;同时,它也维护着网络驱动程序的参数和状态信息,包括指向函数的指针、句柄和 链接参数块的指针,以及其它系统参数。NDIS提供了一个函数库(也称为NDISWrapper), 库中的函数可以被MAC驱动程序调用,也可以被高层协议(如TCP/IP)驱动程序调用,

25、从而使得MAC驱动程序和协议驱动程序的开发变得更加容易,同时,也减少了驱动程序对工作 平台的依赖性。NDIS支持如下三种类型的网络驱动程序:微端口驱动程序、中间层驱动程序和协议驱动程序。其中,NDIS中间层驱动程序是一种典型的按层次结构设计的程序(如图16.2 所示),它在其上边界导出MiniportXxx函数(仅支持无连接通信),在其下边界导出ProtocalXxx 函数(既可以支持无连接通信,也可以支持面向连接的通信)。 NDIS中间层驱动程序的用途包括:局域网仿真、包过滤、加 LBFO(AdapterLoadBalancingAndFail-Over,负载平衡和失效替换) WinCap接

26、口 WinCap是一个Win32平台下用于包捕获和包分析的开源驱动类库(在Unix/Linux平台下 为libpcap) 。 它包括三个部分: 内核级包过滤器、 底层DLL (packet.dll) 和高层的独立于系统的DLL (wpcap.dll)。Winpcap提供了一个强大的网络编程接口,通过WinCap接口函数可以很方便地获得广播网络中的数据包(网卡工作在混杂模式),基于WinCap的程序也可以 很容易地在Windows各版本操作系统之间进行移植。很多网络协议分析软件和入侵检测软件都是基于Wincap开发的,如EtheReal、Sniffer、Windump(其Unix版本称为Tcpd

27、ump),等等。 /解密、压缩/解压缩、NAT、 H-工H-l 图16.2中间层驱动程序结构 Winpcap有其局限性,它不依靠主机的诸如TCP/IP协议去收发数据包。这意味着它不能 阻塞、过滤和控制同一台主机中各程序之间的通信数据,而只能监听共享网络上传送的数据报。 因此,它不适用于流量整形、QoS调度以及个人防火墙,而是特别适用于协议分析、网络监控、日志记录、TrafficGenerators、NIDS、网络扫描等。 WinSock接口 在TCP/IP协议簇(PF_INET)中,除最为广泛使用的面向连接的SOCK_STREAM类型的Socket和面向非连接的SOCK_DGRAM类型的Soc

28、ket以外, 还有一种SOCK_RAW类型的Socket,它主要有三个方面的作用: 接收或发送ICMP/IGMP数据包; 接收TCP/IP栈不能够处理的IP包(如OSPF数据包); 发送自制的起特殊作用的IP包。 在Windows操作系统环境下,SOCK_RAW类型的Socket只能监听网络层的数据包,而在 Unix/Linux操作系统环境下,它还可以监听到MAC子层的数据帧,Tcpdump就是采用这种方式来捕获混杂模式下数据包的。下面的程序是在Windows操作系统下使用SOCK_RAW类型的Socket监听网络层数据包的示例。 flow.cpp #include #include #pra

29、gmacomment(lib,ws2_32.lib) #defineSOCK_INET_MODEL_NONE0 #defineSOCK_INET_MODEL_CLIENT1 #defineSOCK_INET_MODEL_SERVER2 SOCKETCreateInetSocket(intclient_or_server,intsocketype,intprotocol,intserverport)intrv;启动Winsockunsignedversion_major=2;unsignedversion_minor=2;WORDwVersionRequested; wVersionReques

30、ted=MAKEWORD(version_major,version_minor);/版本2.0WSADATAwsaData;/返回的WinSockDLL信息rv=WSAStartup(wVersionRequested,&wsaData);/启动Winsock if(rv!=0)return-1;/如果无法找到可用的WinSockDLL,返回 /确认WinSockDLL支持2.2。注意:即使DLL支持比2.2更高的版本/也会返回2.2,因为这是要求的版本。if(LOBYTE(wsaData.wVersion)!=version_major|/如果无法找到可用的HIBYTE(wsaData.w

31、Version)!=version_minor)/WinSockDLL WSACleanup();/则清理环境并返回 return-1;/为通信端点分配资源,并建立五元组(协议,本地端口和IP地址,远端端口和IP地址) /之协议元SOCKETsocket=socket(AF_INET,socketype,protocol);if(socket=INVALID_SOCKET)return-1;/设置通信端点的数据结构参数,如五元组之端口和IP地址,各种选项等 BOOLbopt=TRUE;rv=setsockopt(socket,SOL_SOCKET,SO_REUSEADDR,(char*)&bo

32、pt,sizeof(bopt);/设置选项参数 if(rv=SOCKET_ERROR)return-1;SOCKADDR_INlocal_sockaddr;local_sockaddr.sin_family=AF_INET;/如某是服务器则曾置监听端门if(client_or_server=INET_MODEL_SERVER)local_sockaddr.sin_port=htons(serverport); #defineMAX_HOSTNAME_LAN256 charnameMAX_HOSTNAME_LAN; rv=gethostname(name,MAX_HOSTNAME_LAN); i

33、f(rv=SOCKET_ERROR)-return-1; structhostentFAR*phostent;phostent=gethostbyname(name);memcpy(&sa.sin_addr.S_un.S_addr,pHostent-h_addr_list0,phostent-h_length); /设置五元组之本地二元-本地端口和IP地址rv=bind(socket,(PSOCKADDR)&local_sockaddr,sizeof(local_sockaddr); if(rv=SOCKET_ERROR)return-1; /如果是服务器则设置接收报文的队列,并通过accep

34、t从队列中取报文进行处理 if(client_or_server=INET_MODEL_SERVER&socketype=INET_SOCKET_TYPE_TCP)intqueuelen=5; rv=listen(socket,queuelen);if(rv=SOCKET_ERROR)return-1; )returnsocket; )/voidFreeInetSocket(SOCKETsocket) closesocket(socket);/释放为通信端点分配的资源 WSACleanup();/清理环境 )/intSetIOControl(SOCKETsocket,intio_control

35、)DWORDdwBufferInLen=1;DWORDdwBufferOutLen10;DWORDdwBytesReturned=0;rv=WSAIoctl(sock,io_control,&dwBufferInLen,sizeof(dwBufferInLen),dwBufferOutLen,sizeof(dwBufferLen),&dwBytesReturned,NULL,NULL); if(rv=SOCKET_ERROR)returnRV_FAILURE; returnRV_OK; )一 / intReceive(SOCKETsocket,char*pbuf,intbuf_len) int

36、flags=0; structsockaddripaddr_remote; intlen_ipaddr; intrv=recvfrom(socket,pbuf,buf_len,flags,(structsockaddr*)&ipaddr_remote,&len_ipaddr); (rv=SOCKET_ERROR)-?return0:returnlen;一一 ) / structIP_HEADER/该数据结构为机器内部表示LittleEndian m_hdrlen:4; m_version:4; m_tos;/typeofservice m_totalen;/lengthofthepacket

37、m_id;/uniqueidentifier m_frag_offset:13; m_frag_more:1; m_frag_dont:1; m_frag_reserved:1; m_ttl; m_protocol;/protocol(IP,TCP,UDPetc) m_checksum; m_ip_src; m_ip_dst; );unsignedcharunsignedcharunsignedcharunsignedshortunsignedshortunsignedshortunsignedshortunsignedshortunsignedshortunsignedcharunsigne

38、dcharunsignedshortunsignedintunsignedint /该数据结构为机器内部表示BigEndian m_sport; m_dport; m_seq; m_ack; m_lenres; m_flag_FIN:1; unsignedcharm_flag_SYN:1;unsignedcharm_flag_RESERVED:2; unsignedshortm_win; unsignedshortm_sum; unsignedshortm_urgentptr; ;一 /应用示例:解析IP和TCP数据。该例程作为一个单独的线程来运行, voidMonitorFlow() intport=7000; SOCKETsocket=CreateInetSocket(SOCK_INET_MODEL_NONE,SOCK_RAW,IPPROTO_IP,7000); if(socket=-1)return; #defineSOCK_INET_RECV_BUF_LEN2048 charpbufSOCK_INET_RECV_BUF_LEN;/缓冲单个数据包 while(!isOver)/is

温馨提示

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

最新文档

评论

0/150

提交评论