在 IPv4 标头中,有 3 位字段称为“标志”。该字段的 MSB 必须重置为零(正如许多网络博客所说但没有说明原因)。我想知道如果我设法将该位设置为 1 会发生什么?为什么应该为零?
提前致谢。
在 IPv4 标头中,有 3 位字段称为“标志”。该字段的 MSB 必须重置为零(正如许多网络博客所说但没有说明原因)。我想知道如果我设法将该位设置为 1 会发生什么?为什么应该为零?
提前致谢。
必须为零 (MBZ) 是网络中的标准约定,并且在 API 设计中经常用于当前没有使用但将来可能会使用的事物。因为它没有意义,所以它必须是 0。
你可能认为这没有多大意义。然而,假设我发明了 IPv4+(不太可能),并说服 IANA 分配给我那一点(极不可能)。然后可以将标准修改为:对于 IPv4 数据包设置为 0,对于 IPv4+ 数据包设置为 1。如果在此之前人们已将其随机设置为 0 或 1,那么我做了一个不向后兼容的扩展。如果人们按照要求将其设置为 0,那就是了。
这个标志不太可能在 IPv4 中使用,但是拥有一个备用标志而不使用它比没有一个并想要它要好得多。
有关它在实践中如何工作的想法,您可以查看 DNS 扩展 ( https://www.rfc-editor.org/rfc/rfc2671 ),它在 DNS 标头中定义了以前的 MBZ 字段。
当你问会发生什么时,答案可能是“忽略一点并继续”。您可能会发现某些防火墙可能只是丢弃数据包。毕竟,这是邪恶的部分。
IPv4 标头在RFC 791 Clause 3.1 中定义。
标志字段中的位 0是保留的并且“必须为零”。
它也被称为Evil Bit,如果它被设置为 1,所有的地狱都会崩溃。
Currently-assigned values are defined as follows:
0x0 If the bit is set to 0, the packet has no evil intent. Hosts,
network elements, etc., SHOULD assume that the packet is
harmless, and SHOULD NOT take any defensive measures. (We note
that this part of the spec is already implemented by many common
desktop operating systems.)
0x1 If the bit is set to 1, the packet has evil intent. Secure
systems SHOULD try to defend themselves against such packets.
Insecure systems MAY chose to crash, be penetrated, etc.