icmp报文格式 各种_第1页
icmp报文格式 各种_第2页
icmp报文格式 各种_第3页
icmp报文格式 各种_第4页
icmp报文格式 各种_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

28/28ICMP分析文档说明:由于排版的问题,请在“视图”中选择“Web版式”进行阅读。目录TOC\o"1-6"\h\zHYPERLINK1.2 各种类型的ICMP报文的格式ﻩPAGEREF_Toc48125426\h2HYPERLINK\l"_Toc48125427"1.2.1ﻩICMP请求和回答报文格式 PAGEREF_Toc48125427\h3HYPERLINK\l”_Toc48125428"1。2.2 ICMP差错报文格式ﻩPAGEREF_Toc48125428\h4HYPERLINK1.2.2。1 ICMP重定向报文格式ﻩPAGEREF_Toc48125429\h4HYPERLINK\l”_Toc48125430"1。2。2.2 目的不可达差错报文格式 PAGEREF_Toc48125430\h4HYPERLINK4ﻩICMP状态机ﻩPAGEREF_Toc48125434\h24HYPERLINK\l”_Toc48125435"5ﻩICMP接口ﻩPAGEREF_Toc48125435\h57HYPERLINK\l"_Toc48125436”5.1 数据接口ﻩPAGEREF_Toc48125436\h59HYPERLINK\l”_Toc48125437"5.1.1 ICMP模块和下层的接口ﻩPAGEREF_Toc48125437\h60HYPERLINK5。1.1.2ﻩICMP模块——〉IP层ﻩPAGEREF_Toc48125439\h72HYPERLINK\l"_Toc48125440"5.1.2 ICMP模块和上层的接口 PAGEREF_Toc48125440\h93HYPERLINK\l”_Toc48125441"5。1.2.1 ICMP模块——〉上层ﻩPAGEREF_Toc48125441\h94HYPERLINK\l"_Toc48125442”5。1。2.1.1ﻩpr_ctlinput函数 PAGEREF_Toc48125442\h95HYPERLINK\l”_Toc48125443"5.1.2.1.2ﻩrtredirect函数ﻩPAGEREF_Toc48125443\h115HYPERLINK\l"_Toc48125444"5.1.2。1。3ﻩpfctlinput函数ﻩPAGEREF_Toc48125444\h138HYPERLINK5.1。2。1.4ﻩrip_input函数 445\h164HYPERLINK\l"_Toc48125446”5.1.2.2 上层——>ICMP模块 PAGEREF_Toc48125446\h175HYPERLINK\l”_Toc48125447"5。1.2.2。1 icmp_error函数ﻩPAGEREF_Toc48125447\h176HYPERLINK5.2ﻩ控制接口 PAGEREF_Toc48125449\h215HYPERLINK\l"_Toc48125450"5.2。1ﻩ概况ﻩPAGEREF_Toc48125450\h216HYPERLINK\l"_Toc48125451"5。2.2 rip_ctloutput函数 PAGEREF_Toc48125451\h227HYPERLINK\l"_Toc48125452"5。2.3ﻩrip_usrreq函数 PAGEREF_Toc48125452\h250HYPERLINK\l"_Toc48125453”5。2.4ﻩicmp_sysctl函数ﻩPAGEREF_Toc48125453\h255HYPERLINK\l”_Toc48125454"5。3 OS接口ﻩPAGEREF_Toc48125454\h274HYPERLINK\l”_Toc48125455"5.3.1ﻩmicrotime函数ﻩ125455\h275HYPERLINK\l”_Toc48125456"5.3.2ﻩm_freem函数ﻩPAGEREF_Toc48125456\h288HYPERLINK\l”_Toc48125457"5.3.3ﻩm_gethdr函数 PAGEREF_Toc48125457\h299HYPERLINK\l"_Toc48125458"5.3.4ﻩm_get函数 PAGEREF_Toc48125458\h307HYPERLINK\l"_Toc48125459”6 ICMP指标 PAGEREF_Toc48125459\h320HYPERLINK\l"_Toc48125460"6.1ﻩICMP主机需求指标(RFC1122) 321HYPERLINK\l”_Toc48125461"6.1。1ﻩ概要分析(GENERALISSUES)ﻩPAGEREF_Toc48125461\h324HYPERLINK\l”_Toc48125462"6.1.2 细节问题(SPECIFICISSUES)ﻩPAGEREF_Toc48125462\h335HYPERLINK\l”_Toc48125463"6。1.2。1ﻩ目的不可达ﻩPAGEREF_Toc48125463\h336HYPERLINK6.1.2。2 重定向ﻩPAGEREF_Toc48125464\h342HYPERLINK6。1.2。4ﻩ超时ﻩPAGEREF_Toc48125466\h351HYPERLINK\l"_Toc48125467"6.1。2。5ﻩ参数问题ﻩPAGEREF_Toc48125467\h353HYPERLINK\l"_Toc48125468"6.1。2.6ﻩ回显ﻩPAGEREF_Toc48125468\h357HYPERLINK\l"_Toc48125469"6。1.2。7ﻩ信息 PAGEREF_Toc48125469\h367HYPERLINK\l"_Toc48125470"6.1。2。8ﻩ时间戳ﻩPAGEREF_Toc48125470\h369HYPERLINK\l"_Toc48125471”6.1.2.9ﻩ地址掩码ﻩPAGEREF_Toc48125471\h380HYPERLINK6.2 ICMP路由器需求指标(RFC1812) PAGEREF_Toc48125472\h405HYPERLINK\l”_Toc48125473"6.2.1ﻩ简要介绍(INTRODUCTION) PAGEREF_Toc48125473\h409HYPERLINK\l"_Toc48125474"6.2.2ﻩ概要分析(GENERALISSUES)ﻩPAGEREF_Toc48125474\h411HYPERLINK6.2.3.3 源抑制 PAGEREF_Toc48125478\h439HYPERLINK\l"_Toc48125479"6。2.3.4 超时ﻩPAGEREF_Toc48125479\h443HYPERLINK\l"_Toc48125480”6.2.3。5 参数问题ﻩPAGEREF_Toc48125480\h448HYPERLINK\l”_Toc48125481"6。2.3.6 回显 PAGEREF_Toc48125481\h451HYPERLINK\l"_Toc48125482”6.2.3.7 信息 PAGEREF_Toc48125482\h462HYPERLINK6.2。3.9 地址掩码ﻩPAGEREF_Toc48125484\h475HYPERLINK\l"_Toc48125485"6.2。3.10ﻩ路由器请求ﻩPAGEREF_Toc48125485\h481ICMP报文的分类和格式ICMP报文格式概要介绍ICMP报文是在IP数据报内部被传输的,如下图。IP首部(有可能有选项)ICMP报文这样的一个IP数据报,我们也称它为ICMP数据报。注意,ICMP数据报和ICMP报文是两个不同的概念,ICMP数据报的数据部分为ICMP报文。ICMP报文的格式如下图所示.所有ICMP报文的前4个字节都是一样的,但是剩下的其他字节则互不相同。0781516318比特类型8比特代码16比特校验和(不同的类型和代码有不同的内容)各种类型的ICMP报文的格式ICMP报文类型可以分为三大类:ICMP请求报文、ICMP回答报文和ICMP差错报文。接下来分别介绍它们的格式。ICMP请求和回答报文格式ICMP请求报文有以下五种类型.类型代码描述80回显请求100路由器请求130时间戳请求150信息请求(废弃不用)170地址掩码请求ICMP回答报文有以下五种类型。类型代码描述00回显回答90路由器回答140时间戳回答160信息回答(废弃不用)180地址掩码回答回显请求和回答报文格式如下.078151631类型(0或8)代码(0)校验和标识符序列号回显数据路由器请求报文格式如下,长度为8字节。078151631类型(10)代码(0)校验和未用(必须为0)路由器回答报文格式如下。078151631类型(9)代码(0)校验和地址数地址项长度(2)生存时间路由器地址【1】优先级【1】路由器地址【2】优先级【2】***时间戳请求和回答报文格式如下,长度为20字节。078151631类型(13或14)代码(0)校验和标识符序列号发起时间戳接收时间戳传送时间戳地址掩码请求和回答报文格式如下,长度为12字节。078151631类型(17或18)代码(0)校验和标识符序列号32比特的子网掩码ICMP差错报文格式ICMP差错报文分为四类:ICMP重定向报文、目的不可达差错报文、ICMP源站抑制差错报文、超时差错报文和参数问题差错报文。ICMP重定向报文格式ICMP重定向报文类型为5,代码从0到3总共有4种,如下表。类型代码描述50对网络重定向1对主机重定向2对服务类型和网络重定向3对服务类型和主机重定向ICMP重定向报文格式如下.078151631类型(5)代码(0到3)校验和应该使用的路由器IP地址原IP数据报的IP首部(包括选项)+原IP数据报的数据部分的前8个字节目的不可达差错报文格式目的不可达差错报文类型为3,代码从0到15总共有16种,如下表.类型代码描述30网络不可达1主机不可达2协议不可达3端口不可达4需要进行分片但是设置了不分片比特5源站选路失败6目的网络不认识7目的主机不认识8源主机被隔离(作废不用)9和目的网络的通讯被强制制止10和目的主机的通讯被强制制止11由于服务类型TOS,网络不可达12由于服务类型TOS,主机不可达13由于过滤,通信被强制制止14主机越权15优先权终止生效目的不可达差错报文的格式如下(代码号为4的除外)。078151631类型(3)代码(0到3,5到15)校验和未用(必须为0)原IP数据报的IP首部(包括选项)+原IP数据报的数据部分的前8个字节代码号为4的目的不可达差错报文的格式如下。078151631类型(3)代码(4)校验和未用(必须为0)下一站网络的MTU原IP数据报的IP首部(包括选项)+原IP数据报的数据部分的前8个字节ICMP源站抑制差错报文、超时差错报文和参数问题差错报文类型代码描述4(源站抑制差错报文)0源站抑制11(超时差错报文)0传输期间生存时间为01数据报组装期间生存时间为012(参数问题差错报文)0坏的IP首部(包括各种差错)1缺少必须的选项源站抑制差错报文和超时差错报文的格式如下。078151631类型代码校验和未用(必须为0)原IP数据报的IP首部(包括选项)+原IP数据报的数据部分的前8个字节参数问题差错报文格式如下.078151631类型(12)代码(0或1)校验和指针未用(必须为0)原IP数据报的IP首部(包括选项)+原IP数据报的数据部分的前8个字节ICMP函数关系图下图中,蓝色字体的部分为ICMP模块中的函数。从中可以清晰的看出ICMP模块和上下层函数的接口。应用程序应用程序rtredirect()函数:rtredirect()函数:根据“ICMP数据报的源地址、ICMP报文中的推荐下一跳地址、无效数据报的目的地地址”来更新路由表。pfctlinput()函数:根据“无效数据报的目的地地址”来通告重定向的所有协议域,使协议有机会把缓存的到目的站的路由作废。IP和传输层协议(注:IP层在ICMP层之下)rip_input()函数:rip_input()函数:内核把它接收的这些报文传给等待ICMP报文的进程。相应协议的pr_ctlinput()函数:协议用此函数来处理来自下层的控制信息有ICMP差错有ICMP差错除重定向之外的ICMP差错报文ICMP重定向报文icmp_error()函数:构造除重定向之外的ICMP差错报文ICMP重定向报文icmp_error()函数:构造ICMP差错报文ICMP回答报文、路由器请求报文、未识别的ICMP报文ICMP请求报文(路由器请求报文除外)ICMP请求报文(路由器请求报文除外)rip_output():ICMP用该函数输出请求报文和路由器回答报文icmp_reflect()函数:rip_output():ICMP用该函数输出请求报文和路由器回答报文icmp_reflect()函数:把ICMP回答报文、ICMP差错报文发回给请求或无效数据报的源站.icmp_input():ICMP输入处理分用ICMP报文分用ICMP报文icmp_send()函数:icmp_send()函数:计算ICMP报文的校验和ipintripintr():IP输入处理ip_outputip_output():IP输出处理ICMP流程图进程或传输程协议应用程序IP和传输层协议进程或传输程协议应用程序IP和传输层协议有ICMP差错有ICMP差错原IP数据报原IP数据报片偏移是否为0片偏移是否为0否否丢弃报文否丢弃报文否发出ICMP请求报文或路由器回答报文发出ICMP请求报文或路由器回答报文是是是是否为广播或多播是是否为广播或多播丢弃报文丢弃报文是否为除路由器请求报文之外的请求报文否是否为除路由器请求报文之外的请求报文否构造ICMP请求报文或路由器回答报文构造ICMP请求报文或路由器回答报文是构造ICMP回答报文和ICMP差错报文是构造ICMP回答报文和ICMP差错报文合法是否有选项合法是否有选项否否ICMP报文合法ICMP报文合法非法丢弃报文非法丢弃报文是是保留某些选项保留某些选项是否为单播或者环回否是否为单播或者环回否丢弃报文丢弃报文是是分用ICMP报文分用ICMP报文IP层IP层注释1:“保留某些选项”指的是记录路由选项、时间戳选项和安全选项,另外,如果有源路由选项,则要保存其逆转之后的结果.注释2:ICMP差错、回答数据报发送到IP层之前有个判断条件“是否为单播或者环回”。实际上,这个判断条件的一部分是在IP层完成的。但是为了说明的方便和强调“ICMP差错、回答数据报的目的地址只能为单播或者环回",把它列在ICMP层。ICMP状态机结束状态起始状态初始状态原IP数据报ICMP请求报文ICMP回答报文ICMP差错报文进程或者传输层协议初始状态事件:IP层收到ICMP请求报文。动作:分用。事件:IP层收到ICMP回答报文。动作:分用.事件:IP层收到ICMP差错报文.动作:分用。原IP数据报事件1:原IP数据报的片偏移不为0。动作1:释放mbuf.事件2:原IP数据报为广播或者多播。动作2:释放mbuf.事件:原IP数据报有ICMP差错。动作:发送ICMP差错报文。ICMP请求报文事件:ICMP模块检查从IP层分用上来的ICMP请求报文,发现其不合法.动作:释放mbuf。事件:在IP和传输层协议检测到“出错或者需要重定向”的ICMP请求数据报.动作:把该数据报传给ICMP模块.事件:ICMP模块收到IP层分用上来的不是路由器请求报文的ICMP请求报文.动作:构造相应的ICMP回答报文。事件:ICMP模块收到IP层分用上来的路由器请求报文。动作:上传给路由进程.ICMP回答报文事件1:ICMP模块检查从IP层分用上来的ICMP回答报文,发现其不合法。动作1:释放mbuf。事件2:发送ICMP回答报文的时候发现其目的地址不是单播或者环回。动作2:释放mbuf.事件:在IP和传输层协议检测到“出错或者需要重定向"的ICMP回答数据报。动作:把该数据报传给ICMP模块。事件:ICMP模块收到IP层分用上来的ICMP回答报文。动作:上传给相应的进程。ICMP差错报文事件1:ICMP模块检查从IP层分用上来的ICMP差错报文,发现其不合法.动作1:释放mbuf。事件2:IP层发送ICMP差错报文的时候发现其目的地址不是单播或者环回。动作2:释放mbuf。事件:在IP和传输层协议检测到“出错或者需要重定向”的ICMP差错数据报。动作:把该数据报传给ICMP模块.事件:ICMP模块收到IP层分用上来的ICMP差错报文。动作:上传给相应的进程或者传输层协议。进程或者传输层协议事件:需要发出ICMP请求报文。动作:调用ICMP模块发出ICMP请求报文。事件:收到路由器请求报文.动作:调用ICMP模块发出路由器回答报文。注释1:一个ICMP差错报文不能产生另一个非重定向的ICMP差错报文。这一点在状态机和流程图中没有表现出来,这是为了使流程图和状态机简洁明了,提高可读性.下面对这个情况进行详细说明.当IP和传输层函数发现有ICMP差错的报文的时候,就调用icmp_error函数。icmp_error函数有5个参数,在这里,我们只说明其中的两个参数。参数n,指向保存原IP数据报缓存链的指针;参数type,ICMP差错类型。参数n中保存的原IP数据报有四种类型,普通IP数据报(即:非ICMP数据报)、ICMP请求报文、ICMP回答报文、ICMP差错报文。对于参数n和参数type的几种组合情况,icmp_error函数的处理方法如下表。参数type参数n参数type不为“重定向”参数type为“重定向”原IP数据报为“普通IP数据报(即:非ICMP数据报)"发送ICMP差错报文。发送ICMP重定向报文。原IP数据报为“ICMP请求报文”原IP数据报为“ICMP回答报文”原IP数据报为“ICMP差错报文”释放保存原IP数据报的mbuf链条.上表中的蓝色字体是对原IP数据报的一种“过滤”,但是这个“过滤”过程在流程图和状态机中没有画出来。注释2:状态机中,“进程或者传输层协议”实际上在ICMP模块的上层,并不在ICMP模块中。这里之所以把“进程或者传输层协议”列为一个状态,是为了说明ICMP模块和上层的关系.注释3:ICMP模块对从IP层分用上来的路由器请求报文的处理比较特殊。ICMP模块把路由器请求报文传给路由进程,由路由进程来构造相应的回答报文.注释4:普通 IP数据报(即:非ICMP数据报)如果“有ICMP差错”,也会跳到“原IP数据报”状态。实际上,“原IP数据报”大多数是“有ICMP差错”的普通IP数据报(即:非ICMP数据报)。ICMP接口数据接口ICMP模块和下层的接口IP层——〉ICMP模块icmp_input函数的参数和返回值如下。voidicmp_input(m,hlen)ﻩregisterstructmbuf*m; inthlen;参数m为指向“存储ICMP数据报的mbuf链条"的指针.参数hlen为ICMP数据报的IP首部长度。ICMP模块-—>IP层ICMP模块通过调用ip_output函数来实现输出。ip_output函数的参数和返回值如下.intip_output(m0,opt,ro,flags,imo) structmbuf*m0; structmbuf*opt; structroute*ro; intflags; structip_moptions*imo;介绍这五个参数。m0,要发送的分组;opt,包含的IP选项;ro,缓存的到目的地的路由;flags,如下图;imo,指向多播选项的指针。ICMP模块和上层的接口ICMP模块——〉上层pr_ctlinput函数如果收到的是除重定向之外的ICMP差错报文,则icmp_input调用相应协议的pr_ctlinput()函数。 ﻩif(ctlfunc=inetsw[ip_protox[icp-〉icmp_ip.ip_p]].pr_ctlinput) ﻩ(*ctlfunc)(code,(structsockaddr*)&icmpsrc,ﻩ ﻩ&icp-〉icmp_ip);其中,参数code是“与协议无关的差错码”;参数(structsockaddr*)&icmpsrc表示“无效数据报的目的地地址”,参数&icp-〉icmp_ip为“指向无效数据报的指针”。下面是tcp_ctlinput函数的参数和返回值.其他协议的pr_ctlinput()函数的参数和返回值是类似的.voidtcp_ctlinput(cmd,sa,ip) intcmd;ﻩstructsockaddr*sa; registerstructip*ip;rtredirect函数如果收到的是ICMP重定向差错报文,则icmp_input调用rtredirect()函数,如下。ﻩﻩrtredirect((structsockaddr*)&icmpsrc,ﻩﻩ(structsockaddr*)&icmpdst, (structsockaddr*)0,RTF_GATEWAY|RTF_HOST,ﻩ (structsockaddr*)&icmpgw,(structrtentry**)0);其中,参数(structsockaddr*)&icmpsrc表示“无效数据报的目的地地址",参数(structsockaddr*)&icmpdst表示“ICMP报文中的推荐下一跳地址”,参数(structsockaddr*)&icmpgw表示“ICMP数据报的源地址”。这行程序的作用是:根据“ICMP数据报的源地址、ICMP报文中的推荐下一跳地址、无效数据报的目的地地址”来更新路由表。rtredirect()函数的参数和返回值如下。intrtredirect(dst,gateway,netmask,flags,src,rtp)ﻩstructsockaddr*dst,*gateway,*netmask,*src;ﻩintflags;ﻩstructrtentry**rtp;pfctlinput函数如果收到的是ICMP重定向差错报文,则icmp_input调用pfctlinput()函数,如下。pfctlinput(PRC_REDIRECT_HOST,(structsockaddr*)&icmpsrc);上面一行程序的第一个参数表示“重定向”,第二个参数是“无效数据报的目的地地址”.这行程序的作用是:根据“无效数据报的目的地地址”来通告重定向的所有协议域,使协议有机会把缓存的到目的站的路由作废。pfctlinput()函数如下.voidpfctlinput(cmd,sa)ﻩintcmd;ﻩstructsockaddr*sa;{ﻩregisterstructdomain*dp;ﻩregisterstructprotosw*pr; for(dp=domains;dp;dp=dp—>dom_next)ﻩﻩfor(pr=dp->dom_protosw;pr〈dp—>dom_protoswNPROTOSW;pr++) ﻩﻩif(pr->pr_ctlinput) ﻩﻩ(*pr->pr_ctlinput)(cmd,sa,(caddr_t)0);}rip_input函数该函数的参数和返回值如下.voidrip_input(m)ﻩstructmbuf*m;如果收到的是“ICMP回答报文、路由器请求报文、未识别的ICMP报文”,则icmp_input调用rip_input()函数,把这些报文传给等待ICMP报文的进程。上层——〉ICMP模块icmp_error函数传输层和IP层(注:IP层是ICMP的下层)调用icmp_error()函数来构造ICMP差错报文icmp_error()函数的参数和返回值如下。voidicmp_error(n,type,code,dest,destifp)ﻩstructmbuf*n;ﻩinttype,code;ﻩn_longdest; structifnet*destifp;其中,参数n表示“指向包含无效数据报缓存链的指针”,type表示ICMP差错类型,code表示ICMP差错代码,dest表示ICMP重定向报文中的下一跳路由器地址(只有当要发送ICMP重定向的时候才用到该参数),destifp表示指向原IP数据报外出接口的指针(只有当要发送“需要进行分片但是设置了不分片比特”的目的不可达报文的时候才用到该参数)。rip_output函数上层用该函数输出请求报文和路由器回答报文.rip_output函数的参数和返回值如下。intrip_output(m,so,dst)ﻩregisterstructmbuf*m;ﻩstructsocket*so;ﻩu_longdst;其中,参数m表示“指向外出IP数据报缓存链的指针”,参数so表示“指向相应插口的指针”,参数dst表示“IP数据报的目的IP地址”(只有当进程没有提供IP首部的情况下才用到该参数).控制接口概况下面是protosw结构的定义。下面是ICMP的protosw结构。rip_ctloutput函数该函数的参数和返回值如下。intip_ctloutput(op,so,level,optname,mp)ﻩintop; structsocket*so; intlevel,optname;ﻩstructmbuf**mp;其中参数op的值为PRCO_SETOPT或PRCO_GETOPT.表示上层是要设置某些选项,还是要读取某些选项。参数so为插口描述符。参数level为操作的协议,它的值必须为IPPROTO_IP。参数mp为包含设置值的mbuf指针。参数optmane为选项名,它的取值和相应的描述如下表。参数optmane的取值描述IP_HDRINCL设置或者读取inp_flags的INP_HDRINCL比特位。该比特位表示进程是否有提供IP首部,在rip_output函数中有用到。DVMRP_INIT这些选项关于多播。目前我们不关心多播的内容。DVMRP_DONEDVMRP_ADD_VIFDVMRP_DEL_VIFDVMRP_ADD_LGRPDVMRP_DEL_LGRPDVMRP_ADD_MRTDVMRP_DEL_MRT其他值交给ip_ctloutput函数处理rip_usrreq函数该函数的分析由肖志给出。icmp_sysctl函数该函数的参数和返回值如下.inticmp_sysctl(name,namelen,oldp,oldlenp,newp,newlen)ﻩint*name;ﻩu_intnamelen;ﻩvoid*oldp;ﻩsize_t*oldlenp;ﻩvoid*newp; size_tnewlen;该函数是用来修改全局变量icmpmaskrepl的.icmpmaskrepl的默认值是0,icmp_sysctl可以修改它。如果icmpmaskrepl非零,Net/3会响应地址掩码请求。除非系统被明确地配置成地址掩码的授权代理(icmpmaskrepl非零),否则,RFC1122禁止其发送掩码回答。这样,就避免系统与所有向它发出请求的系统共享不正确的地址掩码.OS接口microtime函数函数的参数和返回值如下。voidmicrotime(tvp) structtimeval*tvp;该函数的作用如下。返回从UTC1970年1月1日午夜以来的时间,放在timeval结构中。在iptime函数中,会调用microtime函数。iptime函数以网络字节序返回从UTC1970年1月1日午夜以来的毫秒数。在时间戳选项处理等等地方会用到iptime函数.m_freem函数函数参数和返回值如下。voidm_freem(m) registerstructmbuf*m;函数的作用如下。释放m指向的mbuf链表中的所有mbuf。m_gethdr函数该函数的参数和返回值如下。structmbuf*m_gethdr(intnowait,inttype)该函数是宏MGETHDR的函数版本。m_get函数函数参数和返回值如下。structmbuf*m_get(intnowait,inttype);该函数的作用如下。向OS申请一个type类型的mbuf。ICMP指标ICMP主机需求指标(RFC1122)指标位置描述4。4BSD-Lite实现备注概要分析(GENERALISSUES)如果主机收到一个类型未知的ICMP报文,主机必须安静地丢弃该报文。3.2.2MUST部分支持:icmp_input把未知的ICMP报文直接交给rip_input。rip_input把ICMP报文交给任何等待进程,或者在没有进程接收的情况下将其安静的丢弃。建议ICMP差错报文携带原IP数据报数据部分的至少前8个字节3.2。2MAY部分支持:icmp_error在ICMP差错报文中,始终返回原IP数据报数据部分的前8个字节ICMP差错报文必须原封不动的返回原IP数据报的首部和部分数据.3。2.2MUST部分支持:Net/3的ipintr将接收数据报的标识、偏移量和长度字段从网络字节序转换为主机字节序,从而方便数据报的处理。但是Net/3的icmp_error函数把偏移量和长度字段放入ICMP差错报文的时候,没有把它们转换为网络字节序。如果系统的主机字节序与网络字节序相同,这个差错不会引起误解;但如果系统的主机字节序和网络字节序不一致,ICMP差错报文中携带的原IP数据报的偏移量和长度字段就都是错误的.我们要更改net/3系统的这个差错。必须能够将收到的ICMP差错分用给传输层协议.3.2.2MUST支持:icmp_error利用原IP数据报首部的协议字段选择适当的运输层协议,以响应该差错。发送ICMP差错报文时,TOS字段应该等于0。3。2.2SHOULD支持:net/3系统构造的所有ICMP差错报文的TOS字段都等于0。必须禁止ICMP差错报文再次引发新的ICMP差错报文.3。2.2MUSTNOT部分支持:ICMP差错报文可能导致icmp_error发送ICMP重定向差错报文。ICMP差错报文不会使net/3系统发送除了ICMP重定向差错报文之外的ICMP差错报文。Net/3的这种做法是合理的.有的场合,把ICMP差错报文细分为“重定向报文和狭义ICMP差错报文"。左边RFC的这句话可能是针对狭义ICMP差错报文而言的,尽管该RFC把重定向报文归类为ICMP差错报文。必须禁止IP广播和多播报文引发ICMP差错报文.3.2.2MUSTNOT不支持:icmp_error函数不进行此类检查。内核在调用icmp_error函数之前,也不进行此类检查。必须禁止链路层广播报文引发ICMP差错报文。3.2.2MUSTNOT支持:icmp_error丢弃作为链路层广播或者多播到达的ICMP报文。必须禁止IP数据报的后续分片引发ICMP差错报文。3。2.2MUSTNOT支持:icmp_error丢弃片偏移不为0的原IP数据报.必须禁止源地址不是单播地址的数据报引发ICMP差错报文。比如说,原IP数据报的源地址为全0地址、环回地址、广播地址、多播地址、E类地址。3。2。2MUSTNOT部分支持:“源地址为网络0(网络0为0。*.*.*,全0地址为它的一个特例)、D类地址、E类地址的IP数据报”引发的ICMP差错报文在icmp_reflect被丢弃。“源地址为广播地址的IP数据报"引发的ICMP差错报文在ip_output被丢弃。但是,如果原IP数据报的源地址为环回地址,不论该IP数据报是否来自本机,它都可能会引发目标地址为环回地址的ICMP差错报文。细节问题(SPECIFICISSUES)目的不可达主机应该产生“代码为2,表示协议不可达”的目的不可达报文.当主机不支持“原IP数据报所指定的传输层协议”的时候使用.3。2.2.1SHOULD不支持:如果数据报所指明的协议系统不支持,则交给rip_input函数处理。后者检查确认系统中没有应用进程能够处理此数据报后,将数据报丢弃而不发送相应的ICMP报文。主机应该产生“代码为3,表示端口不可达”的目的不可达报文。当指定的传输层协议(比如UDP)当前不存在该端口并且没有别的协议机制来通知发送方的时候,使用该代码.3.2.2.1SHOULD支持:UDP会产生“端口不可达”差错报文。TCP不会产生“端口不可达"差错报文,但是会向对方发送一个TCP连接复位消息。必须向上层提交ICMP“目的不可达”差错报文。3.2。2.1MUST支持:icmp_input把“目的不可达”差错报文上传给相应协议的pr_ctlinput函数.传输层应该适当地利用ICMP模块上传的“目的不可达”差错报文。3.2。2.1SHOULD支持对于判断目的地是否不可达而言,目的不可达报文必须被理解为仅仅是一个线索,而不是证据。3.2。2。1MUST相关内容见倪宏的指标报告。重定向主机应该禁止发送ICMP重定向报文。3.2。2.2SHOULDNOT部分支持:ip_forward是唯一能发送ICMP重定向报文的函数,只有在系统配置为路由器(全局变量ipforwarding被设置为1)或者有源路由选项时才会调用该函数。收到ICMP重定向报文后,主机必须更新路由表。3。2。2.2MUST支持:ipintr调用rtredirect处理此报文。必须能够处理“主机重定向”和“网络重定向”。此外,必须把“网络重定向”作为“主机重定向”来处理.3。3。1.2MUST支持:net/3系统把“网络重定向”作为“主机重定向"来处理.net/3系统只发送“主机重定向”,不发送“网络重定向”.应该丢弃非法的重定向报文3.2.2.2MUST支持:rtredirect丢弃非法的重定向报文。源抑制当主机接近或者已经达到它的处理极限的时候,建议发送一个源抑制报文。3.2.2.3MAY不支持:net/3系统中,只有ip_forward会发送源抑制报文。如果ip_output返回ENOBUFS,ip_forward发送“源站抑制”报文。如果mbuf不足,或者接口输出队列已满时,会出现这种情况.但是,作为主机,一般情况下是不调用ip_forward函数的(除非源路由转发).我们不准备发送源站抑制报文。如果收到源抑制报文,IP层必须把它上传给传输层(或者ICMP模块)。3.2。2。3MUST支持:icmp_input向运输层提交源抑制差错报文。对于“向同一个目标地址持续发送一段数据流”并“有足够的状态信息来进行流量控制”的传输层协议和应用程序来说,应该响应源抑制报文。3.2。2.3SHOULD支持:tcp_ctlinput调用tcp_quench函数执行慢启动。超时收到的ICMP超时报文必须被送往传输层.3。2.2。4MUST支持:icmp_input向传输层提交此类差错报文。参数问题主机应该产生参数问题差错报文.3。2。2。5SHOULD支持:net/3系统中,只有当ip_dooptions发现选项长度字段出错时,会发送此类差错报文.必须向传输层报告出现的数据报参数差错。3.2.2。5MUST支持:icmp_input向传输层汇报此类差错.建议向应用进程汇报此类差错.3.2.2.5MAY支持:tcp_notify在t_softerror中记录这些ICMP差错。回显必须支持回显服务器3.2。2。6MUST支持:icmp_input实现回显服务器应该支持回显客户3.2.2.6SHOULD支持:ping程序利用原始IP插口实现回显客户.建议丢弃发往IP多播或者广播地址的回显请求报文。3.2.2.6MAY不支持:net/3系统响应发往IP多播或者广播地址的回显请求报文。ICMP回显回答数据报的源IP地址必须为ICMP回显请求数据报的specific—destinationaddress(见注释1).3.2。2.6MUST部分支持:如果回显请求数据报的目的IP地址为子网广播地址,则net/3系统发出的回显回答数据报的源IP地址也为同样的子网广播地址.我们要根据RFC对net/3系统做出相应的修改。必须在回显回答报文中返回回显请求数据。3。2.2.6MUST支持:icmp_reflect函数不更改回显请求报文的数据部分。如果发送大的回显回答报文时需要分片而主机目前又不支持分片功能,那么回显回答数据报必须被截短为最大传输长度并被发送。3。2。2.6MUST不适用:由于net/3系统支持分片,所以不存在这个问题。回显回答报文必须上传到ICMP用户接口,除非相应的回显请求报文源自IP层.3.2。2。6MUST支持:ICMP回显回答报文提交给rip_input,进而提交给指明的应用进程.如果ICMP回显请求数据报中包含路由记录选项(或者时间戳选项),那么,路由记录选项(或者时间戳选项)中应该包含当前主机的信息,而且,当前主机应该在回显回答数据报的IP首部中包含回显请求数据报的路由记录选项(或者时间戳选项)。因此,所记录的路径将是整个往返路径.3。2。2.6SHOULD支持:icmp_reflect在回显回答报文中包含记录路由和时间戳选项。如果“ICMP回显请求数据报”包含源路由选项,那么相应的“ICMP回显回答数据报”必须逆转“ICMP回显请求数据报”的源路由选项来作为自己的源路由选项。3.2。2。6MUST支持:icmp_reflect在回显回答报文中包含逆转之后的源路由选项。信息应该禁止ICMP信息请求和信息回答报文。3.2.2.7SHOULDNOT部分支持:内核不生成或响应信息报文。但是应用进程可能会通过原始IP插口发送或者接收信息报文。时间戳建议实现时间戳请求和时间戳回答报文。3.2。2。8MAY支持:icmp_input实现时间戳服务器的功能。时间戳客户的功能可以通过原始IP机制来实现。如果实现了时间戳请求和时间戳回答,则要遵守以下几条规定。必须应答所收到的每一个时间戳请求。3.2.2。8MUST支持。应答时间戳请求的过程应该被设计成“时延的变化最小”(比如,这个功能可以在内核实现,而不作为用户进程实现,从而避免等待时间)3.2。2.8SHOULD支持:net/3系统在内核实现.“时延的变化最小”(minimumvariabilityindelay)的含义我不大清楚。建议安静地丢弃发往广播或多播地址的ICMP时间戳请求数据报。3。2。2.8MAY不支持:icmp_input响应发往广播或多播地址的时间戳请求。“ICMP时间戳回答数据报的源IP地址"必须为“ICMP时间戳请求数据报的specific—destinationaddress”(见注释1)。3.2。2。8MUST部分支持:如果时间戳请求数据报的目的IP地址为子网广播地址,则net/3系统发出的时间戳回答数据报的源IP地址也为同样的子网广播地址。我们要根据RFC对net/3系统做出相应的修改。时间戳回答报文必须上传到ICMP用户接口。3.2。2.8MUST支持:ICMP时间戳回答报文提交给rip_input,进而提交给指明的应用进程。如果ICMP时间戳请求数据报中包含路由记录选项(或者时间戳选项),那么,路由记录选项(或者时间戳选项)中应该包含当前主机的信息,而且,当前主机应该在时间戳回答数据报的IP首部中包含时间戳请求数据报的路由记录选项(或者时间戳选项)。因此,所记录的路径将是整个往返路径.3。2.2.8SHOULD支持:icmp_reflect在时间戳回答报文中包含记录路由和时间戳选项。如果“ICMP时间戳请求数据报”包含源路由选项,那么相应的“ICMP时间戳回答数据报"必须逆转“ICMP时间戳请求数据报"的源路由选项来作为自己的源路由选项。3.2。2.8MUST支持:icmp_reflect在时间戳回答报文中包含逆转之后的源路由选项。必须遵守有关时间戳数值的规定3.2.2.8MUST支持:icmp_input调用iptime,后者可返回标准时间戳值。地址掩码必须能够静态配置接口的地址掩码3.2。2.9MUST支持建议系统初始化的时候动态地获得地址掩码。3.2.2。9MAY不支持:net/3不支持利用BOOTP和DHCP来获得地址掩码信息。建议通过ICMP地址掩码请求和回答报文来获得地址掩码信息.3。2.2.9MAY不支持:net/3不支持通过ICMP地址掩码请求和回答报文来获得地址掩码信息。因此,我们不进一步讨论RFC中的一些相关细节。除非被授权为地址掩码代理,主机必须禁止发送地址掩码回答报文.3.2.2.9MUSTNOT支持:icmp_input只有当icmpmaskrepl非零时(默认为0),才会响应地址掩码请求报文。应该为每个静态配置的地址掩码设定相应的地址掩码确认标志.3.2.2.9SHOULD不支持:net/3只维护一个全局的确认标志icmpmaskrepl,发送任何接口的地址掩码回答报文之前都要查询同一个全局变量。如果主机被配置为代理,主机在初始化的时候,必须在合适的接口上广播一个地址掩码回答报文。3.2。2。9MUST不支持注释1:3.2.1.3中关于specific-destinationaddress的描述如下(中英文对照).出于大多数应用的考虑,“目的地址为广播或多播地址的IP数据报"在主机看来,其目的就仿佛是主机上的某个IP地址。我们用术语“specific-destinationaddress”来表示主机上的这个等效地址。如果IP数据报的目标地址为广播或者多播地址,该IP数据报的“specific-destinationaddress”就为anIPaddressassignedtothephysicalinterfaceonwhichthedatagramarrived;否则,该IP数据报的“specific—destinationaddress”就为IP首部的目的IP地址。Formostpurposes,adatagramaddressedtoabroadcastormulticastdestinationisprocessedasifithadbeenaddressedtooneofthehost'sIPaddresses;weusetheterm”specific—destinationaddress"fortheequivalentlocalIPaddressofthehost.Thespecific-destinationaddressisdefinedtobethedestinationaddressintheIPheaderunlesstheheadercontainsabroadcastormulticastaddress,inwhichcasethespecific-destinationisanIPaddressassignedtothephysicalinterfaceonwhichthedatagramarrived。ICMP路由器需求指标(RFC1812)指标位置描述4.4BSD-Lite实现备注简要介绍(INTRODUCTION)路由器必须支持ICMP协议。4。3.1MUST支持概要分析(GENERALISSUES)如果路由器收到一个类型未知的ICMP报文,路由器必须把它交给ICMP的用户接口(如果该路由器有这样的接口)或者安静的丢弃(如果该路由器没有这样的接口)。4.3。2.1MUST支持:icmp_input把未知的ICMP报文直接交给rip_input。rip_input把ICMP报文交给任何等待进程,或者在没有进程接收的情况下将其安静的丢弃.当路由器生成一个ICMP数据报的时候,路由器必须设置该ICMP数据报的生存时间.ICMP回答数据报的生存时间必须禁止借用相应的请求数据报的生存时间.4.3.2。2MUST和MUSTNOT支持:icmp_reflect设置ICMP数据报的生存时间为255。如果进程没有提供现成的IP首部,rip_output设置ICMP数据报的生存时间也是255。ICMP差错报文应该包含尽可能多的原IP数据报的内容,只要该ICMP数据报的长度小于576字节。4.3。2.3SHOULD不支持:icmp_error在ICMP差错报文中,始终只返回原IP数据报的“IP首部和前8字节的数据部分”。根据RFC修改net/3,这个改动很简单.ICMP差错报文必须原封不动的返回原IP数据报的首部和部分数据,除非没有要求路由器取消先前对原IP数据报的IP首部的更改(比如,路由器更改了原IP数据报的TTL字段,并且更新了选项信息,然后才发现差错)。4。3.2.3MUST部分支持:Net/3的ipintr将接收数据报的标识、偏移量和长度字段从网络字节序转换为主机字节序,从而方便数据报的处理。但是Net/3的icmp_error函数把偏移量和长度字段放入ICMP差错报文的时候,没有把它们转换为网络字节序.如果系统的主机字节序与网络字节序相同,这个差错不会引起误解;但如果系统的主机字节序和网络字节序不一致,ICMP差错报文中携带的原IP数据报的偏移量和长度字段就都是错误的。我们要更改net/3系统的这个差错。对于一个参数问题的差错报文,如果问题出在一个先前被路由器更改的域,路由器必须取消先前的更改4.3.2.3MUST支持:在net/3系统中,只有ip_dooptions会发送参数问题的差错报文。ip_dooptions发现选项构造差错时,会发送此类差错报文(此时,TTL字段以及选项字段还没有被更改)。如果考虑到上面一栏的问题(网络字序和主机字序),就为部分支持.ICMP数据报的源地址必须是该数据报发送接口的一个IP地址。如果该接口没有IP地址,就用该路由器的router-id替代.4.3.2。4MUST部分支持:如果ICMP请求数据报的目的IP地址为子网广播地址,则net/3系统发出的回答数据报的源IP地址也为同样的子网广播地址.我们必须更正net/3系统的这个BUG。这个问题在icmp_reflect函数中更改。ICMP差错数据报的TOS字段应该和原IP数据报相同,除非settingthemtothatvaluewouldcausetheICMPerrormessagetobeimmediatelydiscardedbecauseitcouldnotberoutedtoitsdestination.否则,ICMP差错数据报的TOS字段必须全0。4.3.2。5SHOULD和MUST支持:icmp_error函数把所有ICMP差错数据报的TOS字段都设置为0。一个ICMP回答数据报的TOS字段应该和相应的ICMP请求数据报相同。4.3。2.5SHOULD支持如果有发送ICMP源站抑制数据报,那么该数据报的优先级字段必须和原IP数据报相同。所有其他ICMP差错报文(目的不可达、重定向、超时和参数问题)的优先级字段应该为6(INTERNETWORKCONTROL)或者7(NETWORKCONTROL)。建议可设置这些差错报文的优先级字段。4.3.2。5MUST、SHOULD、MAY不支持:icmp_error函数把所有ICMP差错数据报的优先级字段都设置为0。ICMP回答数据报的优先级字段必须和相应的ICMP请求数据报相同。4。3。2.5MUST支持如果原IP数据报包含源路由选项,那么ICMP差错数据报应该包含同种类型(宽松或严格)的源路由选项(为原IP数据报的源路由选项中的“已经使用过的部分”的“逆转”),除非该ICMP差错报文是一个参数问题的ICMP差错报文并且参数问题出在原IP数据报的源路由选项上,或者除非路由器担心加上源路由选项之后会使该ICMP差错数据报的传送受阻。4。3.2。6SHOULD不支持:icmp_error函数构造出来的ICMP差错数据报都没有选项。在使用美国国防部安全选项的环境中,ICMP数据报建议包含安全选项。4.3。2。6MAY不支持安全选项只有在美国国防部使用,目前我们无需在ICMP数据报上加上该选项.必须禁止ICMP差错报文再次引发新的ICMP差错报文。4.3。2.7MUSTNOT部分支持:ICMP差错报文可能导致icmp_error发送ICMP重定向差错报文。ICMP差错报文不会使net/3系统发送除了ICMP重定向差错报文之外的ICMP差错报文。Net/3的这种做法是合理的。有的场合,把ICMP差错报文细分为“重定向报文和狭义ICMP差错报文”。左边RFC的这句话可能是针对狭义ICMP差错报文而言的,尽管该RFC把重定向报文归类为ICMP差错报文。必须禁止IP广播和多播报文引发ICMP差错报文。4。3。2。7MUSTNOT不支持:icmp_error函数不进行此类检查.内核在调用icmp_error函数之前,也不进行此类检查。必须禁止链路层广播报文引发ICMP差错报文。4。3。2。7MUSTNOT支持:icmp_error丢弃作为链路层广播或者多播到达的ICMP报文。必须禁止IP数据报的后续分片引发ICMP差错报文。4.3.2.7MUSTNOT支持:icmp_error丢弃片偏移不为0的原IP数据报.必须禁止因为原IP数据报的首部校验出错而发送ICMP差错报文,除非在5.2。2(IP首部校验)中有特别的规定。4.3.2.7MUSTNOT支持:所有通不过IP首部校验的IP数据报,在ipintr中被安静的丢弃.一个发送ICMP源抑制报文的路由器必须能够限制“自己发送ICMP源抑制报文的速率”。4.3.2.8MUST不支持:只有ip_forward函数会发送源抑制报文。如果ip_output返回ENOBUFS,ip_forward则发送“源站抑制”报文。但是,net/3系统没有限制自己发送源抑制报文的速率.这样发送源抑制报文是火上浇油,我们要禁止系统发送源抑制报文。一个路由器应该能够限制发送其他种类的ICMP差错报文(目的不可达、重定向、超时、参数问题)的速率。路由器配置中应该有可配置的速率限制参数。4.3.2。8SHOULD不支持:net/3系统没有限制自己发送ICMP差错报文的速率.细节问题(SPECIFICISSUES)目的不可达如果路由器无法为一个IP数据报找到转发路由(包括默认路由),路由器必须发送代码号为0(网络不可达)的ICMP目的不可达差错报文4。3.3.1MUST不支持:ip_forward函数发送代码号为1的主机不可达差错报文,而不是代码号为0的网络不可达差错报文。如果路由器虽然找到了该IP数据报的转发路由,但是路由的TOS既不是全0,也不同于该IP数据报的TOS,那么,路由器必须发送代码号为11(TOS网络不可达)的ICMP目的不可达差错报文.4.3。3.1MUST不支持:net/3系统的路由没有TOS。如果路由器发现自己是该IP数据报的最后一跳路由器,并且发现无法到达目的主机,那么路由器必须发送一个代码号为1(主机不可达)的ICMP目的不可达差错报文。4。3.3.1MUST支持:ip_forward函数发送代码号为1的主机不可达差错报文如果路由器虽然找到了路由,但是路由的TOS既不是全0,也不同于该IP数据报的TOS,那么,路由器必须发送代码号为12(TOS主机不可达)的ICMP目的不可达差错报文。4。3.3。1MUST不支持:net/3系统的路由没有TOS.重定向在以下两种情况下建议路由器忽略重定向报文.第一,路由器上运行着路由协议。第二,该路由器的“全局转发开关或该IP数据报的出口的转发开关”被打开.4。3.3.2MAY不支持:icmp_input把重定向报文上传给路由守护程序,由路由守护程序来决定是否对路由表进行更改.所以,是否支持RFC的规定要看特定的路由守护程序是怎么实现的。这里之所以说“不支持",是因为icmp_input在上传ICMP重定向报文的之前,没有进行这两条判断。建议加上这两条判断.另外,本文档中的“支持"和“不支持”是相对于内核而言的。net/3系统可以发送重定向报文。源抑制路由器不应该产生ICMP源站抑制报文.4。3。3.3SHOULDNOT不支持:如果ip_output返回ENOBUFS,ip_forward发送“源站抑制”报文.如果mbuf不足,或者接口输出队列已满时,会出现这种情况。我们不准备实现源抑制。路由器如果发送ICMP源抑制报文,那么就必须能够限制“自己发送ICMP源抑制报文的速率”4。3.3。3MUST不支持:ip_forward没有限制自己发送ICMP源抑制报文的速率。进一步的说,net/3系统没有限制自己发送ICMP差错报文的速率。建议路由器忽略收到的源抑制报文。4.3。3.3MAY不支持:icmp_input向运输层提交源抑制差错报文。TCP收到源抑制报文之后进入慢启动状态。超时当路由器转发一个TTL字段为0或者1的IP数据报的时候,应用section[5.2.3.8]中的规定。其规定如下。TimetoLive(TTL)TTL减去处理时间2、丢弃TTL值减少后为零的报文4。3.3。4MUST支持:如果要转发报文,ip_forward首先检查其TTL是否为0或者1,如果是则丢弃,如果不是则把TTL减去1。如果重装超时时间到,则必须丢弃组装了一半的数据报。4.3.3.4MUST支持:重装超时时间为30秒。重装超时时间到,ip_slowtimo函数则丢弃组装了一半的数据报。当路由器重装一个IP数据报(其目的地址为该路由器)的时候,路由器表现为一个Internet上的主机.如果重装超时时间到并且收到了第一个分片,必须发送ICMP重装超时报文。不支持:ip_slowtimo函数没有发送ICMP重装超时报文。收到的ICMP超时报文必须被送往传输层。4.3.3.43.2。2。4MUST支持:icmp_input向传输层提交此类差错报文。参数问题路由器必须产生参数问题差错报文foranyerrornotspecificallycoveredbyanotherICMPmessage。4。3.3。5MUST不支持:net/3系统中,只有当ip_dooptions发现选项长度字段出错时,才会发送此类差错报文.其他情况不发送ICMP差错报文。如果IP标准首

温馨提示

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

评论

0/150

提交评论