网间控制报文协定Internet Control Message Protocol,简称ICMP,TCP/IP协定族中的一种协定,位于IP层,用于传输网路中的控制信息。ICMP允许出错讯息的生成、检测分组和与 IP相关的信息邮件。
基本介绍
- 中文名:网间控制报文协定
- 外文名:nternet Control Message Protocol
- 性质:报文协定
- 称简:ICMP
实例
IP协定的目的比较明确,它只是尽力地、最快地传递数据到目的站点,因此很难诊断错误情况,必须通过另外的协定返回相应的信息。针对网间层的错误诊断、拥塞控制、路径控制和查询服务四大功能,ICMP提供相应的报文。例如:当一个分组无法到达目的站点或TTL逾时后,路由器就会废除这个分组,同时向源站点返回一个目的站点不可达的ICMP报文;另外,当网路拥塞(congestion)时,路由器就会废除过载的分组,同时向源站点返回一个源站点抑制的报文。RFC 792中定义了ICMP协定。
如图2.15所示,ICMP报文是封装在IP数据报的数据区中传送的,因此并不能保证它的可靠性。为了避免重複报告所引起的“雪崩”现象,ICMP报文不再引发ICMP报文。
┌──────┬───────┐
│ICMP头标│ICMP数据区│ICMP报文
└──────┴───────┘
┌────┬──────────────┐
│IP头标│ IP数据区 │IP数据报
└────┴──────────────┘
图2.15 ICMP报文的封装
2.7.1 ICMP报文格式
ICMP报文分成头标和数据区两部分,其中头标包含类型、代码和校验和三个域。ICMP报文格式如图2.16所示。
0 1 2 3
01234567890123456789012345678901
┌───┬───┬───────┐
│ 类型│代码 │校验和 │
├───┴───┴───────┤
│ 数据 │
├───────────────┤
│ ··· │
└───────────────┘
图2.16 ICMP报文格式
计算校验和的算法与IP报头校验和的算法相同,也是16位二进制反码和的反码。但要注意的是,它是整个ICMP数据报的校验和而不仅仅是头标的校验和;类型域是一个单位元组整数,它指出报文的类型;代码域也是一个单位元组整数,它提供关于报文类型更进一步的信息。表2-3定义了15个ICMP报文类型。
0││12│
3││12│
4││12│
5││12│
8││12│
9││12│
10││12│
11││12│
(t001)