Net 函数对于 IPv4 和 IPv6 的行为略有不同。为什么?

Net functions behave slightly different for IPv4 from IPv6. Why?

我正在使用 BigQuery 截断 IPv4 和 IP46 IP 地址。我的意思是我想删除可能用于识别真人的部分。

下面是一些演示代码:

select *,
        NET.IP_TO_STRING(NET.IP_TRUNC(NET.IP_FROM_STRING(v.IPv4Address), 24)),
        NET.IP_TO_STRING(NET.IP_TRUNC(NET.IP_FROM_STRING(v.IPv6Address), 64))
from (
  select struct(
     "254.34.78.20" as `IPV4Address`,
     "2a02:c7e:3f0d:e00:48e:abff:d697:9cc2" as `IPv6Address`
  ) as v
)

它returns:

v f0_ f1_
{ "IPV4Address": "254.34.78.20", "IPv6Address": "2a02:c7e:3f0d:e00:48e:abff:d697:9cc2" } 254.34.78.0 2a02:c7e:3f0d:e00::

我只是想知道为什么这些函数 return IPv4 地址的截断部分为 0 而 IPv6 地址的截断部分没有。

我知道这本身并不是真正的 BigQuery 问题,因为它更多地是关于网络的,我怀疑 BigQuery 只是在做任何其他此类库会做的事情……但有兴趣知道为什么仍然如此。也许我也会用 IPv6 标记它

I'd simply like to know why these functions return a 0 for the truncated portion of the IPv4 address but nothing for the truncated portion of the IPv6 address.

返回0作为IPv6地址的t运行分类部分。

IPv6 地址可以有多种形式,但规范形式要求您用双冒号 (::) 缩短 0 字段中最长的 运行。那是在你的地址 2a02:c7e:3f0d:e00:: 的末尾,这意味着它 2a02:c7e:3f0d:e00:0:0:0:0 被适当地缩短了。