1、第6章 差错与控制报文协议,6.1 因特网控制报文协议 6.2 ICMP报文格式与类型 6.3 ICMP差错报告 6.4 ICMP控制报文 6.5 ICMP请求与应答报文对 6.6 ICMP报文封装,6.1 因特网控制报文协议(ICMP),ICMP协议设计的最初目的主要是用于IP层的差错报告,由路由器或信宿以一对一的模式向信源报告传输错误的原因。 随着网络的发展,检测和控制功能逐渐被引入到ICMP协议中,使得ICMP协议不仅用于传输差错报告,而且大量用于传输控制报文。 ICMP与IP协议位于同一个层次(IP层),但ICMP报文是封装在IP数据报的数据部分进行传输的。 ICMP协议是IP协议的补
2、充,用于IP层的差错报告、拥塞控制、路径控制以及路由器或主机信息的获取。,返回,6.2 ICMP报文格式与类型,ICMP报文由首部和数据段组成。首部为定长的8个字节,前4个字节是通用部分,后4个字节随报文类型的不同有所差异。ICMP报文的一般格式如图所示。,ICMP报文虽然细分为很多类,但总的来看可以分为如图所示的三大类:差错报告、控制报文和请求应答报文。,返回,6.3 ICMP差错报告,ICMP差错报告的数据区包含出错数据报的首部及该数据报的前64位数据,这些信息有助于信源或管理人员发现错误原因。 ICMP差错报告具有以下特点:1)只报告差错,但不负责纠正错误,纠错工作留给高层协议去处理。2
3、)发现出错的设备只向信源报告差错。3)差错报告作为一般数据传输,不享受特别优先权和可靠性。4)产生ICMP差错报告的同时,会丢弃出错的IP数据报。,形成ICMP差错报告时有以下例外: 1)ICMP差错报文本身不会再产生ICMP差错报告。 2)分片报文的非第一个分片不会产生ICMP差错报告。 3)组播地址报文不会产生ICMP差错报告。 4)特殊地址127.0.0.0和0.0.0.0的报文不会产生ICMP差错报告。,6.3.1 信宿不可达报告,当路由器无法根据路由表转发IP数据报时或主机无法向上层协议和端口提交IP数据报时,将丢弃当前的数据报,并产生信宿不可达差错报告,向信源报告出错。信宿不可达报
4、文如图所示。,信宿不可达报文可能由路由器产生,也可能由信宿机产生。产生信宿不可达报文的原因的16种可能 :,6.3.2 数据报超时报告,在数据报的传输过程中,首部的TTL值用于防止数据报因路由表的问题而无休止地在网络中传输。当TTL值为0时,路由器会丢弃当前的数据报,并产生一个ICMP数据报超时报告。另外。 在信宿进行分片重组时会启动重组定时器,一旦重组定时器超时,信宿就会丢弃当前正在重组的数据报,然后产生一个ICMP数据报超时报告,并向信源发送该超时报告。,数据报超时报告的报文格式与信宿不可达报告的报文格式相同,只是类型和代码值不同。 数据报超时报告的类型和代码的含义如表所示。类型值11表示
5、是数据报超时报文,代码“0”表示TTL超时,代码“1”表示分片重组超时。,6.3.3 数据报参数错报告,数据报参数错报告是由数据报首部字段值不明确或空缺而引起的差错报告。一旦路由器或信宿机发现错误的数据报首部和错误的数据报选项参数时,便抛弃该数据报,并向信源发送差错报告报文。数据报参数错报文的格式如图6-4所示。,类型12表明数据报参数错 代码“0”表示数据报首部中的某个字段的值有错或不明确,这时ICMP报文首部的指针指向数据报中有问题的字节; 代码“1”表示数据报首部中缺少某一选项所必须具有的部分参数,此时的ICMP报文没有指针字段。 表6-3给出了数据报参数错报告的类型。 代码为“0”的参
6、数错只能报告一个出错参数 代码为“1”的参数错只能报告缺少参数,不能说明缺少哪个参数。,返回,6.4 ICMP控制报文,ICMP控制报文包括源抑制报文和重定向报文 源抑制报文用于拥塞控制 重定向报文用于路径控制 下表给出了这两类报文的类型和作用描述。,6.4.1 源抑制报文,IP协议采用的是无连接数据报方式进行传输 发送方事先并不了解中间的路由器和信宿的处理能力和缓冲区大小 在数据报传输过程中没有采用任何流量控制机制当大量的数据报进入路由器或信宿时,会造成缓冲区溢出,即出现拥塞(Congestion)。 ICMP利用源抑制的方法来进行拥塞控制。通过源抑制来减缓信源发出数据报的速率。,源抑制报文
7、的格式如图6-5所示。,源抑制包括三个阶段:发现拥塞阶段、解决拥塞阶段和恢复阶段。 在发现拥塞阶段,路由器对缓冲区进行监测,一旦发现拥塞,立即向相应的信源发送ICMP源抑制报文。该信源收到源抑制报文后,便知道拥塞已经发生,而且所发送的数据报已经丢掉。 在解决拥塞阶段,信源根据收到的源抑制报文中所带的原数据报的首部信息决定对去往某一特定信宿的信息流进行抑制。通常信源在收到源抑制报文后,按一定的规则降低发往某信宿的数据报传输率。 拥塞解除后,信源逐渐恢复数据报传输速率。,在拥塞控制中以下几点值得关注:1)虽然对于每个因拥塞而丢弃的数据报都产生ICMP源抑制报文,但信源只按照自己的时间段进行响应。2
8、)拥塞的解除由信源依据是否有进一步的源抑制报文到达来进行判断。3)拥塞可能是由多个源共同行为的结果,由于各个信源的发送速率相差较大,源抑制的效果未必很好。,6.4.2 重定向报文,因特网上的路由器和主机中都存有一个路由表,路由表决定了去往目的地的下一跳路由器的地址。 路由器上的路由表能够及时地反映网络结构的变化,这一特点由路由器之间定期交换路由信息加以保证。 主机因为不能保证全天开机,所以主机中的路由表不能及时反映网络结构的变化情况。另外,由于因特网上的主机数量远大于路由器的数量,主机如果参与路由信息的交换,势必带来大量的通信开销。因此主机中的路由表不通过路由协议进行更新。 但主机所在的网络可
9、能和多个路由器相连,主机在发送信息时也要根据其路由表来选择下一跳路由器,为了解决主机路由表的刷新问题,ICMP提供了重定向机制。,主机路由表所给出的下一跳路由器可能并非去往信宿的最佳下一跳路由器,当主机的下一跳路由器收到数据报后,该路由器根据它的路由表判断本路由器是否是去往信宿的最佳选择,如果不是,该路由器仍然会向信宿网络转发该数据报,但在转发的同时会产生一个ICMP重定向报文,通知信源修改它的路由表,重定向报文中将给出信源最佳下一跳路由器的IP地址。 主机A根据重定向报文修改路由表的例子。,ICMP重定向报文的格式如图所示。 代码从0到3分别代表不同的重定向方式,具体含义由前面的表6-4给出
10、。 主机开机后在ICMP重定向机制的作用下,经过不断积累逐渐充实和完善其路由表。动态且优化,值得注意的是:1)ICMP产生重定向报文的时候并不丢弃原数据报。2)ICMP重定向报文由位于同一网络的路由器发送给主机,完成对主机的路由表的刷新。3)被刷新的路由表项与重定向报文数据部分指示的IP数据报首部中的信宿地址相关。内容为重定向报文中目标路由器的IP地址。,返回,6.5 ICMP请求与应答报文对,ICMP请求与应答报文对的出现使得因特网上的任何主机或路由器可以向其他主机或路由器发送请求并获得应答。 通过ICMP请求与应答报文对,网络管理人员、用户或应用程序可以对网络进行检测,了解: 设备的可达性
11、 地址掩码的设置 时钟的同步等情况 目的是利用这些有用的信息,对网络进行故障诊断和控制。,ICMP请求与应答报文对如表6-5所示。其中的信息请求与应答报文已经不再使用。,6.5.1 回应请求与应答报文,回应请求与应答报文的目的是对网络进行诊断和测试。 回应请求与应答不仅可以被用来测试主机或路由器的可达性,还可以测试IP协议的工作情况。 TCP/IP网络系统所提供的ping命令大多是利用ICMP回应请求与应答报文来实现的,该命令通常用于测试信宿的可到达性。,ICMP回应请求与应答报文的格式如图所示。 类型“8”表明是回应请求报文 类型“0”表明是回应应答报文 协议未对标识符和序列号字段进行正式定
12、义,通常将标识符和序列号用于匹配请求与应答,标识符一般为发起请求进程的进程ID。回应请求与应答报文的标识符和序列号一致。,6.5.2 时间戳请求与应答报文,因特网中的各个主机和路由器都是独立运行的,因此在时钟上存在着较大的差异,而一些分布式应用系统要求各个设备的时钟是同步的,ICMP时间戳请求与应答报文就是用于设备间进行时钟同步的报文对。 用时间戳请求与应答报文进行时钟同步的基本思路是请求方主机通过获取另一主机的时间戳信息,将该信息和请求方主机的时间戳信息进行比较后,估算两者的时钟差异。,请求/应答格式如图。类型13:请求报文,类型14:应答报文。 初始时间戳字段用于指示请求方发出请求的时间
13、接收时间戳字段用于指示应答方主机收到请求的时间 发送时间戳字段用于指示应答方主机发送应答的时间 三个时间戳字段各为32比特长,以毫秒为单位从世界时间午夜0点起计时。时间戳的计数值不能超过86400000(24小时)。 请求报文:填初始时间戳,接收时间戳和发送时间戳为0。 应答报文:初始时间戳直接从请求报文中复制,接收时间戳和发送时间戳由应答方主机根据自己接收和发送时的时钟填写。,为了估算请求方与应答方之间的时钟差异,首先要计算出时间戳请求和应答的往返延迟,然后据此计算出单程传输延迟,最后由两设备的时间戳和单程传输延迟计算出两台设备之间的时间差,从而实现时钟的同步。往返延迟时间可以用下式计算:
14、往返时间t当前t初始(t发送t接收)t接收t初始t当前t发送 假设传输请求的时延和传输应答的时延相同,那么单程时延就等于往返时间的一半。,一个时钟同步的例子:主机A发出时间戳请求时的初始时间戳为1000毫秒,主机B收到请求时的接收时间戳是1055毫秒,主机B给出应答时的发送时间戳是1057毫秒,主机A收到应答时的时间为1030毫秒。主机A可以根据这些时间戳计算出两台主机间的时间差。 往返时间t当前t初始(t发送t接收)10301000(10571055)28(毫秒) 单程时延28214 (毫秒) 时间差t接收(t初始单程时延)1055(100014)41 (毫秒) 由上面的计算可知:主机B的时
15、钟比主机A的时钟快了41毫秒。,6.5.3 地址掩码请求与应答报文,地址掩码请求与应答报文使得一台主机可以获得另一台主机或路由器的子网掩码。如果能够获得本网络中路由器的子网掩码,也就得到了本机所属子网的掩码。无盘机通过RARP获得IP地址后,可以利用地址掩码请求来获得子网掩码。地址掩码请求与应答报文的格式如图6-11所示。 类型“17”表示地址掩码请求,地址掩码请求报文的地址掩码字段为“0”。类型“18”表示地址掩码应答。,6.5.4 路由器请求与通告报文,初始化路由表的方法: 在配置文件中指定静态路由 利用ICMP路由器请求和通告报文来获得路由器的IP地址。通过路由器请求和通告报文还可以知道
16、路由器是否处于活动状态。主机在引导以后通过广播或组播发出路由器请求报文。一台或更多台路由器以路由器通告报文作为响应。即使没有路由器请求报文,路由器也可以定期广播或组播路由器通告报文。,ICMP路由器请求报文和路由器通告报文的格式如图。,地址数字段指明报文所含的地址项的个数。一个地址项由一个IP地址和一个4字节的地址优先级构成。 地址项大小字段指明每个路由器地址项所占32比特字的数目,一般为2。 生存期字段以秒为单位指明所通告地址的有效时间。 数据区是一到多个地址项。地址项中的优先级指出该IP地址作为默认路由器地址的优先等级,值越小优先级越高。若地址优先级为0,则该地址可作为默认路由器地址。优先
17、级为0x80000000时,表明该地址不能作为默认路由器地址使用。,返回,6.6 ICMP报文封装,向下:虽然ICMP协议可以接受来自上层的请求,但并不直接封装来自上层协议的数据。ICMP协议将请求转变为ICMP报文,然后将报文封装在IP协议中进行发送。包含ICMP报文的IP数据报首部的协议字段为“1” 。 向上:IP软件一旦接收到差错或控制报文,立即交给ICMP模块进行处理。ICMP模块可以形成应答报文,也可以交给上层的应用程序或协议去处理。,本章要点,ICMP协议是IP协议的补充,用于IP层的差错报告、拥塞控制、路径控制以及路由器或主机信息的获取。 ICMP既不向信宿报告差错,也不向中间的
18、路由器报告差错,而是向信源报告差错。 ICMP与IP协议位于同一个层次,但ICMP报文被封装在IP数据报的数据部分进行传输。 ICMP报文可以分为三大类:差错报告、控制报文和请求/应答报文。 ICMP差错报告分为三种:信宿不可达报告、数据报超时报告和数据报参数错报告。 数据报超时报告包括TTL超时和分片重组超时。 数据报参数错包括数据报首部中的某个字段的值有错和数据报首部中缺少某一选项所必须具有的部分参数。,ICMP控制报文包括源抑制报文和重定向报文。 拥塞是无连接传输时缺乏流量控制机制而带来的问题。ICMP利用源抑制的方法进行拥塞控制,通过源抑制减缓信源发出数据报的速率。 源抑制包括三个阶段
19、:发现拥塞阶段、解决拥塞阶段和恢复阶段。 ICMP重定向报文由位于同一网络的路由器发送给主机,完成对主机的路由表的刷新。 ICMP回应请求与应答不仅可以被用来测试主机或路由器的可达性,还可以被用来测试IP协议的工作情况。 ICMP时间戳请求与应答报文用于设备间进行时钟同步。 主机利用ICMP路由器请求和通告报文不仅可以获得默认路由器的IP地址,还可以知道路由器是否处于活动状态。,返回,RFC involved in this chapter,The Internet Control Message Protocol described here is a TCP/IP standard def
20、ined by Postel RFC 792 and updated by Braden RFC 1122. Nagle RFC 896 and Prue and Postel RFC 1016 discuss ICMP source quench messages and how routers should use them to handle congestion control. Mogul and Postel RFC 950 discusses subnet mask request and reply messagesDeering RFC 1256 discusses the
21、solicitation and advertisement messages that were used in router discovery.,2011年考研统考题,47(9分)某主机的MAC地址为00-15-C5-C1-5E-28,IP地址为10.2.128.100(私有地址)。题47-a图是网络拓扑,题47-b图是该主机进行Web请求的1个以太网数据帧前80个字节的十六进制及ASCII码内容。,请参考图中的数据回答以下问题。 (1)Web服务器的IP地址是什么?该主机的默认网关的MAC地址是什么? (2)该主机在构造题47-b图的数据帧时,使用什么协议确定目的MAC地址?封装该协议
22、请求报文的以太网帧的目的MAC地址是什么? (3)该帧所封装的IP分组经过路由器R转发时,需修改IP分组头中的哪些字段?,(1) 64.170.98.32 00-21-27-21-51-ee 以太网帧头部6+6+2=14字节,IP数据报首部目的IP地址字段前有4*4=16字节,从以太网数据帧第一字节开始数14+16=30字节,得目的IP地址40 aa 62 20(十六进制),转换为十进制得64.170.98.32。以太网帧的前六字节00-21-27-21-51-ee是目的MAC地址,本题中即为主机的默认网关10.2.128.1端口的MAC地址。 (2)ARP FF-FF-FF-FF-FF-FF
23、 ARP协议解决IP地址到MAC地址的映射问题。主机的ARP进程在本以太网以广播的形式发送ARP请求分组,在以太网上广播时,以太网帧的目的地址为全1,即FF-FF -FF-FF-FF-FF。,(3)源IP地址0a 02 80 64 改为65 0c 7b 0f 生存时间(TTL)减1 校验和字段重新计算 私有地址和Internet上的主机通信时,须有NAT路由器进行网络地址转换,把IP数据报的源IP地址(本题为私有地址10.2.128.100)转换为NAT路由器的一个全球IP地址(本题为101.12.123.15)。因此,源IP地址字段0a 02 80 64变为65 0c 7b 0f。IP数据报每经过一个路由器,生存时间TTL值就减1,并重新计算首部校验和。若IP分组的长度超过输出链路的MTU,则总长度字段、标志字段、片偏移字段也要发生变化。,