ICMP中的差错报文
若R1的路由表中没有网络N3的路有记录,默认路由以及主机H2的特定主机路由,则R1就不知道如何转发该数据报,只能将其丢弃,并向发送该数据报的源主机H1发送ICMP差错报告报文,其类型为终点不可达。
终点不可达:
当H1要发送数据给H2时,若R1没有网络N3的路有记录、默认路由以及H2的特定主机路由时,就不知道怎么发送该报文,只能将其丢弃,并且发送ICMP差错报文(终点不可达)。
例如:
参数问题:
改变路由:
原来H1 -> H2的路径如图红线所示,当R1检测到到H2有更合适的路径时,就会发送改变路由报文。
之后便会开始走新的路径。
常见的ICMP询问报文
ICMP协议的两个应用
分组网间探测PING:
- 用来测试主机或路由器之间的连通性
- 应用层直接使用网际层的ICMP(没有经过运输层的TCP或UDP)
- 使用ICMP回送请求和回答报文
例如:
跟踪路由traceroute:
- 用来测试IP数据报从源主机到达目的主机要经过哪些路由器
跟踪路由traceroute实现原理:
- 简单来说,就是先发送一个TTL = 1的报文,当TTL到达第一个主机后TTL变为0,此时路由器会回送时间超过差错报文,此时就能知道第一个路由位置。此时源主机再发送TTL = 2 的报文,当TTL到达第二个主机后TTL变为0,此时路由器会回送时间超过差错报文,此时就能够知道第二个路由的地址。如此反复,直到到达最后一个路由。
例如:
发送第一个TTL = 1 ,到达第一个主机后回送时间超过报文,此时源主机就能知道第一个路由器
发送第二个TTL = 2 ,到达第二个主机后回送时间超过报文,此时源主机就能知道第二个路由器
- 到达目的地址后,知道最后一个路由器,过程结束。