大家好呀,我是请假君,今天又来和大家一起学习数通了,今天要分享的知识是ICMP。
RFC792定义的ICMP ( Internet Control Message Protocol,互联网控制消息协议)是一个网络层协议,基于IP运行。ICMP定义了错误报告和其它回送给源点的关于IP数据包处理情况的消息,可以用于报告IP数据包传递过程中发生的错误、失败等信息,提供网络诊断等功能。
ICMP通常为IP层或者更高层协议使用。其中 ping是一个最常见的应用,主机可通过它来测试网络的可达性。用户运行ping命令时,主机向目的主机发送ICMPEcho Request消息。Echo Request消息封装在IP包内,其目的地址为目的主机的IP地址。目的主机收到EchoRequest消息后,向源主机回送一个ICMP Echo Reply消息。源主机如果收到Echo Reply消息,即可获知该目的主机是可达的。假定某个中间路由器没有到达目的网络的路由,便会向源主机端返回一条ICMP Destination Unreachable 消息,告知源主机目的不可达。
ICMP消息可分为两种类型,即 ICMP差错消息和ICMP查询消息。对于ICMP差错消息要作特殊处理,例如,在对 ICMP差错消息进行响应时,永远不会生成另一份ICMP差错消息。(如果没有这个限制规则,可能会遇到一个差错产生另一个差错的情况,而差错再产生差错,这样会无休止地循环下去)。
常用ICMP消息的含义如下:
1.目的不可达(Destination Unreachable):目的主机可能不存在或已关机,可能发送者提供的源路由要求无法实现,或设定了不分段的包太大而不能封装于帧中。在这些情况下,路由器检测出错误,并向源发送者发送一个ICMP Destination Unreachable消息。它包含了不能到达目的地的数据包的完整IP头,以及其载荷数据的前64比特,这样发送者就能知道哪个包无法投递。
2.回波请求(Echo Request>:是由主机或路由器向一个特定的目的主机发出的询问。这种询问消息用来测试目的站是否可达。
3.回波响应(Echo Reply):对回波请求作出响应时发送。收到Echo Request的主机对源主机发送ICMP Echo Reply消息作为响应。
4.参数问题(Parameter Problem):假设一个IP包的头中产生错误或非法值,路由器发现问题后向源发送一个Parameter Problem消息。这个消息包含了有问题的IP头和一个指向出错字段的指针。
5.重定向(Redirect):假设主机向路由器发送了一个包,而此路由器知道其他一些路由器能将分组更快地投递,为了方便以后路由,此路由器向主机发送一个Redirect消息。它通知主机其他路由器的位置,以及今后应当将具有相同目的地址的包发向那里。这就允许主机动态地更新它的路由表,更好地适应网络条件的变化。
6.源抑制(Source Quench);当某个速率较高的源主机向另一个速率较慢的目的主机(或路由器)发送一连串的数据包时,就有可能使速率较慢的目的主机产生拥塞,因而不得不丢弃一些数据包。源主机通过高层协议得知丢失了一些数据包,就会不断地重发这些数据包,这就使得原本已经拥塞的目的主机更加拥塞。在这种情况下,目的主机就要向源主机发送ICMP Source Quench 消息,使源站暂停发送。
7.超时〈Time Exceeded):当IP包中的TTL字段减到0或分片重组定时器到期时,此包或任何未重组的分片将从网络中被删除。删除分组的路由器接着向源发送一个Time Exceeded消息,说明分组未被投递。
8.时间戳请求和时间戳应答(Timestamp Request and Timestamp Reply):时间戳分组使主机能估计它到另一个主机一次往返通信所需的时间。源主机创建并发送一个含有发送时刻(源时间戳)的Timestamp Request消息,目的主机收到分组后创建一个含有原时间戳和目的主机接收时间戳以及目的主机传输时间戳的Timestamp Reply消息。当源主机收到Timestamp Reply时,它同时记录分组的到达时刻。这些时间戳使主机能够估计网络的IP包投送效率。
好的,那么今天的分享就到这里,有疑问的欢迎来评论区讨论,我们下次将讲解TCP和UDP的基本原理,再见。