ICMP 代码 9 对于类型 8 数据包意味着什么?

网络工程 线鲨 包分析 国际会议
2021-08-03 12:47:27

我目前正在做一项作业,要求我们生成具有各种类型和代码的 ICMP 数据包。我已经咨询了 RFC 以及其他各种地方。我得到的许多类型和代码都很有意义;除了这个。

我以某种方式生成了一个类型为 8(回显请求)和代码为 9 的数据包。问题是类型 8 ICMP 只能有一个代码为 0。请参阅下面的数据包作为来自 wireshark 的十六进制转储:

0000 a8 39 44 fa 14 e0 94 de 80 6b ab 74 08 00 45 00
0010 00 94 92 7b 40 00 28 01 fb 61 c0 a8 01 40 68 83
0020 9a 20 08 09 ac c9 4a 06 01 27 00 00 00 00 00 00
0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0090 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00a0 00 00

回复也可以在下一个十六进制转储中看到。也很奇怪,因为它是一个代码为 9 的 ICMP echo 回复。一个 ICMP echo 只能有一个代码 0。

0000 94 de 80 6b ab 74 a8 39 44 fa 14 e0 08 00 45 00
0010 00 94 98 af 00 00 39 01 24 2e 68 83 9a 20 c0 a8
0020 01 40 00 09 b4 c9 4a 06 01 27 00 00 00 00 00 00
0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0090 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00a0 00 00

我要问的问题是这怎么可能,代码 9 是什么意思?它可以被忽略还是值得进一步调查?

我在之前的回答中读到,当 ICMP 隧道进入播放包含在回声中的数据是任意的时,这可以延续到标头吗?

提前致谢!

1个回答

如果我们查看RFC 792(第 14-15 页),它清楚地仅定义了 ICMP 类型 0 和 8 的代码 0,这对应于 IANA 对回复请求的定义以上所有9该装置不具有意义,所以它并没有意味着Communication with Destination Network is Administratively Prohibited作为目的地不可达消息中使用。

下一点是是否0允许任何其他代码RFC 792 已经很老了,并没有真正遵循更严格的 SHOULD/MUST/MAY/... 约定。RFC 的其余部分仅说明了像IF code = 0 ...或 之类的部分Code 0 may be received ...如果代码不为零,它实际上从不说明应该做什么。一个人可能会直觉地将其解释为与定义的相反,因此may *not* be received,另一个人可能会说,如果没有明确禁止,那就没问题。RFC 中没有任何内容甚至暗示什么是正确的,因此行为可能非常特定于实现。

还有RFC 1122但这并没有对该code领域提供任何额外的特定限制

现在至于为什么回复也使用9,最简单的方法是看实现。一个简单的回声回复只会接收传入的数据包,用 type 替换8类型0,重新计算校验和并发送回。这比从头开始构建回复更简单、更有效,但当然会留下9代码。