资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,Internet,控制报文协议,(ICMP),ICMP,报文类型,ICMP,报文格式,ping,程序,5.3.1 ICMP,报文类型,ICMP,允许主机或路由器报告差错情况和提供有关异常情况的报告。,ICMP,不是高层协议,而是,IP,层的协议。,ICMP,报文作为,IP,层数据报的数据,加上数据报的首部,组成,IP,数据报发送出去。,5.3.2 ICMP,报文格式,ICMP,消息的类型:,类型字段,消息类型,0,回送应答,3,目的结点不可达,4,源结点抑制,5,重定向,8,回送请求,11,时间超出,12,参数问题,13,时标请求,14,时标应答,15,信息请求,16,信息应答,17,地址掩码请求,18,地址掩码应答,ICMP,消息的类型:,5.3.1 ICMP,报文类型,差错报告报文,查询报文,差错报告报文,目的站不可达,:路由器或主机不能交付数据报时,向源站发送目的站不可达信息。目标不可到达报文(,Type=3,)在路由器或主机不能传递数据报时使用,例如我们要连接对方一个不存在的系统端口(端口号小于,1024,)时,将返回,Type=3,、,Code=3,的,ICMP,报文,它要告诉我们:,“,嘿,别连接了,我不在家的!,”,,常见的不可到达类型还有网络不可到达 (,Code=0,)、主机不可到达(,Code=1,)、协议不可到达(,Code=2,)等。,类型:,3,代码:,0,至,15,检验和,未使用(全,0,),收到的,IP,数据报的一部分,包括,IP,首部以及数据报数据的前,8,个字节,差错报告报文,改变路由(重定向):,路由器改变路由报文发送主机,让主机知道下一次将数据报发送给另外的路由器(可通过更好的路由)主机启动后,一般通过默认路由器把,IP,数据报发出去,但不能保证是最优的路由,因为网络中的路由器或网络拓扑结构都可能随网络调整而发生变化。如果默认路由器发现主机发往某个目的地址的数据报最佳路由不应当经过默认路由器,而是经过某个路由器,R,时,就用改变路由报文将此情况告诉主机。于是主机在路由表中增加一个项目:到达某某地址应该经过路由器,R,(而不是默认路由器)。,类型:,5,代码:,0,到,3,检验和,目标路由器,IP,地址,收到的,IP,数据报的一部分,包括,IP,首部以及数据报数据的前,8,个字节,差错报告报文,源站拟制,:由于拥塞而丢弃数据时,向源站发送抑制报文通知源端降低发送速度。源抑制则充当一个控制流量的角色,它通知主机减少数据报流量,由于,ICMP,没有恢复传输的报文,所以只要停止该报文,主机就会逐渐恢复传输速率。,类型:,4,代码:,0,检验和,未使用(全,0,),收到的,IP,数据报的一部分,包括,IP,首部以及数据报数据的前,8,个字节,差错报告报文,时间超过,:生存时间为零时,除丢弃该数据报,还向源站发送超时报文。无连接方式网络的问题就是数据报会丢失,或者长时间在网络游荡而找不 到目标,或者拥塞导致主机在规定时间内无法重组数据报分段,这时就要触发,ICMP,超时报文的产生。超时报文的代码域有两种取值:,Code=0,表示传输超 时,,Code=1,表示重组分段超时。,类型:,11,代码:,0,或,1,检验和,未使用(全,0,),收到的,IP,数据报的一部分,包括,IP,首部以及数据报数据的前,8,个字节,差错报告报文,参数问题:,路由器或主机收到数据报首部中有的字段值不正确时,就丢弃该数据报,并向源站发送参数问题报文。,类型:,12,代码:,0,或,1,检验和,指针,未使用(全,0,),收到的,IP,数据报的一部分,包括,IP,首部以及数据报数据的前,8,个字节,差错报告报文,当发送一份,ICMP,差错报文时,报文始终包含,IP,的首部和产生,ICMP,差错报文的,IP,数据报的前,8,个字节。这样,接收,ICMP,差错报文的模块就会把它与某 个特定的协议,(,根据,IP,数据报首部中的协议字段来判断,),和用户进程,(,根据包含在,IP,数据报前,8,个字节中的,TCP,或,UDP,报文首部中的,TCP,或,UDP,端口号 来判断,),联系起来。接受,ICMP,报文的一方就能根据,IP,首部和这,8,个字节来判断出到底是哪个应用程序出错了。,差错报告报文,不应发送,ICMP,差错报告报文的几种情况,(1),对,ICMP,差错报告报文不再发送,ICMP,差错报告报文。,(2),对第一个分片的数据报片的所有后续数据报片都不发送,ICMP,差错报告报文。,(3),对具有多播地址的数据报都不发送,ICMP,差错报告报文。,(4),对具有特殊地址(如,127.0.0.0,或,0.0.0.0,)的数据报不发送,ICMP,差错报告报文。,ICMP,询问报文,回送请求和回答报文,:,向一个特定目的主机发出的询问。收到此报文的机器必须给源主机发送,ICMP,回送应答报文。如,PING,命令。我们日常使用最多的,ping,,就是响应请求(,Type=8,)和应答(,Type=0,),一台主机向一个节点发送一个,Type=8,的,ICMP,报文,如果途中没 有异常(例如被路由器丢弃、目标不回应,ICMP,或传输失败),则目标返回,Type=0,的,ICMP,报文,说明这台主机存在,更详细的,tracert,通过计算,ICMP,报文通过的节点来确定主机与目标之间的网络距离。,类型:,8,或,0,代码:,0,检验和,标识符,序号,由请求报文发送;由回答报文重复,ICMP,询问报文,掩码地址请求和回答报文:,从子网掩码服务器中得到某个接口地址掩码,类型:,17,或,18,代码:,0,检验和,标识符,序号,地址掩码,ICMP,询问报文,路由器询问和通告报文:,了解连接在本地路由器是否工作,询问通过广播形式,收到询问路由器通告报文广播其路由信息。,类型:,10,代码:,0,检验和,标识符,序号,类型:,9,代码:,0,检验和,地址数,地址项目长度,寿命,路由器地址,1,地址参考,1,路由器地址,2,地址参考,2,.,时间戳请求,(,Type=13,),和回答报文,(,Type=14,),:,请求某个主机或路由器回答当前时间,该时间是指自,1900,年,1,月,1,日起到当前有多少秒。它用来进行时钟同步和测量时间,。,用于测试两台主机之间数据报来回一次的传输时间。传输时,主机填充原始时间戳,接收方收到请求后填充接收时间戳后以,Type=14,的报文格式返回,发送方计算这个时间差。一些系统不响应这种报文,类型:,13,或,14,代码:,0,检验和,标识符,序号,原始时间戳,接收时间戳,发送时间戳,5.3.3 ping,程序,Ping(Packet InterNet Groper,,简称,ping),程序用来测试两个站点之间在,IP,层的连通性,它使用了,ICMP,回送请求报文和回送应答报文。,ICMP,攻击,可以利用操作系统规定的,ICMP,数据包最大尺寸不超过,64KB,这一规定,向主机发起“,Ping of Death”,(死亡之,Ping,)攻击。“,Ping of Death”,攻击的原理是:如果,ICMP,数据包的尺寸超过,64KB,上限时,主机就会出现内存分配错误,导致,TCP/IP,堆栈崩溃,致使主机死机。(现在的操作系统已经 限制了发送,ICMP,数据包的大小,解决了这个漏洞)此外,向目标主机长时间、连续、大量地发送,ICMP,数据包,也会最终使系统瘫痪。大量的,ICMP,数据包会形成“,ICMP,风暴”,使得目标主机耗费大量的,CPU,资源处理,疲于奔命。,ICMP,攻击,对于“,Ping of Death”,攻击,可以采取两种方法进行防范:第一种方法是在路由器上对,ICMP,数据包进行带宽限制,将,ICMP,占用的带宽控制在一定的范围内,这样即使 有,ICMP,攻击,它所占用的带宽也是非常有限的,对整个网络的影响非常少;第二种方法就是在主机上设置,ICMP,数据包的处理规则,最好是设定拒绝所有的,ICMP,数据包。,
展开阅读全文