首页 > 自考资讯 > 高考百科

最强辅助网络信使:ICMP 协议(apim辅助协议接口模块)

小条 2024-10-22

如今,ICMP 仍然是网络世界中最强大的帮助。当IP 数据包在传输过程中遇到意外情况时,它依靠ICMP 来通知您。否则,丢失的IP数据包将消失在海洋中。发送方不知道数据包是否发送成功。如果失败,原因是什么?所有这些都是通过ICMP 协议通知的。

ICMP 是Internet Control Message Protocol 的缩写,是一个重要的网络层协议。

32d7d4b7ee904852b045ee8b74f62f99~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1730160501&x-signature=eLeZsO5GAnC77BL6bGkqfPM7p0I%3D

ICMP 是干啥用的

是做什么用的?为什么称为控制消息协议?

ICMP分为两类:查询报文和错误报文。查询报文,如ping命令,由我们发起,错误发生后发送给发送方,这是互联网协议模型约定的。

ICMP 错误消息提供对通信环境中发生的各种问题的反馈。通过这些信息,管理员可以诊断发生的问题并采取适当的措施来解决这些问题。

ICMP差错报文是整个数据传输链路中非常重要的一环。打个比方,当数据包顺利通过网络时,错误消息可以完全不可见。这个当包含数据包的网络遇到各种故障时出现的信使只有一个目的:通知发送者这个数据包遇到的意外,并且有20种更多的字。不仅仅是类型。对应错误代码)。

例如,下面的两个场景你应该很熟悉。

如果路由器收到IP 数据报但无法转发它,则会发送ICMP“主机不可达”错误消息。如果要将IP 数据报发送到另一个路由器,则接收该数据报的路由器会向IP 数据报的发送方发送ICMP“重定向”错误消息。

ICMP 协议说明

虽然它运行在网络层并且看起来与IP 协议并行,但ICMP 消息需要添加IP 标头,并且通常连接到使用的IP 层或更高层协议(例如TCP 或UDP)在除了ping 和Traceroute 之外,很少有应用程序直接使用ICMP 协议。

ecf73e01ba7f418c84bc08ecbefcd708~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1730160501&x-signature=e26epKXZ7l2dcRLxt5GpWKzynLk%3D

ICMP 协议格式

与IP和TCP协议相比,ICMP协议格式仍然非常简单。

e099c3786cb14b698e0975bc3a3e8b15~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1730160501&x-signature=%2F6rkTmrTGefrAjKoezYOF5N7dGw%3D

类型字段占用8位,主要定义消息的大类。例如,类型3统一表示不可达,具体原因由code字段决定。

代码

代码字段也占8位。例如,如上所述,类型3表示不可达,代码0表示网络不可达,代码1表示主机不可达。

校验和

用于错误检查,与IP协议校验和功能相同。

内容

由于类型和代码不同,错误原因也不同,需要相应的解释。内容部分用于解释错误的原因。

以下是一些示例:

下图显示了ICMP 分类,包括查询消息和错误消息。需要Excel原件的同学可以通过回复ICMP获取源文件。

242f15909e614537bf87284ef70c5d4a~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1730160501&x-signature=zrEZqj9OYxIi1GadbkIZAFgHLsM%3D

目的不可达差错报文

目的地不可达是网络传输过程中的常见问题。开发过程中可能会出现这种情况,比如端口设置不正确。

从上表可以看出,3类型都是不可到达错误,代码范围为0到15。这意味着无法访问的具体原因有16 个。这种情况下的协议格式如下。

34a8d69d782a486a9aa053087726ffe7~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1730160501&x-signature=zXkI6qaufByWTrfhoMZPJ2pTxoQ%3D 类型3,代码0-15。校验和后面的4个字节的空间没有被使用,无缘无故应该是0。就是这样。

如前所述,内容部分因类型和代码而异。如果目的地不可达,即类型3,则内容分为两部分:IP 标头和原始IP 数据报数据部分的前8 个字节。

原始IP数据报的数据部分是指网络层以上的协议,例如TCP或UDP。 TCP位于传输层,当TCP数据报到达网络层时,会添加IP头。这将是一个IP 数据包。这里我们所说的数据部分是一个TCP数据报,它可以非常大,所以我们只需要前8个字节,因为前8个字节包含的信息就足够了。

回想一下TCP 协议的格式。前8个字节就是下图中的红框,包含源端口、目的端口和序列号。

00620df4628b47bbb7cfaba3e87826d4~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1730160501&x-signature=o8UYBTcESLOrR%2BNdwrKIHnxqzpQ%3D 例如,如果代码为3,您将收到一条错误消息,指出端口无法访问。 TCP 协议的前8 个字节告诉我们导致错误的原始数据消息中的目标端口和不可达性。就是这个港口。还可以知道原始报文的源端口是什么,哪个用户进程发送了数据包,交给这个进程及时处理错误就可以了。

源端口号是与用户进程相关的重要指标。例如,我开发了一个应用程序,占用两个端口:8888和8898。如果安装您的应用程序的计算机收到错误消息,您就会知道错误是什么。拆解消息原始数据包部分的前8个字节,发现源端口为8898。然后我发现这是由我开发的应用程序处理的。

下面是使用WireSharek 检测到的格式的端口无法访问错误消息。

如果您Telnet 到未打开的端口,您将收到ICMP 端口不可达错误消息。

f18b30aeb7734c2ba677ecaf9cac1d9f~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1730160501&x-signature=JTAGG2lCr%2FpURgXA7xwYHdZ3lJg%3D

查询报文

使用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

版权声明:本文转载于网络,版权归作者所有。如有侵权,请联系本站编辑删除。

猜你喜欢