ICMP

网络层中最重要的协议是IP协议,我们已经通过前面的章节了解了IP协议。IP协议的一个重要补充协议是ICMP协议。ICMP(Internet Control Message Protocol)介于网络层和传输层的协议。它的用于传输网络诊断信息

ICMP协议

ICMP传输的信息可以分为两类,一类信息可用来诊断网络故障。我们已经知道,IP协议的工作方式是"我尽力",如果IP包没有被传送到目的地,或者IP包发生错误,IP协议本身不会做进一步的努力。但上游发送IP包的主机和接力的路由器并不知道下游发生了错误和故障,它们可能继续发送IP包。通过ICMP包,下游的路由器和主机可以将错误信息汇报给上游,从而让上游的路由器和主机进行调整。由于ICMP只提供特定类型的错误汇报,而不会真正纠错,所以它不能帮助IP协议成为"可靠"(reliable)的协议。另一类信息是咨询Informational)性质的,比如某台计算机询问路径上的每个路由器都是谁,然后各个路由器同样用ICMP包回答。

ICMP协议基于IP协议。也就是说,一个ICMP包需要封装在IP包中,然后在互联网传送。ICMPIP套装的必须部分,也就是说,任何一个支持IP协议的计算机,都要同时支持ICMP

ICMP包都会有类型Type),代码Code)和校验码Checksum)三部分。

  • 类型表示ICMP包的大的类型
  • 代码是一个类型之内细分的小类型。针对不同的错误信息或者咨询信息,会有不同的类型和代码。从上面我们可以看到,ICMP支持的类型非常多,就好像瑞士军刀一样,有各种各样的功能。
  • 校验码与IP协议的头部校验码相类似,但与IP协议中校验码只校验头部不同,ICMP的校验码所校验的是整个ICMP包,也就是说包括头部和数据。

pingtraceroute这两个运维常用于网络排错的命令就是基于ICMP的~

ICMP类型

Echo

这个名字好像源自古希腊神话,是一个女孩的名字,具体故事就不说了,总之是一段凄美伤感的故事~

回音Echo)属于咨询信息。ping命令就是利用了该类型的ICMP包。当使用ping命令的时候,将向目标主机发送Echo询问类型的ICMP包,而目标主机在接收到该ICMP包之后,会回复Echo回答类型的ICMP包,并将询问ICMP包包含在数据部分。ping命令是我们进行网络排查的一个重要工具。如果一个IP地址可以通过ping命令收到回复,那么其他的网络协议通信方式也很有可能成功。

可以通过抓到的包看到,确实如此,发送方icmp中数据和接收方返回的是一样的

发送

返回

Source Quench

源头冷却source quench)属于错误信息。如果某个主机快速的向目的地传送数据,而目的地主机没有匹配的处理能力,目的地主机可以向出发主机发出该类型的ICMP包,提醒出发主机放慢发送速度:"请对我温柔一点吧"。

Destination Unreachable

这个信息运维绝对都见过,目的地无法到达Destination Unreachable)属于错误信息。如果一个路由器接收到一个没办法进一步接力的IP包,它会向出发主机发送该类型的ICMP包。比如当IP包到达最后一个路由器,路由器发现目的地主机无法正常工作,就会向出发主机发送目的地无法到达(Destination Unreachable)类型的ICMP包。目的地无法到达还可能有其他的原因,比如不存在接力路径,比如不被接收的端口号等等。

Time Exceeded

超时Time Exceeded)属于错误信息。IPv4中的存活时间Time to LiveTTL)和IPv6中的最大中继数Hop Limit)会随着经过的路由器而递减,当这个区域值减为0时,就认为该IP包超时(Time Exceeded)。如果超时,路由器将发给出发主机的超时类型的ICMP包,通知主机发生了超时错误。 traceroute就利用了这种类型的ICMP包。traceroute命令用来发现IP接力路径(route)上的各个路由器。它向目的地发送IP包,第一次的时候,将TTL设置为1,引发第一个路由器的超时错误。这样,第一个路由器回复ICMP包,从而让出发主机知道途径的第一个路由器的信息。随后TTL被设置为2、3、4、……,直到到达目的主机。这样,沿途的每个路由器都会向出发主机发送ICMP包来汇报错误。tracerouteICMP包的信息打印在屏幕上,就是接力路径的信息了。

Redirect

重定向redirect)属于错误信息。当一个路由器收到一个IP包,对照其路由表,发现自己不应该收到该IP包,它会向出发主机发送重新定向类型的ICMP,提醒出发主机修改自己的路由表。比如,192.168.0.5将本应发给192.168.0.9icmp包发到了,192.168.0.1,此时192.168.0.1就会返回一个重新定向类型的ICMP包给192.168.0.5

Neighbor Discovery(IPv6)

解释邻居搜索(Neighbor Discovery)前,需要先说下ARP,ARP协议用于发现周边的IP地址和MAC地址的对应。然而,ARP协议只用于IPv4,IPv6并不使用ARP协议。IPv6包通过邻居搜索(ND, Neighbor Discovery)来实现ARP的功能。ND的工作方式与ARP类似,但它基于ICMP协议。ICMP包有邻居询问(Neighbor Solicitation)和邻居答复(Neighbor Advertisement)类型。这两个类型分别对应ARP协议的询问和回复信息。

总结

ICMP协议是IP协议的排错帮手,它可以帮助人们及时发现IP通信中出现的故障。基于ICMP的工具ping和traceroute也构成了重要的网络诊断工具。然而,需要注意的是,尽管ICMP的设计是出于好的意图,但ICMP却经常被黑客借用进行网络攻击,比如利用伪造的IP包引发大量的ICMP回复,并将这些ICMP包导向受害主机,从而形成拒绝服务攻击(Denial-of-Service attack)。而重新定向类型的ICMP包可以引起某个主机更改自己的路由表,所以也被用作攻击工具。许多站点选择忽视某些类型的ICMP包来提高自身的安全性。

results matching ""

    No results matching ""