网际控制报文协议ICMP

462 阅读2分钟

什么是ICMP?

ICMP 是 IP 层的协议,ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。CMP报文作为IP层数据报的数据,加上数据报的首部,组成IP数据报发送出去。如图所示:

a8f82042518e8f4375c75f78c338ff6a.png

ICMP报文的前4个字节是统一的格式,共有三个字段:即类型、代码和检验和。接着的4个字节的内容与ICMP的类型有关。最后面是数据字段,其长度取决于ICMP的类型。

ICMP 的种类

ICMP报文的种类有两种,即ICMP差错报告报文ICMP询问报文。如图给出了几种常用的ICMP报文类型:

fe6ac5a3bea251a5ed4fd7c82766bbf0.png

ICMP 应用场景

ping

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

image.png

如果邮件服务器mail.sina.com.cn正常工作而且响应这个ICMP回送请求报文(有的主机为了防止恶意攻击就不理睬外界发送过来的这种报文),那么它就发回ICMP回送回答报文。由于往返的ICMP报文上都有时间戳,因此很容易得出往返时间。最后显示出的是统计结果:发送到哪个机器(IP地址),发送的、收到的和丢失的分组数(但不给出分组丢失的原因)。往返时间的最小值、最大值和平均值。

traceroute

traceroute(这是UNIX操作系统中名字),它用来跟踪一个分组从源点到终点的路径。在Windows操作系统中这个命令是tracert。下面简单介绍这个程序的工作原理:

image.png

  • Traceroute从源主机向目的主机发送一连串的IP数据报,数据报中封装的是无法交付的UDP用户数据报。
  • 第一个数据报P1的生存时间TTL设置为1。当P1到达路径上的第一个路由器R1时,路由器R1先收下它,接着把TTL的值减1。由于TTL等于零了,R1就把P1丢弃了,并向源主机发送一个ICMP时间超过差错报告报文。如果要检测第二个路由就把生存时间TTL设为2,以此类推......