• 从 IPv4 向 IPv6 的迁移


    在这里插入图片描述

    前言

    如果没有明确的迁移方法的话,将无法实施一种新的路由协议,迁移过程越简单,就越可能实施新协议。IPv6 与 IPv4 之间的互动操作性是势在必行的,IPv6 节点需要与 IPv4 节点进行通信,至少在初始阶段是这样的,而且在互通时间上还可能非常不确定。NGTRANS IETF 工作制定了多种迁移方法来推动从 IPv4 向 ipv6 的迁移工作,并确保 IPv4 与 IPv6 之间的兼容性。

    概述

    与IPv4 保持兼容的方式有多种,运行双栈的节点能够完全支持 IPv4 和 IPv6,可以使用 IPv4 和 IPv6 进行通信。这样的节点可以将 IPv6 包封装到 IPv 头部中,从而在现有的 IPv4 网络中创建一条隧道,使得两个 IPv6 节点可以经 IPv4 网络进行通信。目前定义了以下两种隧道机制。

    • 自动隧道 (Automatic Tunnels)
    • 配置隧道 (COnfigured tunnels)

    IPv6 中定义了与 IPv4 兼容的 IPv6地址,该IPv6 地址的前 96 个 bit 为全 0,剩余的32bit 构成一个 IPv4 地址,如::172.69.1.1 就是一个与 IPv4 兼容的IPv6 地址。如果节点配置了与 IPv4 兼容的地址,那么就可以使用自动隧道机制。

    如果 IPv4 和 IPv6 共存于同一个网络之中,你们就必须规定相应的机制来正确解决名字与 IP 地址的解析问题。为了确保 DNS 服务器能够正确返回 IPv4 地址、IPv6 地址或 IPv 和 IPv6 地址,对 DNS 做了一定修改,这也是协议共存的一个关键能力要求。

    也可以在 IPv6 网络和 IPv4 网络之间部署 NAT-PT (Network address Translation Portocol Translation,网络地址转换——协议转换)设备。下面将首选讨论双栈机制。

    双栈

    对一个节点来说,如果希望即实现 IPv6,又能与 IPv4 节点保持兼容,可以采取的一种方法就是在该节点上同时实现 IPv4/IPv6 节点可以使用 IPv6 数据包与 IPv6 节点进行通信,并使用 IPv4 数据包与 IPv4 节点进行通信。

    每个 IPv6/IPv4 节点都必须同时配置IPv6 地址和 IPv4 地址,这两种地址可能相关也可能毫无关系。可以将与 IPv4 兼容的 IPv6 地址视为单个地址,其即可以被用作 IPv6 地址,也可以被用作 IPv4 地址, 完整的 128bit 就代表 IPv6 地址,低于 32 bit 则代表 IPv4 地址。

    可以采取以下方式来配置地址。

    • 使用无状态或状态化 (IPv6 DHCP)自动配置方式来配置 IPv6 地址,该地址即可以是与 IPv4 兼容的地址,也可以是一个单纯的 IPv6 地址。
    • 采用任何 IPv4 机制来分配节点的IPv4地址。
    • 在配置与IPv4 兼容的IPv6 地址时,使用IPv4地址配置机制来分配该地址的IPv4部分,通过在IPv4地址前附加96bit前缀0:0:0:0:0:0, 节点即可将IPv4地址映射到与IPv4兼容的IPv6地址。如果网络中存在IPv6/IPv4节点,但暂时没有IPv6路由器或地址配置服务器时,这种地址配置方法特别有用。

    同时配置了IPv4地址和IPv6地址的节点必须拥有相应的机制来确定应该使用哪个地址,这样的工作就由DNS来完成。

    DNS

    在DNS中为IPv6定义了一种新的资源记录类型——AAAA 记录,该记录可以提供名字到 IPv6 地址的映射关系。IPv6/IPv4 节点上的 DNS 解析器必须能够同时处理 IPv4 的 A 资源记录和 IPv6 的 AAAA 资源记录,当节点向 DNS 服务器查询某个地址时,DNS 就可以返回一条 A 记录或一条 AAAA 记录。返回的地址类型决定了所使用的协议类型,如果返回的是 A 记录,则该节点应该使用 IPv4 地址和 IPv4 协议来与所请求的目的地进行通信;如果返回的是 AAAA 记录,则应该使用 IPv6。

    为 IPv6/IPv4 主机分配了与 IPv4 兼容的 IPv6 地址之后,就在 DNS 中定义了 AAAA 记录和 A 记录,AAAA 记录列出了完整的 128bit IPv6 地址,A 记录则列出 32bit 的 IPv4 地址。由于列出了两种类型的 IP 地址,因而纯 IPv6 (IPv6-only) 节点可以查询服务器并接收 IPv6 地址,而纯 IPv4 (IPv4-only) 节点则可以接收 IPv4 地址。

    如果 AAAA 记录和A记录中都列出了与 IPv4 兼容的地址,那么 DNS 解析器在返回哪种地址以及返回哪种地址会影响通信中所使用的协议类型上存在以下选择。

    • 仅向应用返回IPv6地址;
    • 仅向应用返回IPv4地址;
    • 同时向应用返回IPv4和IPv6地址
      DNS服务器返回的地址类型或地址返回的顺序将影响所生成的IP流量的类型。

    在 IPv4 中隧道化 IPv6

    大多数IPv6实现都要沿着IPv4网络进行建设,IPv6主机可能主要通过IPv4网络进行通信,将IPv6包封装到IPv4包中即可支持该功能。目前可以创建以下4类隧道。

    • 路由器到路由器;
    • 主机到路由器;
    • 主机到主机;
    • 路由器到主机。

    IPv6/IPv4 路由器可以封装 IPv6 流量以通过 IPv4 网络基础设施进行传送,该方法既适用于位于路由器任一侧的纯 IPv6 节点,也适用于端到端的 IPv6 路径穿越 IPv4 网络进行通信的应用场合。源节点向 IPv6 路由器发送 IPv6 包后,该路由器充当隧道的源点,负责将 IPv6 包封装到 IPv4 包中,并将 IPv4 发送到隧道端点,由隧道远端的路由器负责解封装数据包并将其转发至 IPv6 目的地。

    IPv6/IPv4 节点可以发起一条去往IPv6/Pv4路由器的隧道,从而为IPv6路径的第一个网段创建隧道。隧道发起节点负责将IPv6包封装到IPv4包中,并将IPv4包发送到隧道端点路由器,由端点路由器解封装数据包,并将IPv6包转发到最终目的地。

    IPv6/IPv4 主机可以创建去往其他 IPv6/IPv4 主机的隧道,这完全是一条 端到端的隧道。IPv6/IPv4 源节点将 IPv6 包封装到 IPv4 包中,并通过纯 IPv4 网络将 IPv4 包发送到目的地,由目的主机负责解封装该数据包并处理 IPv6 包。

    路由器到主机隧道创建在 IPv6 路径的最后一个网段,路由器接收到 IPv6 包之后就创建一个隧道,以便通过其所连接的 IPv4 网络将该数据包转发给目的主机,目的主机接收到该 IPv4 包之后,负责解封装该数据包并处理 IPv6 包。

    路由器到路由器隧道以及主机到路由器隧道这两种方法并没有将隧道建立到最终的目的地,远端隧道端点与数据包的最终目的地是不同的,也与最终目的地址不同。虽然需要知道隧远端的 IPv4 地址,但无法从真实的 IPv6 目的地址中得到该信息。这两种方法需要使用配置隧道。

    对其余两种隧道方法(主机到主机隧道和路由器到主机隧道)来说,远端隧道端点与数据包的最终目的地相同,因而可以从与 IPv4 兼容的 IPv6 目的地址的低 32bit 中获得远端隧道端点的 IPv4 地址,从而可以为这两种隧道方法创建自动隧道。

    • 自动隧道
      配置了自动隧道的封装主机可以从目的地的与 IPv4 兼容的 IPv6 地址中提取出 IPv4 地址,而封装主机必须拥有去往该 IPv4 地址的 IPv4 连接。源主机将数据包封装到 IPv4 头部中,将提取出来的 IPv4 地址作为目的地址,并将从自身 IPv4 兼容地址中提取出来的 IPv4 地址作为源地址,而主机间的路由器则根本不知道 IPv6 净荷的存在。

    NAT-PT

    另一种允许 IPv6 与 IPv4 网络及主机共存的方法是使用 NAT-PT ( Network AddressTranslation - Protocol Translation, 网络地址转换一协议转换)。IPv6/IPv4 路由器为纯 IPv6 和纯 IPv4 主机进行地址和协议转换,当这些主机进行通信时,都不需要知道它们正在运行的是不同版本的 IP 协议,完全由 NAT-PT 路由器来完成所有的转换工作,包括源地址和目的地址的 IPv6 与 IPv4 转换。

    IPv4 NAT 中存在的问题也依然存在于 IPv6-to-IPv4 NAT-PAT 中,被转换的入站流量和出站流量都必须穿越同一台地址转换器,地址转换器维护了被转换会话的状态信息。请注意,端到端的安全性是不可能的,这是因为 IPSec 无法穿越 NAT 设备。除非在转换路由器上运行应用转换网关,否则在 IP 头部之外任何位置携带 IP 地址的应用程序都将无法正常工作。穿越协议域的 DNS 查询消息中必须要在被转换的 DNS 包(在 IPv4 与 IPv6 之间进行转换)中包含请求和响应信息。

    除了地址之外,IPv4 与IPv6之间的转换存在的另一个特殊问题就是头部信息。IPv6 头部与IPv4 头部字段是不同的,在选项的处理上也完全不同,因而除非迫不得已,不要使用这种共存方式。

  • 相关阅读:
    280+嘉宾、500+展商和 2w+观众,FBIF如何应对会展痛点?
    入门后端开发得学什么?这份超详细的后端开发学习路线图值得推荐!
    Redis事务相关源码探究
    三维重建系列 COLMAP: Structure-from-Motion
    嵌入式硬件知识——设计简单的实时温度监测系统
    Mac配置nvm包管理
    【Apache Flink】实现有状态函数
    用户的生命周期
    Python自动化测试框架之unittest使用详解
    Vue学习笔记
  • 原文地址:https://blog.csdn.net/m0_61703913/article/details/126019110