4.8 网际控制报文协议
4.8 网际控制报文协议ICMP
- 为了更有效地转发P数据报和提高交付成功的机会,在网际层使用了网际控制报文协议
- 主机或路由器使用ICMP来发送差错报告报文和询问报文
- ICMP报文被封装在IP数据报中发送
1. 五种差错报告报文
1.1 终点不可达
- 当路由器或主机不能交付数据报时,就向源点发送终点不可达报文。
- 具体可再根据ICMP的代码字段细分为目的网络不可达、目的主机不可达、目的协议不可达、目的端口不可达、目的网络未知、目的主机未知等13种错误。
1.2 源点抑制
- 当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。
1.3 时间超过
- 当路由器收到一个目的1P地址不是自己的P数据报,会将其生存时间TTL字段的值减1。
- 若结果不为0,则将该P数据报转发出去;若结果为0,除丢弃该P数据报外,还要向源点发送时间超过报文。
1.4 参数问题
- 当路由器或目的主机收到P数据报后,根据其首部中的检验和字段发现首部在传输过程中出现了误码,就丢弃该数据报,并向源点发送参数问题报文。
1.5 改变路由(重定向)
- 路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)。
2. 当发生以下情况时不应该发送IMCP差错报告报文
- 对ICMP差错报告报文不再发送ICMP差错报告报文
- 对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文
- 对具有多播地址的数据报都不发送ICMP差错报告报文
- 对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报不发送ICMP差错报告报文
3. 常用的ICMP询问报文
- 回送请求和回答
- ICMP回送请求报文是由主机回或路由器向一个特定的目的主机发出的询问,收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。
- 这种询问报文用来测试目的站是否可达及了解其有关状态。
- 时间戳请求和回答
- ICMP时间戳请求报文是请某个主机或路由器回答当前的日期和时间。
- 在ICMP时间戳回答报文中有一个32位的字段,其中写入的整数代表从1900年1月1日起到当前时刻一共有多少秒。
- 这种询问报文用来进行时钟同步和测量时间
4. ICMP应用
4.1 分组网间探测(PING)
Packet Internet Groper
- 用来测试主机或路由器间的连通性
- 应用层直接使用网际层的ICMP(没有通过运输层的TCP或UDP)
- 使用ICMP回送请求和回答报文
4.2 跟踪路由
traceroute
用来测试P数据报从源主机到达目的主机要经过哪些路由器
Windows版本
tracert命令 应用层直接使用网际层ICMP 使用了ICMP回送请求和回答报文以及差错报告报文
Unix版本
traceroute命令 在运输层使用UDP协议 仅使用ICMP差错报告报文
4.8 网际控制报文协议
http://binbo-zappy.github.io/2024/11/17/计算机网络/4-8-网际控制报文协议/