网际控制报文协议 ICMP

介绍

ICMP(Internet Control Message Protocol)是一个在网络层的协议,ping 命令就是使用的 ICMP 协议。注意,ICMP不是高层协议,ICMP报文是封装在 IP数据报中,作为其中的数据部分。
在这里插入图片描述

种类

ICMP报文有两种种类:ICMP差错报文,ICMP询问报文。

报文前四个字节是固定的,分别是类型、代码、 检验和。接着四个字节和报文的种类有关。最后是数据字段,其长度取决于ICMP的类型。
在这里插入图片描述
代码字段是为了进一步区分某种类型中的不同情况。检验和字段用来检验整个ICMP报文。**为什么还要检验ICMP报文呢?**因为 IP报文只对头部有校验和检验,所以不能保证ICMP不出错。

差错报文

我们看到差错报告报文有四种:

  • 终点不可达
    当路由器或主机不能交付数据报时就向源点发布终点不可达报文。

  • 时间超过
    当路由器收到TTL为0的数据报时,除了丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已经收到的全部数据报片丢弃,并向源点发送时间超过报文。

  • 参数问题
    当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发布参数问题报文。

  • 改变路由(重定向)
    路由器把改变路由报文发送给主机,让主机知道下次可以选择更好的路由器(发送给另外的路由)。

关于改变路由:我们知道主机和路由器都会维护一个路由表,出于效率的考虑,主机不会和连在网络上的路由器定期交换信息。而主机连着的默认路由器知道去一个地址的最佳路线(信息通过和其他路由器交换得来)。因此当默认路由器发现去目的地址的最佳路由有变时,就用改变路由报文将情况告诉主机。该主机就在它的路由表中增加一个项目。

所有的ICMP差错报文的数据字段都有相同的格式。把收到的需要进行差错报告的IP数据报的首部和数据字段的前8个字节提取出来。作为ICMP报文的数据字段。再加上相应的 ICMP差错报文的前八个字节,就构成了 ICMP 差错报告报文。
在这里插入图片描述
根据上图可以知道,提取数据字段 8 个字节主要是为了得到端口号。

但是还有不应该发送ICMP差错报文的情况:

  • 对于ICMP差错报文,不应发送ICMP差错报文
  • 对于第一个分片后的后续分片,不再发送
  • 具有多播地址的数据报,都不发送ICMP差错报文
  • 对具有特殊地址的(如127.0.0.0或0.0.0.0),不发送 ICMP差错报文

查询报文

常见的ICMP查询报文有两种:

  • 回送请求和回答
    ICMP回送请求报文 是由主机或路由器向一个特定的目的主机发出的询问。收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。这种询问报文用来测试目的站是否可达以及了解其有关状态。Ping使用的就是这个。

  • 时间戳请求和回答
    ICMP 时间戳请求报文是请某台主机或路由器回答当前日期和时间。时间戳请求可用于时钟同步和时间测量。

参考书籍
《计算机网络》第七版 谢希仁

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值