Skip to content

第36课:IPv6特性及当前应用程度介绍

关于 IPV4、IPV6 协议

我们知道 IP 协议是OSI模型里的3层协议,ip协议一共分为很多个版本,最为人熟知的版本当然是 IPv4 ,IPv4 是互联网通信协议的第 4 版,是当前最广泛应用的网际协议版本。

IPV4 协议

我们来看一下 IPv4 数据包的报头格式,这里有一张图,其中就有包含我们所熟知的内容,如:源地址、目的地址、TTL 信息,也有一些我们可能很少去关注的一些数据报头信息,比如:数据包校验、总长度、偏移量,等等。

IPv4 的 IP 地址是大部分人所关注的,IP 地址标识着一台主机或者路由器的网络接口,在 IPv4 的协议版本里,它的地址长度是 32 位二进制组成,如果以二进制转化为十进制的方式进行标识的格式为x.x.x.x,如果我们要以二进制来做标识,每一个 x 其实就使用了 8 位的二进制。

关于 IP 地址

IPv4 的 IP 地址一共有 5 个类型,分别是 A 类、B 类、C 类、D 类和 E 类地址。D 类是用于主播的地址,而 E 类是用于实验的地址,所以我们真正能用到的 IP 地址就是 ABC 三类了。ABC 3 类地址组成包含了两部分,分别是网络号和主机号,但是通常我们通过掩码的方式做更细的子网划分,这个时候就会有另外一种结构来组成,就是网络号加子网号加主机号。

那么在 ABC 三类地址里面,同时又包含了一些私有地址,比如 A 类地址里面的 10.0.0.0-10.255.255.255,这是 A 类的IP私有地址。另外全 0 和全 1 都作为保留地址使用,而 ABC 三类地址里还另外包含了一些特殊的 IP 地址,比如广播地址、回环地址等,这些地址在公网里其实是应用不到的。关于 IP 地址的内容,我们就了解这些。

所以理论上来看,IPv4 的地址,如果以 32 位的二进制标示 IP 地址的话,可以供大概 概40 亿台主机使用,当前世界的人口数量骤然增加,互联网、物联网高速发展,使得 40 亿的 IP 地址已经不能满足当前的应用需求,这个时候我们就有必要进行重新定义ip的协议版本了。

IPV6 协议

为此,在IPV4的协议版本上做了升级,就是 IPv6,IPV6由 128 位二进制数组成,可提供庞大的 IP 地址资源,足以让地球上每个生物乃至每粒沙都能被分配到一个或多个 IP 地址。

那么我们对比一下 IPv4 的 IP 地址和 IPv6 的地址,这里有一个 IPv4 的地址示例,IPv4 地址通常是以十进制的方式直接书写,可以看到这里有十进制的数据格式,如果是 IPv6,这里则通常是把二进制转换成十六进制的方式进行书写。

我们会看到,IPv6 除了存在 IP 地址上的一些差异,也没有了子网掩码和主机号和网络号的概念,取而代之的是"前缀长度"和"网络接口 ID"。我们看到在这个地址里,前面的 48 位表示的是前缀 ID,相当于 IPv4 里面子网掩码的作用。中间的 16 位是子网的子网 ID, IPv6 地址把子网 ID 也直接标识到 IPv6 的IP地址里面去了,最后面的则是主机接口 ID,接口 ID 可以通过主机的 MAC 地址直接生成。除了这些区别外,再给你介绍一些其他区别,比如我们看到 IPv6 地址出来以后,人很难再去记忆 IP 地址了,所以更多的就要去依赖域名,通过域名的使用就减轻人对IPv6地址的记忆难度。

另外,我们要用 IPV6的IP 地址去直接访问某一个站点,用浏览器的地址栏中输入 IP 地址的方式去访问,原来的 IPv4 格式就不再适用了,需要将地址用中括号括起来,外边加端口号的方式,而习惯使用的 IPv4 地址则不需要通过中括号,直接通过 IP 地址加端口就可以了。

还有一个区别就是 IPv4 本地地址的标识区别,比如 IPv4 里面是 127.0.0.1,它是回环地址,而 IPv6 的本地地址则变成了 [::1] 这种格式。

IPV6改造

了解了 IPv6 协议相关内容,明白了 IPv6 产生的最大缘由。那么你可能会问既然 IPv6 那么好,能满足我们需求,为什么不尽快推广起来呢?其实要想把 IPv6 整个推广起来,需要从硬件到应用整体做一次很大调整,不但是客户端需要做 IPv6 改造,服务端、应用端和网络底层都需要进行 IPv6 的适配,我们需要支持以下关系:原有的 IPv4 能够正常访问 IPv4 服务端,IPv4 也能够访问 IPv6 服务端,IPv6 也能访问 IPv4 的服务端,IPv6 同时也能访问 IPv6 的服务端,这 4 种关系都要能够支持,所以改造起来成本是非常大的。

通常改造 IPv6 的方式有如下三种:一是双栈的实现方式,一个是协议映射的实现方式,还有就是应用层代理的使用方式。

双栈的实现方式是改造最为彻底的一种方式,它使应用系统、链路系统、支撑系统、终端系统的一切软硬件具备同时支持并处理 IPv4 和 IPv6 两套协议栈的能力。所以双栈的模式是最为彻底的一套模式,但是它的整体改造成本非常大,需要投入很大的人力和技术成本,以及资源上的成本。

另外两种,一个是协议的映射方式和应用层代理,相对来说它能满足部分需求,但是无法彻底的改造 ,所以在部分应用程序的场景中还是具备一些局限性的,它只是目前一种过度的方案。

接下来我们来看一下这两种方式在访问上的一些差异,如果实现了双栈访问的模式后,服务端既能支持IPv4 也能支持 IPv6 ,所以 IPv6 地址的客户端就可以通过 访问网站IPv6 的出口来访问服务端,DNS提供IPv6的地址解析,返还 IPv6 地址,请求 IPv6 地址,然后请求得到服务端返回的数据包。

如果是 IPv4 客户端,则同样还是维持原有的请求响应模式,那么 IPv4 的客户端请求的DNS解析记录,拿到的也是IPv4 地址,同样也是请求后台的服务端。这就是双栈的访问模式。

而如果使用中间地址映射的一种过渡方式,比如通过协议映射的方式进行访问,这里的访问就略微复杂了,访问链路相对较长,下面我们来重点拿出 IPv6 客户端如何去访问 IPv6 来给你举例:

如果是 IPv6 的客户端去访问 IPv4 后台的服务端,首先它要去改造两个非常重要的设备,一个是 DNS64 Server 设备的支持,一个是 NAT64 路由器的支持,NAT64支持 IPv6 的域名解析,能返回后端 IPv4 的地址,因为(IPv6-IPv4)都做了协议映射,IPv6用户的请求还是 IPv6,但实际通过这两个设备以后,做了一个地址地转发,把 IPv6 的一个请求都转化到了后端变成 IPv4 的地址。所以这两个设备都需要做对应的改造。

那么回到这个案例里面来看,用户请求的是 IPv6 的域名,DNS64 Server 会先请求权威 DNS,看是否能直接拿到 IPv6 的地址,如果能拿到 IPv6,当然是直接返回 IPv6 地址,但是服务端目前只支持 IPv4,所以这个时候需要返回给客户端一个造之后的 IPv6 地址,相当于在原有的 IP 地址之上,把它转换成了一个 IPv6 地址给到客户端,所以 DNS64 Server 的作用就是先去查询权威 DNS,判断是否有 IPv6 地址,如果没有的话,就请求 IPv4 的域名,得到 IPv4 的地址解析,同时通过 DNS64 Server 这一层,把地址重新改成 IPv6 的地址,返回给客户端。

客户端在 DNS64 Server 里面拿到这个 IPv6 地址以后,客户端就可以正常地请求 IPv6 地址,这个时候用户就直接请求服务端后台节点,后台服务节点先要经过真实服务端前面的一层,叫作 NaT 64 的接入设备,设备同样要做地址转化,当用户拿到了目的 IP 地址以后,就要把 IPv6 地址同时转换成 IPv4 地址去请求服务端。同时,拿到服务端返回的数据包以后,再把数据包重新转换成 IPv6,并且完全是以这种地址转化方式传递。

我们看到这种方式对于用户来说是无感知的,但是对于服务端来说,其实是做了两层数据包的转换。这就是通过协议映射访问模式的访问过程。