非完整调研:主流数据库对IPv6支持度

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS SQL Server,基础系列 2核4GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: 本文通过以下4个方面调研,对比介绍主流数据库对IPv6的支持程度,包括:Server服务对IPV6监听,客户端支持度,是否存在IPv6数据类型,IPv6数据相关函数功能。

本文通过以下4个方面调研,对比介绍主流数据库对IPv6的支持程度,包括:Server服务对IPV6监听,客户端支持度,是否存在IPv6数据类型,IPv6数据相关函数功能。

一、主流数据库对比简表

数据库 服务地址监听IPv6地址 客户端支持度(待细化) IPv6相关数据类型 IPv6相关函数
Oracle yes all no no
SQLServer yes all no no
Informix yes all no no
MySQL yes all no yes
PostgreSQL yes all yes yes
MariaDB yes all no yes

说明:以上仅为根据收集到的信息整理的结果。

二、国际商用主流数据库调研结果

2.1 Oracle

Oracle Database and IPv6 Statement of Direction
https://www.oracle.com/technetwork/database/enterprise-edition/oracledatabaseipv6sod-4007245.pdf
Oracle数据库11g R2支持在IPv6地址环境中所有单实例特性和组件,Oracle数据库12c R1做了扩展,在一些限制下,允许所有客户端通过公网访问Oracle RAC。这些限制在Oracle 数据库12c R2取消了,即全面支持IPv6.
a. Oracle Database 11g Release 2 使用IPv6的限制
除了Oracle RAC和Oracle Clusterware外,Oracle Database 11g Release 2 所有功能和组件都支持 IPv6.
b. Oracle Database 12c Release 1使用IPv6的限制
Oracle Database 12c Release 1 (12.1.0.2)不支持IPv6客户端连接Oracle RAC数据库,Oracle Clusterware 不能运行在Windows上。
c. Easy Connect Naming
Easy Connect Naming 支持 IPv6 地址. 语法支持 IPv6 URL格式,同时保留了对IPv4地址的支持:

[//]host[:port][/[service_name[:<server>]][/instance]]

为了能使用上面的语法, 主机地址需要替换为
IPv6地址,并用 “[“ 和 “]” 括起来.
Easy Connect 连接串示例如下:

[2001:fe8::12]:1522/sales.us.example.com

等价于下面的形式:

salesdb =
        (DESCRIPTION=
             (ADDRESS=(PROTOCOL=tcp)(HOST=2001:fe8::12)(PORT=1522))
             (CONNECT_DATA=(SERVICES_NAME=sales.us.example.com)))

d. 包UTL_INADDR
UTL_INADDR 包提帮助PL/SQL 存储过程完成网络寻址等功能,有API解析出主机名和IP地址.
待研究其对IPv6的支持度,按官方声明是支持的。
包UTL_INADDR的手册地址:https://docs.oracle.com/database/121/ARPLS/u_inaddr.htm#ARPLS071

2.2 SQLServer

官方对IPv6支持的描述

《使用 IPv6 进行连接》
SQL Server 和 SQL Server Native Client 完全支持 Internet 协议版本 4 (IPv4) 和 Internet 协议版本 6 (IPv6)。 将 Windows 配置为使用 IPv6 SQL Server时,各组件会自动识别 IPv6 的存在。 不必采用特殊的 SQL Server 配置。

支持包括但不限于下列各项:

  • SQL Server 数据库引擎 和其他服务器组件可以同时侦听 IPv4 和 IPv6 地址。 如果同时存在 IPv4 和 IPv6,则可以使用 SQL Server 配置管理器来配置 数据库引擎 ,以便只侦听 IPv4 地址或只侦听 IPv6 地址。
  • 根据 IPv4 地址对运行于支持 IPv4 和 IPv6 的计算机上的 SQL Server Browser 服务进行查询时,该服务会对 IPv4 地址及其列表中的第一个 IPv4 TCP 端口做出响应。 根据 IPv6 地址进行查询时,该服务会对 IPv6 地址及其列表中的第一个 IPv6 TCP 端口做出响应。 为了避免出现不一致,建议将 IPv4 和 IPv6 侦听器配置为侦听相同的端口。
  • SQL Server Management Studio 和 SQL Server 配置管理器等工具都接受 IPv4 和 IPv6 格式的 IP 地址。 大多数情况下,如果使用服务器主机名或完全限定的域名 (FQDN) 指定 <computer_name><instance_name>,则无须修改连接字符串。 如果服务器安装有 IPv4 和 IPv6,则其主机名或 FQDN 将会解析到多个 IP 地址,其中至少包括一个 IPv4 地址和多个 IPv6 地址。 SQL Server Native Client 会按照从 TCP/IP 接收这些 IP 地址时的顺序尝试使用它们来建立连接,并使用第一个成功建立的连接。 由于 SQL Server Native Client 无法预测顺序,因此,应将顺序视为随机顺序。 如果同时存在 IPv4 地址和 IPv6 地址,则首先尝试使用 IPv4 地址。 这一逻辑对于 ODBC、OLE DB 或 ADO.NET 的用户是透明的。

【说明】如果数据库引擎未侦听IPv4,则尝试进行IPv4连接之后,必须等待超时期限过后再尝试使用IPv6地址。为了避免出现这种情况,请直接连接到IPv6 IP地址或使用IPv6地址配置客户端的别名。

2.3 Informix

3.3.1 整体描述

IBM 关于其产品对IPv6兼容支持清单中,列举了Informix支持度。

Product (I) First release with support IPv6 basic Dual stack support
IBM Informix Java Database Connectivity Driver v3.50.JC6 yes yes
IBM Informix Warehouse v11.50 yes yes

Informix 10.00.xC4Client SDK 2.90.xC4,服务在启动时会检查当前的操作系统是否支持 IPv6. 如果支持IPv6,服务将会使用;如果不支持 IPv6, 服务将会使用 IPv4 地址.
从用户视角,将 Informix 运行在一台同时支持 IPv4 和 IPv6 地址的服务器,与将Informix 部署在多 a multi-homed host. 用户可以在同时配置来IPv4和IPv6多机器上,采用以下任意方式来配置 Informix :

  • 创建别名 (使用参数 DBSERVERALIASES ),分配给 IPv6 地址和 IPv4 地址.
  • 配置 Informix 监听主机sqlhosts文件中的所有IP地址.

例如:

#dbservername   nettype    hostname   servicename   options
olserver1       onsoctcp   *myhost    onservice1

启动Informix Version 10.0, 如果机器支持IPv6,则SQLHOSTS文件中主机名 会映射到 IPv6地址上;如果没有配置IPv6地址,主机名会映射到 IPv4 地址上.

关于禁用支持IPv6
Informix还允许在IPv4的环境下禁用 IPv6相关功能.

  • 全局禁用支持IPv6,包括所有机器上的实例和客户端应用:

创建空文件 $INFORMIXDIR/etc/IFX_DISABLE_IPV6

说明:informix用户必须拥有读权限,但该文件不会真正读写内容,不需要包含任何数据。

  • 仅禁止某个数据库实例或者某个客户端应用:
    在数据库服务实例上,或者运行应用的机器上,创建环境变量IFX_DISABLE_IPV6,并设置值为 yes, 即(IFX_DISABLE_IPV6=yes)。

参见Informix support for IPv6 addresses

2.3.2 使用JDBC连接Server

IBM® Informix® JDBC Driver, Version 3.0及以后版本都支持IPv6.
解析连接URL的代码可以处理像IPv6地址这样更长的信息(IPv6 128位).例如:
3ffe:ffff:ffff:ffff:0:0:0:12
要连接Informix服务的IPv6端口,可以使用系统属性,例如:
java -Djava.net.preferIPv6Addresses=true
使用IBM Informix JDBC Driver, Version 3.0或之后的版本处理没有现式文字描述的URL时不受影响,原有行为也没有改变。
冒号 (:) 是连接URL中的关键分隔符,尤其是IPv6格式的.
用户需要使用格式严谨的URL,这样驱动才能识别IPv6地址串.
注意下面示例中的4点细节:

  • jdbc:informix-sqli:// 是必须的.
  • 冒号括住端口8088, 即(:8088:)是必须的.
  • 驱动不验证3ffe:ffff:ffff:ffff:0::12 .
  • 8088 必须是小于32k的有效数字.

jdbc:informix-sqli://3ffe:ffff:ffff:ffff:0::12:8088:informixserver=X...

三、开源主流数据库调研结果

3.1 MySQL

3.1.1 MySQL对IPv6的支持主要在3个方面

MySQL对IPv6的支持体现在以下几个方面
1. 基于IPv6建立其连接
MySQL服务支持客户端以IPv6地址来建立TCP/IP连接,本机可以如下的方式建立连接

shell> mysql -h ::1

前提是:1、所在机器已经支持IPv6;2、MySQL服务配置支持IPv6来建立连接。
MySQL默认启用IPv6,可以通过修改--bind-address修改默认行为

2. 基于IPv6来授权
MySQL账户名支持基于IPv6地址,由DBA对特定客户端进行授权. IPv6地址可以与账户名结合,在以下语句中使用,如 CREATE USER, GRANT, REVOKE. 如:

mysql> CREATE USER 'bill'@'::1' IDENTIFIED BY 'secret';
mysql> GRANT SELECT ON mydb.* TO 'bill'@'::1';

3. IPv6相关函数

  • IPv6函数支持在字符串和内部IPv6格式之间转换,以及检查是否是有效的IPv6地址。例如, INET6_ATON() 、INET6_NTOA() 和 INET_ATON() 、INET_NTOA()类似, 但可以处理 IPv6 地址。

3.1.2 关于bind-address 参数

bind-address的基本信息如下表

Property Value
Command-Line Format --bind-address=addr
System Variable bind_address
Scope Global
Dynamic No
SET_VAR Hint Applies No
Type string
Default Value *

MySQL服务默认监听1个或多个网络socket。每个socket绑定到1个地址上,但可以映射到多个接口上。如果想配置服务如何监听TCP/IP连接,则需要在配合--bind-address来起服务。

  • 在MySQL 8.0.13之前, --bind-address 只接收单一地址值, 可以是确定的IP地址或者是主机名, 也可以是使用通配符来监听多个接口 (*, 0.0.0.0, or ::).

  • 从MySQL 8.0.13起, --bind-address 既接受上面介绍的单一地址值,又可以是一个逗号分隔的地址列表.如果是后者时,不能再使用通配符来描述IP地址.

IP地址可以IPv4 或IPv6地址。 当使用主机名时,服务会将主机名解析为IP地址,并绑定.如果有多个IP地址时,会解析为第一个IP地址值。

服务处理不同类型的规则如下:

  • 当地址为 *, 服务监听所有网卡上所有地址连接,包括IPv4、IPv6,这也是缺省值.
  • 当地址为 0.0.0.0, 服务仅监听IPv4的地址.
  • 当地址为 ::, 服务监听所有网卡上IPv4、IPv6地址.
  • 当地址为IPv4映射的地址, 服务仅监听这个地址,无论是IPv4形式还是IPv6形式.如服务绑定::ffff:127.0.0.1, 客户端可以这样连接:--host=127.0.0.1 或 --host=::ffff:127.0.0.1.
  • 当地址特定IPv4、 IPv6地址(如 127.0.0.1 或 ::1), 服务仅监听这个地址。

如果任意一个地址绑定失败,服务都会产生错误,且不会启动。.

【示例】

  • --bind-address=*
    服务监听所有IP地址,包括 IPv4 或 IPv6地址.
  • --bind-address=198.51.100.20
    服务只监听 198.51.100.20.
  • --bind-address=198.51.100.20,2001:db8:0:f101::1
    服务同时监听 198.51.100.20 (IPv4地址)和 2001:db8:0:f101::1 (IPv6 地址).
  • --bind-address=198.51.100.20,*
    会产生错误,因为在以列表形式列举IP地址时不能再使用通配符。

3.1.3 IPv6相关函数

  • INET6_ATON() 将IPv6转化为数值
  • INET6_NTOA() 将数值转化为IPv6地址串
  • IS_IPV4_COMPAT() 判断是否 IPv4兼容地址
  • IS_IPV4_MAPPED() 判断是否 IPv4映射地址
  • IS_IPV6() 判断是否是IPv6地址
  • IS_IPV4() 判断是否是IPv4地址
  • INET_ATON() 返回地址的数值
  • INET_NTOA() 将地址解析为IP地址

3.1.4 扩展阅读

3.2 PostgresSQL(10.X)

3.2.1 支持网址数据类型

Name Storage Size Description
cidr 7 or 19 bytes IPv4 and IPv6 networks
inet 7 or 19 bytes IPv4 and IPv6 hosts and networks
macaddr 6 bytes MAC addresses
macaddr8 8 bytes MAC addresses (EUI-64 format)

说明:针对cidr、inet类型排序时,IPv4地址在IPv6地址前。

3.2.1.1 inet

inet类型可存储IPv4、IPv6主机地址及子网信息,而且所有都存在一个字段中. The subnet is represented by the number of network address bits present in the host address (the “netmask”). 如果网络掩码是32,则这个地址是IPv4, 这个值不能表明是子网,只是一个主机.
在IPv6, 网址长度为 128位,所以 128位代表一个具体的主机地址.注意,如果只需要接受网络,你应该使用cidr而不是inet.
输入的格式为 address/y ,其中address 是IPv4、IPv6地址,y是网络掩码位. 如果没有 /y , 默认是32(IPv4)或128(IPv6),仅代表一个具体的主机.

3.2.1.2 cidr

cidr类型支持IPv4、IPv6网络规范.输入输出格式遵循Classless Internet Domain Routing conventions.

表:cidr Type Input Examples

cidr Input cidr Output abbrev(cidr)
192.168.100.128/25 192.168.100.128/25 192.168.100.128/25
192.168/24 192.168.0.0/24 192.168.0/24
192.168/25 192.168.0.0/25 192.168.0.0/25
192.168.1 192.168.1.0/24 192.168.1/24
192.168 192.168.0.0/24 192.168.0/24
128.1 128.1.0.0/16 128.1/16
128 128.0.0.0/16 128.0/16
128.1.2 128.1.2.0/24 128.1.2/24
10.1.2 10.1.2.0/24 10.1.2/24
10.1 10.1.0.0/16 10.1/16
10 10.0.0.0/8 10/8
10.1.2.3/32 10.1.2.3/32 10.1.2.3/32
2001:4f8:3:ba::/64 2001:4f8:3:ba::/64 2001:4f8:3:ba::/64
2001:4f8:3:ba:2e0:81ff:fe22:d1f1/128 2001:4f8:3:ba:2e0:81ff:fe22:d1f1/128 2001:4f8:3:ba:2e0:81ff:fe22:d1f1
::ffff:1.2.3.0/120 ::ffff:1.2.3.0/120 ::ffff:1.2.3/120
::ffff:1.2.3.0/128 ::ffff:1.2.3.0/128 ::ffff:1.2.3.0/128

3.2.1.3 inet vs. cidr

inetcidr的本质区别是, inet accepts values with nonzero bits to the right of the netmask, whereas cidr does not. 如192.168.0.1/24 对于inet合法,但对于cidr无效.

  • 如果你不喜欢inet 和cidr的输出格式,可以使用函数 host, text, abbrev.

3.2.1.4 macaddr

macaddr类型存储MAC地址,接收以下格式:

'08:00:2b:01:02:03'
'08-00-2b-01-02-03'
'08002b:010203'
'08002b-010203'
'0800.2b01.0203'
'0800-2b01-0203'
'08002b010203'

这些例子都代表同一个地址. 通过f来接收实现大小敏感。输出为第一种形式.

3.2.1.4 macaddr8

macaddr8 类型存储以EUI-64格式存储MAC地址.注意:IPv6使用修订过的EUI-64格式,从EUI-48转换过来需要第7位应该设置为1。接收以下类型的输入:

'08:00:2b:01:02:03:04:05'
'08-00-2b-01-02-03-04-05'
'08002b:0102030405'
'08002b-0102030405'
'0800.2b01.0203.0405'
'0800-2b01-0203-0405'
'08002b01:02030405'
'08002b0102030405'

这些都代表同一地址.输出为第一种. 要将一个传统的48位MAC地址(EUI-48格式)转换为修订过的EUI-64格式(IPv6地址),使用函数macaddr8_set7bit:

SELECT macaddr8_set7bit('08:00:2b:01:02:03');
macaddr8_set7bit
-------------------------
0a:00:2b:ff:fe:01:02:03
(1 row)

3.2.2 网址函数与运算符

下表介绍了可用于cidr和inet类型的运算符. 运算符 <<, <<=, >>,>>=, && 用于测试是否包含在子网中.它们只处理两个网址的网络部分(忽略主机部分),判断一个网址是否等于另一个网址或是其子集.
表:cidr and inet Operators

Operator Description Example
< is less than inet '192.168.1.5' < inet '192.168.1.6'
<= is less than or equal inet '192.168.1.5' <= inet'192.168.1.5'
= equals inet '192.168.1.5' = inet '192.168.1.5'
>= is greater or equal inet '192.168.1.5' >= inet '192.168.1.5'
> is greater than inet '192.168.1.5' > inet '192.168.1.4'
<> is not equal inet '192.168.1.5' <> inet '192.168.1.4'
<< is contained by inet '192.168.1.5' << inet '192.168.1/24'
<<= is contained by or equals inet '192.168.1/24' <<= inet '192.168.1/24'
>> contains inet '192.168.1/24' >> inet '192.168.1.5'
>>= contains or equals inet '192.168.1/24' >>= inet '192.168.1/24'
&& contains or is contained by inet '192.168.1/24' && inet '192.168.1.80/28'
~ bitwise NOT ~ inet '192.168.1.6'
& bitwise AND inet '192.168.1.6' & inet '0.0.0.255'
| bitwise OR inet '192.168.1.6' |inet '0.0.0.255'
+ addition inet '192.168.1.6' + 25
- subtraction inet '192.168.1.43' - 36
- subtraction inet '192.168.1.43' - inet '192.168.1.19'

下表介绍了可用于cidr和inet两种类型的函数. 函数abbrev, host, text 主要用于格式化显示.
表: cidr 、inet 函数

Function Return Type Description Example Result
abbrev(inet) text abbreviated display format as text abbrev(inet'10.1.0.0/16') 10.1.0.0/16
abbrev(cidr) text abbreviated display format as text abbrev(cidr'10.1.0.0/16') 10.1/16
broadcast(inet) inet broadcast address for network broadcast('192.168.1.5/24') 192.168.1.255/24
family(inet) int extract family of address; 4 for IPv4, 6 for IPv6 family('::1') 6
host(inet) text extract IP address as text host('192.168.1.5/24') 192.168.1.5
hostmask(inet) inet construct host mask for network hostmask('192.168.23.20/30') 0.0.0.3
masklen(inet) int extract netmask length masklen('192.168.1.5/24') 24
netmask(inet) inet construct netmask for network netmask('192.168.1.5/24') 255.255.255.0
network(inet) cidr extract network part of address network('192.168.1.5/24') 192.168.1.0/24
set_masklen(inet,int) inet set netmask length for inet value set_masklen('192.168.1.5/24',16) 192.168.1.5/16
set_masklen(cidr,int) cidr set netmask length for cidr value set_masklen('192.168.1.0/24'::cidr,16) 192.168.0.0/16
text(inet) text extract IP address and netmask length as text text(inet'192.168.1.5') 192.168.1.5/32
inet_same_family(inet,inet) boolean are the addresses from the same family? inet_same_family('192.168.1.5/24','::1') false
inet_merge(inet,inet) cidr the smallest network which includes both of the given networks inet_merge('192.168.1.5/24','192.168.2.5/24') 192.168.0.0/22

说明:任意cidr值可转换为inet;因此,上表中的支持inet函数也支持cidr.

下表介绍了 macaddr 类型的相关函数type.函数trunc(macaddr) 返回MAC 地址.
表:macaddr 函数

Function Return Type Description Example Result
trunc(macaddr) macaddr set last 3 bytes to zero trunc(macaddr '12:34:56:78:90:ab') 12:34:56:00:00:00

说明:macaddr类型也支持标准的关系运算(>, <=等,按辞典顺序) 和位运算(~, & and |)

下表介绍了macaddr8类型相关的函数。
表macaddr8 函数

Function Return Type Description Example Result
trunc(macaddr8) macaddr8 set last 5 bytes to zero trunc(macaddr8'12:34:56:78:90:ab:cd:ef') 12:34:56:00:00:00:00:00
macaddr8_set7bit(macaddr8) macaddr8 set 7th bit to one, also known as modified EUI-64, for inclusion in an IPv6 address macaddr8_set7bit(macaddr8'00:34:56:ab:cd:ef') 02:34:56:ff:fe:ab:cd:ef

说明:macaddr8类型也是标准的关系运算和位运算。

3.2.3 扩展阅读

https://www.postgresql.org/files/documentation/pdf/10/postgresql-10-A4.pdf

3.3 MariaDB(10.X)

3.3.1 IPv6相关函数

  • IS_IPV6(expr) :如果是IPV6地址串,则返回1,否则返回0.
 SELECT IS_IPV6('48f3::d432:1431:ba23:846f');
+--------------------------------------+
| IS_IPV6('48f3::d432:1431:ba23:846f') |
+--------------------------------------+
|                                    1 |
+--------------------------------------+
1 row in set (0.02 sec)

SELECT IS_IPV6('10.0.1.1');
+---------------------+
| IS_IPV6('10.0.1.1') |
+---------------------+
|                   0 |
+---------------------+
SELECT HEX(INET6_ATON('10.0.1.1'));
+-----------------------------+
| HEX(INET6_ATON('10.0.1.1')) |
+-----------------------------+
| 0A000101                    |
+-----------------------------+

SELECT HEX(INET6_ATON('48f3::d432:1431:ba23:846f'));
+----------------------------------------------+
| HEX(INET6_ATON('48f3::d432:1431:ba23:846f')) |
+----------------------------------------------+
| 48F3000000000000D4321431BA23846F             |
+----------------------------------------------+
SELECT INET6_NTOA(UNHEX('0A000101'));
+-------------------------------+
| INET6_NTOA(UNHEX('0A000101')) |
+-------------------------------+
| 10.0.1.1                      |
+-------------------------------+

SELECT INET6_NTOA(UNHEX('48F3000000000000D4321431BA23846F'));
+-------------------------------------------------------+
| INET6_NTOA(UNHEX('48F3000000000000D4321431BA23846F')) |
+-------------------------------------------------------+
| 48f3::d432:1431:ba23:846f                             |
+-------------------------------------------------------+
  • IS_IPV4_COMPAT(expr): 与INET6_ATON()配合判断IPV6地址是否是IPV4兼容的,是则返回1,否则返回0。
SELECT IS_IPV4_COMPAT(INET6_ATON('::10.0.1.1'));
+------------------------------------------+
| IS_IPV4_COMPAT(INET6_ATON('::10.0.1.1')) |
+------------------------------------------+
|                                        1 |
+------------------------------------------+

SELECT IS_IPV4_COMPAT(INET6_ATON('::48f3::d432:1431:ba23:846f'));
+-----------------------------------------------------------+
| IS_IPV4_COMPAT(INET6_ATON('::48f3::d432:1431:ba23:846f')) |
+-----------------------------------------------------------+
|                                                         0 |
+-----------------------------------------------------------+
  • IS_IPV4_MAPPED(expr):与INET6_ATON()配合,判断IPV6地址是否是有效的IPV4映射地址,是则返回1,否则返回0。
SELECT IS_IPV4_MAPPED(INET6_ATON('::10.0.1.1'));
+------------------------------------------+
| IS_IPV4_MAPPED(INET6_ATON('::10.0.1.1')) |
+------------------------------------------+
|                                        0 |
+------------------------------------------+

SELECT IS_IPV4_MAPPED(INET6_ATON('::ffff:10.0.1.1'));
+-----------------------------------------------+
| IS_IPV4_MAPPED(INET6_ATON('::ffff:10.0.1.1')) |
+-----------------------------------------------+
|                                             1 |
+-----------------------------------------------+

3.3.2 客户端

MariaDB Connector/J

JDBC连接串格式如下:

jdbc:(mysql|mariadb):[replication:|failover:|sequential:|aurora:]//<hostDescription>[,<hostDescription>...]/[database][?<key1>=<value1>[&<key2>=<value2>]] 

HostDescription如下:

<host>[:<portnumber>]  or address=(host=<host>)[(port=<portnumber>)][(type=(master|slave))]

host必须是DNS名或者IP地址,如果是IPV6+简单host描述,则IP地址必须写在[]中,如下例。

[2001:0660:7401:0200:0000:0000:0edf:bdd7]:3306

四、云服务商流数据库调研结果

4.1 阿里云

  • 《阿里云IPv6解决方案》
  • IPv6转换服务
    IPv6转换服务(IPv6 Translation Service),是一种有状态的IPv6和IPv4网络地址与协议转换服务。通过IPv6转换服务,具备公网IPv4地址的服务器可快速面向IPv6网络侧用户提供访问服务。IPv6转换服务当前提供四层模式(支持TCP和UDP协议)。

4.2 百度云

为此百度云制定了IPv6改造的“三步走”方案。

  • 第一步,将百度云网络接入IPv6网络环境,为产品提供IPv6接入访问服务;
  • 第二步,百度云核心产品支持IPv6协议栈,拥有全球唯一的IPv6地址,并具备主动访问IPv6网络能力;
  • 第三步,百度云所有产品支持IPv4和IPv6双协议栈,为用户提供完整的IPv6网络支持。

百度云在EIP上集成了 IPv6 终结功能,为绑定了EIP的云服务器、负载均衡等实例提供IPv6访问能力。用户无需改造现有业务架构部署,只需在EIP上开启IPv6终结功能,即可获取到一个IPv6地址,使业务获得对外提供IPv6访问服务的能力,IPv6网络客户端访问该地址的流量会被转换为IPv4流量,实现用户业务和IPv6网络的平滑对接。

IPv6地址分配原则:EIP开启IPv6终结功能后,会为该EIP分配一个全球唯一的IPv6地址,地址组成为 “2400:da00:404:2::” 前缀拼接EIP的IPv4地址,即128位IPv6地址前96位为固定前缀,后32位为对应EIP的IPv4地址。
每个EIP仅会分配一个IPv6地址,EIP关闭IPv6终结功能后该IPv6地址会被系统回收。

注意:目前百度云IPv6终结功能处于公测阶段,仅向华北-北京区域(Region)的EIP实例开放试用,用户需通过工单申请开通。

4.3 腾讯云

腾讯云IPv6技术将采用平滑过渡的方式推进:

  • 第一步,在中国互联网的客户端和流量以IPv4为主的大环境下,提供平滑、安全的IPv6互联网入口,也提供透明的6to4转换服务访问底层核心网络和现网业务,时间是2018到2019年;
  • 第二步,到2020年,逐步完成端到端的IPv6改造,此时IPv6与IPv4同时运行在腾讯云上;
  • 第三步,随着中国互联网的IPv6访问和流量的比例加大,底层核心网络向IPv6过渡完成,IPv6成为网络主体,同时兼容存量的IPv4的业务。到2022年基本实现从IPv4到IPv6的切换。

五、附录

附录一、 IPv6标准简介

IPv6

IPv6的地址长度为128b,是IPv4地址长度的4倍。于是IPv4点分十进制格式不再适用,采用十六进制表示。IPv6有3种表示方法。
一、冒分十六进制表示法
  格式为X:X:X:X:X:X:X:X,其中每个X表示地址中的16b,以十六进制表示,例如:
  ABCD:EF01:2345:6789:ABCD:EF01:2345:6789
  这种表示法中,每个X的前导0是可以省略的,例如:
  2001:0DB8:0000:0023:0008:0800:200C:417A→ 2001:DB8:0:23:8:800:200C:417A
二、0位压缩表示法
  在某些情况下,一个IPv6地址中问可能包含很长的一段0,可以把连续的一段0压缩为“::”。但为保证地址解析的唯一性,地址中”::”只能出现一次,例如:
  FF01:0:0:0:0:0:0:1101 → FF01::1101
  0:0:0:0:0:0:0:1 → ::1
  0:0:0:0:0:0:0:0 → ::
三、内嵌IPv4地址表示法
  为了实现IPv4-IPv6互通,IPv4地址会嵌入IPv6地址中,此时地址常表示为:X:X:X:X:X:X:d.d.d.d,前96b采用冒分十六进制表示,而最后32b地址则使用IPv4的点分十进制表示,例如::192.168.0.1与::FFFF:192.168.0.1就是两个典型的例子,注意在前96b中,压缩0位的方法依旧适用 [6] 。

国际标准

推广情况

  • IPV6 的发展是从 1992 年开始的,截止 2016 年 9 月底,全球共有超过 220 个国家和地区组织申请了 IPv6 地址,申请量已经达到 IPv4 地址的 18 万多倍,其中 25.4%的地址块已通告使用。全球 13 个根域名服务器中已有 11 个根域名服务器支持 IPv6;1346个顶级域名服务器中已有 1318 个支持 IPv6,占比达 97.9%。
  • 全球活跃的 IPv6 路由条目超过 2.9 万条,支持 IPv6 的自治域超过 1.18 万个,已有超过 248 个运营商永久提供IPv6 的接入服务。

信息源:https://www.chyxx.com/industry/201801/606465.html

附录二、中国关于IPv6的战略布局

国家战略规格

2017-11-26 中共中央办公厅 国务院办公厅印发《推进互联网协议第六版(IPv6)规模部署行动计划》

推广情况

  • 在网络基础设施方面,三家基础电信企业已完成26个省、上百个地市LTE网络IPv6改造,并为LTE用户分配IPv6地址,目前基础电信企业已分配IPv6地址的用户总数超过7000万。
  • 在应用基础设施方面,基础电信企业的大型数据中心均已支持IPv6,基本建立IPv6业务受理、开通测试流程;部分内容分发网络企业、云服务平台企业已完成部分产品IPv6改造,正逐步提供IPv6商用服务。
  • 在互联网应用方面,主要互联网企业针对用户量大、流量集中的互联网应用,均制定了IPv6改造实施方案,相关改造工作正有序开展;基础电信企业的门户网站及部分自营业务系统已完成IPv6改造并对用户提供服务。
  • 在终端方面,国内主要的LTE终端基本具备IPv6支持能力,大部分终端默认配置支持IPv4/IPv6双栈。
    信息源:http://net.yesky.com/internet/312/1102614812.shtml

附录三、判断系统是否支持IPv6

本机命令检测

最简单的验证方式是,执行命令(ping6 ::1)来验证。

$ uname -v
Darwin Kernel Version 17.7.0: Thu Jun 21 22:53:14 PDT 2018; root:xnu-4570.71.2~1/RELEASE_X86_64
$ ping6 ::1
PING6(56=40+8+8 bytes) ::1 --> ::1
16 bytes from ::1, icmp_seq=0 hlim=64 time=0.105 ms
16 bytes from ::1, icmp_seq=1 hlim=64 time=0.131 ms
16 bytes from ::1, icmp_seq=2 hlim=64 time=0.141 ms
16 bytes from ::1, icmp_seq=3 hlim=64 time=0.138 ms
^Z
[1]+  Stopped                 ping6 ::1

第3方网站监测

地址:http://test-ipv6.com/
源于一个开源项目,test-IPv6.com是一个开源网站,致力于帮助终端用户确定IPv6是否可用.

附录四、Linux IPv6 HOWTO (en)

Linux IPv6 HOWTO的目标是解答关于Linux系统中IPv6相关问题,包括安装、配置、使用IPv6程序.

参考

目录
相关文章
|
存储 SQL 监控
数据库主流容灾方案对比分析
数据库可以通过软件或硬件方式容灾,等级分为数据级容灾和应用级容灾。不同数据库容灾方案都有自己的优势,企业如何选择最优的容灾方案?投资最多的方案就是最安全、最满足实际需求的吗?答案显然是否定,可以说方案没有最好,只有最适合。在设计和选择方案时需要考虑各个因素:如投入成本、复杂度、可行性、异构性、可管理性、可扩展性等,最终方案会采用一种或多种方式组合,以满足企业不同业务系统对RPO、RTO指标的要求。
670 2
数据库主流容灾方案对比分析
|
6月前
|
XML 存储 分布式数据库
数据库主流技术
数据库主流技术
67 4
|
7月前
|
存储 NoSQL 关系型数据库
市面上主流的数据库的类型分为哪些
市面上主流的数据库的类型分为哪些
100 0
|
7月前
|
消息中间件 canal 缓存
聊一聊缓存和数据库不一致性问题的产生及主流解决方案以及扩展的思考3
聊一聊缓存和数据库不一致性问题的产生及主流解决方案以及扩展的思考
636 0
|
7月前
|
缓存 NoSQL Java
聊一聊缓存和数据库不一致性问题的产生及主流解决方案以及扩展的思考2
聊一聊缓存和数据库不一致性问题的产生及主流解决方案以及扩展的思考
137 0
|
7月前
|
存储 缓存 NoSQL
聊一聊缓存和数据库不一致性问题的产生及主流解决方案以及扩展的思考1
聊一聊缓存和数据库不一致性问题的产生及主流解决方案以及扩展的思考
136 0
|
存储 SQL NoSQL
当下主流数据库,哪个最火?
当下主流数据库,哪个最火?
259 1
|
NoSQL Oracle 关系型数据库
主流数据库哪个最好?哪个现在最火?
主流数据库哪个最好?哪个现在最火?
198 0
现阶段的主流数据库分别是哪几种?
MySQL是最受欢迎的开源SQL数据库管理系统,它由 MySQL AB开发、发布和支持。MySQL AB是一家基于MySQL开发人员的商业公司,它是一家使用了一种成功的商业模式来结合开源价值和方法论的第二代开源公司。MySQL是MySQL AB的注册商标。
|
JSON 安全 关系型数据库
PostgreSQL的优势:为何它成为主流数据库管理系统
PostgreSQL的优势:为何它成为主流数据库管理系统
2639 0