文章目录
- 4.网际控制报文协议ICMP
- 4.1.ICMP报文的种类
- 4.2.ICMP应用举例
4.网际控制报文协议ICMP
网际控制报文协议概述::
- 作用:更有效地转发IP数据报和提高交付成功的机会。
- 原理:允许主机或路由器报告差错情况和提供有关异常情况的报告。
- 层级:互联网的标准协议,但是不是高层协议,而是IP层的协议。
- 组装:ICMP报文作为IP层数据报的数据,加上数据报的首部,组成IP数据报发送出去。
- 格式:(如下图所示)
- 前四字节格式统一,共有类型、代码和检验和三个字段。
- 最后是数据字段,其长度取决于ICMP的类型。
4.1.ICMP报文的种类
ICMP报文的基本分类:ICMP差错报文和ICMP查询报文。
几种常见的ICMP报文类型:(如下图所示)
- 终点不可达:当路由器或主机不能交付数据报时就向源点发送终点不可达报文。
- 时间超过:
- 当路由器收到生存时间为零的数据报时,除了丢弃该数据报外,还需要向源点发送时间超过报文。
- 当终点在规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,并向源点发送时间超过报文。
- 参数问题:当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。
- 改变路由(重定向):路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(也就是找到了更好的路由)。
其他字段的作用:
- 代码字段的作用:进一步区分某种类型中的几种不同情况。
- 检验和字段的作用:检验整个ICMP报文。
ICMP差错报告的组成:(如下图所示)
- 把收到的需要进行差错报告的IP数据报的首部和数据字段的前8个字节提取出来,作为ICMP差错报文的数据字段。
- 再加上相应的ICMP差错报告报文的前八个字节,就构成了ICMP差错报告报文。
- 对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地址,以及到达其中的每一个路由器的往返时间。
- 使用案例:
注意事项:因为互联网的拥挤程度随时在变化,因此经过更多的路由反而花费更短的时间也是完全有可能的。