计算机网络详细笔记(四)网际控制报文协议ICMP

4.网际控制报文协议ICMP

网际控制报文协议概述:

  • 作用:更有效地转发IP数据报和提高交付成功的机会。
  • 原理:允许主机或路由器报告差错情况和提供有关异常情况的报告。
  • 层级:互联网的标准协议,但是不是高层协议,而是IP层的协议。
  • 组装:ICMP报文作为IP层数据报的数据,加上数据报的首部,组成IP数据报发送出去。
  • 格式:(如下图所示)
    • 前四字节格式统一,共有类型、代码和检验和三个字段。
    • 最后是数据字段,其长度取决于ICMP的类型。
      在这里插入图片描述

4.1.ICMP报文的种类

ICMP报文的基本分类:ICMP差错报文和ICMP查询报文。

几种常见的ICMP报文类型:(如下图所示)

在这里插入图片描述

  • 终点不可达:当路由器或主机不能交付数据报时就向源点发送终点不可达报文。
  • 时间超过
    • 当路由器收到生存时间为零的数据报时,除了丢弃该数据报外,还需要向源点发送时间超过报文。
    • 当终点在规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,并向源点发送时间超过报文。
  • 参数问题:当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。
  • 改变路由(重定向):路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(也就是找到了更好的路由)。

其他字段的作用

  • 代码字段的作用:进一步区分某种类型中的几种不同情况。
  • 检验和字段的作用:检验整个ICMP报文。

ICMP差错报告的组成:(如下图所示)

在这里插入图片描述

  1. 把收到的需要进行差错报告的IP数据报的首部和数据字段的前8个字节提取出来,作为ICMP差错报文的数据字段。
  2. 再加上相应的ICMP差错报告报文的前八个字节,就构成了ICMP差错报告报文。
  3. 对ICMP差错报告加入首部,封装为一个IP数据报发出。

不应该发送ICMP差错报告报文的几种情况

  • 对ICMP差错报告报文,不应该发送ICMP差错报告报文。
  • 对第一个分片的数据报文的所有后续数据分片,都不发送ICMP差错报告报文。
  • 对具有多播地址的数据报,都不发送ICMP差错报告报文。
  • 对具有特殊地址的数据报,不发送ICMP差错报告报文。

两种常见的ICMP询问报文

  • 回送请求或回送回答:ICMP回送请求报文是由主机或路由器向一个特定的目的主机发起的询问。收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。这种询问报文用来测试目的站是否可达以及了解其有关状态。
  • 时间戳请求或时间戳回答:在ICMP时间戳请求报文发出后,就能收到对方响应的ICMP时间戳回答报文。利用在报文中记录的时间戳,发送方可以计算出当前网络的往返时延。

4.2.ICMP应用举例

分组网间探测(PING)

  • 地位与作用:这是ICMP的一个重要应用之一,用于测试两台主机之间的连通性。
  • 使用的报文:PING使用了ICMP回送请求和回送回答报文。
  • 所在层级:PING在应用层使用ICMP,没有通过运输层的TCP或UDP。
  • 使用案例

在这里插入图片描述

跟踪路径(TRACERT)

  • 工作原理
    • 从源主机向目的主机发送一连串的IP数据报,数据报中封装的是无法交付的UDP用户数据报。每个数据报的生存时间分别设置为1、2、3…。
    • 在传输路径中,如果到达某一个路由器时,某个数据报的生存时间变为零,则该路由器将该数据报丢弃并向源主机发送一个ICMP时间超过的报文。
    • 在最后一个数据报到达目的主机时,数据报的TTL为1,因此主机不转发数据报。但是因为IP数据报中封装的是无法交付的数据报,因此目的主机向源主机发送ICMP终点不可达差错报告的报文。
    • 这样,源主机就知道了到达目的主机所经过的路由器的IP地址,以及到达其中的每一个路由器的往返时间。
  • 使用案例

在这里插入图片描述

注意事项:因为互联网的拥挤程度随时在变化,因此经过更多的路由反而花费更短的时间也是完全有可能的。

猜你喜欢

转载自blog.csdn.net/hanmo22357/article/details/130839461