作用:ICMP协议主要用来检测网络通信故障和实现链路追踪
IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成。其中一个重要的模块就是ICMP(网络控制报文)协议。ICMP不是高层协议,而是IP层的协议。
为了更有效的转发IP数据报和提高交付成功的机会,在网络层使用了网络控制报文协议ICMP(Internet Control Message Protocol)
主机或路由器使用ICMP来发送差错报文和询问报文
ICMP报文被封装在IP数据报中发送
ICMP差错报告报文:
- 终点不可达
- 网络不可达
- 目的主机不可达
- 目的协议不可达
- 目的端口不可达
- 目的网络未知
- 目的主机未知
- 等等十三种
- 源点抑制:当路由器或主机由于拥塞而丢弃数据时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢
- (生存)时间超过:
- 当路由器收到一个一个目的地址不是自己的IP数据报,会将生存时间TTL字段的值减1
- 若结果不为0,则将该数据报转发出去
- 若结果为0,除丢弃该IP数据报外,还要向源点发送时间超过报文
- 当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,也会向源点发送时间超出报文
- 当路由器收到一个一个目的地址不是自己的IP数据报,会将生存时间TTL字段的值减1
- 参数问题
- 当路由器或目的主机收到IP数据报后,根据首部中的检验字段和发现首部在传输过程中出现误码,就丢弃该数据报,并向源点发送参数问题报文
- 改变路由(重定向)
- 路由器把改变路由报文发送给主机,让主机知道下次应该将数据报发送给另外的路由器
以下情况不应发送差错报告报文:
- 对ICMP差错报告报文不再发送ICMP差错报告报文
- 对第一个分片的数据报片的所有后续数据报片都不发生ICMP差错报告报文
- 对具有多播地址的数据报都不发送ICMP差错报告报文
- 对具有特殊地址的数据报不发送ICMP差错报告报文
ICMP询问报文
回送请求和问答
ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问
收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文
这种询问报文用来测试目的站是否可达及了解其有关状态
时间戳请求和问答
ICMP时间戳请求报文是请某个主机或路由器回答当前的日期和时间
在ICMP时间戳回答报文中有一个32位的字段,其中写入的整数代表从1900年1月1日起到当前时间一共有多少秒
这种询问报文用来进行时钟同步和测量时间
ICMP应用举例
分组网间探测PING(Packet InterNet Groper)
- 用来测试主机或路由器间的连通性
- 应用层直接使用网络层的ICMP(没有通过TCP或UDP)
- 使用ICMP回送请求和回答报文
跟踪路由traceroute
- 用来测试IP数据报从源主机到达目的主机主要经过哪些路由器
- Windows版本
- tracert命令
- 应用层直接使用网络层ICMP
- 使用ICMP回送请求和回答报文以及差错报告报文
- Unix版本
- traceroute命令
- 在运输层使用UDP协议
- 仅使用ICMP差错报告报文