icmp是TCP还是UDP
文章脉络如下。
在我们之前的文章中,已经深入了解了TCP/IP协议,今天我们来深入探讨一下ICMP协议。
ICMP,全称Internet Control Message Protocol(互联网控制协议),是互联网套件的一部分,用于IP协议中发送控制消息。也就是说,ICMP依赖于IP协议来完成信息发送,它是IP的主要部分,但从体系结构上来讲,它位于IP之上,因为ICMP报文是承载在IP分组中的,就像TCP和UDP报文段作为IP的有效载荷被承载一样。
当主机收到一个指明上层协议为ICMP的IP数据报时,它会分解出该数据报的内容给ICMP,就像分解数据报的内容给TCP和UDP一样。
ICMP协议与TCP、UDP等协议不同,它不用于数据传输,只用于发送消息。由于IP协议现在有两类版本:IPv4和IPv6,所以ICMP也有两个版本:ICMPv4和ICMPv6。
ICMP的功能主要分为两个:
1. ICMP的第一个功能是确认IP包是否能够成功到达目标地址。当两个设备通过互联网相连时,任意一个设备发送给另一个设备的IP包如果没有到达,就会生成ICMP数据包发送给设备共享。
2. ICMP的第二个功能是网络诊断。经常使用ICMP数据包的两个终端程序是ping和traceroute。traceroute程序用于显示两台互联网设备之间可能的路径并测量数据包在IP网络上的时延。ping程序是traceroute的简化版本,我们经常使用ping命令来测试两台设备之间是否互联,并准确报告数据包到达目的地并返回所花费的时间。
现在我们知道了,如果在IP通信过程中,由于某种原因,某个IP包未能到达目标主机,那么具体原因将由ICMP进行通知。接下来我们来讲一下ICMP的通知类型。
通知类型(十进制数)具体内容。例如:0回送应答(Echo Re),3目标不可达(Destination Unreachable),4原点抑制(Source Quench),5重定向或改变路由(Redirect),以及其他的通知类型。这些通知类型主要分为两类:有关IP数据报传递的ICMP报文(这类报文也叫做差错报文),以及有关信息采集和配置的ICMP报文(这类报文也被称为查询或信息类报文)。
我们知道,ICMP是承载在IP内部的,而且IPv4和IPv6的封装位置不同。ICMP头部包含了整个ICMP数据段的校验和,具体格式如下。
所有的ICMP报文都以8位的类型(Type)和代码(Code)字段开始,其后的16位校验和涵盖了整个报文。ICMPv4和ICMPv6中的类型和代码字段是不同的。
我们知道,当路由器无法将IP数据报发送给目标地址时,它会向发送端主机返回一个目标不可达(Destination Unreachable Message)的ICMP消息,并在消息中显示不可达的具体原因。实际通信过程中会显示各种各样的不可达信息,例如错误代码时1表示主机不可达等。
如果路由器发现发送端主机使用了次优的路径发送数据,那么它会返回一个ICMP重定向(ICMP Redirect Message)的消息给这个主机。这个ICMP重定向消息包含了最合适的路由信息和源数据。这种情况会发生在路由器持有更好的路由信息的情况下。路由器会通过这样的ICMP消息给发送端主机一个更合适的发送路由。
接下来我们再来讲一下ICMP的一些其他功能。例如:原点抑制是为了应对网络拥堵的情况,当路由器向低速线路发送数据时,其发送队列的残存数据报变为0从而无法发送时,可以向IP数据报的源地址发送一个ICMP原点抑制消息。但这个ICMP消息可能会引起不公平的网络通信,所以一般不常用。还有路由器探索消息主要用于路由器发现等。