网际报文控制协议
为了更有效地转发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差错报告报文:
- 终点不可到达:当路由器或主机不能交付数据报时,就向源点发送终点不可到达报文。
- 时间超过:当路由器收到生存时间为0的数据报时,就丢弃该数据报并向源点发送超时报文。
- 参数问题:当路由器或目的主机收到的数据报的首部中有的字段的值不正确,就丢弃该报文,并向源点发送参数问题报文。
- 改变路由(重定向):路由器把改变路由的报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)。
- 不应该发送ICMP差错报文的情况:
- 对于ICMP差错报告报文,不再发送ICMP差错报告报文。
- 对第一个分片的数据报片的所有后续数据报片,都不发送ICMP差错报告报文。
- 对具有多播地址的数据报,都不发送ICMP差错报告报文。
- 对具有特殊地址的数据报(例如127.0.0.0),不发送ICMP差错报告报文。
常用ICMP询问报文:
- 回送请求与回答:ICMP回送请求报文是由主机/路由器向另一台主机发出的询问。收到报文的主机必须给源主机/路由器发送ICMP回送回答报文。
- 时间戳请求与回答:ICMP时间戳请求报文是请某台主机或路由器回答当前的日期和时间。时间戳请求与回答可以用于时钟同步与时间测量。
2、ICMP应用举例
ping
:
ICMP的一个重要应用就是“分组网间探测(Package InterNet Groper, PING)”。PING使用了ICMP回送请求与回答报文,PING是应用层直接使用网络层ICMP的一个例子。
tracert
:
另一个非常有用的应用是traceroute/tracert。使用tracert能给出到达目的主机所经过的路由器的IP地址,以及到达其中的每一个路由器的往返时间。
(END)