IPV4地址的数量有43亿个, 而IPV6地址多到无法用口头表达,号称可以让地球上每一粒沙都能有自己的IP地址。由于IPV4地址的数量有限,因此只能通过层层NAT网络转发来解决设备联网的问题;常见的NAT网络转发设备有路由器、光猫、运营商区域NAT设备等;运营商NAT设备可能还会套很多层。这导致大多数量上网设备都没有自己的公网IP,无法实现真正的万物互联。而IPV6可以为每一个台设备分配一个公网IP地址,使设备之间在不依赖NAT转发的情况下直接互联。
IPV6地址用16进程表示,每个16进制数表示4位二进制数字;每4个16进制数用冒号分隔成组;共8组16进制表示128位二进制,如下:
2001:db8:130F:0000:0000:09C0:876A:130B
为了简化IPv6地址的表示,可以使用以下规则:
0.1> 每组的前导零可以省略,如:0012可以简写为12;如果组中的值全是0,则可以用一个0表示;
简写前:2001:db8:130F:0000:0000:09C0:876A:0012 简写后:2001:db8:130F:0:0:9C0:876A:12
0.2> 连续零组可以用双冒号(::)表示;但在一个IPv6地址中,只能出现一次双冒号。
简写前:2001:0db8:0000:0000:1111:0000:0000:57ab 简写后:2001:db8::1111:0:0:57ab。
## 以 2 开头的通常是公网IP 2001:db8::1111:0:0:57ab ## 以 f 开头的通常是私有IP,类似 192.168.0.2 fe80::2 ## 类似 127.0.0.1 ::1 ## 类似 0.0.0.0,即未指定地址 ::
IPV6由前缀和接口ID组成;前缀表示一个地址范围,前缀越多短表示的地址范围越广;接口ID表示具体的某个主机或接口。如下图,/64
表示前缀长度为64位,/56
表示前缀长度为56位;在IPv6地址中,接口ID通常占据了剩余的位数,即从128位的IPV6地址减去前缀的位数,就是接口ID的位数长度。
注:以上仅为基础简述,并不全面和严谨;
访问IPV6地址时必须加上中括号,以区分端口号,如下:
https://[2406:da14:25c:b00:8ec1:377f:151a:de4b]:443
当客户端设备访问网络时,请求先到路由器或其它NAT设备,NAT设备会获取到运营商分配的IPV4地址、IPV6前缀;该IPV6前缀下的所有地址可以被客户端设备任意使用;客户端设备会根据分配到的IPV6前缀给自己生成公网IPV6地址。通过该公网IP上网时,虽然可能还会经过NAT设备,但NAT设备不再进行IP映射,而是直接转发请求和响应。
目前的网络设备大多都是同时使用IPV4和IPV6,但优先使用IPV6;例如在获取DNS记录下,会同时获取IPV4和IPV6地址,除非获取的到的IPV6地址为空,否则优先使用IPV6访问服务器。
通过IPV6可以为一个VPS分配很多个IPV6公网IP,因为通常情况下云服务商会分配一个前缀给VPS,在该前缀下可以通过接口ID为VPS构造很多个IPV6公网IP。
IPV4和IPV6的网络不兼容,无法互相通信;如果客户端设备仅支持IPV6,则无法直接访问IPV4的网站,反之亦然,必须通过一些技术手段进行转换。设备是否支持IPV6取决于操作系统、网卡、路由器、网络配置等。大多数客户端设备和服务器都同时支持IPV4和IPV6。但网站是否能够通过IPV6访问,还取决于Web应用的开发者是否支持了IPV6,如果不支持,也是无法访问的。
1.0>. 并不是所有网站都支持IPV6,因此通过纯IPV6的服务器可能无法访问某些网站;
2.0>. 在客户端设备上搭建服务,并提供公网IPV6地址,也可能无法被公网访问;因为某些路由器默认阻止了IPV6的入站访问。就算路由器没有阻止,电脑运营商也不希望通过公网访问客户端服务,通常会屏蔽掉80、443等常见端口。当然,允许公网访问客户端服务也会带来安全问题,需要做好安全配置。
3.0>. 如果客户端仅支持IPV6,则无法获取IPV4的DNS记录;
4.0>. 一些代理软件对IPV6支持不健全,可能导致DNS劫持失败等各种奇怪问题,因此不建议开启;