ch06: Internet Control Message Protocol

ICMP

MindMap

简介

ICMP经常被认为是IP层的一个组成部分,用来传递差错报文和其他需要注意的信息。

ICMP报文通常会被IP层或更高的协议(比如TCP或UDP)使用。一些ICMP报文会把差错报文发送给用户进程。

ICMP报文封装在IP报文中:

ICMP报文的格式如下:

所有报文的前四个字节格式一样。

类型(type)可以有15个不同的值,用来描述不同类型的ICMP报文,还可以使用代码(code)来进一步指定不同的类型。

然后是校验和。

接下来是不同的ICMP报文内容,每个类型都不同。

ICMP报文的类型

ICMP地址掩码请求与应答

ICMP地址掩码请求用于无盘系统在引导过程中获取自己的子网掩码

另一个方式是BOOTP协议

格式如下:

identifier和sequence在响应中返回,可以用来匹配请求。

ICMP时间戳请求与应答

用于查询当前时间,返回的建议值是自午夜开始计算的毫秒数(UTC)。

不过需要知道日期。

格式:

请求填originate时间戳,响应填receive时间戳和transmit时间戳。

ICMP端口不可达错误

UDP会使用这个错误,来报告端口不可达错误。

ICMP错误消息必须包含生成这个错误的datagram的IP header,还有IP header后面的8个字节。比如:

返回IP header的原因是,可以让ICMP知道后面的八个字节怎么解释。(IP headerVS包含协议的信息)。

格式:

端口不可达的code是3。

ICMP端口不可达错误返回时,为什么TFTP仍然发送请求呢?这是因为,BSD系统不把从socket接收到的ICMP报文返回给使用UDP的用户进程,除非这个进程对这个socket使用了connect命令,而标准的BSD TFTP客户程序不发送connect命令。

TFTP每隔五秒重试一次。

Last updated