IPv4 地址中的前导零;这是惯例或标准的禁忌吗?

Yet*_*ser 6 networking ip ipv4

我教了一个关于我公司生产的软件产品的课程,我发现学生经常在配置页面中添加前导零,以使软件连接到我们的硬件。前导零在我们的软件中是有问题的,这就是出现这种情况的方式和原因。

我总是解释说,前导零违反了我所学的“标准”思维。当我向我的工程部门提交错误报告时,我无法找到权威来源(即“标准”),但我确实找到了一些有趣的相关信息。

由于惯例,前导零是不好的,还是违反标准?

这是我能找到的最接近不使用前导零的标准,但它是某种过期的草案:

IPv4 和 IPv6 地址的文本表示

在相关部分,它说:

3 Syntax and Semantics

3.1 IPv4 Dotted Octet Format

   A 32-bit IPv4 address is divided into four octets.  Each octet is
   represented numerically in decimal, using the minimum possible number
   of digits (leading zeroes are not used, except in the case of 0
   itself).  The four encoded octets are given most-significant first,
   separated by period characters.

        IPv4address = d8 "." d8 "." d8 "." d8

        d8          = DIGIT               ; 0-9
                    / %x31-39 DIGIT       ; 10-99
                    / "1" 2DIGIT          ; 100-199
                    / "2" %x30-34 DIGIT   ; 200-249
                    / "25" %x30-35        ; 250-255
Run Code Online (Sandbox Code Playgroud)

我还发现了以下讨论这种现象的文章:

Ping 和 FTP 将前导零解析为八进制的 IP 地址

IP 地址中的前导零可能导致不正确的路由

带前导零和不带前导零的 IP 地址是否相同?

是否有任何文档可以省略 IPV4 地址的点十进制表示法中的零?

Mar*_*mas 7

没有标准要求以某种方式表达 IPv4 地址。也就是说,RFC 没有指定一种格式,并且广泛使用了多种格式。最常见的是,您会看到四个八位字节作为十进制数,但您也可能会看到一个 8 位十六进制数,甚至是一个十进制数。尽管八进制数并不常见,但许多实现也接受它们。

这就是通常避免使用前导零的原因;地址可能不明确。'010.010.010.010' 可能在私有范围内,但也可能是 Google 在 '8.8.8.8' 的著名 DNS 服务器。以一个前导零开头且不包含数字 8 或 9 的数字通常被解释为八进制。