ch06: Internet Control Message Protocol
ICMP
Last updated
ICMP
Last updated
ICMP经常被认为是IP层的一个组成部分,用来传递差错报文和其他需要注意的信息。
ICMP报文通常会被IP层或更高的协议(比如TCP或UDP)使用。一些ICMP报文会把差错报文发送给用户进程。
ICMP报文封装在IP报文中:
ICMP报文的格式如下:
所有报文的前四个字节格式一样。
类型(type)可以有15个不同的值,用来描述不同类型的ICMP报文,还可以使用代码(code)来进一步指定不同的类型。
然后是校验和。
接下来是不同的ICMP报文内容,每个类型都不同。
ICMP地址掩码请求用于无盘系统在引导过程中获取自己的子网掩码。
另一个方式是BOOTP协议。
格式如下:
identifier和sequence在响应中返回,可以用来匹配请求。
用于查询当前时间,返回的建议值是自午夜开始计算的毫秒数(UTC)。
不过需要知道日期。
格式:
请求填originate时间戳,响应填receive时间戳和transmit时间戳。
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每隔五秒重试一次。