IS_IPV4_COMPAT使用已弃用的RFC-4291

时间:2013-10-24 13:31:32

标签: mysql ipv6 ipv4

从MySQL 5.6开始,它添加了一些与IPv6相关的功能。

我想知道为什么新功能IS_IPV4_COMPAT(expr)使用解压缩的RFC-4291检查给定的binary地址是否是有效的IPv4兼容IPv6地址。

The MySQL documentation says:

  

此函数将以数字形式表示的IPv6地址作为二进制字符串,由INET6_ATON()返回。如果参数是有效的IPv4兼容IPv6地址,则返回1,否则返回0。 IPv4兼容地址的格式为:: ipv4_address。

mysql> SELECT IS_IPV4_COMPAT(INET6_ATON('::10.0.5.9'));
    -> 1
mysql> SELECT IS_IPV4_COMPAT(INET6_ATON('::ffff:10.0.5.9'));
    -> 0

```

但是RFC-4291说:

+--------------------------------------+--------------------------+
|                80 bits               | 16 |      32 bits        |
+--------------------------------------+--------------------------+
|0000..............................0000|0000|    IPv4 address     |
+--------------------------------------+----+---------------------+
  

“IPv4兼容的IPv6地址”现已弃用,因为当前的IPv6转换机制不再使用这些地址。不需要新的或更新的实现来支持此地址类型。

+--------------------------------------+----+---------------------+
|                80 bits               | 16 |      32 bits        |
+--------------------------------------+--------------------------+
|0000..............................0000|FFFF|    IPv4 address     |
+--------------------------------------+----+---------------------+
  

有关“IPv4映射的IPv6地址”用法的背景信息,请参阅RFC4038

我应该使用哪种格式在IPv6上下文中存储IPv4地址?

1 个答案:

答案 0 :(得分:3)

在IPv6网络中有两种解决IPv4的方法。 “映射”地址方案和“兼容性”地址。 RFC-4291对它们进行了讨论。 MySQL允许您单独查询这两个。 此后,compat地址方案已被弃用。

IS_IPV4_COMPAT()用于compat地址方案。尽管已经弃用了,但实现它的实现仍然在使用,人们可能需要将它们存储在数据库中。

如果您想要映射地址方案的行为,请使用IS_IPV4_MAPPED。

您应该使用以下哪种格式取决于您需要使用哪种格式。例如如果您存储地址 作为计算机配置的输入,您需要知道它们支持哪种格式。如果您不知道,请使用较新的当前格式(:: ffff:10.0.5.9)

如果您需要支持这两种格式,请使用IS_IPV4_COMPAT(field) or IS_IPV4_MAPPED(field)查询。