ICMP 是“Internet Control Message Protocol”(因特网控制报文协议)的缩写。
ICMP 报文是承载在 IP 数据报中的。
为什么需要ICMP
如在 IP 数据报生存时间 TTL 为 0 的时候,路由器不再对数据报进行转发操作,而是会直接丢弃这个数据报,并且返回一个 ICMP 报文,告诉源主机:你的数据报生存时间到了,还是没有送到目标主机那里,你可以选择重发或者放弃。
ICMP 出现的目的不是为上层应用程序提供服务,只是在 IP 层传递差错的报文,依赖于 IP 协议进行传输。 |
---|
ICMP 报文结构
ICMP首部片段 | 长度 /bit |
解释 |
---|---|---|
类型 | 8 | 表示产生这种类型 ICMP 报文的原因 |
代码(Code)字段 | 8 | 它进一步描述了产生这种类型 ICMP 报文的具体原因。 因为每种类型的报文都可能有多个,比如目的不可达报文,产生这种原因可能有主机不可达、协议不可达、端口不可达等多个原因。 |
校验和字段 | 16 | 用于记录包括 ICMP 报文数据部分在内的整个ICMP 数据报的校验和,以检验报文在传输过程中是否出现了差错, |
数据区域 | 装载 IP 数据报首部及 IP 数据报的数据区域前 8 字节(为 IP 数据报的数据区域前 8 个字节刚好覆盖了传输层协议中的端口号字段,而 IP 数据报首部就拥有目标 IP 地址与源 IP 地址。 当源主机收到这样子的ICMP 报文后,它能根据 ICMP 报文的数据区域判断出是哪个数据包出现问题,并且 IP 层能够根据端口号将报文传递给对应的上层协议处理) |
ICMP 报文类型
ping 命令,它的本质就是一个 ICMP 查询报文。 |
---|
ICMP报文不能纠正错误,会将信息传递给上层协议,由上层协议进行处理。