zhouqijie

网际报文控制协议

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

ICMP不是高层协议,而是IP层的协议。因为ICMP报文作为IP数据报的数据部分,加上IP数据报的首部,组成IP数据报发送出去。



1、ICMP报文的种类

ICMP的报文有两种:ICMP差错报文ICMP询问报文

ICMP报文前4个字节是统一的格式,共有三个字段:类型代码校验和

常用的ICMP报文类型:

ICMP报文种类 类型的值 ICMP报文类型
差错报告报文 3 终点不可到达
差错报告报文 11 时间超过
差错报告报文 12 参数问题
差错报告报文 5 改变路由(Redirect)
询问报文 8或0 回送(echo)请求或回答
询问报文 13或14 时间戳(timestamp)请求或回答

ICMP标准在不断更新,有些报文已经不再使用,例如“信息请求与回答”、“地址掩码请求与回答”、“路由器请求与回答”、“源点请求与回答”等。

ICMP差错报告报文:

  1. 终点不可到达:当路由器或主机不能交付数据报时,就向源点发送终点不可到达报文。
  2. 时间超过:当路由器收到生存时间为0的数据报时,就丢弃该数据报并向源点发送超时报文。
  3. 参数问题:当路由器或目的主机收到的数据报的首部中有的字段的值不正确,就丢弃该报文,并向源点发送参数问题报文。
  4. 改变路由(重定向):路由器把改变路由的报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)。
  1. 对于ICMP差错报告报文,不再发送ICMP差错报告报文。
  2. 对第一个分片的数据报片的所有后续数据报片,都不发送ICMP差错报告报文。
  3. 对具有多播地址的数据报,都不发送ICMP差错报告报文。
  4. 对具有特殊地址的数据报(例如127.0.0.0),不发送ICMP差错报告报文。

常用ICMP询问报文:

  1. 回送请求与回答:ICMP回送请求报文是由主机/路由器向另一台主机发出的询问。收到报文的主机必须给源主机/路由器发送ICMP回送回答报文。
  2. 时间戳请求与回答:ICMP时间戳请求报文是请某台主机或路由器回答当前的日期和时间。时间戳请求与回答可以用于时钟同步与时间测量。



2、ICMP应用举例

ping:

ICMP的一个重要应用就是“分组网间探测(Package InterNet Groper, PING)”。PING使用了ICMP回送请求与回答报文,PING是应用层直接使用网络层ICMP的一个例子

tracert:

另一个非常有用的应用是traceroute/tracert。使用tracert能给出到达目的主机所经过的路由器的IP地址,以及到达其中的每一个路由器的往返时间。

(END)