网际控制报文协议ICMP
- 为了更有效地转发IP数据报和提高交付成功的机会,使用了网际控制报文协议ICMP
- ICMP是互联网的标准协议
- ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告
- 虽然ICMP报文封装在IP数据报的数据部分,但是ICMP是IP层的协议
ICMP报文的种类有两种,ICMP差错报文 和 ICMP询问报文
ICMP报文的格式:
- 前四个字节是统一的格式, 类型(0-8)、代码(8-16)、校验和(16-31)。
- 紧接着4个字节的内容取决于ICMP报文的类型。 (第1、2条是IP报文的首部)
- 最后是ICMP的数据部分(长度也取决于类型)
ICMP差错报告报文:
- 终点不可达:不能交付数据报时
- 源点抑制: 由于阻塞而丢失数据时(应该数据报发送数据放慢一些)
- 时间超时:接收到生存时间为0的数据报时
- 参数问题:路由器或目的主机收到的数据报首部中字段不正确时
- 改变路由(重定向):把改变的路由传给主机
ICMP差错报文的数据字段的内容:
不应发送ICMP差错报告报文的几种情况:
- 对ICMP差错报告报文不再发送ICMP差错报告报文
- 对第一个分片的数据报片的所有后序数据报都不发送ICMP差错报文
- 对具有多播地址的数据报都不发送ICMP差错报告报文
- 对具有特殊地址(127.0.0.0或0.0.0.0)的数据报不发送ICMP差错报告报文
ICMP询问报文:
- 回送请求和回答报文:向一个特定主机发出询问,收到此报文的主机必须发回送报文。
- 时间戳请求和回答报文:(向主机或路由器)请求和回答当前的日期和时间
ICMP的应用举例:
分组网间探测PING
- ping用来探测两个主机间的连通性
- ping使用了ICMP回送请求和回送回答报文
- ping是应用层直接使用网络层ICMP的例子,没有通过运输层的TCP或UDP
Traceroute的应用举例:用tracert命令获得到目的主机的路由信息
- 在windows操作系统中这个命令是tracert
- 用来跟踪一个分组从源点到终点的路径
- 它利用IP数据报中的TTL字段和ICMP时间超过差错报告报文实现对源点到终点的路径的跟踪。