24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert


24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

文章插图
 
ICMPIP 是尽力传输的网络协议,提供的数据传输服务是不可靠的、无连接的,不能保证数据包能成功到达目的地 。那么问题来了:如何确定数据包成功到达目的地?
24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

文章插图
 
这需要一个网络层协议,提供错误检测功能和报告机制功能,于是出现了 ICMP(互联网控制消息协议) 。ICMP 的主要功能是,确认 IP 包是否成功送达目的地址,通知发送过程中 IP 包被丢弃的原因 。有了这些功能,就可以检查网络是否正常、网络配置是否正确、设备是否异常等信息,方便进行网络问题诊断 。
24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

文章插图
 
举个栗子:如果在传输过程中,发生了某个错误,设备便会向源设备返回一条 ICMP 消息,告诉它发生的错误类型 。
24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

文章插图
 
ICMP 消息是通过 IP 进行传输,但它的目的并不是让 IP 成为一种可靠的协议,而是对传输中发生的问题进行反馈 。ICMP 消息的传输同样得不到可靠性保证,也有可能在传输过程中丢失 。因此 ICMP 不是传输层的补充,应该把它当做网络层协议 。
ICMP 消息封装ICMP 消息使用 IP 来封装,封装格式如下图 。
24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

文章插图
 
其中 type(类型)字段表示 ICMP 消息的类型,code(代码)字段表示 ICMP 消息的具体含义 。例如:type 值为 3 表示目的不可达消息( Destination Unreachable Message ),若 code 值为 0 表示目的网络不可达( Network Unreachable ) 。常见的 ICMP 消息类型如下图 。
24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

文章插图
 
从功能上,ICMP 的消息可分为两类:一类是通知出错原因的错误消息,另一类是用于诊断的查询消息 。
24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

文章插图
 
常见的 ICMP 消息类型
  • 回送请求消息( Echo Request ):是由源设备(主机或路由器等)向一个指定的目的设备发出的请求 。这种消息用来测试目的地是否可达 。
  • 回送响应消息( Echo Reply ):对 Echo Request 的响应 。目的设备发送 Echo Reply 来响应收到的 Echo Request。最常用的 ping 命令就是使用 Echo Request 和 Echo Reply 来实现的 。

24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

文章插图
 
  • 目的不可达( Destination Unreachable ):路由器无法将 IP 包发送给目的地址时,会给源设备返回一个 Destination Unreachable 消息,并在消息中显示不可达的具体原因 。
  •  
  • 实际情况下,经常会遇到的错误代码是 1 ,表示主机不可达,它是指路由表中没有目的设备的信息,或目的设备没有连接到网络 。

24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

文章插图
 
  • 参数问题( Parameter Problem ):路由器发现 IP 包头出现错误或非法值后,向源设备发送一个 Parameter Problem 消息 。这个消息包含有问题的 IP 头,或错误字段的提示信息 。

24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

文章插图
 
  • 重定向( Redirect ):如果路由器发现一条更优的路径发送数据,那么它就会返回一个 Redirect 消息给主机 。这个消息包含了最合适的路由信息和源数据 。
  • 实际情况下,这种 Redirect 消息会引发路由问题,所以不进行这种设置 。比如:路由器的路由表不准确时,ICMP 有可能就无法正常工作 。

24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

文章插图
 
  • 超时( Time Exceeded ):IP 包中有一个字段是 TTL(生存周期),它的值每经过一次路由器就减 1 ,直到减到 0 时 IP 包会被丢弃 。这时,路由器会发送一个 Time Exceeded 消息给源设备,并通知 IP 包已被丢弃 。
  • 设置 TTL 的主要目的,是当路由发生环路时,避免 IP 包无休止的在网络上转发 。还可以用 TTL 控制 IP 包的可达范围,比如设置一个较小的 TTL 值 。

24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

文章插图