如今,ICMP 仍然是网络世界中最强大的帮助。当IP 数据包在传输过程中遇到意外情况时,它依靠ICMP 来通知您。否则,丢失的IP数据包将消失在海洋中。发送方不知道数据包是否发送成功。如果失败,原因是什么?所有这些都是通过ICMP 协议通知的。
ICMP 是Internet Control Message Protocol 的缩写,是一个重要的网络层协议。
ICMP 是干啥用的
是做什么用的?为什么称为控制消息协议?
ICMP分为两类:查询报文和错误报文。查询报文,如ping命令,由我们发起,错误发生后发送给发送方,这是互联网协议模型约定的。
ICMP 错误消息提供对通信环境中发生的各种问题的反馈。通过这些信息,管理员可以诊断发生的问题并采取适当的措施来解决这些问题。
ICMP差错报文是整个数据传输链路中非常重要的一环。打个比方,当数据包顺利通过网络时,错误消息可以完全不可见。这个当包含数据包的网络遇到各种故障时出现的信使只有一个目的:通知发送者这个数据包遇到的意外,并且有20种更多的字。不仅仅是类型。对应错误代码)。
例如,下面的两个场景你应该很熟悉。
如果路由器收到IP 数据报但无法转发它,则会发送ICMP“主机不可达”错误消息。如果要将IP 数据报发送到另一个路由器,则接收该数据报的路由器会向IP 数据报的发送方发送ICMP“重定向”错误消息。
ICMP 协议说明
虽然它运行在网络层并且看起来与IP 协议并行,但ICMP 消息需要添加IP 标头,并且通常连接到使用的IP 层或更高层协议(例如TCP 或UDP)在除了ping 和Traceroute 之外,很少有应用程序直接使用ICMP 协议。
ICMP 协议格式
与IP和TCP协议相比,ICMP协议格式仍然非常简单。
型
类型字段占用8位,主要定义消息的大类。例如,类型3统一表示不可达,具体原因由code字段决定。
代码
代码字段也占8位。例如,如上所述,类型3表示不可达,代码0表示网络不可达,代码1表示主机不可达。
校验和
用于错误检查,与IP协议校验和功能相同。
内容
由于类型和代码不同,错误原因也不同,需要相应的解释。内容部分用于解释错误的原因。
以下是一些示例:
下图显示了ICMP 分类,包括查询消息和错误消息。需要Excel原件的同学可以通过回复ICMP获取源文件。
目的不可达差错报文
目的地不可达是网络传输过程中的常见问题。开发过程中可能会出现这种情况,比如端口设置不正确。
从上表可以看出,3类型都是不可到达错误,代码范围为0到15。这意味着无法访问的具体原因有16 个。这种情况下的协议格式如下。
类型3,代码0-15。校验和后面的4个字节的空间没有被使用,无缘无故应该是0。就是这样。
如前所述,内容部分因类型和代码而异。如果目的地不可达,即类型3,则内容分为两部分:IP 标头和原始IP 数据报数据部分的前8 个字节。
原始IP数据报的数据部分是指网络层以上的协议,例如TCP或UDP。 TCP位于传输层,当TCP数据报到达网络层时,会添加IP头。这将是一个IP 数据包。这里我们所说的数据部分是一个TCP数据报,它可以非常大,所以我们只需要前8个字节,因为前8个字节包含的信息就足够了。
回想一下TCP 协议的格式。前8个字节就是下图中的红框,包含源端口、目的端口和序列号。
例如,如果代码为3,您将收到一条错误消息,指出端口无法访问。 TCP 协议的前8 个字节告诉我们导致错误的原始数据消息中的目标端口和不可达性。就是这个港口。还可以知道原始报文的源端口是什么,哪个用户进程发送了数据包,交给这个进程及时处理错误就可以了。
”
源端口号是与用户进程相关的重要指标。例如,我开发了一个应用程序,占用两个端口:8888和8898。如果安装您的应用程序的计算机收到错误消息,您就会知道错误是什么。拆解消息原始数据包部分的前8个字节,发现源端口为8898。然后我发现这是由我开发的应用程序处理的。
”
下面是使用WireSharek 检测到的格式的端口无法访问错误消息。
如果您Telnet 到未打开的端口,您将收到ICMP 端口不可达错误消息。
查询报文
使用ICMP作为查询报文的场景相对较少,这意味着使用ARP或TCP协议,但我们选择了ICMP协议。
例如,我们稍后将讨论的ping 和Traceroute 是ICMP 中两个更有趣且非常聪明的应用。
此外,它还可用于在无盘系统引导过程中获取唯一的子网掩码。它还可用于从第三方系统查询当前时间戳。
就明白了。
有一些场景不发送差错报文
在某些情况下,目标是防止ICMP 错误消息引起广播风暴。
如果ICMP 错误消息本身发生错误,则不会为该错误消息发送更多错误消息。如果TCP 或UDP 失败,则会发送错误消息,但如果ICMP 错误消息来自源,则忽略它。如果没有,请忽略。发送的时候没有任何乐趣,比如网线断了。但是,ICMP 查询消息可能会生成ICMP 错误消息。例如,如果发送ping 命令时发生错误,发送方会收到错误消息。对于目标地址为广播或多播地址(D 类地址)的IP 数据报,不会发送错误消息。 ARP 是链路层广播数据报,因此不会发送错误消息。如果它不是IP 分片的第一部分,则不会发送错误消息。如果数据太长,网络层会将其分片。这些片段实际上是同一个数据包。在这种情况下,只有第一个片段会发送错误消息,其他片段将被忽略。对于源地址不是单个主机的数据报,不会发送错误消息。源地址不能是零地址、环回地址、广播地址或多播地址。
总结
1. ICMP 位于网络层,但需要添加IP 标头。
2、ICMP分为查询报文和错误报文,主要使用错误报文。
3. ICMP错误消息就像网络上的数据报出现问题时及时通知发送者的消息。通知内容包括原始消息的必要部分。生成错误的数据报。
4. 在某些情况下,不会发送ICMP错误消息以防止网络风暴。
来源:https://mp.weixin.qq.com/s/K70xGqVm4Ez0x0egbLPWgw
版权声明:本文转载于网络,版权归作者所有。如有侵权,请联系本站编辑删除。