




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机网络原理第六章传输层传输层是整个协议层次结构的核心。传输服务传输协议要素传输服务提供给高层的服务服务质量传输服务原语伯克利套接字提供给高层的服务传输层的最终目标是向其用户——一般是指应用层的进程,提供有效、可靠且价格合理的服务。为了达到这一目标,传输层利用了网络层所提供的服务。传输实体:传输层中完成上述工作的实体。传输实体可能在操作系统内核中,或在一个单独的用户进程内,也可能包含在网络应用的程序库中,或是位于网络接口卡上。网络层、传输层、应用层的逻辑关系在网络层,有两种网络服务:面向连接、无连接在传输层,也有两种服务:面向连接的传输服务,无连接的传输服务两层的面向连接服务在很多方面类似:都包括三个阶段:建立连接、数据传输、释放连接寻址和流量控制方式也类似。两层的无连接服务也类似。为什么要区分这两层?由于用户无法对子网加以控制,因此他们便不能通过换用更好的路由器或增强数据链路层的纠错能力来解决网络层服务质量低劣问题。有了传输层,用于各种网络的应用程序便能采用一个标准的原语集来编写,而不必担心不同的子网接口和不可靠的数据传输。传输层起着将子网的技术、设计和各种缺陷与上层相隔离的关键作用。服务质量从另一个角度来看,可以将传输层的主要功能看作是增强网络层提供的服务质量若网络服务很完备,则传输层的工作就很容易若网络服务很差,则传输层必须弥补传输用户的要求与网络层提供的服务之间的差别。传输服务允许用户在建立连接时对各种服务参数指定希望的、可接受的最低限度的值。传输层根据网络服务的种类或它能够获得的服务来检查这些参数,决定能否提供所要求的服务。传输层服务质量的典型参数连接建立延时:从传输服务用户要求建立连接到收到连接确认之间所经历的时间。包括远端传输实体的处理时间。连接建立失败的概率:在最大连接建立延时时间内连接未能建立的可能性。吞吐率:每秒传输的用户数据的字节数。传输延时:从源端机器传输用户发送报文开始到目的机器传输用户接收到报文为止所经历的时间。残余误码率:用于测量丢失或错乱报文数占整个发送的报文数的百分比。(安全)保护:为传输用户提供了一种方法,让传输层提供保护,以防止未经授权的第三方读取或修改数据。优先级:为传输用户提供了一种用以表明哪些连接更为重要的方法,当发生拥塞事件时,确保高优先级的连接较低优先级的连接先获得服务。恢复功能:给出了当出现内部问题或拥塞情况下,传输层本身自发终止连接的可能性。服务质量参数是传输用户在请求建立连接时设定的。表明了希望值和最小可接受的值。在某些情况下,传输层通过检查服务质量参数可以发现其中某些值是无法达到的,这时,传输层甚至不去与目的机器连接,便直接通知传输用户连接请求失败。选项协商:在远端机器不能处理源机器建议的值,但可以处理高于最小可接受值的值时,就可进行协商,这一过程称选项协商。传输服务原语传输服务原语允许传输用户(如应用程序)访问传输服务。每种传输服务均有各自的访问原语。虽然传输服务与网络服务类似,但也存在一些显著差别:网络服务倾向于将实际网络提供的服务模型化。由于网络可能会丢失数据分组,所以网络服务一般不太可靠。相反,面向连接的传输服务则是可靠的。虽然实际的网络传输可能存在差错,但在不可靠的网络之上提供可靠的服务正是传输层要实现的目标。另一方面,传输层提供的服务也可能不可靠,但这种情况发生的概率很小。网络层与传输层的另一区别:服务对象不同网络服务只用于传输实体,用户或程序很少能看到网络服务,但可以看到传输原语。一个实例:一台服务器与多台远程客户的应用例子。首先,服务器执行一条侦听(LESTEN)原语,一般地是通过调用一个库例程,从而引发一系统调用以阻塞服务器直至一客户服务请求出现。当一客户试图与服务器对话时,它便执行一条连接(CONNECT)原语。传输实体在执行这条原语时要阻塞该客户并向服务器发送一个数据分组。客户的连接请求TPDU被传送到服务器。当该TPDU到达后,传输实体检查服务器是否阻塞于侦听状态,若是,则唤醒服务器并向发出连接请求的客户回送一个接受连接TPDU;当该TPDU到达后,客户被唤醒,连接即告建立。连接建立后,就可用SEND,RECEIVE原语交换数据。连接的释放:非对称,对称非对称释放:任何一方均可执行DISCONNECT原语,向对方传输实体发送释放连接的TPDU,一旦该TPDU到达,连接即被释放。对称释放:连接的每一方单独关闭,相互独立。当一方执行了DISCONNECT后,意味着它不再发送数据,但仍能接收数据。只有当连接的双方均执行了DISCONNECT原语时,才能释放连接。伯克利套接字套接字程序设计的例子(客户端)
p415~419#defineSERVER_PORT12345#defineBUF_SIZE4096intmain(intargc,char**argv){intc,s,bytes;charbuf[BUF_SIZE];structhostent*h;/*infoaboutserver*/structsockaddr_inchannel;/*holdsIP
address*/if(argc!=3)fatal(“Usage:clientserver-namefile-name”);h=gethostbyname(argv[1]);/*lookup
host’sIPaddress*/if(!h)fatal(“gethostbynamefailed”);
s=socket(“PF_INET,SOCK_STREAM,IPPROTO_TCP”);if(s<0)fatal(“socket”);memset(&channel,0,sizeof(channel));channel.sin_family=AF_INET;memcpy(&channel.sin_addr.s_addr,h->h_addr,h->h_length);channel.sin_port=htons(SERVER_PORT);c=connect(s,(structsockaddr*)&channel,sizeof(channel));if(c<0)fatal(“connectfailed”);/*Connectionisnowestablished.Sendfilenameincluding0bybyteatend.*/write(s,argv[2],strlen(argv[2]+1));while(1){bytes=read(s,buf,BUF_SIZE);
/*readfromsocket*/if(bytes<=0)exit(0);
/*checkforendoffile*/write(1,buf,bytes);
/*writetostandardoutput*/}}套接字程序设计的例子(服务器端)(1)#defineQUEUE_SIZE10intmain(intargc,char*argv[]){ints,b,l,fd,sa,bytes,on=1;charbuf[BUF_SIZE];structsockaddr_inchannel;memset(&channel,0,sizeof(channel));channel.sin_family=AF_INET;channel.sin_addr.s_addr=htonl(INADDR_ANY);channel.sin_port=htons(SERVER_PORT);s=socket(“AF_INET,SOCK_STREAM,IPPROTO_TCP”);if(s<0)fatal(“socketfailed”);setsockopt(s,SOL_SOCKET,SO_REUSEADDR,(char*)&on,sizeof(on));b=bind(s,(structsockaddr*)&channel,sizeof(channel));if(b<0)fatal(“bindfailed”);套接字程序设计的例子(服务器端)(2)
l=listen(s,QUEUE_SIZE);if(l<0)fatal(“listenfailed”);while(1){sa=accept(s,0,0);if(sa<0)fatal(“acceptfailed”);read(sa,buf,BUF_SIZE);/*readfilenamefromsocket*/fd=open(buf,O_RDONLY);/*openthefiletobesentback*/if(fd<0)fatal(“openfailed”);while(1){bytes=read(fd,buf,BUF_SIZE);/*readfromfile*/if(bytes<=0)break;/*checkforendoffile*/write(sa,buf,bytes);/*writebytestosocket*/}close(fd);}close(sa);}传输协议要素传输服务是通过建立连接的两个传输实体之间所用的传输协议来实现的。在某些方面,传输协议类似于数据链路层协议。两者都必须解决差错控制、分组顺序、流量控制等问题。但两者也存在显著的差异:主要由协议运行的环境造成的。在链路层,两个路由器通过物理通道直接通信;而在传输层,这个物理通道由整个子网所取代。首先,在数据链路层,不必为一个路由器指明它要与哪个路由器通话,而在传输层则需要显示指出。其次,在数据链路层,建立连接的过程很简单,而在传输层,初始连接的建立要复杂得多。再次,子网的存储能力。数量上的差别:在两层中都需要有数据缓冲和流量控制,但在传输层中出现的大量的、动态变化的连接要求可能需要使用与在数据链路层中不同的处理方法。寻址当一个应用程序希望与一个远程应用程序建立连接时,必须指定与哪个应用程序相连,一般采用的方法是定义进程可以侦听连接请求的传输地址。在因特网中,这些端点是(IP地址,本地端口)对。在传输层,中性术语:传输服务访问点TSAP在网络层,中性术语:NSAP,IP地址就是NSAP在因特网中的例子。建立连接初看起来,一个传输实体似乎只需向目的机器发送一个连接请求,并等待对方接受连接的应答就足够了,但当网络可能丢失、存储、出现重复分组时,问题会变得复杂。问题会变得复杂的例子P378问题的关键是由于子网中存在着延时的重复分组。解决的方法:1、废弃使用过的传输地址。2、给每个连接分配一个连接标识符。三次握手的方法三次握手主机1选择一个序号X并向主机2发送一包含了该序号的连接请求TPDU;接着,主机2回应一个接受连接TPDU,确认X并声明自己所选用的初始序号Y;最后,主机1在其发送的第一个数据TPDU中确认主机2所选择的初始序号。第一个TPDU是来自于一个已经释放的连接的延时重复的连接请求,该TPDU在主机1毫不知晓的情况下到达主机2。主机2通过向主机1发送一个接受连接TPDU来响应该TPDU,而该接受连接TPDU的真正目的是要证实主机1确实试图建立一个新的连接。当主机1拒绝接受主机2时,主机2便明白是重复分组。主机2收到了一个延时的CR和一个对ACC的确认并做了确认应答。主机2已经建议使用Y作为从主机2到主机1进行数据传输的初始序号,因此主机2清楚以后不会再出现有序号Y或对Y进行确认的TPDU。当第二个延时的TPDU到达主机2时,主机2根据它应确认的是序号Z而不是Y知道这是一个过时的重复TPDU。释放连接终止连接有两种方式:对称、非对称非对称释放很突然,因而可能导致丢失数据当连接建立后,主机1发送了一个数据TPDU并正确抵达主机2,接着,主机1发送了另一个数据TPDU,这次很不幸,主机2在收到第二个TPDU之前先发出了DISCONNECT,结果连接被释放,数据被丢失。流量控制和缓冲策略在考察了连接的建立及释放之后,接下来讨论连接在使用时是如何管理的。首先要讨论的一个关键性问题是流量控制。传输层中的流量控制问题在某些方面与数据链路层相同,但在另外一些方面有区别。基本相似之处:均需采用滑动窗口或其他机制。主要区别:路由器通常只有相对较少的连接线路,而主机则可以有很多个连接。这一区别决定了不可能在传输层中采用数据链路层中实施的缓冲策略。在第3章的数据链路层协议中,各帧在发送端路由器和接收端路由器中被缓冲起来。例如,在协议6中,发送方和接收方都需要为每条连接线预留MaxSeq+1个缓冲区,其中一半用于输入,一半用于输出。对于一台最多连接数目为64,序号长4比特的主机,采用这种协议需要1024个缓冲区。在数据链路层,发送方必须要将发出的帧暂时存起来,因为这些帧有可能重发。若子网提供数据报服务,发送方的传输实体也必须对数据进行缓存。若接收方知道发送方暂存了所有未被确认的TPDU,那么接收方可以根据需要,或为特定的连接预留一定数目的缓冲区,或不预留。举例接收方可以建立一个缓冲池供所有连接共享。当一个TPDU到达后,便动态申请一个新的缓冲区。若申请到了,该TPDU便被接受;否则将其丢弃。因为发送方随时准备重发被子网丢弃的TPDU,所以接收方丢弃TPDU不会造成任何危害,仅仅是浪费了一些资源。发送方不断重发数据直到它们收到确认为止。若网络服务不可靠,则发送方必须像链路层一样缓存所发送的TPDU。在可靠的网络服务下,可采取其他的折衷方案。若发送方知道接收方总是有缓存空间时,则它便无须再保存所发送的TPDU的备份。若接收方不能保证对每个到达的TPDU均予以接受,则发送方无论如何都得保存所发出的TPDU。在后一种情况下,发送方不能相信网络层的确认信息,因为该确认只是表明TPDU到达了目的地,而不表明它被接受了。流控和缓存(FlowControlandBuffering)缓存:由于网络层服务是不可靠的,传输层实体必须缓存所有连接发出的TPDU,而且为每个连接单独做缓存,以便用于错误情况下的重传。接收方的传输层实体既可以做也可以不做缓存。缓存区的设计有三种。流控:传输层利用可变滑动窗口协议来实现流控。所谓可变滑动窗口协议,是指发送方的发送窗口大小是由接收方根据自己的实际缓存情况给出的。为了避免控制TPDU丢失导致死锁,主机应该周期性的发送TPDU。多路复用在连接、虚电路及物理链路上,多路复用几组对话的方法在网络结构的许多层上都有一定的作用。在传输层中对多路复用技术的需要表现在很多方面。例如,子网内部使用虚电路的网络中,每个接通的连接在连接的整个阶段均需占据路由器中的一些表空间。若缓冲区是被分配给每个路由器中的虚电路的,则登陆到远程机器上的用户离开终端去做别的事时,他仍然在耗费着昂贵的资源。为减轻上述资源浪费,使不同的传输连接复用到同一网络连接上的技术便很有吸引力。这种形式的多路复用成为向上多路复用。P390;新P434若用户需要高带宽的连接时,可采用向下多路复用。若子网需要n位序号作为一个滑动窗口的流量控制,则当有2n-1个分组未被确认,用户就必须停止发送,等待这些分组到达远端主机并得到确认。若物理连接是通过卫星相连,则用户便被严格限制在每540ms传送2n-1个分组的速率上。例如,当n=8,并且分组大小为128字节时,可用带宽大约是484kb/s,即使物理通道带宽比它高出100倍,也是枉然。若向下复用K条网络连接,则有效带宽将增加K倍。因特网的传输层UDPUDP计算检验和的方法和计算IP数据报首部检验和的方法相似。在发送端,首先是先将全零放入检验和字段。再将伪首部以及UDP用户数据报(现在要包括数据字段)看成是由许多16BIT的字串接起来。若UDP用户数据报的数据部分不是偶数个字节,则要填入一个全零字节(但此字节不发送)。然后按二进制反码计算出这些16BIT字的和。将此和的二进制反码写入检验和字段后,发送此UDP用户数据报。在接收端,将收到的UDP用户用户数据报连同伪首部(以及可能性的填充全零字节)一起,按二进制反码求这些16BIT字的和。当无差错时其结果应为全1。两个数进行二进制反码求和的运算规则:从低位到高位逐列进行计算。0和0相加是0,0和1相加是1,1和1相加是0但要产生一个进位1,加到下一列。若最高位相加后产生进位,则最后得到的结果要加1。TCP协议传输的可靠是由于使用了序号和确认。当TCP发送一报文段时,它同时也在重传队列中放入一个副本。若收到确认,则删除此副本。若在计时器时间到之前没有收到确认,则重传此报文段。TCP的确认并不保证数据已交付给端用户。这是接收TCP的责任。源端口和目的端口:各占2个字节。16BIT的端口号加上32BIT的IP地址,构成了插口(SOCKET),它相当于传输层服务访问点TSAP的地址(总共是48BIT)。这些端口用来将若干高层协议向下复用,也用来将传输层协议向上分用。
序号:占4字节。TCP传送的报文可看成为连续的数据流,其中每一个字节都对应于一个序号。首部中的“序号”则指的是本报文段所发送的数据中第一个字节的序号。例如,某报文段的序号字段的值是301,而携带的数据共100字节,则本报文段的数据的第一个字节的序号是301,而最后一个字节的序号是400。这样,下一个报文段的数据序号应当从401开始,因而下一个报文段的序号字段的值应为401。确认序号:占4字节,是期望收到对方的下一个报文段的数据的第一个字节的序号,也就是期望收到的下一个报文段首部的序号字段的值。正确收到了一个报文段,其序号字段的值是501,而数据长度是200字节,这就表明序号在501~700之间的数据均已正确收到
。因此在响应的报文段中应将确认序号置为701。数据偏移:占4BIT,它指出数据开始的地方离TCP报文段的起始处有多远。这实际上就是TCP报文段首部的长度。“数据偏移”的单位不是字节而是32BIT字(即4字节字)。由于4BIT能够表示的最大十进制数字是15,因此数据偏移的最大值是60字节,这也是TCP首部的最大长度。保留:占6BIT,保留为今后使用,但目前应置为0。紧急比特URG(URGENT)当URG=1时,表明紧急指针字段有效。当使用紧急比特并将URG置1时,发送应用进程应告诉发送TCP这两个字符是紧急数据。紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。确认比特ACK只有当ACK=1时确认序号字段才有效。当ACK=0时,确认序号无效。推送比特PSH(PUSH)当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的响应。这时,发送端TCP将推送比特PSH置1,并立即创建一个报文段发送出去。接收TCP收到推送比特置1的报文段,就尽快交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。复位比特RST(RESET)当RST=1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立传输连接。还用来拒绝一个非法的报文段或拒绝打开一个连接。同步比特SYN在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意建立连接,则应在响应的报文段中使SYN=1和ACK=1。因此,同步比特SYN置为1,就表示这是一个连接请求或连接接受报文。终止比特FIN(FINAL)用来释放一个连接。当FIN=1时,表明此报文段的发送端的数据已发送完毕,并要求释放传输连接。窗口
占2字节。窗口字段用来控制对方发送的数据量,单位为字节。TCP连接的一端根据自己缓存的空间大小再确定自己的接收窗口大小,然后通知对方来确定对方的发送窗口。检验和
占2字节。检验和字段检验的范围包括首部和数据这两部分。和UDP用户数据报一样,在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。但应将伪首部第四个字段中的17改为6,将第五字段中的UDP长度改为TCP长度。选项长度可变。TCP只规定了一种选项,即最大报文段长度MSS(MAXIMUMSEGMENTSIZE)。MSS的选择并不简单。若选择较小的MSS长度,网络的利用率就降低。设想在极端的情况下,当TCP报文段只含有1字节的数据时,在IP层传输的数据报的开销至少有40字节(包括TCP报文段的首部和IP数据报的首部)。这样,对网络的利用率就不会超过1/41。到了数据链路层还要加上一些开销。但反过来,若TCP报文段非常长,那么在IP层传输时就有可能要分解成多个短数据报片。在目的站要将收到的各个短数据报片装配成原来的TCP报文段。当传输出错时还要进行重传。这些也都会使开销增大。一般认为,MSS应尽可能大些,只要在IP层传输时不需要再分片就行。则MSS的默认值是536字节长。MSS是TCP报文段中的数据字段的最大长度。在连接建立时,双方要商定初始序号。TCP每次所发送的报文段的首部中的序号字段数值表示该报文段中的数据部分的第一个字节的序号。TCP的确认是对接收到的数据的最高序号(即收到的数据流中的最后一个序号)表示确认。但接收端返回的确认序号是已收到的数据的最高序号加1。不必专门发送报文段,而可以在传送数据时顺便把确认信息捎带传送。TCP流量控制利用可变窗口大小进行流量控制,双方确定的窗口值是400TCP定时器设置由于TCP的下层是一个互连网环境,IP数据报所选择的路由变化很大。因而传输层的往返时延的方差也很大。
往返时延的自适应算法:记录每一个报文段发出的时间,以及收到相应的确认报文段的时间。这两个时间之差就是报文段的往返时延。将各个报文段的往返时延样本加权平均,就得出报文段的平均往返时延RTT。每测量到一个新的往返时延样本,就按下式重新计算一次平均往返时延RTT:平均往返时延RTT=α×(旧的RTT)+(1-α)×(新的往返时延样本)0≤α<1(Jacobson算法)典型的α值为7/8。超时重传时间RTO(RetransmissionTime-Out):计时器的RTO应略大于上面得出的RTT,即RTO=β×RTT。这里β是个大于1的系数。若取β很接近于1,发送端可及时地重传丢失的报文段,因此效率得到提高。但若报文段并未丢失而仅仅是增加了一点时延,那么过早地重传反而会加重网络的负担。TCP原先的标准推荐将β值取为2。更复杂也更精确的超时重传时间(或超时间隔)计算公式:P471TCP连接管理TCP传输连接管理:传输连接就有三个阶段,即:连接建立数据传送连接释放传输连接的管理就是使传输连接的建立和释放都能正常地进行。连接建立过程中要解决以下三个问题:要使每一方能够确知对方的存在要允许双方协商一些参数(如最大报文段长度,最大窗口大小,服务质量等)能够对传输实体资源(如缓存大小,连接表中的项目等)进行分配TCP的正常的连接建立和关闭:(状态的解释见P463)
TCP拥塞控制当加载到某个网络上的载荷超过其处理能力时,拥塞现象便会出现。尽管网络层也在设法控制拥塞现象的发生,但这项任务大部分是由TCP来完成的,因为对拥塞现象最切实的办法是降低数据传输率。理论上,拥塞现象借用物理层的规则便可以得到控制:分组保持规则。意思是只有当一个老的分组离开网络后(即被发送出去)再向网络中注入新的分组。TCP试图通过动态地控制滑动窗口的大小来达到这一目的。控制拥塞的第一步是要检测它。以前,检测拥塞很困难。无法分清分组丢失的两个原因:传输线路噪声干扰,拥塞。现在,有线传输介质非常可靠,因此,大多数超时现象都是由于拥塞造成的。因特网上所有的TCP算法都假设分组传输超时是由拥塞引起的,并且以监控定时器超时作为出现问题的信号。怎样防止拥塞现象出现?在建立一个连接链路时,连接双方已经选定了一个合适的滑动窗口大小。接收方可以根据其缓冲区大小指定窗口大小。若发送方按照这个窗口大小发送数据,则在接收端不会由于缓冲区溢出而引起问题,但还可能由于网络的内部拥塞而引发。P415页图所示对于因特网来说是要意识到存在两个潜在的问题——网络的容量和接收方的容量——并分别进行处理。为此,每个发送方均保持两个窗口:接收方承认的窗口和拥塞窗口。每个窗口都反应出发送方可以传输的字节数。取最小值作为可以发送的字节数。有效窗口为发送方和接收方分别认为合适的窗口中最小的那个。快网络小缓存接收者慢网络大缓存接收者导致网络拥塞的两个潜在因素是:网络能力和接收能力。当建立连接时,发送方将拥塞窗口大小初始化为该连接所用的最大数据段的长度值,并随后发送一个最大长度的数据段。若该数据段在定时器超时之前得到确认,那么发送方会在原拥塞窗口的基础上再增加一个数据段的字节数,使其为两倍最大数据段的大小,然后再发送两个数据段。当这些数据段中的每一个都被确认后,拥塞窗口大小就再增加一个最大数据段的长度。每次成功,都会是拥塞窗口大小加倍。拥塞窗口保持指数规律增大,直到数据传输超过或达到接收方设定的窗口大小。若发送的数据长度序列,如1024,2048,4096字节都工作正常,但发送8192字节出现超时,那么拥塞窗口应设置为4096以避免出现拥塞。这种算法称为慢启动,但它并不慢,因为是按指数规律增加的。所有的TCP实现都必须支持这种方法。因特网的拥塞控制算法它需要三个参数。其中第三个是临界值(threshold),初始化为64KB;另外两个为接收方窗口和拥塞窗口。若发生数据传输超时,将临界值设置为当前拥塞窗口大小的1/2,并使拥塞窗口恢复为最大数据段的大小。慢速启动除了决定当窗口大小达到临界值时使其停止按指数增加外,还决定网络在此以后如何进行。从达到临界值这点开始,成功的数据传输要求拥塞窗口按线性进行增加(对每个字符组按最大数据段的值增加),而非
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年初级银行从业资格之初级个人理财考前冲刺模拟试卷B卷含答案
- 社团活动精细化管理计划
- 2025年公寓的标准租赁合同
- 2025合同管理的核心原则与实践合同法
- 2025租房合同范本「正式版」
- 学习方式变革与推广计划
- 机车双机重联连接总风管得原因
- 货车内循环和外循环的详细说明
- 上门喂养宠物协议合同样本
- 出国干活签合同标准文本
- 读书笔记PPT-余秀华-秋叶PPT
- 灯具安装施工组织设计(完整版)
- 网络项目割接方案V8
- 归档病历交接登记表
- 水利工程监理安全台账
- 人教版小学语文二年级《雷雨》PPT课件
- (医疗药品)药店拆零药品记录表
- 欧标电缆外径表
- 现浇箱梁盘扣式现浇支架施工方案(通过专家论证)
- 热质交换课第05讲(习题课1)
- 《美丽的集邮册》朗诵
评论
0/150
提交评论