第5章Internet控制报文协议ICMP要求:1、掌握ICMP协议的作用和报文类型2、掌握ICMP协议的回送、时戳、掩码请求与应答报文3、掌握ICMP的路由器恳求与通告报文4、掌握ICMP的差错报告报文5、掌握Ping,Traceroute命令6、了解拥塞控制和路径控制技术一、为什么需要ICMP?(1)数据报在传送中可能会遇到各种异常;(2)IP层也需要控制功能(拥塞、差错控制)。二、ICMP的作用传递网络控制信息、提供差错报告。问题:为什么要把这两项功能合二为一?(1)控制和差错报文都是特殊报文。(2)差错报告与差错控制总是密切相关的。三、ICMP的工作机制(1)路由器(主机)向其它路由器(主机)发送ICMP报文。(2)只能向源端报告差错,不能向中间路由器报告差错。5.1概述四、ICMP协议与IP协议的关系1.ICMP与IP同层,只是IP软件中的一个模块。(1)功能不独立,只是IP的补充;(2)不是上层协议赖以存在的基础。2.ICMP报文封装在IP数据报中传送,其IP首部“协议”域指明为ICMP报文(代码为1)。5.2ICMP报文格式和类型一、报文格式与类型相关,但是前3个域相同说明:(1)对整个报文计算校验和(2)差错报告报文的数据区包括:出错数据报的首部+出错数据报数据区前64bit原因:包含上层协议报文的重要信息。(3)非嵌套使用:规定不为携带ICMP差错报文的数据报中出现的差错而生成ICMP报文。如果该类报文出现差错,则产生异常。类型代码校验和其它字段(与类型相关)数据区…二、报文类型(1)请求与应答报文(2)差错报告报文(3)控制报文三、ICMP报文的封装及传递ICMP首部ICMP数据数据报首部数据报数据区帧首部帧数据区5.3请求/应答报文一.检测可达性:回送请求与应答(Echo&EchoReply)例:ping命令原理:基于ICMP回送请求与应答报文使用:可测试网络的可达性可查看记录路由选项可指定松散源路由和严格源路由类型8/0代码0校验和标识数据区…序号标识和序号功能:匹配请求和应答说明:1.用Ping命令可以查看记录路由选项UNIX:Ping–R,Windows:Ping–r处理过程:Ping报文(ICMPEcho)封装在IP报文中,每个处理该IP报文的路由器都把自己的IP地址写到IP首部的选项中。这些地址被复制到封装回应报文(ICMPEchoReply)的IP首部选项中,若选项中仍有空间,则返回路径上路由器的地址也被记录其中。2.Ping命令可以指定自由源路由和松散源路由Ping–j,Ping-r二、获得子网掩码:地址掩码请求/应答报文三、时钟同步与传送时间估计:时戳请求/应答报文类型17/18代码0校验和标识掩码序号应用:主机发往网关,请求地址掩码类型13/14代码0校验和标识初始时间戳序号接收时间戳传送时间戳功能:1.时钟同步2.估算往返时间初始时间戳:发送方发送数据前填写接收时间戳:接收方收到报文时填写传送时间戳:接收方发送回应时填写问题:如何估算往返时间和进行时钟同步?四、自动获得默认路由并动态调整:路由器恳求和路由器通告类型(9)代码(0)校验和地址号路由器地址1生命期(30分钟)地址大小1优先级1路由器地址2优先级2……类型(10)代码0校验和未使用(0)使用:主机启动后,通过组播或有限广播方式发路由器恳求报文,寻找默认路由器。路由器收到恳求报文后,立即发一个路由器通告报文作为响应。路由器通告报文的使用时机:1.对路由器恳求报文的回应2.路由器定期(通常为10分钟,而一条路由的生命期通常为30分钟)向相邻网络中各主机发通告报文,告诉(组播或有限广播)各主机可使用的路由器。作用:1.主机可以不必配置默认网关。2.使用软状态技术,防止主机保持一个无效路由。5.4ICMP差错报告报文一、ICMP差错报告的特点(1)只向源站提供报告,本身一般不处理差错。(2)差错报文作为一般数据传输。(3)数据报出错时,放弃数据报。二、目的站不可达报告:无法转发或投递时(1)网络不可达:选路失败(2)主机不可达:投递失败(3)协议不可达:与TCP或更高层协议有关(4)端口不可达:与TCP/UDP协议端口有关类型3代码0-12校验和未用(0)IP数据报首部+数据报的前64比特(注:路由器收到一个需要分片的数据报,但是首部又设置了强制不允许分片位,则使用ICMP目的不可达报文报错。用途:测试MTU)二、超时报告:TTL=0或分片重组超时三、参数出错报告:数据报首部或选项出错时类型11代码0/1校验和未使用(0)IP数据报首部+数据报首部的前64字节类型(12)代码0/1校验和指针IP数据报首部+数据报首部的前64字节未使用(0)指针:指向数据报出错的第一个字节5.5ICMP控制报文一、拥塞控制与源站抑制拥塞:大量数据报涌入同一网关,导致该网关资源耗尽而必须丢弃后面到达的数据报时,就是拥塞。拥塞控制:解决数据报大量涌入问题流量控制:解决点对点传输速率的匹配问题解决拥塞方法:源站抑制,即抑制信源发出数据报的速率。类型(4)代码0校验和未使用(0)IP数据报首部+数据报首部的前64字节1.网关发现拥塞,按一定策略向某些源站发出源站抑站报文;2.源站收到源抑制报文后,按一定速率降低发往某信宿的数据报的速率;3.在一定时间间隔内若无源抑制报文到达,则源站认为拥塞解除,逐渐提高发送速率。拥塞处理步骤:二.路径控制和重定向报文:更新主机路由表问题:主机的路由表如何更新?答案:靠路由器发送的重定向报文。当路由器发现一台主机使用非优化路由时,向主机发一重定向报文,请求主机改变路由。类型(5)代码(0-3)校验和路由器互联网地址IP数据报首部+数据报首部的前64字节网络2网络1网络3R2R1BAA:默认网关R1,A发送数据给B时,首先发给R1重定向R1发现合适的路由器是R2,则向主机A发送重定向报文一、域名报文功能:获取目标域名。请求/响应工作模式。类型37代码0校验和标识序号类型38代码0校验和标识TTL序号域名5.6实验性的ICMP控制报文二、安全失败报文功能:IPsec错误报告格式:差错报告报文类型代码:40代码字段含义:0:SPI错误3:解密失败1:认证失败4:需要认证2:解压缩失败5:需要授权5.7应用举例一、Traceroute(Windows系统:tracert)1、功能(1)查看IP数据报所经过的路径(2)可指定IP源路由选项问题:有了IP记录路由选项和Ping命令,为何还需要Traceroute?(1)不是所有的路由器都支持记录路由选项(2)Ping记录下来的地址翻了一番(一来一回)(3)IP首部中记录路由选项空间有限2、traceroute工作原理ICMP超时报文+IP首部的TTL(1)发送IP数据报,TTL=1,则到达第一个路由器后TTL=0,该路由器向源端发送ICMP超时报文,该报文封装在IP数据报中,源端收到该报文后提取IP首部的IP地址字段,则记录了第一个路由器。(2)发送IP数据报,TTL=2,记录第二个路由器。……问题:如何判断何时到达目的主机?1.利用端口不可达报文(1)源端发送的IP报文封装了UDP报文,其端口为65535,同时IP首部按照Tracert的原理构造。(2)途中的路由器回应ICMP超时报文。(3)目的主机回应端口不可达报文。(4)源端根据返回的报文类型判断是否到达目的端。2.利用ICMPECHO和ECHOREPLY报文问题:如果目标不活动怎么办?R1R2SDR3TTL=1ICMP超时TTL=2ICMP超时二、路径MTU发现要点:利用数据报的分片标志。当路由器收到一份需分片的数据报,但在IP首部中又设置了不分片(DF)标志,则路由器向源端发ICMP不可达报文。说明:Windows命令:Tracert(-j),每一跳发三个报文,可以记录传输延时。一个很好工具:VisualRoute