2020/2/6第八讲:ICMP协议1第八讲ICMP协议协议概述报文类型报文格式ICMP差错报告处理ICMP查询处理ICMP软件设计2020/2/6第八讲:ICMP协议2引言IP协议只有一种报文格式——IP数据报功能:传递数据缺乏:应付可能出现差错的能力ICMP协议IP的辅助协议为IP提供差错报告机制为其它层(TCP/UDP、应用)提供辅助功能2020/2/6第八讲:ICMP协议3差错报告和差错更正IP传输过程中出现差错是不可避免的IP分组传输出现差错时,会产生相应的ICMP报文通过ICMP报文提供差错报告ICMP差错报告只能送给IP分组的源站,协议只提供了差错的处理方法的建议源站可能无法确定差错源,需要与网络管理员一起协作处理2020/2/6第八讲:ICMP协议48.1协议概述InternetControlMessageProtocol,ICMPRFC792:InternetControlMessageProtocol,1981RFC1256:ICMPRouterDiscoveryMessages,1991IPLANsMANsWANsICMPIGMPARPRARPNetworkLayerNetworkAccessLayerTransportLayerApplicationLayer2020/2/6第八讲:ICMP协议5报文投递与封装ICMP在IP之上实现,逻辑上与IP同在网络层与IP报文的传递过程一致——无连接通信直接送达目的站点,沿途的转发路由器不能获知ICMP报文内容ICMP报文封装ICMPmessageIPheaderIPdataFramedataTrailer(ifany)FrameheaderICMPmessageIPheaderIPdataProtocol=12020/2/6第八讲:ICMP协议68.2报文类型ICMP报文ICMPmessages差错报告Error-reporting测试查询Query报告路由器或目的站点处理一个IP分组时可能遇到的一些问题帮助主机或管理员从某一个路由器或主机获得一些特定的信息2020/2/6第八讲:ICMP协议7类型CategoryTypeMessageReasonError-reportingmessages3DestinationunreachableUnreachable4SourcequenchCongestion11TimeexceededToolongroute12ParameterproblemFormaterror5RedirectionRoutechangedQuerymessages8or0EchorequestorreplyReachability13or14TimestamprequestorreplySynchronization17or18AddressmaskrequestorreplyMaskmaintenance10or9RoutersolicitationoradvertisementCoincidencebetweenrouters过时:15Informationrequest16Informationresponse2020/2/6第八讲:ICMP协议88.3报文格式CodeChecksumDatasectionType8bits8bits16bits差错报文:引起差错的原始分组的一部分(首部+数据部分的前8个字节)查询报文:基于查询类型的额外信息2020/2/6第八讲:ICMP协议98.4ICMP差错报告处理ICMP只是报告差错,纠正差错由高层协议去做ICMP差错报文总是发送给原始的数据源不能为以下分组产生ICMP差错报文携带ICMP差错报文的分组非第一个分片分组组播分组具有特殊地址(如127.0.0.0或0.0.0.0)的分组ErrorreportingDestinationunreachableSourcequenchTimeexceededParameterproblemsRedirection2020/2/6第八讲:ICMP协议10差错报文的数据字段IPheader8bytesIPdataIPheader8bytesICMPpacketICMPheaderIPheader8bytesSentIPdatagramICMPheaderIPheaderReceiveddatagram提供有关传输层协议TCP和UDP的一些信息2020/2/6第八讲:ICMP协议118.4.1目的不可达报文路由器或主机因无法投递而丢弃IP分组时,向源站发送ICMP目的不可达报文不可达有多种可能性,并不是所有问题都能被检测出来Code=0~12ChecksumType=3IPheader+8bytesIPdata0x00000000不可达的原因供源站分析错误2020/2/6第八讲:ICMP协议12目的不可达代码Code描述Code描述0网络不可达7目的主机未知1主机不可达8源主机被隔离2协议不可达9与目的网络的通信被禁止3端口不可达10与目的主机的通信被禁止4需要分片,但DF=111对指定TOS,网络不可达5源路由失败12对指定TOS,主机不可达6目的网络未知哪些目的不可达报文只能由目的主机产生?哪些目的不可达报文只能由路由器产生?2020/2/6第八讲:ICMP协议138.4.2源抑制报文IP协议没有流控机制拥塞主机产生的数据量可能比网络快不适当的路由使流量过分集中,超过信道容量路由器的转发性能低路由器或主机因拥塞丢弃IP分组时,向源站发送ICMP源抑制报文,通知源站放慢分组的发送Code=0ChecksumType=4IPheader+8bytesIPdata0x000000002020/2/6第八讲:ICMP协议14拥塞处理发送队列缓冲:缓解短暂的突发数据丢弃报文,产生源抑制ICMP报文给源站丢弃算法——QoS源站减缓发送速率源站没有收到源抑制报文后逐步提高发送速率源抑制报文的拥塞控制能力只能解决因主机问题造成的拥塞对因路由或路由器问题造成的拥塞不起作用2020/2/6第八讲:ICMP协议158.4.3超时报文路由器或主机因分组超时而丢弃IP分组时,向源站发送ICMP超时报文Code=0,1ChecksumType=11IPheader+8bytesIPdata0x00000000Code=0——路由器检测到分组的TTL值为0Code=1——目的站在规定时间内没有收到所有分片2020/2/6第八讲:ICMP协议168.4.4参数问题报文路由器或主机因首部字段格式或取值错误而丢弃报文时,向源站发送ICMP参数问题报文Code=0,1ChecksumType=12IPheader+8bytesIPdata0x00000000Code=0——首部字段错误,指针字段指向错误字节Code=1——缺少所需的选项部分,指针字段无效Pointer2020/2/6第八讲:ICMP协议178.4.5重定向报文重定向Net1Net2HostAHostBR1R2AwanttosenddatagramstoB,butitdoesn’tknowR2isthebetterchoice.Whatwillitdo?IPpacketRedirectionmessageNet1直接交付0.0.0.0/0R1Net1直接交付Net2R20.0.0.0/0R12020/2/6第八讲:ICMP协议18重定向报文格式Code=0~3ChecksumType=5IPheader+8bytesIPdata目标路由器的IP地址CodeDescription0对特定网络路由的重定向1对特定主机的重定向2对特定网络和服务类型的重定向3对特定主机和服务类型的重定向缩小路由改变的范围2020/2/6第八讲:ICMP协议198.5ICMP查询处理QueryEchorequestandreplyTimestamprequestandreplyAddressmaskrequestandreplyRoutersolicitationandadvertisementPingTraceroute2020/2/6第八讲:ICMP协议208.5.1回送请求和应答报文测试目的站的可达性Ping应用TCPUDPICMPIPICMPIPEchoEchoreply还可获取往返时间信息Code=0ChecksumType=8,0Optionaldata(Sendbytherequestmessage;repeatedbythereplymessage)IdentifierSequencenumber2020/2/6第八讲:ICMP协议218.5.2时戳请求和应答报文请求得到其它机器的时间,以保持时间同步计算分组的往返时间(单位:ms)发时间=收时戳-初始时戳,收时间=返回时间-发时戳往返时间=发时间+收时间由于路径、传输,难以得到非常精确的时间Code=0ChecksumType=13,14Originaltimestamp(filledbysource)IdentifierSequencenumberReceivetimestamp(filledbydestination)Transmittimestamp(filledbydestination)2020/2/6第八讲:ICMP协议228.5.3掩码请求和应答报文应用供IP协议软件使用主机知道路由器地址时,可以向路由器发送请求不知道路由器时,可广播发送,路由器作应答Code=0ChecksumType=17,18MaskIdentifierSequencenumber2020/2/6第八讲:ICMP协议238.5.4路由器询问和通告报文主机发送路由器询问报文,查询本网中的路由器路由器发送路由器通告报文,通告自己以及所知的本网中其他路由器的存在Code=0ChecksumType=10IdentifierSequencenumberCode=0ChecksumType=10Routeraddress1IdentifierSequencenumberAddresspreference1Routeraddress2Addresspreference2……2020/2/6第八讲:ICMP协议248.6ICMP软件设计2020/2/6第八讲:ICMP协议258.7小结ICMP试图解决IP传输中出现的问题ICMP报文封装在IP中,只能送到指定目的站由于IP的无连接特性,ICMP只能向源站报告源站对ICMP报告的错误可能无能为力ICMP在实际中用途较广,但对网络的控制能力较弱2020/2/6第八讲:ICMP协议26要点ICMP作用、通信方式ICMP报文封装:直接封装在IP分组中类型:差错报告(传输特点)、测试查询作用、特点