计算机网络学习(十四)—— ICMP 协议

241 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第26天,点击查看活动详情

为了更有效地转发 IP 数据报和提高交付成功的机会,在网际层使用了网际控制报文协议 ICMP。ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告。

ICMP 报文的种类

ICMP 报文的种类有两种,即 ICMP 差错报告报文 和 ICMP 询问报文

差错报告报文

常用的 ICMP 差错报告报文有如下几种:

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

下面几种情况不会发送 ICMP 差错报文:

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

询问报文

常用的 ICMP 询问报文有下面两种:

  1. 回送请求和回答:ICMP 回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。收到此报文的主机必须给源主机或路由器发送 ICMP 回送回答报文。这种询问报文用来测试目的站会否可达以及了解其有关状态;
  2. 时间戳请求和回答:ICMP 时间戳请求报文是请某台主机或路由器回答当前的日期和时间。在 ICMP 时间戳回答报文中有一个 32 位的字段,其中写入的整数代表从 1900 年 1 月 1 日起到当前时间一共有多少秒。时间戳请求与回答可用于时钟同步和时间测量;

应用举例

ICMP 的一个重要应用就是分组网间 PING(Packet InterNet Groper),用来测试两台主机之间的连通性。PING 使用了 ICMP 回送请求与回送回答报文。PING 是应用层直接使用网络层 ICMP 的一个例子,它没有通过传输层的 TCP 或 UDP。

参考文档

  • 《计算机网络》—— 谢希仁

往期文章