网络层---报文控制协议ICMP

网际控制报文协议ICMP

  • 为了更有效地转发IP数据报和提高交付于成功的机会,在网络层使用ICMP协议。

  • ICMP是互联网的标准协议

  • 另外,网络层提供的不是可靠交付,而是尽最大努力交付。ICMP就是网络层"尽力"的一个表现。

  • ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。(。ICMP所尽的最大努力就是指:这件事我尽力去干,但不保证不出问题,出了问题我会向你报告)

  • ICMP不是高层协议,而是IP层协议,它存在IP数据报中的数据部分(IGMP也一样)。

  • 在将IP协议时,我们讲到过有几个协议时配合IP协议一起使用的(都在IP层),其中ARP协议是用来找MAC地址的,ICMP是用来报告错误的。
    在这里插入图片描述
    在这里插入图片描述

ICMP报文的类型

  1. ICMP差错报告文 (出现下面四种情况之一就回发一份ICMP差错报告文)
    1. 终点不可达 (比如:路由表找不到)
    2. 时间超过 (也就是还能跳几下。 IP数据报中字段:生存时间
    3. 参数问题
    4. 改变路由(重定向) (原路走不了了,发现一条新路径)
  2. ICMP询问报文
    1. 回送请求和回答报文
    2. 时间戳请求和回答报文

ICMP差错报告文的内容

在这里插入图片描述

  • ICMP差错报告报文:提取ICMP的前8个字节 + 提取IP数据报首部 + 提取IP数据报数据不符前8个字节
    1. 首部里面还有一些出错原因信息
    2. 数据部分符前8个字节是为了拿到运输层的端口号(IP数据报数据部分封装的是运输层的报文,这个报文也有一个首部,首部里面包含端口号)
  • ICMP差错报告报文组建好后,再给它加个首部,再将它当做IP数据报发回去。

不再发送差错报告报文的情况

  1. 对ICMP差错报告报文不再发送对应的ICMP差错报告报文 (ICMP发回去的过程中出错了,这时候不用理它了)
  2. 对第一个分片的数据薄片的所有后续数据包片都不发送ICMP差错报告报文。(数据会分组,但只要有一个错了,就相当于全错,不用多次报错了)
  3. 对具有多播地址的数据报不发送ICMP差错报告报文
  4. 某些特殊地址的数据报不发送ICMP差错报告报文(如环回地址:127.0.0.0 。 0.0.0.0)

ICMP应用举例

  • PING用来测试两个主机之间的连通性。使用了ICMP回送请求和回答报文(询问报文)

  • PING命令是应用层直接使用网络层ICMP的例子

  • tracert命令 ,用来跟踪一个分组从原点到终点的路径(起点到终点经过了多少个路由器,它们的地址是多少)在这里插入图片描述

    • 这个命令可能需要几十秒更长时间来完成。它利用IP数据报中的生存时间TTL字段ICMP时间超过差错报文实现从原点到终点的路径的跟踪,其原理如下:
      1. 主机先向最终目的发送一份报文,TTL字段设置成1。到达第一个站点后时间超时,向原主机发送ICMP时间超时差错报文。这样获得了相关所需信息
      2. 主机再向最终目的发送一份报文,TTL字段设置成2 。。。。
      3. TTL字段设置成3 。。。。。直到到达终点路径为止。
      4. 最后一跳的站点信息怎么拿来呢(没有出现超时错误)?
        • 设置一个错误端口号
发布了22 篇原创文章 · 获赞 0 · 访问量 140

猜你喜欢

转载自blog.csdn.net/weixin_42649617/article/details/104948651